why set tcp check CSUM_MANGLED_0?

Cihangir Akturk cakturk at gmail.com
Tue Aug 29 13:04:41 EDT 2017


On Mon, Aug 28, 2017 at 07:11:48PM +0800, 孙建希 wrote:
> all:
> 
> I am reading tcp checksum code.
> 
> uh->check = csum_tcpudp_magic(src, dst, len, IPPROTO_UDP, csum);
> if (uh->check == 0)
>     uh->check = CSUM_MANGLED_0;
> 
> #define CSUM_MANGLED_0 ((__force __sum16)0xffff)
> uh->check will be 0, but will never be 0xFFFF. Why  set uh->check to
> CSUM_MANGLED_0?

Hi,

This is UDP checksum, not TCP. Just check out RFC 768. Following
excerpt from the RFC document makes it clear.

  If the computed  checksum  is zero,  it is transmitted  as all ones (the
  equivalent  in one's complement  arithmetic).   An all zero  transmitted
  checksum  value means that the transmitter  generated  no checksum  (for
  debugging or for higher level protocols that don't care).

> 
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



More information about the Kernelnewbies mailing list