aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python/usrp_mpm/rpc_server.py
Commit message (Collapse)AuthorAgeFilesLines
* mpm: add device name to discovery processLars Amsel2022-02-081-0/+2
| | | | | | | | | | | | | | | | | | | 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
* mpm: Bump MPM compat version to 4.0Lane Kolbly2021-06-241-1/+1
|
* mpm: add FPGA type to the info returned during discoveryMichael Dickens2021-05-201-0/+6
| | | | Also update this info upon server reset, such as when a new FPGA image is loaded
* mpm: Fix minor log formatting issueMartin Braun2021-04-271-1/+1
|
* fixup! mpm: rpc: don't expose reset_mgr call via RPCGrant Meyerhoff2021-04-221-1/+1
|
* mpm: rpc: don't expose reset_mgr call via RPCThomas Vogel2021-03-111-2/+2
|
* mpm: rpc: Use contextmanager for claim timeoutsToni Jones2021-03-041-13/+12
| | | | | Modify the RPC claim timeout mechanism to use a contextmanager helper function when enabling/disabling timeouts.
* MPM: prevent dead lock in timer kill during unclaimLars Amsel2021-02-181-1/+1
| | | | | | | | | | | | 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`.
* mpm: Add support to safely reset peripheral manager from uhdVirendra Kakade2021-02-181-0/+29
| | | | | | | 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>
* mpmd: Add support to delay and trigger fpga/dts load after updateVirendra Kakade2021-01-111-2/+3
| | | | | | | | | 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>
* mpm: rpc server: Fix unclaim sequenceMartin Braun2020-12-211-8/+19
| | | | | | | | | | | | | | | | | | | 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: rpc server: Remove Python2 compat codeMartin Braun2020-12-081-4/+1
| | | | | | | | 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.
* mpm: rpc_server: fix get_log_buf for MPM ShellJoerg Hofrichter2020-12-041-1/+2
| | | | | Fix the issue that the method 'get_log_buf' was not accessible from MPM Shell.
* mpm: Cleanup rpc_server.pySamuel O'Brien2020-10-071-5/+7
| | | | | | | | 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>
* mpm: Fix gevent errors on SIGTERMSamuel O'Brien2020-07-241-2/+13
| | | | | | | | | | | | | | | | | | | | | | 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>
* mpm, mpmd: Bump MPM compat numberAaron Rossetto2020-07-241-1/+1
|
* mpm: rpc_server: set correct default unpacker params for msgpack 0.6.1Joerg Hofrichter2020-03-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | 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>
* mpm: explicitly set max buffer size for msgpack unpackerAndrew Lynch2020-03-051-0/+2
| | | | | | 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.
* mpm: rpc: Use contextmanager for claim timeoutsToni Jones2020-03-031-33/+38
| | | | | Modify the RPC claim timeout mechanism to use a contextmanager helper function when enabling/disabling timeouts.
* mpm: Clean up code, improve Pylint scoreMartin Braun2019-11-261-3/+3
| | | | | | | | | | | | | | | | 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
* x300/mpmd: Port all RFNoC devices to the new RFNoC frameworkMartin Braun2019-11-261-1/+1
| | | | | | | 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>
* mpm: rpc_server: Reenable timeouts after components have been updatedMartin Braun2019-10-281-0/+3
| | | | | | | | | | | | 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.
* e310/e320: Move E310 to MPM architecture and refactorSugandha Gupta2019-05-011-9/+20
| | | | | | | | | | | | - 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>
* mpm: rpc_server: Improve error message on double-claimMartin Braun2019-02-221-2/+5
| | | | | The error message will now include the IP address of the client trying to double-claim a device.
* mpm: reset the RPC server upon reloadBrent Stapleton2018-08-271-0/+10
| | | | | | | | | | | 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.
* mpm: rpc server: Remove disable_commit for init()Trung Trang2018-04-301-2/+0
| | | | | The async calls to long C++ methods allows the claimer loop to smoothly continue during init, so this hack is no longer necessary.
* mpm: rpc server: Increase claim timeout to 5 secondsTrung Trang2018-04-301-1/+1
| | | | | | 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.
* mpm: increase timeout interval for claimingTrung N Tran2018-04-021-1/+1
|
* mpm: improve logging on exceptionTrung N Tran2018-03-301-4/+5
|
* mpm: Add INFO log statements on MPM reset and component updateMartin Braun2018-03-131-0/+1
|
* mpm: Rename n310 to n3xxMartin Braun2018-03-051-1/+1
| | | | | This module (and class) are, in fact, used for all N3xx-derivates so renaming it is the more correct thing to do.
* mpm: uhd: RPC server reports MPM version, uhd_usrp_probe reads itMartin Braun2018-03-021-0/+1
|
* mpm: adding get_component_infoBrent Stapleton2018-02-191-1/+1
| | | | | Add getter function for updateable component information. This is a minor compat number bump.
* mpm: Update all license headersMartin Braun2018-02-191-1/+1
| | | | | - Fix typo in company name (missing 'a') - Updated SPDX license identifier to version 3.0
* mpm: Use prefs API for periph managerMartin Braun2018-02-081-1/+1
| | | | | | | | - 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
* mpm: rpc_server: Declare local connection for *all* local IPsMartin Braun2018-02-071-2/+3
| | | | | | 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.
* fixup! mpm: Log timeouts during API calls, reset timer on claimed callsMartin Braun2018-01-231-1/+2
|
* mpm: Log timeouts during API calls, reset timer on claimed callsMartin Braun2018-01-221-0/+7
| | | | Reviewed-by: Trung Tran <trung.tran@ettus.com>
* mpm: Update unclaim timeout logicMartin Braun2018-01-181-9/+30
| | | | | | | - 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
* mpm: Refactored RPC serverMartin Braun2018-01-171-66/+80
| | | | | | - No functional changes - Grouped methods by function - Improved some comments
* mpm: Enable systemd watchdog and update it from MPMMartin Braun2018-01-151-0/+9
| | | | | | | | - 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>
* mpm: Add API call for claim and unclaimMartin Braun2018-01-101-59/+69
| | | | | | 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.
* mpm: Spawn periph manager inside the RPC processMartin Braun2018-01-101-12/+26
| | | | Reviewed-by: Brent Stapleton <brent.stapleton@ettus.com>
* mpm: Add API to read back log bufferMartin Braun2018-01-081-1/+22
| | | | Reviewed-by: Brent Stapleton <brent.stapleton@ettus.com>
* mpm: mpmd: Add MPM compat number checkBrent Stapleton2017-12-221-0/+6
| | | | Reviewed-by: Martin Braun <martin.braun@ettus.com>
* mpm: rpc_server: Unregister old RPC calls _init_rpc_calls()Martin Braun2017-12-221-2/+22
| | | | | | | 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>
* mpm: rpc_server: Fix use of to_binary_str()Martin Braun2017-12-221-5/+2
| | | | Reviewed-By: Brent Stapleton <brent.stapleton@ettus.com>
* mpm: Harmonize all license headerMartin Braun2017-12-221-13/+2
| | | | Now uses SPDX headers everywhere.
* mpm: UIOs now open only when necessaryBrent Stapleton2017-12-221-9/+0
| | | | | | | 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>
* mpm: Harmonize imports, tidy + sort modulesMartin Braun2017-12-221-1/+1
| | | | | | | | - 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