From dbceeb4178af80619c0e319f71c4466daeedec82 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Sun, 30 Jan 2022 00:42:46 +0000 Subject: [PATCH] Dump.c Fix IPv6 checksum on big-endian. --- src/dump.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dump.c b/src/dump.c index 3d9ef1f..7b15945 100644 --- a/src/dump.c +++ b/src/dump.c @@ -147,8 +147,8 @@ void dump_packet(int mask, void *packet, size_t len, /* start UDP checksum */ for (sum = 0, i = 0; i < IN6ADDRSZ; i+=2) { - sum += ip6.ip6_src.s6_addr[i] + (ip6.ip6_src.s6_addr[i+1] << 8) ; - sum += ip6.ip6_dst.s6_addr[i] + (ip6.ip6_dst.s6_addr[i+1] << 8) ; + sum += ntohs((ip6.ip6_src.s6_addr[i] << 8) + (ip6.ip6_src.s6_addr[i+1])) ; + sum += ntohs((ip6.ip6_dst.s6_addr[i] << 8) + (ip6.ip6_dst.s6_addr[i+1])) ; } } else @@ -207,7 +207,7 @@ void dump_packet(int mask, void *packet, size_t len, struct icmp6_hdr *icmp = packet; /* See comment in UDP code below. */ - sum += htons(family == AF_INET6 ? IPPROTO_ICMPV6 : IPPROTO_ICMP); + sum += htons((family == AF_INET6) ? IPPROTO_ICMPV6 : IPPROTO_ICMP); sum += htons(len); icmp->icmp6_cksum = 0;