From ffaa20602cef18b24842ec28dd86fa9328db5026 Mon Sep 17 00:00:00 2001 From: Robin Sommer Date: Wed, 19 Jan 2011 10:08:42 -0800 Subject: [PATCH] IPv6 UDP checksum calculation was broken. (Matti Mantere) --- src/net_util.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/net_util.cc b/src/net_util.cc index e49d575fa0..2ec6f4f653 100644 --- a/src/net_util.cc +++ b/src/net_util.cc @@ -97,7 +97,9 @@ int udp6_checksum(const struct ip6_hdr* ip6, const struct udphdr* up, int len) sum = ones_complement_checksum((void*) ip6->ip6_src.s6_addr, 16, sum); sum = ones_complement_checksum((void*) ip6->ip6_dst.s6_addr, 16, sum); - sum = ones_complement_checksum((void*) &len, 4, sum); + uint32 l = htonl(len); + sum = ones_complement_checksum((void*) &l, 4, sum); + uint32 addl_pseudo = htons(IPPROTO_UDP); sum = ones_complement_checksum((void*) &addl_pseudo, 4, sum); sum = ones_complement_checksum((void*) up, len, sum);