Root/
1 | #ifndef __ASM_GENERIC_CHECKSUM_H |
2 | #define __ASM_GENERIC_CHECKSUM_H |
3 | |
4 | /* |
5 | * computes the checksum of a memory block at buff, length len, |
6 | * and adds in "sum" (32-bit) |
7 | * |
8 | * returns a 32-bit number suitable for feeding into itself |
9 | * or csum_tcpudp_magic |
10 | * |
11 | * this function must be called with even lengths, except |
12 | * for the last fragment, which may be odd |
13 | * |
14 | * it's best to have buff aligned on a 32-bit boundary |
15 | */ |
16 | extern __wsum csum_partial(const void *buff, int len, __wsum sum); |
17 | |
18 | /* |
19 | * the same as csum_partial, but copies from src while it |
20 | * checksums |
21 | * |
22 | * here even more important to align src and dst on a 32-bit (or even |
23 | * better 64-bit) boundary |
24 | */ |
25 | extern __wsum csum_partial_copy(const void *src, void *dst, int len, __wsum sum); |
26 | |
27 | /* |
28 | * the same as csum_partial_copy, but copies from user space. |
29 | * |
30 | * here even more important to align src and dst on a 32-bit (or even |
31 | * better 64-bit) boundary |
32 | */ |
33 | extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst, |
34 | int len, __wsum sum, int *csum_err); |
35 | |
36 | #define csum_partial_copy_nocheck(src, dst, len, sum) \ |
37 | csum_partial_copy((src), (dst), (len), (sum)) |
38 | |
39 | /* |
40 | * This is a version of ip_compute_csum() optimized for IP headers, |
41 | * which always checksum on 4 octet boundaries. |
42 | */ |
43 | extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl); |
44 | |
45 | /* |
46 | * Fold a partial checksum |
47 | */ |
48 | static inline __sum16 csum_fold(__wsum csum) |
49 | { |
50 | u32 sum = (__force u32)csum; |
51 | sum = (sum & 0xffff) + (sum >> 16); |
52 | sum = (sum & 0xffff) + (sum >> 16); |
53 | return (__force __sum16)~sum; |
54 | } |
55 | |
56 | #ifndef csum_tcpudp_nofold |
57 | /* |
58 | * computes the checksum of the TCP/UDP pseudo-header |
59 | * returns a 16-bit checksum, already complemented |
60 | */ |
61 | extern __wsum |
62 | csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, |
63 | unsigned short proto, __wsum sum); |
64 | #endif |
65 | |
66 | static inline __sum16 |
67 | csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, |
68 | unsigned short proto, __wsum sum) |
69 | { |
70 | return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum)); |
71 | } |
72 | |
73 | /* |
74 | * this routine is used for miscellaneous IP-like checksums, mainly |
75 | * in icmp.c |
76 | */ |
77 | extern __sum16 ip_compute_csum(const void *buff, int len); |
78 | |
79 | #endif /* __ASM_GENERIC_CHECKSUM_H */ |
80 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9