Go to file
Abhishek Verma 6e11078807 mpm: net.py: optimize netlink ops to fix RPC starvation
usrp_hwd runs all gRPC greenlets on a single gevent hub, so any
non-yielding C call blocks every other RPC. Under a uhd_find_devices
discovery flood, the GetDeviceInfo interface enumeration run long enough
And may starve most claimed RPC past its default 2s client deadline,
causing "Deadline Exceeded" failures.

Three places that this commit optimizes, all in net.py:

- get_local_ip_addrs() used pyroute2 IPDB, which spawns helper threads
  and mirrors the full link/addr/route/neighbour tables on every call
  (~100s of ms, non-yielding) --> Replace it with a single stateless
  IPRoute get_addr() dump. Keep IFA_LOCAL (falling back to IFA_ADDRESS)
  so the returned set matches IPDB's behaviour, including point-to-point
  links.

- get_link_speed() used to create a new pyudev.Context() per interface,
  which forks on creation, tripping gRPC's fork handlers. gRPC then
  freezes all workder threads and restarts after fork is done. Fix is to
  reuse one PID-guarded pyudev context per process.

- get_valid_interfaces() did an O(N) netlink round-trip per interface.
  This stalls gRPC server. --> Dump all links and IPv4 addresses once
   and filter in Python.

IPRoute stays per-call: it opens its own netlink socket and does not
fork, so there is no shared state to lock.
2026-09-18 16:12:41 +01:00
.ci ci: do not use publish permission for usrp4-hw 2026-09-18 16:07:14 +01:00
.github github: update template so it works with the UI 2025-04-29 18:21:53 +02:00
firmware host/firmware/tools: Update minimum CMake versions 2025-09-24 13:48:07 +02:00
fpga fpga: tools: skip phy_opt step for partially routed designs 2026-09-18 16:08:29 +01:00
host image builder: find FPGA path from Git repository root 2026-09-18 16:05:51 +01:00
images images: Update to final 4.11.0.0 release candidate 2026-09-08 10:24:37 +01:00
mpm mpm: net.py: optimize netlink ops to fix RPC starvation 2026-09-18 16:12:41 +01:00
tools ci: Build UHD DEBs with B310 support 2026-09-15 23:44:29 +01:00
.clang-format Update clang-format for version 14 2023-08-07 15:35:56 -05:00
.clang-format-ignore host/mpm: replace mpRPC with gRPC transport 2026-07-09 12:12:04 +02:00
.clang-tidy Add clang-tidy file 2021-03-04 08:07:26 -06:00
.gitattributes uhd: Add support for the USRP X410 2021-06-10 12:01:53 -05:00
.gitignore Move ignore of build folders into top level 2025-07-18 11:19:52 +02:00
.gitmodules Merge FPGA repository back into UHD repository 2020-01-28 09:35:36 -08:00
.pre-commit-config.yaml pre-commit: Add Doxygen comment format check 2026-05-28 14:10:22 +02:00
.readthedocs.yaml docs: fixing the readthedocs builds 2023-11-10 16:01:01 -06:00
CHANGELOG CHANGELOG: Correct and update UHD 4.11 features 2026-09-08 09:28:31 +01:00
CODING.md coding guidelines: Add information on documentation 2026-05-28 14:10:22 +02:00
CONTRIBUTING.md doc: Add information about NI SRM 2024-01-09 08:52:16 -06:00
LICENSE.md Merge FPGA repository back into UHD repository 2020-01-28 09:35:36 -08:00
README.md Update README.md 2026-06-08 09:41:18 +02:00

USRP Hardware Driver (UHD™) Software

Welcome to the UHD™ software distribution! UHD is the free & open-source software driver and API for the Universal Software Radio Peripheral (USRP™) SDR platform, created and sold by Ettus Research.

UHD supports all Ettus Research USRP™ hardware, including all motherboards and daughterboards, and the combinations thereof.

Documentation

For technical documentation related to USRP™ hardware or UHD system design, check out the UHD and USRP Manual. That is where you can find Installation Instructions, help on how to build UHD from source on different platforms, development guidelines and reference documentation as well as device usage guidance.

Additionally, be sure to check out the Ettus Research FAQ, and the Knowledge Base for useful application notes and tutorials.

OS Support

UHD is primarily developed on Linux, but we also test and support the following operating systems.

  • Linux (Fedora and Ubuntu)
  • Mac OS X
  • Windows 11

Other operating systems will most likely work, too, but are not officially supported.

Applications

UHD can be used to build stand-alone applications with USRP™ hardware, or with third-party applications. Some common toolkits / frameworks are:

Directories

host/

The source code for the user-space driver.

mpm/

The source code for the module peripheral manager (MPM). This is code that is run on embedded devices.

firmware/

The source code for all microprocessors in USRP hardware.

fpga/

The source code for the UHD FPGA images.

images/

This contains the package builder for FPGA and firmware images. We provide other tools to download image packages, the scripts in here are mainly relevant for UHD maintainers and -developers.

tools/

Additional tools, mainly for debugging purposes. See the readme-file in that directory for more details on the individual tools.