She remembered a similar bug from a forum post months ago. In UIO-based networking, the library often reads from sysfs (/sys/class/net/<interface>/) to discover device capabilities. Specifically, it looks at the link layer attributes to infer the IP addressing scheme.
The error meant: “I looked at this network link, I tried to create an internal IP address object based on what I saw, but something about the link’s state or configuration made that impossible.”
Then she saw it. In the job’s configuration file, someone had changed a parameter the night before:
# Old config
network.interface = eth0
To understand the failure, we must decompose the error message:
The Core Issue:
The application requested access to a network interface (identified by IP) via the UIO driver, but the kernel or driver rejected the mapping request. She remembered a similar bug from a forum post months ago
Verify that the UIO kernel modules are loaded.
lsmod | grep uio
modprobe uio_pci_generic
sudo systemctl restart networking
Or, on some distributions:
sudo service networking restart
DPDK’s rte_eal_init() can fail with a similar message if NICs are not bound to igb_uio or vfio-pci.
Fix:
sudo modprobe vfio-pci
sudo dpdk-devbind.py -b vfio-pci 02:00.0
sudo dpdk-devbind.py --status
Then set:
export RTE_SDK=/path/to/dpdk
export RTE_TARGET=x86_64-native-linuxapp-gcc
If the error persists, trace the UIO kernel path:
sudo trace-cmd record -e uio -e pci -e net
# Run your failing job
sudo trace-cmd report | grep -E "uio_create|mmap|addr"
Look for -ENODEV (no device), -EINVAL (bad address), or -ENOMEM (mapping failed).
Also check dmesg for PCI resource allocation issues: The Core Issue: The application requested access to
dmesg | grep -i "pci 0000:02:00.0" | grep -i "BAR"
If BAR addresses are shown as [disabled], you may need to run:
echo 1 > /sys/bus/pci/devices/0000:02:00.0/remove
echo 1 > /sys/bus/pci/rescan
The network interface you’re targeting is not bound to a UIO-compatible driver (like igb_uio, vfio-pci, or uio_pci_generic).
Symptom:
lspci -k shows the NIC using a kernel driver like ixgbe, igb, or e1000e instead of a UIO driver.
Example using uio_pci_generic:
# Unload standard driver
sudo ip link set dev eth1 down
sudo driverctl unset-override 0000:03:00.0 # Replace with your PCI address
sudo modprobe uio_pci_generic
sudo driverctl set-override 0000:03:00.0 uio_pci_generic
Alternatively, using DPDK’s dpdk-devbind.py:
sudo ./dpdk-devbind.py -b uio_pci_generic 0000:03:00.0
After binding, verify:
ls -la /dev/uio0 # Should exist