I'm using an dual-port NIC, Mellanox ConnectX-5, and the DPDK version is dpdk-stable-19.11.3. After configuration, the call of rte_eth_dev_count_avail() returns 2. But only one port of my ConnectX-5 NIC is connected to the other machine. All I can find is to init all available ports like this.
RTE_ETH_FOREACH_DEV(portid)
if (port_init(portid, mbuf_pool) != 0)
rte_exit(EXIT_FAILURE, "Cannot init port %u\n", portid);
Can dpdk selectively init ports? Or is there any way to make rte_eth_dev_count_avail() returning 1?
Yes one can selectively init ports by passing the right PCIe
Bus:Device:Functionaddress as a whitelist. Hence only desired ports will pop up in the application.How to do it:
rte_eth_dev_stop & rte_eth_dev_closefor link down ports.execvto invoke your desired DPDK application.this way you can run your application with valid ports to it.
But relying on
rte_eth_link_getis tricky becauseifconfig [other nic] uplink.link_speedif its valid.Hence safest and recommended way to use is
identify the NIC PCIe B:D:F in Linux driver and then whitelist the ports by using option -w for the desired port under igb_uio/virtio-pci. This can be done by bind all NIC back in linux bylshw -c network -businfowill list NIC and PCIeBus:Device:Functionwith kerel device name and driver.ethtool [eth device name] | grep Linkto identify the link is connected.for reference, you can use https://github.com/vipinpv85/DPDK-APP_SAMPLES/blob/master/auto-baseaddr-selector.c as template for dummy applciation.