[Intel-wired-lan] [next PATCH v3 11/15] i40e/i40evf: Enable support for SKB_GSO_UDP_TUNNEL_CSUM
Jesse Brandeburg
jesse.brandeburg at intel.com
Tue Feb 2 22:49:24 UTC 2016
On Sun, 24 Jan 2016 21:17:29 -0800
Alexander Duyck <aduyck at mirantis.com> wrote:
> The XL722 has support for providing the outer UDP tunnel checksum on
X722, not XL722
> transmits. Make use of this feature to support segmenting UDP tunnels with
> outer checksums enabled.
>
> Signed-off-by: Alexander Duyck <aduyck at mirantis.com>
> ---
...
> + if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_TUNNEL_CSUM) {
> + /* determine offset of outer transport header */
> + l4_offset = l4.hdr - skb->data;
> +
> + /* remove payload length from outer checksum */
> + paylen = (__force u16)l4.udp->check;
> + paylen += ntohs(1) * (u16)~(skb->len - l4_offset);
Can we get a comment about how this is supposed to work? Doesn't it
have endian problems? I understand these lines are removing the payload
length from the checksum by getting the length of the payload,
inverting it and removing it from the checksum, and then below,
updating the checksum, but it is really hard to follow why you use
ntohs(1) without some explanation.
> + l4.udp->check = ~csum_fold((__force __wsum)paylen);
> + }
> +
More information about the Intel-wired-lan
mailing list