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

Reply via email to