On Fri, Dec 08, 2023 at 12:04:24PM +0000, David Laight wrote: > I've just read RFC 792 and done some experiments. > The kernel ICMP checksum code is just plain broken. > > RFC 792 is quite clear that the checksum is the 16-bit ones's > complement of the one's complement sum of the ICMP message > starting with the ICMP Type. > > The one's complement sum of 0xfffe and 0x0001 is zero (not the 0xffff It is not. FYI, N-bit one's complement sum is defined as X + Y <= MAX_N_BIT ? X + Y : X + Y - MAX_N_BIT, where MAX_N_BIT is 2^N - 1. You add them as natural numbers. If there is no carry and result fits into N bits, that's it. If there is carry, you add it to the lower N bits of sum. Discussion of properties of that operation is present e.g. in RFC1071, titled "Computing the Internet Checksum". May I politely suggest that some basic understanding of the arithmetics involved might be useful for this discussion?