diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2006-11-03 03:28:23 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-11-05 17:11:25 -0500 |
commit | 02e60370d4dac83f22d5ae75d5512bcb9a3f24b7 (patch) | |
tree | 3952d784c9d7c061a5ff7c0e23277783f10e55d2 /include/net/ipx.h | |
parent | 4833ed094097323f5f219820f6ebdc8dd66f501f (diff) |
[IPX]: Annotate and fix IPX checksum
Calculation of IPX checksum got buggered about 2.4.0. The old variant
mangled the packet; that got fixed, but calculation itself got buggered.
Restored the correct logics, fixed a subtle breakage we used to have even
back then: if the sum is 0 mod 0xffff, we want to return 0, not 0xffff.
The latter has special meaning for IPX (cheksum disabled). Observation
(and obvious fix) nicked from history of FreeBSD ipx_cksum.c...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/ipx.h')
-rw-r--r-- | include/net/ipx.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/net/ipx.h b/include/net/ipx.h index 4a423d2695ba..c6b2ee610866 100644 --- a/include/net/ipx.h +++ b/include/net/ipx.h | |||
@@ -26,8 +26,8 @@ struct ipx_address { | |||
26 | #define IPX_MAX_PPROP_HOPS 8 | 26 | #define IPX_MAX_PPROP_HOPS 8 |
27 | 27 | ||
28 | struct ipxhdr { | 28 | struct ipxhdr { |
29 | __u16 ipx_checksum __attribute__ ((packed)); | 29 | __be16 ipx_checksum __attribute__ ((packed)); |
30 | #define IPX_NO_CHECKSUM 0xFFFF | 30 | #define IPX_NO_CHECKSUM __constant_htons(0xFFFF) |
31 | __be16 ipx_pktsize __attribute__ ((packed)); | 31 | __be16 ipx_pktsize __attribute__ ((packed)); |
32 | __u8 ipx_tctrl; | 32 | __u8 ipx_tctrl; |
33 | __u8 ipx_type; | 33 | __u8 ipx_type; |