From: Al Viro <viro@ftp.linux.org.uk>
To: Brian Haley <brian.haley@hp.com>
Cc: David Miller <davem@davemloft.net>, netdev@vger.kernel.org
Subject: Re: [PATCH] IPv6: optimize echo reply checksum calculation
Date: Fri, 10 Nov 2006 19:17:15 +0000 [thread overview]
Message-ID: <20061110191715.GP29920@ftp.linux.org.uk> (raw)
In-Reply-To: <4554CD40.3030801@hp.com>
On Fri, Nov 10, 2006 at 02:04:32PM -0500, Brian Haley wrote:
> Al Viro wrote:
> >so -= 1 is broken even on ia64 and it's *always* broken on big-endian
> >boxen.
>
> It's not broken in ia64, I've tested that, just don't have an x86 for
> testing right now. Can you please apply these changes and prove it's
> broken? This little trick has been done in other UNIXes for years
> without any problems.
Could you fscking read what you've replied to? Your -=1 will turn 0
into 0xffff instead of correct 0xfffe. IOW, it's broken in 1:65536
cases.
On big-endian boxen (which x86 is not, BTW), it will *always* give the
wrong result. -= htons(0x100) is better, but still fscks up in 1:256.
You _can_ adjust the checksum; however it's not that trivial. One working
variant is
if (sum > htons(0x100)
sum -= htons(0x100);
else
sum += 0xffff - htons(0x100);
In little-endian case it turns into
if (sum > 1)
sum--;
else
sum += 0xfffe;
which is why your variant breaks rarely on itanic (or x86 - they are not
different in that respect). You still need to handle that corner case,
though.
As for the various Unices doing the same trick, I suggest you to check
what they _really_ do and report bugs for those that have pure -- and
nothing else.
Again, the checksum is sum modulo 0xffff, *not* 0x10000. And endianness
matters, of course, since the packet type is either LSB or MSB, depending
on it.
next prev parent reply other threads:[~2006-11-10 19:17 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-08 22:13 why do we mangle checksums for v6 ICMP? Al Viro
2006-11-08 22:28 ` Al Viro
2006-11-09 17:32 ` Brian Haley
2006-11-09 23:14 ` David Miller
2006-11-10 16:24 ` [PATCH] IPv6: only modify checksum for UDP Brian Haley
2006-11-10 17:54 ` David Stevens
2006-11-14 0:50 ` David Miller
2006-11-14 1:18 ` Al Viro
2006-11-14 1:44 ` David Stevens
2006-11-14 1:52 ` Al Viro
2006-11-10 22:55 ` David Miller
2006-11-10 23:17 ` Nivedita Singhvi
2006-11-10 23:26 ` David Miller
2006-11-10 23:36 ` Nivedita Singhvi
2006-11-12 1:30 ` Brian Haley
2006-11-10 16:25 ` [PATCH] IPv6: optimize echo reply checksum calculation Brian Haley
2006-11-10 17:34 ` Al Viro
2006-11-10 17:51 ` Brian Haley
2006-11-10 18:05 ` Al Viro
2006-11-10 18:20 ` Al Viro
2006-11-10 19:04 ` Brian Haley
2006-11-10 19:17 ` Al Viro [this message]
2006-11-10 21:06 ` Brian Haley
2006-11-11 1:45 ` Al Viro
2006-11-11 18:07 ` why do we mangle checksums for v6 ICMP? Bill Fink
2006-11-13 7:04 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061110191715.GP29920@ftp.linux.org.uk \
--to=viro@ftp.linux.org.uk \
--cc=brian.haley@hp.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.