[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>
This commit is contained in:
parent
4833ed0940
commit
02e60370d4
3 changed files with 22 additions and 15 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue