From: Brendan O'Dea Date: Tue, 7 Jun 2005 05:08:16 +0000 (+0000) Subject: fix checksum X-Git-Tag: 2.2.1-2fdn3.1~19^2^2~1^2~168 X-Git-Url: http://git.sameswireless.fr/l2tpns.git/commitdiff_plain/9980203b66c51ddaaa10ab6fa58bb2aff92828a2?ds=sidebyside fix checksum --- diff --git a/test/generateload.c b/test/generateload.c index 5119920..a58d5f2 100644 --- a/test/generateload.c +++ b/test/generateload.c @@ -645,14 +645,14 @@ __u16 checksum(unsigned char *addr, int count) for (; count > 1; count -= 2) { - sum += ntohs(*(u32 *)addr); + sum += ntohs(*(u16 *)addr); addr += 2; } - if (count > 1) sum += *(unsigned char *)addr; + if (count > 0) sum += *(unsigned char *)addr; // take only 16 bits out of the 32 bit sum and add up the carries - while (sum >> 16) + if (sum >> 16) sum = (sum & 0xFFFF) + (sum >> 16); // one's complement the result