[dpdk-dev] [PATCH v2 04/20] i40e: remove the use of PKT_TX_UDP_TUNNEL_PKT flag

Zhang, Helin helin.zhang at intel.com
Tue Feb 10 07:40:52 CET 2015



> -----Original Message-----
> From: Olivier Matz [mailto:olivier.matz at 6wind.com]
> Sent: Wednesday, February 4, 2015 5:25 PM
> To: dev at dpdk.org
> Cc: Ananyev, Konstantin; Liu, Jijiang; Zhang, Helin; olivier.matz at 6wind.com
> Subject: [PATCH v2 04/20] i40e: remove the use of PKT_TX_UDP_TUNNEL_PKT
> flag
> 
> The definition of the flag in rte_mbuf.h was:
>   TX packet is an UDP tunneled packet. It must be specified when using
>   outer checksum offload (PKT_TX_OUTER_IP_CKSUM)
> 
> This flag was used to tell the NIC that the offload type is UDP
> (I40E_TXD_CTX_UDP_TUNNELING flag). In the datasheet, it says it's required
> to specify the tunnel type in the register. However, some tests (see [1]) showed
> that it also works without this flag.
As it was clarified by the datasheet author, we should follow the datasheet finally.
Setting the registers according to what we found will not ensure it is always correct,
as there will be new firmware releases in the near future.
I am OK to do like it at this moment, and wait for the next firmware release.

> 
> Moreover, it is not explained how the hardware use this information. From a
> network perspective, this information is useless for calculating the outer IP
> checksum as it does not depend on the payload.
> 
> Having this flag in the API would force the application to specify the tunnel type
> for something that looks only useful for this PMD. It will limit the number of
> possible tunnel types (we would need a flag for each tunnel type) and therefore
> prevent to support outer IP checksum for proprietary tunnels.
Two or more bits can be allocated later to define several enum tunnel types in the future.
Standard known tunnel types and extended unknown tunnel types can be defined in it.

> 
> Finally, if a hardware advertises "I support outer IP checksum", it must be
> supported for any payload types.
> 
> This has been validated by [2], knowing that the ipip test case was fixed after
> this test report [3].
> 
> [1] http://dpdk.org/ml/archives/dev/2015-January/011380.html
> [2] http://dpdk.org/ml/archives/dev/2015-January/011475.html
> [3] http://dpdk.org/ml/archives/dev/2015-January/011610.html
> 
> Signed-off-by: Olivier Matz <olivier.matz at 6wind.com>
> ---
>  lib/librte_pmd_i40e/i40e_rxtx.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/librte_pmd_i40e/i40e_rxtx.c b/lib/librte_pmd_i40e/i40e_rxtx.c
> index 9acdeee..0786255 100644
> --- a/lib/librte_pmd_i40e/i40e_rxtx.c
> +++ b/lib/librte_pmd_i40e/i40e_rxtx.c
> @@ -482,7 +482,7 @@ i40e_txd_enable_checksum(uint64_t ol_flags,
>  	}
> 
>  	/* UDP tunneling packet TX checksum offload */
> -	if (unlikely(ol_flags & PKT_TX_UDP_TUNNEL_PKT)) {
> +	if (unlikely(ol_flags & PKT_TX_OUTER_IP_CKSUM)) {
Unlikely might not be suitable anymore.

Regards,
Helin

> 
>  		*td_offset |= (outer_l2_len >> 1)
>  				<< I40E_TX_DESC_LENGTH_MACLEN_SHIFT; @@ -497,7
> +497,6 @@ i40e_txd_enable_checksum(uint64_t ol_flags,
>  		/* Now set the ctx descriptor fields */
>  		*cd_tunneling |= (outer_l3_len >> 2) <<
>  				I40E_TXD_CTX_QW0_EXT_IPLEN_SHIFT |
> -				I40E_TXD_CTX_UDP_TUNNELING |
>  				(l2_len >> 1) <<
>  				I40E_TXD_CTX_QW0_NATLEN_SHIFT;
> 
> @@ -1165,8 +1164,7 @@ i40e_calc_context_desc(uint64_t flags)  {
>  	uint64_t mask = 0ULL;
> 
> -	if (flags | PKT_TX_UDP_TUNNEL_PKT)
> -		mask |= PKT_TX_UDP_TUNNEL_PKT;
> +	mask |= PKT_TX_OUTER_IP_CKSUM;
> 
>  #ifdef RTE_LIBRTE_IEEE1588
>  	mask |= PKT_TX_IEEE1588_TMST;
> --
> 2.1.4



More information about the dev mailing list