|
@@ -186,7 +186,8 @@ nf_nat_ipv6_out(unsigned int hooknum,
|
|
|
|
|
|
if (!nf_inet_addr_cmp(&ct->tuplehash[dir].tuple.src.u3,
|
|
|
&ct->tuplehash[!dir].tuple.dst.u3) ||
|
|
|
- (ct->tuplehash[dir].tuple.src.u.all !=
|
|
|
+ (ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMPV6 &&
|
|
|
+ ct->tuplehash[dir].tuple.src.u.all !=
|
|
|
ct->tuplehash[!dir].tuple.dst.u.all))
|
|
|
if (nf_xfrm_me_harder(skb, AF_INET6) < 0)
|
|
|
ret = NF_DROP;
|
|
@@ -222,6 +223,7 @@ nf_nat_ipv6_local_fn(unsigned int hooknum,
|
|
|
}
|
|
|
#ifdef CONFIG_XFRM
|
|
|
else if (!(IP6CB(skb)->flags & IP6SKB_XFRM_TRANSFORMED) &&
|
|
|
+ ct->tuplehash[dir].tuple.dst.protonum != IPPROTO_ICMPV6 &&
|
|
|
ct->tuplehash[dir].tuple.dst.u.all !=
|
|
|
ct->tuplehash[!dir].tuple.src.u.all)
|
|
|
if (nf_xfrm_me_harder(skb, AF_INET6))
|