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: Sat, 11 Nov 2006 01:45:48 +0000 [thread overview]
Message-ID: <20061111014548.GQ29920@ftp.linux.org.uk> (raw)
In-Reply-To: <4554E9EC.1070803@hp.com>
On Fri, Nov 10, 2006 at 04:06:52PM -0500, Brian Haley wrote:
> Al Viro wrote:
> >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.
>
> I looked again at your previous email:
>
> >Note that even on little-endian you want
> > 3 -> 2
> > 2 -> 1
> > 1 -> 0xffff
> > 0 -> 0xfffe
>
> That doesn't look right to me, but I'll take your word that there's one
> edge case out there I don't see (even though this worked on Alpha).
Sigh... Here's how the checksum is defined:
take array of bytes
pad it to even length with 0
split it into 16bit words
define x # y as (x + y) < 0x10000 ? x + y: x + y - 0xffff
calculate sum = w0 # w1 # w2 # ..... # wn
take 0xffff - sum (aka ~sum)
store the resulting value in pair of bytes (with whatever
endianness you used all along).
Note that resulting pair of bytes does *not* depend on endianness. See
aforementioned RFC for proof and for more fun properties of that sucker.
next prev parent reply other threads:[~2006-11-11 1:45 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
2006-11-10 21:06 ` Brian Haley
2006-11-11 1:45 ` Al Viro [this message]
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=20061111014548.GQ29920@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.