head 1.2; access; symbols OPENPKG_E1_MP_HEAD:1.2 OPENPKG_E1_MP:1.2 OPENPKG_E1_MP_2_STABLE:1.2 OPENPKG_E1_FP:1.2 OPENPKG_2_STABLE_20061018:1.2 OPENPKG_2_STABLE:1.2.0.14 OPENPKG_2_STABLE_BP:1.2 OPENPKG_2_5_SOLID:1.2.0.12 OPENPKG_2_5_SOLID_BP:1.2 OPENPKG_2_4_RELEASE:1.2 OPENPKG_2_4_SOLID:1.2.0.10 OPENPKG_2_4_SOLID_BP:1.2 OPENPKG_2_3_RELEASE:1.2 OPENPKG_2_3_SOLID:1.2.0.8 OPENPKG_2_3_SOLID_BP:1.2 OPENPKG_2_2_RELEASE:1.2 OPENPKG_2_2_SOLID:1.2.0.6 OPENPKG_2_2_SOLID_BP:1.2 OPENPKG_2_1_RELEASE:1.2 OPENPKG_2_1_SOLID:1.2.0.4 OPENPKG_2_1_SOLID_BP:1.2 OPENPKG_2_0_RELEASE:1.2 OPENPKG_2_0_SOLID:1.2.0.2 OPENPKG_2_0_SOLID_BP:1.2 OPENPKG_1_3_RELEASE:1.1.2.1 OPENPKG_1_3_SOLID:1.1.2.1.0.2 OPENPKG_1_3_SOLID_BP:1.1.2.1 OPENPKG_1_STABLE:1.1.0.2 OPENPKG_1_STABLE_MP:1.1; locks; strict; comment @# @; 1.2 date 2003.10.18.19.51.36; author rse; state dead; branches; next 1.1; 1.1 date 2003.06.09.12.37.39; author rse; state Exp; branches 1.1.2.1; next ; 1.1.2.1 date 2003.07.24.20.49.57; author rse; state Exp; branches; next ; desc @@ 1.2 log @upgrading package: libnids 1.17rc1 -> 1.18 @ text @--- src/checksum.c.orig Wed Aug 21 17:11:09 2002 +++ src/checksum.c Mon Jun 9 14:35:09 2003 @@@@ -4,193 +4,6 @@@@ #include #include -#if ( __i386__ || __i386 ) -// all asm procedures are copied from Linux 2.0.36 and 2.2.10 kernels - -/* - 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 -*/ -u_int -csum_partial(const u_char * buff, int len, u_int sum) -{ - __asm__ ( -/* "pushl %esi - pushl %ebx - movl 20(%esp),%eax # Function arg: u_int sum - movl 16(%esp),%ecx # Function arg: int len - movl 12(%esp),%esi # Function arg: u_char *buff*/ - - "testl $2, %%esi - jz 2f - subl $2, %%ecx - jae 1f - addl $2, %%ecx - jmp 4f -1: movw (%%esi), %%bx - addl $2, %%esi - addw %%bx, %%ax - adcl $0, %%eax -2: - movl %%ecx, %%edx - shrl $5, %%ecx - jz 2f - testl %%esi, %%esi -1: movl (%%esi), %%ebx - adcl %%ebx, %%eax - movl 4(%%esi), %%ebx - adcl %%ebx, %%eax - movl 8(%%esi), %%ebx - adcl %%ebx, %%eax - movl 12(%%esi), %%ebx - adcl %%ebx, %%eax - movl 16(%%esi), %%ebx - adcl %%ebx, %%eax - movl 20(%%esi), %%ebx - adcl %%ebx, %%eax - movl 24(%%esi), %%ebx - adcl %%ebx, %%eax - movl 28(%%esi), %%ebx - adcl %%ebx, %%eax - lea 32(%%esi), %%esi - dec %%ecx - jne 1b - adcl $0, %%eax -2: movl %%edx, %%ecx - andl $0x1c, %%edx - je 4f - shrl $2, %%edx -3: adcl (%%esi), %%eax - lea 4(%%esi), %%esi - dec %%edx - jne 3b - adcl $0, %%eax -4: andl $3, %%ecx - jz 7f - cmpl $2, %%ecx - jb 5f - movw (%%esi),%%cx - leal 2(%%esi),%%esi - je 6f - shll $16,%%ecx -5: movb (%%esi),%%cl -6: addl %%ecx,%%eax - adcl $0, %%eax -7: " - : "=a"(sum) - : "0"(sum), "c"(len), "S"(buff) - : "bx", "dx"); - - return (sum); -} - -/* - This is a version of ip_compute_csum() optimized for IP headers, - which always checksum on 4 octet boundaries. - - By Jorge Cwik , adapted for linux by Arnt - Gulbrandsen. -*/ -inline u_short ip_fast_csum(u_char * iph, u_int ihl) -{ - u_int sum; - - __asm__ __volatile__(" - movl (%1), %0 - subl $4, %2 - jbe 2f - addl 4(%1), %0 - adcl 8(%1), %0 - adcl 12(%1), %0 -1: adcl 16(%1), %0 - lea 4(%1), %1 - decl %2 - jne 1b - adcl $0, %0 - movl %0, %2 - shrl $16, %0 - addw %w2, %w0 - adcl $0, %0 - notl %0 -2: - " - /* - Since the input registers which are loaded with iph and ipl - are modified, we must also specify them as outputs, or gcc - will assume they contain their original values. - */ - : "=r" (sum), "=r" (iph), "=r" (ihl) - : "1" (iph), "2" (ihl)); - - return (sum); -} - -/* Fold a partial checksum. */ -static inline u_int -csum_fold(u_int sum) -{ - __asm__(" - addl %1, %0 - adcl $0xffff, %0 - " - : "=r" (sum) - : "r" (sum << 16), "0" (sum & 0xffff0000) - ); - return ((~sum) >> 16); -} - -/* - computes the checksum of the TCP/UDP pseudo-header - returns a 16-bit checksum, already complemented -*/ -static inline u_short -csum_tcpudp_magic(u_int saddr, u_int daddr, u_short len, - u_short proto, u_int sum) -{ - __asm__(" - addl %1, %0 - adcl %2, %0 - adcl %3, %0 - adcl $0, %0 - " - : "=r" (sum) - : "g" (daddr), "g"(saddr), "g"((ntohs(len) << 16) + proto * 256), "0"(sum)); - return (csum_fold(sum)); -} - -/* - this routine is used for miscellaneous IP-like checksums, mainly in - icmp.c -*/ -inline u_short -ip_compute_csum(u_char * buff, int len) -{ - return (csum_fold(csum_partial(buff, len, 0))); -} - -inline u_short -my_tcp_check(struct tcphdr *th, int len, u_int saddr, u_int daddr) -{ - return csum_tcpudp_magic(saddr, daddr, len, IPPROTO_TCP, - csum_partial((char *)th, len, 0)); -} -inline u_short -my_udp_check(void *u, int len, u_int saddr, u_int daddr) -{ - return csum_tcpudp_magic(saddr, daddr, len, IPPROTO_UDP, - csum_partial((char *)u, len, 0)); -} - -#else /* !i386 */ - struct psuedo_hdr { u_int saddr; @@@@ -275,4 +88,3 @@@@ return (ip_check_ext((u_short *)u, len, sum)); } -#endif /* !i386 */ @ 1.1 log @unbreak this package @ text @@ 1.1.2.1 log @mass Merge-From-CURRENT (MFC) in preparation for OpenPKG 1.3 [class PLUS only] @ text @@