TCP的DPDK TX校验和卸载与正确校验和之间存在固定偏移
我尝试通过DPDK校验和卸载来计算IP和TCP的校验和。该代码执行以下操作:TCP的DPDK TX校验和卸载与正确校验和之间存在固定偏移,tcp,checksum,dpdk,Tcp,Checksum,Dpdk,我尝试通过DPDK校验和卸载来计算IP和TCP的校验和。该代码执行以下操作: ipv4\u hdr->hdr\u校验和=0; mb->l2_len=eth_hdr_len; mb->l3\u len=ipv4\u hdr\u len; mb->ol_flags=PKT_TX_IPV4 | PKT_TX_IP_CKSUM | PKT_TX_TCP_CKSUM; tcp_hdr->cksum=rte_ipv4_phdr_cksum(ipv4_hdr,mb->ol_标志); rte_eth_conf
ipv4\u hdr->hdr\u校验和=0;
mb->l2_len=eth_hdr_len;
mb->l3\u len=ipv4\u hdr\u len;
mb->ol_flags=PKT_TX_IPV4 | PKT_TX_IP_CKSUM | PKT_TX_TCP_CKSUM;
tcp_hdr->cksum=rte_ipv4_phdr_cksum(ipv4_hdr,mb->ol_标志);
rte_eth_conf已设置为:
port_conf.txmode.OFFLOAD=DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM;
IP校验和是正确的,TCP校验和与正确校验和的偏移量是固定的(在我的环境下,它是4)
有什么想法吗?请参考答案。要启用硬件校验和,必须将当前校验和值设置为
0
/* HW check sum */
ip_hdr->hdr_checksum = 0;
tcp_hdr = (struct tcp_hdr *)((char *)ip_hdr + info->l3_len);
tcp_hdr->cksum = 0;