Hi Fabio, Have you tried to specify EAL option --log-level="pmd.net.igc,debug" or --log-level='.*',8 when running the application? Perhaps doing so can trigger printouts [1], [2]. See if you can't observe those.
Perhaps consider posting a brief excerpt of your code where rte_eth_rx_burst() is invoked and return value is verified. Also, albeit unrelated, it's rather peculiar that the code does CPU-to-LE conversion [3] of descriptor status, but the field itslef is declared as __le32 already: [4]. [1] https://github.com/DPDK/dpdk/blob/v24.03/drivers/net/igc/igc_txrx.c#L296 [2] https://github.com/DPDK/dpdk/blob/v24.03/drivers/net/igc/igc_txrx.c#L455 [3] https://github.com/DPDK/dpdk/blob/v24.03/drivers/net/igc/igc_txrx.c#L264 [4] https://github.com/DPDK/dpdk/blob/v24.03/drivers/net/igc/base/igc_base.h#L109 Thank you. On Thu, 1 Aug 2024, Fabio Fernandes wrote:
Hi, I have an issue with rte_eth_rx_burst() for IGC poll mode driver never returning any packets and need some advice. I have this network port: 09:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03) Bound to igb_uio: Network devices using DPDK-compatible driver ============================================ 0000:09:00.0 'Ethernet Controller I225-V 15f3' drv=igb_uio unused=igc I'm testing this both with testpmd and my own app, which works fine with other drivers such as net/ena and net/i40e. I'm using single RX/TX queue pair with default configs with rte_eth_promiscuous_enable() and rte_eth_allmulticast_enable(). The device seems to rte_eth_dev_start() fine, and rte_eth_stats_get() seem to be detecting inbound packets. Below is the output from testpmd: Press enter to exiteth_igc_interrupt_action(): Port 0: Link Up - speed 1000 Mbps - full-duplex Port 0: link state change event ^CTelling cores to stop... Waiting for lcores to finish... ---------------------- Forward statistics for port 0 ---------------------- RX-packets: 129 RX-dropped: 800 RX-total: 929 TX-packets: 0 TX-dropped: 0 TX-total: 0 ---------------------------------------------------------------------------- +++++++++++++++ Accumulated forward statistics for all ports+++++++++++++++ RX-packets: 129 RX-dropped: 800 RX-total: 929 TX-packets: 0 TX-dropped: 0 TX-total: 0 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Done. However, rte_eth_rx_burst() never returns anything, neither in testpmd nor in my own app. In my own app, I log both rte_eth_stats_get() and non-zero xstats from rte_eth_xstats_get_by_id(): 07:02:13.406873186 INF stats.rx : 0 07:02:13.406892616 INF dev_stats.ipackets : 78 07:02:13.406903636 INF dev_stats.opackets : 0 07:02:13.406914166 INF dev_stats.imissed : 0 07:02:13.406924536 INF dev_stats.ierrors : 0 07:02:13.406934116 INF dev_stats.oerrors : 0 07:02:13.406943956 INF dev_stats.rx_nombuf : 0 07:02:13.407247777 INF xstats rx_good_packets : 78 07:02:13.407257147 INF xstats rx_good_bytes : 17205 07:02:13.407265267 INF xstats rx_size_64_packets : 6 07:02:13.407274627 INF xstats rx_size_65_to_127_packets : 31 07:02:13.407285757 INF xstats rx_size_128_to_255_packets : 22 07:02:13.407297537 INF xstats rx_size_256_to_511_packets : 16 07:02:13.407309127 INF xstats rx_size_512_to_1023_packets : 3 07:02:13.407321327 INF xstats rx_broadcast_packets : 8 07:02:13.407331597 INF xstats rx_multicast_packets : 64 07:02:13.407346357 INF xstats rx_total_packets : 78 07:02:13.407355547 INF xstats rx_total_bytes : 17205 07:02:13.407364127 INF xstats rx_sent_to_host_packets : 78 07:02:13.407375347 INF xstats interrupt_assert_count : 1 Still, rte_eth_rx_burst() never returns anything. It's worthwhile to note that rte_eth_rx_burst() works fine when I, instead of net/igc, use net/ena (with ENA card) or net/i40e (Intel x710 card). The debug log from EAL and net/igc is attached, in case that helps. There's a warning "igc_rx_init(): forcing scatter mode", but I've already tried changing my mbuf sizes so that the warning goes away but that also didn't help. Any advice? Thanks, Fabio