<meta http-equiv="Content-Type" content="text/html; charset=GB18030"><div><p>Dear DPDK Community,</p><p>I am facing an issue with DPDK version 18.02.2 on CentOS 7.9 x86_64 with Kernel 3.10.0. After binding the network card (BCM57810) to DPDK using <strong>igb_uio</strong> driver, and calling <code>rte_eth_dev_start()</code>, the link status remains "down" when I call <code>rte_eth_link_get()</code> and <code>rte_eth_link_get_nowait()</code>.</p><p>I have confirmed that the network cable is properly connected, and the hardware is functioning correctly.</p><p>This setup works fine on other machines with different network cards (Intel), where the link status is correctly set to "up".</p><h3><strong>Environment Details</strong>:</h3><ul><li><strong>OS</strong>: CentOS 7.9 x86_64</li><li><strong>Kernel</strong>: 3.10.0</li><li><strong>DPDK Version</strong>: 18.02.2</li><li><strong>Network Card</strong>: BCM57810 (SFTP 10Gbps)</li><li><strong>Network Driver</strong>: bnx2x (updated to the latest version)</li><li><strong>Binding Driver</strong>: igb_uio</li></ul><h3><strong>Steps Taken</strong>:</h3><ol><li><p><strong>DPDK Compilation</strong>:</p><ul><li>Compiled DPDK (<code>libdpdk.so</code>) and <strong>igb_uio.ko</strong>.</li><li>The <code>CONFIG_RTE_LIBRTE_BNX2X_PMD=y</code> option was enabled during compilation.</li><li>The compilation steps were correctly followed, and the DPDK setup is working fine on other machines.</li></ul></li><li><p><strong>Binding Network Device</strong>:</p><ul><li><strong>Before binding</strong> the network device:<pre class="!overflow-visible"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950"><div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-vbnet">Network devices <span class="hljs-keyword">using</span> kernel driver
0000:02:00.0 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno1 drv=tg3 unused=igb_uio
0000:02:00.1 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno2 drv=tg3 unused=igb_uio
0000:02:00.2 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno3 drv=tg3 unused=igb_uio
0000:02:00.3 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno4 drv=tg3 unused=igb_uio
0000:04:00.1 'NetXtreme II BCM57810 10 Gigabit Ethernet 168e' if=eno50 drv=bnx2x unused=igb_uio *Active*
</code></div></div></pre></li><li><strong>After binding</strong> the device <code>0000:04:00.0</code>:<pre class="!overflow-visible"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950"><div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-arduino">Network devices using DPDK-compatible driver
0000:04:00.0 'NetXtreme II BCM57810 10 Gigabit Ethernet 168e' drv=igb_uio unused=
Network devices using kernel driver
0000:02:00.0 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno1 drv=tg3 unused=igb_uio
0000:02:00.1 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno2 drv=tg3 unused=igb_uio
0000:02:00.2 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno3 drv=tg3 unused=igb_uio
0000:02:00.3 'NetXtreme BCM5719 Gigabit Ethernet PCIe 1657' if=eno4 drv=tg3 unused=igb_uio
0000:04:00.1 'NetXtreme II BCM57810 10 Gigabit Ethernet 168e' if=eno50 drv=bnx2x unused=igb_uio *Active*
</code></div></div></pre></li></ul></li><li><p><strong>NUMA Hugepage Configuration</strong>.</p></li><li><p><strong>Program Execution</strong>:</p><ul><li>Successfully called the following functions, all returning <code>>=0</code>:<pre class="!overflow-visible"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950"><div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-c">ret = rte_eth_dev_is_valid_port(port);
ret = rte_eth_dev_configure(port, rxRings, txRings, &port_conf);
ret = rte_eth_tx_queue_setup(...);
ret = rte_eth_rx_queue_setup(...);
ret = rte_eth_dev_start(port);
</code></div></div></pre></li></ul></li><li><p><strong>Link Status Check</strong>:</p><ul><li>After calling <code>rte_eth_dev_start(port)</code>, the link status remains <strong>down</strong>:<pre class="!overflow-visible"><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950"><div class="overflow-y-auto p-4" dir="ltr"><code class="!whitespace-pre hljs language-c">rte_eth_link_get(port, &link);
rte_eth_link_get_nowait(port, &link);
</code></div></div></pre>Both functions return <code>link_status != 1</code> (indicating "down").</li></ul></li></ol></div><div><strong>Questions</strong>:<br><li>Why does the link status remain <strong>down</strong> even after successfully calling <code>rte_eth_dev_start()</code>?</li><li>Is there any additional configuration or setting that I might have missed, specifically for the <strong>bnx2x</strong> driver with the <strong>igb_uio</strong> binding?</li><li>Is it necessary to manually call <strong><code>rte_eth_dev_set_link_up()</code></strong> after <code>rte_eth_dev_start()</code> to activate the link, or should this be handled automatically by DPDK?</li><li>Could there be any driver or hardware compatibility issues between the <strong>bnx2x</strong> driver and DPDK 18.02.2 on this kernel version?</li></div><div></div><div> </div>