diff options
author | Simon Horman <horms@verge.net.au> | 2010-08-26 16:21:26 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-26 16:21:26 -0400 |
commit | 8870f8427b8fe30b2684b9e569e5ce038faf41ac (patch) | |
tree | 4d20a39d2fceee146b3be6462c50597362db59b7 /net | |
parent | 8a891429d1879ae4f37f547ef5c2d68e19277e4a (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.c | 10 |
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 4f8ddba48011..69661db420d7 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, |