diff options
Diffstat (limited to 'src/lib/compute_ip_checksum.c')
-rw-r--r-- | src/lib/compute_ip_checksum.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/lib/compute_ip_checksum.c b/src/lib/compute_ip_checksum.c index 347b83f220..9bd3e0a2cb 100644 --- a/src/lib/compute_ip_checksum.c +++ b/src/lib/compute_ip_checksum.c @@ -18,15 +18,13 @@ unsigned long compute_ip_checksum(const void *addr, unsigned long length) for(i = 0; i < length; i++) { unsigned long v; v = ptr[i]; - if (i & 1) { + if (i & 1) v <<= 8; - } /* Add the new value */ sum += v; /* Wrap around the carry */ - if (sum > 0xFFFF) { + if (sum > 0xFFFF) sum = (sum + (sum >> 16)) & 0xFFFF; - } } value.byte[0] = sum & 0xff; value.byte[1] = (sum >> 8) & 0xff; @@ -46,8 +44,7 @@ unsigned long add_ip_checksums(unsigned long offset, unsigned long sum, unsigned new = ((new >> 8) & 0xff) | ((new << 8) & 0xff00); } checksum = sum + new; - if (checksum > 0xFFFF) { + if (checksum > 0xFFFF) checksum -= 0xFFFF; - } return (~checksum) & 0xFFFF; } |