Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TCP的DPDK TX校验和卸载与正确校验和之间存在固定偏移_Tcp_Checksum_Dpdk - Fatal编程技术网

TCP的DPDK TX校验和卸载与正确校验和之间存在固定偏移

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

我尝试通过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已设置为:

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;