|
@@ -1277,13 +1277,24 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb,
|
|
return NF_ACCEPT;
|
|
return NF_ACCEPT;
|
|
}
|
|
}
|
|
|
|
|
|
- if (unlikely(iph.protocol == IPPROTO_ICMP)) {
|
|
|
|
- int related, verdict = ip_vs_in_icmp(skb, &related, hooknum);
|
|
|
|
|
|
+#ifdef CONFIG_IP_VS_IPV6
|
|
|
|
+ if (af == AF_INET6) {
|
|
|
|
+ if (unlikely(iph.protocol == IPPROTO_ICMPV6)) {
|
|
|
|
+ int related, verdict = ip_vs_in_icmp_v6(skb, &related, hooknum);
|
|
|
|
|
|
- if (related)
|
|
|
|
- return verdict;
|
|
|
|
- ip_vs_fill_iphdr(af, skb_network_header(skb), &iph);
|
|
|
|
- }
|
|
|
|
|
|
+ if (related)
|
|
|
|
+ return verdict;
|
|
|
|
+ ip_vs_fill_iphdr(af, skb_network_header(skb), &iph);
|
|
|
|
+ }
|
|
|
|
+ } else
|
|
|
|
+#endif
|
|
|
|
+ if (unlikely(iph.protocol == IPPROTO_ICMP)) {
|
|
|
|
+ int related, verdict = ip_vs_in_icmp(skb, &related, hooknum);
|
|
|
|
+
|
|
|
|
+ if (related)
|
|
|
|
+ return verdict;
|
|
|
|
+ ip_vs_fill_iphdr(af, skb_network_header(skb), &iph);
|
|
|
|
+ }
|
|
|
|
|
|
/* Protocol supported? */
|
|
/* Protocol supported? */
|
|
pp = ip_vs_proto_get(iph.protocol);
|
|
pp = ip_vs_proto_get(iph.protocol);
|