From: Alexander Duyck <adu...@mirantis.com> Date: Fri, 11 Mar 2016 14:05:28 -0800
> This patch series is meant to address the differences that exist between > IPv4 and IPv6 in terms of checksum calculation. Specifically the IPv6 > function csum_ipv6_magic treated length as a value that could be greater > than 64K, while csum_tcpudp_magic was truncating the length at 16 bits. > After looking over the code and giving it some thought I decided it would > be best to update the IPv4 function so that it worked the same way the IPv6 > one did. This allows us to get the same results given the same inputs for > both functions. As a result we can use the same processes to reverse the > calculation in the event we need to do something like remove the length of > the pseudo-header checksum. > > I also took the opportunity to standardize things so that the parameters > for these functions all use the correct types. IPv4 addresses are __be32, > length should always be __u32, and protocol is a __u8. > > With this change in place it corrects an issue with UDP tunnels in which we > were getting a checksum that was off by 1 when performing fragmentation on > inner UDP packets. Series applied, thanks Alexander.