[dpdk-dev] [PATCH v2 02/20] mbuf: enhance the API documentation of offload flags

Olivier MATZ olivier.matz at 6wind.com
Wed Feb 11 16:15:33 CET 2015


Hi Jijiang,

On 02/11/2015 08:15 AM, Liu, Jijiang wrote:
>>> diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index
>>> 41711fd..4b438d1 100644
>>> --- a/app/test-pmd/csumonly.c
>>> +++ b/app/test-pmd/csumonly.c
>>> @@ -183,16 +183,15 @@ process_inner_cksums(void *l3_hdr, uint16_t
>>> ethertype, uint16_t l3_len,
>>>   		ipv4_hdr = l3_hdr;
>>>   		ipv4_hdr->hdr_checksum = 0;
>>>
>>> +		ol_flags |= PKT_TX_IPV4;
>>>   		if (tso_segsz != 0 && l4_proto == IPPROTO_TCP) {
>>>   			ol_flags |= PKT_TX_IP_CKSUM;
>>>   		} else {
>>>   			if (testpmd_ol_flags &
>> TESTPMD_TX_OFFLOAD_IP_CKSUM)
>>>   				ol_flags |= PKT_TX_IP_CKSUM;
>>> -			else {
>>> +			else
>>>   				ipv4_hdr->hdr_checksum =
>>>   					rte_ipv4_cksum(ipv4_hdr);
>>> -				ol_flags |= PKT_TX_IPV4;
>>> -			}
>>>   		}
>>>   	} else if (ethertype == _htons(ETHER_TYPE_IPv6))
>>>   		ol_flags |= PKT_TX_IPV6;
>>> @@ -261,6 +260,7 @@ process_outer_cksums(void *outer_l3_hdr, uint16_t
>>> outer_ethertype,
>>>
>>>   	if (outer_ethertype == _htons(ETHER_TYPE_IPv4)) {
>>>   		ipv4_hdr->hdr_checksum = 0;
>>> +		ol_flags |= PKT_TX_OUTER_IPV4;
>>>
>
> Look at the codes again, you should extend process_outer_cksums() to support other tunneling packet.
>
> The code changes like below,
> process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info,
> uint16_t testpmd_ol_flags, uint16_t l4_proto)  // add the l4_proto parameter here.
> ...
>          /* outer UDP checksum is always done in software as we have no
>           * hardware supporting it today, and no API for it. */
>        if (l4_proto == IPPROTO_UDP)
> 	   udp_hdr = (struct udp_hdr *)((char *)outer_l3_hdr + info->outer_l3_len);
>          	/* do not recalculate udp cksum if it was 0 */
>          	if (udp_hdr->dgram_cksum != 0) {
>                  	udp_hdr->dgram_cksum = 0;
>                  	if (info->outer_ethertype == _htons(ETHER_TYPE_IPv4))
>                          	udp_hdr->dgram_cksum =
>                                	  rte_ipv4_udptcp_cksum(ipv4_hdr, udp_hdr);
>                  else
>                          udp_hdr->dgram_cksum =
>                                  rte_ipv6_udptcp_cksum(ipv6_hdr, udp_hdr);
>              }
>        }  // nothing need to do for GRE tunneling packet now
> }

That's correct, I'll update the code accordingly.

Thanks,
Olivier




More information about the dev mailing list