我在 centos 上使用 DPDK19.11.10。
如果我只IPV4
发送没有VLAN
标头的数据包,则应用程序可以很好地进行硬件卸载。
如果我VLAN
使用 IPV4 添加标头,则硬件卸载不起作用。如果在 ubuntu 网关上捕获 pcap,Fragmented IP packet
即使我们没有对 IP 数据包进行分段,IP 标头也会损坏。
我们验证了这样的能力:
if (!(dev->tx_offload_capa & DEV_TX_OFFLOAD_VLAN_INSERT)) {
rte_panic(" VLAN offload not supported");
}
下面是我的代码:
.offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM |
DEV_TX_OFFLOAD_UDP_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM | DEV_TX_OFFLOAD_VLAN_INSERT),
m->l2_len = L2_HDR_SIZE;
m->l3_len = L3_IPV4_HDR_SIZE;
ip_hdr->check = 0;
m->ol_flags |= PKT_TX_IPV4 | PKT_TX_IP_CKSUM;
ip_hdr = rte_pktmbuf_mtod(m, struct iphdr *);
vlan1_hdr = (struct vlan1_hdr *) rte_pktmbuf_prepend(m, sizeof(struct vlan1_hdr));
eth_hdr = (struct ethernet_hdr *) rte_pktmbuf_prepend(m, (uint16_t)sizeof(struct ethernet_hdr));
一旦我在 ubuntu 网关中收到数据包,IP 数据包就会被损坏为碎片 IP 数据包。
如果我删除了VLAN
标题,相同的代码可以正常工作。这里还有什么需要补充的吗?