Skip to content

The example application DpdkTrafficFilter blocks forever #1275

Open
@siphonelee

Description

@siphonelee

First of all, thanks for the great work of DpdkTrafficFilter! It saves me a lot of effort in developing a high performance application using dpdk.

I'm running the example DpdkTrafficFilter application to filter DNS request like this:
./DpdkTrafficFilter -d 0 -s 1 -P 53 -r 1 -t 1 -c 3 -m 65535 -i (a certain IP address)

it outputs info like this:

EAL: Detected CPU lcores: 32
EAL: Detected NUMA nodes: 2
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available 2048 kB hugepages reported
EAL: VFIO support initialized
EAL: Probe PCI driver: net_e1000_igb (8086:1521) device: 0000:01:00.0 (socket 0)
EAL: Probe PCI driver: net_e1000_igb (8086:1521) device: 0000:01:00.3 (socket 0)
TELEMETRY: No legacy callbacks, legacy socket not created
Opened device #0 with 1 RX queues and 1 TX queues. RSS hash functions:
RSS_IPV4
RSS_IPV6
Using core 1
Core configuration:
DPDK device#0: RX-Queue#0;

and a lot of error info which seems to be related to invalid DNS packet format (yet harmless I assume):
[ERROR: ...Packet++/src/DnsLayer.cpp: parseResources:156] DNS layer contains more than 300 resources, probably a bad packet. Skipping parsing DNS resources

I did see some packets are sent out from port 1 by packet capturing. But after a quick while, the application seems blocked - no more packets sent out from port 1, and no more error messages printed out like above.

If I comment out the packet-sending code in DpdkTrafficFilter, rebuild and run the application again, everything seems working fine:

if (packetMatched)
{
        // send packet to TX port if needed
        if (sendPacketsTo != NULL)
        {
                // comment it out !!!
                // sendPacketsTo->sendPacket(*packetArr[i], 0);
        }

        // save packet to file if needed
        if (pcapWriter != NULL)
        {
                pcapWriter->writePacket(*packetArr[i]);
        }

        m_Stats.MatchedPackets++;
}

The issue happens on both Pcap++ v22.11 and v23.09.

Could anyone please provide some insights? Thanks!

Environment:
Ubuntu 22.04
DPDK stable 21.11
igb_uio kernel module
NIC intel i350
1GB x 16 huge pages

BTW, I can run dpdk example application l2fwd to send packets without any issue, so I assume dpdk is ok.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions