aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorSimon Horman <horms@verge.net.au>2010-08-26 16:21:26 -0400
committerDavid S. Miller <davem@davemloft.net>2010-08-26 16:21:26 -0400
commit8870f8427b8fe30b2684b9e569e5ce038faf41ac (patch)
tree4d20a39d2fceee146b3be6462c50597362db59b7 /net
parent8a891429d1879ae4f37f547ef5c2d68e19277e4a (diff)
IPVS: ICMPv6 checksum calculation
Cc: Xiaoyu Du <tingsrain@gmail.com> Signed-off-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/ipvs/ip_vs_core.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
index 4f8ddba4801..69661db420d 100644
--- a/net/netfilter/ipvs/ip_vs_core.c
+++ b/net/netfilter/ipvs/ip_vs_core.c
@@ -637,10 +637,12 @@ void ip_vs_nat_icmp_v6(struct sk_buff *skb, struct ip_vs_protocol *pp,
637 } 637 }
638 638
639 /* And finally the ICMP checksum */ 639 /* And finally the ICMP checksum */
640 icmph->icmp6_cksum = 0; 640 icmph->icmp6_cksum = ~csum_ipv6_magic(&iph->saddr, &iph->daddr,
641 /* TODO IPv6: is this correct for ICMPv6? */ 641 skb->len - icmp_offset,
642 ip_vs_checksum_complete(skb, icmp_offset); 642 IPPROTO_ICMPV6, 0);
643 skb->ip_summed = CHECKSUM_UNNECESSARY; 643 skb->csum_start = skb_network_header(skb) - skb->head + icmp_offset;
644 skb->csum_offset = offsetof(struct icmp6hdr, icmp6_cksum);
645 skb->ip_summed = CHECKSUM_PARTIAL;
644 646
645 if (inout) 647 if (inout)
646 IP_VS_DBG_PKT(11, pp, skb, (void *)ciph - (void *)iph, 648 IP_VS_DBG_PKT(11, pp, skb, (void *)ciph - (void *)iph,