Hi Al,
Al Viro wrote:
AFAICS, the rules are:
(1) checksum is 16-bit one's complement of the one's complement sum of
relevant 16bit words.
(2) for v4 UDP all-zeroes has special meaning - no checksum; if you get
it from (1), send all-ones instead.
(3) for v6 UDP we have the same remapping as in (2), but all-zeroes has
different meaning - not "ignore checksum" as in v4, but "reject the
packet".
(4) there is no (4).
IOW, nobody except UDP has any business doing that 0->0xffff
replacement. However, we have
if (icmp6h->icmp6_cksum == 0)
icmp6h->icmp6_cksum = -1;
This doesn't look necessary, RFCs 4443/2463 don't mention it being
necessary, and BSD doesn't do it either. I'll cook-up a patch to remove
that since I was doing some other mods in that codepath.
and similar in net/ipv6/raw.c
Maybe here it only needs to be done if (fl->proto == IPPROTO_UDP)?
-Brian
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html