| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
MPM devices currently do not report their device name in the discovery
process. This adds the device name. After the change the device name
is reported, e.g. when using uhd_find_devices, like so:
$> uhd_find_devices
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: DEADBEEF
claimed: False
fpga: X4_200
mgmt_addr: <mpm device ip>
name: <mpm device host name>
product: x410
type: x4xx
|
| |
|
|
|
|
| |
Also update this info upon server reset, such as when a new FPGA image is loaded
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Modify the RPC claim timeout mechanism to use a contextmanager
helper function when enabling/disabling timeouts.
|
|
|
|
|
|
|
|
|
|
|
|
| |
MPM server needs to be reclaimed in regular intervals. This is
monitored by the server using a timer. If the timer hits, the server
unclaims itself assuming the client process died for whatever
reason. In previous versions of `gevent.greenlet` the timer was
killed in a non blocking manner. This changed in version 0.13.0
(see
http://www.gevent.org/api/gevent.greenlet.html#gevent.Greenlet.kill)
which now leads to a dead lock in `timer.kill`. The kill command
is therefore now called explicitly with `block=False`.
|
|
|
|
|
|
|
| |
Provide a way to safely reset the peripheral manager from uhd and as
a result, a mechanism to reload the fpga/dts components.
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
|
|
|
|
| |
Add a new image_loader argument delay_reload to provide a way to update
components but optionally delay the actual load.
Similarly add a new argument, just_reload, to enable uhd to reload
the fpga/dts components.
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sequence is now:
1. Get _state lock
2. Kill reclaim timeout
3. Run deinit sequence
4. Clear claim token and session ID
5. Release _state lock
Before, we were not locking the mutex, and the timer was killed after
the deinit sequence. If the deinit sequence stalls for whatever reason,
that doesn't have to cause a claimer loss to be reported. UHD will
already have stopped the reclaim loop before unclaim() is called.
In the stall case, it would also have been possible the to acquire a new
claim while the deinit() is still running. This is prevented with the
combination of actually acquiring the mutex (like claim() and reclaim()
do) and moving the token/session ID clearing to the end.
|
|
|
|
|
|
|
|
| |
MPM is Python3-only, but contains some remaining compatibility code for
Python2. Because this code requires extra dependencies (like six) and
could become obsolete in the future, we remove it to preempt that.
No functional changes.
|
|
|
|
|
| |
Fix the issue that the method 'get_log_buf' was not accessible from
MPM Shell.
|
|
|
|
|
|
|
|
| |
This commit fixes a spelling mistake, moves logic for checking if a
connection is local to its own method, and calls gevent.signal.signal
instead of its deprecated alias gevent.signal.
Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Sometimes when running usrp_hwd.py in a terminal and then canceling it
with Ctrl+C, it prints a really large stacktrace into the terminal
resulting from an uncaught gevent BlockingSwitchOutError. It seems like
there was an attempt to catch this in usrp_hwd.py:kill_time(). This
try-except was surrounding a call to Process.join() which, to the best
of my knowledge, can't ever throw this exception.
Based on my troubleshooting, this error comes from the SIGTERM signal
handler of the RPC process. The handler (defined in
rpc_server.py:_rpc_server_process), is just a direct call to
RPCServer.stop(). When the server's backed is a thread pool, this call
may block when joining the thread pool, causing gevent to complain about
execution attempting to block in a signal handler.
This commit resolves this issue by simply triggering an event in the
signal handler which prompts a different thread to clean up the server
and end the process.
Signed-off-by: Samuel O'Brien <sam.obrien@ni.com>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
msgpack 0.6.1 suggests new default parameters which ensures compatibility
with the upcoming msgpack 1.0 release which will have breaking changes.
The parameter changes are described in
https://github.com/msgpack/msgpack-python/blob/v0.6.1/README.rst
The default parameters for msgpack 1.0 will be:
- packer: use_bin_type=True
- unpacker: raw=False
The packer use_bin_type=True option is already set in the client
(mpm_shell.py) but the unpacker option raw=False needs to be set
in the server (rpc_server.py)
This change allows the usage of a patched version of python3-mprpc
0.1.17 which removes passing the encoding option to the Packer and
Unpacker
Signed-off-by: Joerg Hofrichter <joerg.hofrichter@ni.com>
|
|
|
|
|
|
| |
Msgpack version 0.6 reduced the default max buffer size to 1MB which is
smaller than the bitfiles. This change sets the max buffer size to 50MB
which is larger than the bitfiles.
|
|
|
|
|
| |
Modify the RPC claim timeout mechanism to use a contextmanager
helper function when enabling/disabling timeouts.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Many small cleanups:
- Fix copyright headers
- Fix superfluous imports
- Pull some constants out of classes where appropriate
- Fix formatting
- Improve/fix some docstrings
- Disable specific Pylint warnings where appropriate
- Global catches use BaseException instead of Exception
- Don't use len() for empty checks
- Make sure to declare all self attributes in __init__ (note: this is
particularly of interest for E310, becuase its regular init happens
outside of __init__)
- Compacted some E310 code that had multi-DB checks
|
|
|
|
|
|
|
| |
Co-Authored-By: Alex Williams <alex.williams@ni.com>
Co-Authored-By: Sugandha Gupta <sugandha.gupta@ettus.com>
Co-Authored-By: Brent Stapleton <brent.stapleton@ettus.com>
Co-Authored-By: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
When updating a component like the FPGA, the timeouts for reclaiming get
disabled, because the update can potentially take a long time, during
which the RPC server might not be available.
There was a bug that didn't re-enable the timeouts. The most common case
where this causes issues was when the Ethernet connection was severed
during FPGA reloading, which could lead to UHD losing connection with
MPM altogether (for example because SFPs would come up with a different
IP address). In that case, MPM would remain unreachable until the next
reboot.
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Turns the E310 into an MPM device (like N3xx, E320)
- Factor out common code between E320 and E310, maximize sharing between
the two devices
- Remove all pre-MPM E310 code that is no longer needed
- Modify MPM to remove all existing overlays before applying new ones
(this is necessary to enable idle image mode for E310)
Co-authored-by: Virendra Kakade <virendra.kakade@ni.com>
Signed-off-by: Virendra Kakade <virendra.kakade@ni.com>
|
|
|
|
|
| |
The error message will now include the IP address of the client trying
to double-claim a device.
|
|
|
|
|
|
|
|
|
|
|
| |
When reloading the Periph Manager (as when we run the image loader),
we need to run the RPCServer `__init__` function in order to reset the
cache of RPC methods. Otherwise, that cache keeps stale references to
old functions (and prevents garbage collection).
It may be possible to reset the method cache some other way, but the
`_methods` attribute of RPCServer is Cython, and doesn't seem to be
accessible in our Python code.
|
|
|
|
|
| |
The async calls to long C++ methods allows the claimer loop to smoothly
continue during init, so this hack is no longer necessary.
|
|
|
|
|
|
| |
Usually, the current timeout is fine, but there are cases when a lot of
RPC traffic could drown out the reclaim calls. 5 seconds is an
experimentally derived safe value.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This module (and class) are, in fact, used for all N3xx-derivates so
renaming it is the more correct thing to do.
|
| |
|
|
|
|
|
| |
Add getter function for updateable component information. This is a
minor compat number bump.
|
|
|
|
|
| |
- Fix typo in company name (missing 'a')
- Updated SPDX license identifier to version 3.0
|
|
|
|
|
|
|
|
| |
- Allow to set default args via config file
- Read them from prefs API
- override-db-pids uses the same APIs now ([overrides] section in
config file, prefs API, and same dictionary as --default-args when
used on the command line
|
|
|
|
|
|
| |
Before, it was possible to trick the RPC server in believing a
connection was remote when the incoming connection was from a local IP
address that was not 127.0.0.1.
|
| |
|
|
|
|
| |
Reviewed-by: Trung Tran <trung.tran@ettus.com>
|
|
|
|
|
|
|
| |
- Allow configurable timeout values from the command line
- Add flag to disable timeouts for long calls; this fixes the case
where reclaimers re-initialize a disabled timer
- Add methods for timeout event for better tracking
|
|
|
|
|
|
| |
- No functional changes
- Grouped methods by function
- Improved some comments
|
|
|
|
|
|
|
|
| |
- Updated systemd service file
- Added health status flag in shared data object
- Added thread in RPC process to update watchdog
Reviewed-by: Moritz Fischer <moritz.fischer@ettus.com>
|
|
|
|
|
|
| |
These are hooks that the RPC server calls into when claiming a device,
and allow the device implementation to trigger user-definable actions
on claiming/unclaiming.
|
|
|
|
| |
Reviewed-by: Brent Stapleton <brent.stapleton@ettus.com>
|
|
|
|
| |
Reviewed-by: Brent Stapleton <brent.stapleton@ettus.com>
|
|
|
|
| |
Reviewed-by: Martin Braun <martin.braun@ettus.com>
|
|
|
|
|
|
|
| |
On FPGA loads, when the periph_manager is respawned, this will now
clear the previously registered methods.
Reviewed-By: Brent Stapleton <brent.stapleton@ettus.com>
|
|
|
|
| |
Reviewed-By: Brent Stapleton <brent.stapleton@ettus.com>
|
|
|
|
| |
Now uses SPDX headers everywhere.
|
|
|
|
|
|
|
| |
Refactoring to use the C++-based UIO objects. The Liberio and Ethernet
objects now open the UIO before using it, and close it once done.
Reviewed-By: Martin Braun <martin.braun@ettus.com>
|
|
|
|
|
|
|
|
| |
- Moved nijesdcore to cores/
- Moved udev, net, dtoverlay, uio to sys_utils/
- Made all imports non-relative (except in __init__.py files)
- Removed some unnecessary imports
- Reordered some imports for Python conventions
|