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>