Annotation of embedaddon/hping2/cksum.c, revision 1.1
1.1 ! misho 1: /*
! 2: * $smu-mark$
! 3: * $name: cksum.c$
! 4: * $author: Salvatore Sanfilippo <antirez@invece.org>$
! 5: * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$
! 6: * $license: This software is under GPL version 2 of license$
! 7: * $date: Fri Nov 5 11:55:47 MET 1999$
! 8: * $rev: 8$
! 9: */
! 10:
! 11: #include "hping2.h" /* only for arch semi-indipendent data types */
! 12: #include "globals.h"
! 13:
! 14: /*
! 15: * from R. Stevens's Network Programming
! 16: */
! 17: __u16 cksum(__u16 *buf, int nbytes)
! 18: {
! 19: __u32 sum;
! 20: __u16 oddbyte;
! 21:
! 22: sum = 0;
! 23: while (nbytes > 1) {
! 24: sum += *buf++;
! 25: nbytes -= 2;
! 26: }
! 27:
! 28: if (nbytes == 1) {
! 29: oddbyte = 0;
! 30: *((__u16 *) &oddbyte) = *(__u16 *) buf;
! 31: sum += oddbyte;
! 32: }
! 33:
! 34: sum = (sum >> 16) + (sum & 0xffff);
! 35: sum += (sum >> 16);
! 36:
! 37: /* return a bad checksum with --badcksum option */
! 38: if (opt_badcksum) sum ^= 0x5555;
! 39:
! 40: return (__u16) ~sum;
! 41: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>