1 #ifndef _ALPHA_CHECKSUM_H
2 #define _ALPHA_CHECKSUM_H
3
4
5 /*
6 * This is a version of ip_compute_csum() optimized for IP headers,
7 * which always checksum on 4 octet boundaries.
8 */
9 extern unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl);
10
11 /*
12 * computes the checksum of the TCP/UDP pseudo-header
13 * returns a 16-bit checksum, already complemented
14 */
15 extern unsigned short int csum_tcpudp_magic(unsigned long saddr,
16 unsigned long daddr,
17 unsigned short len,
18 unsigned short proto,
19 unsigned int sum);
20
21 /*
22 * computes the checksum of a memory block at buff, length len,
23 * and adds in "sum" (32-bit)
24 *
25 * returns a 32-bit number suitable for feeding into itself
26 * or csum_tcpudp_magic
27 *
28 * this function must be called with even lengths, except
29 * for the last fragment, which may be odd
30 *
31 * it's best to have buff aligned on a 32-bit boundary
32 */
33 extern unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
34
35 /*
36 * the same as csum_partial, but copies from src while it
37 * checksums
38 *
39 * here even more important to align src and dst on a 32-bit (or even
40 * better 64-bit) boundary
41 */
42 unsigned int csum_partial_copy( const char *src, char *dst, int len, int sum);
43
44 /*
45 * the same as csum_partial, but copies from user space (but on the alpha
46 * we have just one address space, so this is identical to the above)
47 */
48 #define csum_partial_copy_fromuser csum_partial_copy
49
50
51 /*
52 * this routine is used for miscellaneous IP-like checksums, mainly
53 * in icmp.c
54 */
55
56 extern unsigned short ip_compute_csum(unsigned char * buff, int len);
57
58 /*
59 * Fold a partial checksum without adding pseudo headers
60 */
61
62 static inline unsigned short csum_fold(unsigned int sum)
/* ![[previous]](../icons/n_left.png)
![[next]](../icons/n_right.png)
![[first]](../icons/n_first.png)
![[last]](../icons/n_last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
63 {
64 sum = (sum & 0xffff) + (sum >> 16);
65 sum = (sum & 0xffff) + (sum >> 16);
66 return ~sum;
67 }
68
69 #endif