diff options
| author | Roy Marples <roy@marples.name> | 2008-05-15 20:58:31 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2008-05-15 20:58:31 +0000 |
| commit | a2651060906270ac143fd6c83e76ffd4d7f2408b (patch) | |
| tree | fc5c8357b42e2edce07728bca02590fc1c499434 /net.c | |
| parent | fba865f71d680975665008401f3c7c2964472de3 (diff) | |
| download | dhcpcd-a2651060906270ac143fd6c83e76ffd4d7f2408b.tar.xz | |
Try a new checksum routine.
Diffstat (limited to 'net.c')
| -rw-r--r-- | net.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -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; } |
