2. Port Blocklist Tests

2.1. Prerequisites

Board with at least 2 DPDK supported NICs attached.

If using vfio the kernel must be >= 3.6+ and VT-d must be enabled in bios.When using vfio, use the following commands to load the vfio driver and bind it to the device under test:

modprobe vfio
modprobe vfio-pci
usertools/dpdk-devbind.py --bind=vfio-pci device_bus_id

2.2. Test Case: Testpmd with no blocklisted device

Run testpmd in interactive mode and ensure that at least 2 ports are bound and available:

build/testpmd -c 3 -- -i
....
EAL: unbind kernel driver /sys/bus/pci/devices/0000:01:00.0/driver/unbind
EAL: Core 1 is ready (tid=357fc700)
EAL: bind PCI device 0000:01:00.0 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:01:00.0
EAL: PCI memory mapped at 0x7fe6b68c7000
EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:01:00.1/driver/unbind
EAL: bind PCI device 0000:01:00.1 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:01:00.1
EAL: PCI memory mapped at 0x7fe6b6847000
EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:02:00.0/driver/unbind
EAL: bind PCI device 0000:02:00.0 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:02:00.0
EAL: PCI memory mapped at 0x7fe6b6580000
EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:02:00.1/driver/unbind
EAL: bind PCI device 0000:02:00.1 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:02:00.1
EAL: PCI memory mapped at 0x7fe6b6500000
Interactive-mode selected
Initializing port 0... done:  Link Up - speed 10000 Mbps - full-duplex
Initializing port 1... done:  Link Up - speed 10000 Mbps - full-duplex
Initializing port 2... done:  Link Up - speed 10000 Mbps - full-duplex
Initializing port 3... done:  Link Up - speed 10000 Mbps - full-duplex

2.3. Test Case: Testpmd with one port blocklisted

Select first available port to be blocklisted and specify it with -b option. For the example above:

build/testpmd -c 3 -b 0000:01:00.0 -- -i

Check that corresponding device is skipped for binding, and only 3 ports are available now::

EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:01:00.1/driver/unbind
EAL: bind PCI device 0000:01:00.1 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:01:00.1
EAL: PCI memory mapped at 0x7f0037912000
EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:02:00.0/driver/unbind
EAL: bind PCI device 0000:02:00.0 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:02:00.0
EAL: PCI memory mapped at 0x7f0037892000
EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:02:00.1/driver/unbind
EAL: bind PCI device 0000:02:00.1 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:02:00.1
EAL: PCI memory mapped at 0x7f0037812000
Interactive-mode selected
Initializing port 0... done:  Link Up - speed 10000 Mbps - full-duplex
Initializing port 1... done:  Link Up - speed 10000 Mbps - full-duplex
Initializing port 2... done:  Link Up - speed 10000 Mbps - full-duplex

2.4. Test Case: Testpmd with all but one port blocklisted

Blocklist all devices except the last one. For the example above::

build/testpmd -c 3 -b 0000:01:00.0  -b 0000:01:00.0 -b 0000:02:00.0 -- -i

Check that 3 corresponding device is skipped for binding, and only 1 ports is available now::

EAL: probe driver: 8086:10fb rte_niantic_pmd
EAL: unbind kernel driver /sys/bus/pci/devices/0000:02:00.1/driver/unbind
EAL: bind PCI device 0000:02:00.1 to uio driver
EAL: Device bound
EAL: map PCI resource for device 0000:02:00.1
EAL: PCI memory mapped at 0x7f22e9aeb000
Interactive-mode selected
Initializing port 0... done:  Link Up - speed 10000 Mbps - full-duplex