File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / hping2 / cksum.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:11:37 2012 UTC (12 years, 3 months ago) by misho
Branches: hping2, MAIN
CVS tags: v2_0_0rc3p7, v2_0_0rc3p5, v2_0_0rc3p4, v2_0_0rc3p0, v2_0_0rc3, HEAD
hping2

    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>