summaryrefslogtreecommitdiff
path: root/base/inet.cc
diff options
context:
space:
mode:
Diffstat (limited to 'base/inet.cc')
-rw-r--r--base/inet.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/base/inet.cc b/base/inet.cc
index ac0758c1f..0b9e32854 100644
--- a/base/inet.cc
+++ b/base/inet.cc
@@ -46,16 +46,17 @@ eaddr_string(const uint8_t a[6])
uint16_t
IpHdr::ip_cksum() const
{
- uint16_t sum = ip_cksum_add(this, hlen(), 0);
- return ip_cksum_carry(sum);
+ int sum = ip_cksum_add(this, hlen(), 0);
+ sum = ip_cksum_carry(sum);
+ return sum;
}
uint16_t
IpHdr::tu_cksum() const
{
- uint16_t sum = ip_cksum_add(payload(), len() - hlen(), 0);
- sum = ip_cksum_add(&ip_src, 4, sum);
- sum = ip_cksum_add(&ip_dst, 4, sum);
- sum += htons(ip_p + ip_len);
- return ip_cksum_carry(sum);
+ int sum = ip_cksum_add(payload(), len() - hlen(), 0);
+ sum = ip_cksum_add(&ip_src, 8, sum); // source and destination
+ sum += htons(ip_p + len() - hlen());
+ sum = ip_cksum_carry(sum);
+ return sum;
}