|
@@ -138,6 +138,14 @@ static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+#if defined(CONFIG_NETFILTER) && defined(CONFIG_XFRM)
|
|
|
+ /* Policy lookup after SNAT yielded a new policy */
|
|
|
+ if (skb_dst(skb)->xfrm) {
|
|
|
+ IPCB(skb)->flags |= IPSKB_REROUTED;
|
|
|
+ return dst_output(net, sk, skb);
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
|
|
|
dst_allfrag(skb_dst(skb)) ||
|
|
|
(IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
|