]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Try a new checksum routine.
authorRoy Marples <roy@marples.name>
Thu, 15 May 2008 20:58:31 +0000 (20:58 +0000)
committerRoy Marples <roy@marples.name>
Thu, 15 May 2008 20:58:31 +0000 (20:58 +0000)
net.c

diff --git a/net.c b/net.c
index b2dd4538dbccbcb651b2e965f1e3480f4d358376..87feebef80cae88dffee126b921833f0691e1b16 100644 (file)
--- a/net.c
+++ b/net.c
@@ -468,20 +468,23 @@ struct udp_dhcp_packet
 static uint16_t
 checksum(const void *data, uint16_t len)
 {
-       const uint16_t *addr = data;
+       const uint8_t *addr = data;
        uint32_t sum = 0;
 
        while (len > 1) {
-               sum += *addr++;
+               sum += addr[0] * 256 + addr[1];
+               addr += 2;
                len -= 2;
        }
 
        if (len == 1)
-               sum += *(const uint8_t *)addr;
+               sum += *addr * 256;
 
        sum = (sum >> 16) + (sum & 0xffff);
        sum += (sum >> 16);
 
+       sum = htons(sum);
+
        return ~sum;
 }