fix checksum

This commit is contained in:
bodea 2005-06-07 05:08:16 +00:00
parent 5fda09364e
commit b8af729dea

View 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); sum = (sum & 0xFFFF) + (sum >> 16);
// one's complement the result // one's complement the result