fix checksum
authorBrendan O'Dea <bod@optus.net>
Tue, 7 Jun 2005 05:08:16 +0000 (05:08 +0000)
committerBrendan O'Dea <bod@optus.net>
Tue, 7 Jun 2005 05:08:16 +0000 (05:08 +0000)
test/generateload.c

index 5119920..a58d5f2 100644 (file)
@@ -645,14 +645,14 @@ __u16 checksum(unsigned char *addr, int count)
 
        for (; count > 1; count -= 2)
        {
 
        for (; count > 1; count -= 2)
        {
-               sum += ntohs(*(u32 *)addr);
+               sum += ntohs(*(u16 *)addr);
                addr += 2;
        }
 
                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
 
        // 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
                sum = (sum & 0xFFFF) + (sum >> 16);
 
        // one's complement the result