如何访问通过 DPDK 接收的数据包中的各个层?

How to access various layers in a packet received via DPDK?

我 运行 dpdk-stable-18.11.9 Ubuntu 18.04。我使用 rte_eth_rx_burst(port_id,queue_id,pkts_burst, MAX_PKT_BURST) 函数接收数据包。

我想访问各种 headers 数据包,即 eth_hdr+Ip_hdr+udp_hdr+udp_payload 以获得有效 pkts_burst[0]

例如,在 Wireshark 中,我可以从 pkts_burst[0].

向您展示我需要的内容

所有 1512 字节如红色部分插入 1512 字节数组:

我该怎么做?

使用How do we can Access to Payload of Received Packets in DPDK 18.11.9作为访问有效载荷直到IPv4 header的参考代码。然后通过

访问UDP层
#include <rte_udp.h>

进程函数内部

struct udp_hdr *udp = (struct udp_hdr *)((unsigned char *)ipv4_hdr +                                      
 sizeof(struct ipv4_hdr));
unsigned char *paylaod = (unsigned char *) (udp + 1);

注意:UDP header 和 IP header 之后的 UDP 负载。

P.S。已花费单独的 Skype 通话来解释和确保共享信息。