Annotation of embedaddon/hping2/cksum.c, revision 1.1.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>