ip6_checksum.h (1da177e4c3f41524e886b7f1b8a0c1fc7321cac2) | ip6_checksum.h (56649d5d3c4cb0fe6dd34808ca9f9208d84130ab) |
---|---|
1/* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Checksumming functions for IPv6 7 * 8 * Authors: Jorge Cwik, <jorge@laser.satlink.net> --- 20 unchanged lines hidden (view full) --- 29#include <asm/types.h> 30#include <asm/byteorder.h> 31#include <net/ip.h> 32#include <asm/checksum.h> 33#include <linux/in6.h> 34 35#ifndef _HAVE_ARCH_IPV6_CSUM 36 | 1/* 2 * INET An implementation of the TCP/IP protocol suite for the LINUX 3 * operating system. INET is implemented using the BSD Socket 4 * interface as the means of communication with the user level. 5 * 6 * Checksumming functions for IPv6 7 * 8 * Authors: Jorge Cwik, <jorge@laser.satlink.net> --- 20 unchanged lines hidden (view full) --- 29#include <asm/types.h> 30#include <asm/byteorder.h> 31#include <net/ip.h> 32#include <asm/checksum.h> 33#include <linux/in6.h> 34 35#ifndef _HAVE_ARCH_IPV6_CSUM 36 |
37static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, 38 struct in6_addr *daddr, 39 __u16 len, 40 unsigned short proto, 41 unsigned int csum) | 37static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, 38 const struct in6_addr *daddr, 39 __u32 len, unsigned short proto, 40 __wsum csum) |
42{ 43 44 int carry; 45 __u32 ulen; 46 __u32 uproto; | 41{ 42 43 int carry; 44 __u32 ulen; 45 __u32 uproto; |
46 __u32 sum = (__force u32)csum; |
|
47 | 47 |
48 csum += saddr->s6_addr32[0]; 49 carry = (csum < saddr->s6_addr32[0]); 50 csum += carry; | 48 sum += (__force u32)saddr->s6_addr32[0]; 49 carry = (sum < (__force u32)saddr->s6_addr32[0]); 50 sum += carry; |
51 | 51 |
52 csum += saddr->s6_addr32[1]; 53 carry = (csum < saddr->s6_addr32[1]); 54 csum += carry; | 52 sum += (__force u32)saddr->s6_addr32[1]; 53 carry = (sum < (__force u32)saddr->s6_addr32[1]); 54 sum += carry; |
55 | 55 |
56 csum += saddr->s6_addr32[2]; 57 carry = (csum < saddr->s6_addr32[2]); 58 csum += carry; | 56 sum += (__force u32)saddr->s6_addr32[2]; 57 carry = (sum < (__force u32)saddr->s6_addr32[2]); 58 sum += carry; |
59 | 59 |
60 csum += saddr->s6_addr32[3]; 61 carry = (csum < saddr->s6_addr32[3]); 62 csum += carry; | 60 sum += (__force u32)saddr->s6_addr32[3]; 61 carry = (sum < (__force u32)saddr->s6_addr32[3]); 62 sum += carry; |
63 | 63 |
64 csum += daddr->s6_addr32[0]; 65 carry = (csum < daddr->s6_addr32[0]); 66 csum += carry; | 64 sum += (__force u32)daddr->s6_addr32[0]; 65 carry = (sum < (__force u32)daddr->s6_addr32[0]); 66 sum += carry; |
67 | 67 |
68 csum += daddr->s6_addr32[1]; 69 carry = (csum < daddr->s6_addr32[1]); 70 csum += carry; | 68 sum += (__force u32)daddr->s6_addr32[1]; 69 carry = (sum < (__force u32)daddr->s6_addr32[1]); 70 sum += carry; |
71 | 71 |
72 csum += daddr->s6_addr32[2]; 73 carry = (csum < daddr->s6_addr32[2]); 74 csum += carry; | 72 sum += (__force u32)daddr->s6_addr32[2]; 73 carry = (sum < (__force u32)daddr->s6_addr32[2]); 74 sum += carry; |
75 | 75 |
76 csum += daddr->s6_addr32[3]; 77 carry = (csum < daddr->s6_addr32[3]); 78 csum += carry; | 76 sum += (__force u32)daddr->s6_addr32[3]; 77 carry = (sum < (__force u32)daddr->s6_addr32[3]); 78 sum += carry; |
79 | 79 |
80 ulen = htonl((__u32) len); 81 csum += ulen; 82 carry = (csum < ulen); 83 csum += carry; | 80 ulen = (__force u32)htonl((__u32) len); 81 sum += ulen; 82 carry = (sum < ulen); 83 sum += carry; |
84 | 84 |
85 uproto = htonl(proto); 86 csum += uproto; 87 carry = (csum < uproto); 88 csum += carry; | 85 uproto = (__force u32)htonl(proto); 86 sum += uproto; 87 carry = (sum < uproto); 88 sum += carry; |
89 | 89 |
90 return csum_fold(csum); | 90 return csum_fold((__force __wsum)csum); |
91} 92 93#endif 94#endif | 91} 92 93#endif 94#endif |