使用内存的 DPDK VLAN 条带代码会导致数据损坏



出口GTP 数据包的 VLAN 条带代码会导致源 IP 地址 ac150569 损坏。删除 VLAN 标记(4 字节(后,数据包中的源 IP 变为 ac150000,这是错误的。

删除 VLAN 标记之前的数据包转储:

0ca402e8 deb15254 00b3fb19 81000873 08004500 002a00fc 00003e11 bf42ac15 05690a5f 00aa0868 08680016 001c3202 000600

VLAN 条的代码:

memcpy((rte_pktmbuf_mtod(m, unsigned char *)+12),(rte_pktmbuf_mtod(m, unsigned char *)+16),m->pkt.data_len-16);

删除 VLAN 标记后的数据包转储:

0ca402e8 deb15254 00b3fb19 08004500 002a00fc 00003e11 bf42ac15 00000a5f 00aa0868 08680016 001c3202 1bdb0000 0000004e 00000e00

您能否告诉我在删除 vlan 标签后,如何在修改后的数据包中添加 0000 代替 0569 作为源 IP 地址? 需要做哪些修改?

看看 rte_vlan_strip(( DPDK 函数。基本上,它以这种方式完成您需要的操作:

/* Copy ether header over rather than moving whole packet */
memmove(rte_pktmbuf_adj(m, sizeof(struct vlan_hdr)),
eh, 2 * ETHER_ADDR_LEN);

如果您需要更快的解决方案,某些 NIC 能够为您剥离 VLAN 标记。看看我们可以传递给rte_eth_dev_configure(( 函数DEV_RX_OFFLOAD_VLAN_STRIP标志。

最新更新