summary refs log tree commit diff
path: root/include
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2006-11-03 00:28:23 -0800
committerDavid S. Miller <davem@sunset.davemloft.net>2006-11-05 14:11:25 -0800
commit02e60370d4dac83f22d5ae75d5512bcb9a3f24b7 (patch)
tree3952d784c9d7c061a5ff7c0e23277783f10e55d2 /include
parent4833ed094097323f5f219820f6ebdc8dd66f501f (diff)
downloadlinux-02e60370d4dac83f22d5ae75d5512bcb9a3f24b7.tar.gz
[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')
-rw-r--r--include/net/ipx.h4
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 {
 #define IPX_MAX_PPROP_HOPS 8
 
 struct ipxhdr {
-	__u16			ipx_checksum __attribute__ ((packed));
-#define IPX_NO_CHECKSUM	0xFFFF
+	__be16			ipx_checksum __attribute__ ((packed));
+#define IPX_NO_CHECKSUM	__constant_htons(0xFFFF)
 	__be16			ipx_pktsize __attribute__ ((packed));
 	__u8			ipx_tctrl;
 	__u8			ipx_type;