patch-1.3.2 linux/include/net/checksum.h
Next file: linux/init/main.c
Previous file: linux/include/linux/types.h
Back to the patch index
Back to the overall index
- Lines: 143
- Date:
Fri Jun 16 20:03:03 1995
- Orig file:
v1.3.1/linux/include/net/checksum.h
- Orig date:
Tue Jun 6 11:22:17 1995
diff -u --recursive --new-file v1.3.1/linux/include/net/checksum.h linux/include/net/checksum.h
@@ -19,140 +19,7 @@
#define _CHECKSUM_H
#include <asm/byteorder.h>
-#include "ip.h"
-
-/*
- * This is a version of ip_compute_csum() optimized for IP headers,
- * which always checksum on 4 octet boundaries.
- *
- * By Jorge Cwik <jorge@laser.satlink.net>, adapted for linux by
- * Arnt Gulbrandsen.
- */
-static inline unsigned short ip_fast_csum(unsigned char * iph,
- unsigned int ihl) {
- unsigned short int sum;
-
-#ifdef __i386__
- __asm__("
- movl (%%esi), %%eax
- andl $15, %%ecx
- subl $4, %%ecx
- jbe 2f
- addl 4(%%esi), %%eax
- adcl 8(%%esi), %%eax
- adcl 12(%%esi), %%eax
-1: adcl 16(%%esi), %%eax
- lea 4(%%esi), %%esi
- decl %%ecx
- jne 1b
- adcl $0, %%eax
- movl %%eax, %%ecx
- shrl $16, %%eax
- addw %%ecx, %%eax
- adcl $0, %%eax
- notl %%eax
- andl $65535, %%eax
-2:
- "
- : "=a" (sum)
- : "S" (iph), "c"(ihl)
- : "ax", "cx", "si");
-#else
-#error Not implemented for this CPU
-#endif
- return(sum);
-}
-
-
-
-
-/*
- * computes the checksum of the TCP/UDP pseudo-header
- * returns a 16-bit checksum, already complemented
- */
-
-static inline unsigned short int csum_tcpudp_magic(unsigned long saddr,
- unsigned long daddr,
- unsigned short len,
- unsigned short proto,
- unsigned int sum) {
-#ifdef __i386__
- __asm__("
- addl %2, %0
- adcl %3, %0
- adcl %4, %0
- adcl $0, %0
- movl %0, %2
- shrl $16, %2
- addw %2, %0
- adcl $0, %0
- notl %0
- andl $65535, %0
- "
- : "=r" (sum)
- : "0" (daddr), "S"(saddr), "r"((ntohs(len)<<16)+proto*256), "r"(sum)
- : "si" );
-#else
-#error Not implemented for this CPU
-#endif
- return((unsigned short)sum);
-}
-
-
-
-/*
- * computes the checksum of a memory block at buff, length len,
- * and adds in "sum" (32-bit)
- *
- * returns a 32-bit number suitable for feeding into itself
- * or csum_tcpudp_magic
- *
- * this function must be called with even lengths, except
- * for the last fragment, which may be odd
- *
- * it's best to have buff aligned on a 32-bit boundary
- */
-unsigned int csum_partial(unsigned char * buff, int len, unsigned int sum);
-
-
-
-/*
- * the same as csum_partial, but copies from fs:src while it
- * checksums
- *
- * here even more important to align src and dst on a 32-bit (or even
- * better 64-bit) boundary
- */
-
-unsigned int csum_partial_copyffs( char *src, char *dst, int len, int sum);
-
-
-
-
-/*
- * this routine is used for miscellaneous IP-like checksums, mainly
- * in icmp.c
- */
-
-static inline unsigned short ip_compute_csum(unsigned char * buff, int len) {
- unsigned short int sum;
-
-#ifdef __i386__
- __asm__("
- movl %%eax, %%ecx
- shrl $16, %%ecx
- addw %%cx, %%ax
- adcl $0, %%eax
- notl %%eax
- andl $65535, %%eax
- "
- : "=a"(sum)
- : "a" (csum_partial(buff, len, 0))
- : "cx");
-#else
-#error Not implemented for this CPU
-#endif
- return(sum);
-}
+#include <net/ip.h>
+#include <asm/checksum.h>
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov
with Sam's (original) version of this