Job Aborted Failure In Uio Create Address From Ip Address Link

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