xfrm: Make the policy hold queue work with VTI.
We forgot to support the xfrm policy hold queue when VTI was implemented. This patch adds everything we need so that we can use the policy hold queue together with VTI interfaces. Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
@@ -491,13 +491,16 @@ vti6_xmit(struct sk_buff *skb, struct net_device *dev, struct flowi *fl)
|
||||
}
|
||||
|
||||
dst_hold(dst);
|
||||
dst = xfrm_lookup(t->net, dst, fl, NULL, 0);
|
||||
dst = xfrm_lookup_route(t->net, dst, fl, NULL, 0);
|
||||
if (IS_ERR(dst)) {
|
||||
err = PTR_ERR(dst);
|
||||
dst = NULL;
|
||||
goto tx_err_link_failure;
|
||||
}
|
||||
|
||||
if (dst->flags & DST_XFRM_QUEUE)
|
||||
goto queued;
|
||||
|
||||
x = dst->xfrm;
|
||||
if (!vti6_state_check(x, &t->parms.raddr, &t->parms.laddr))
|
||||
goto tx_err_link_failure;
|
||||
@@ -533,6 +536,7 @@ vti6_xmit(struct sk_buff *skb, struct net_device *dev, struct flowi *fl)
|
||||
goto tx_err_dst_release;
|
||||
}
|
||||
|
||||
queued:
|
||||
skb_scrub_packet(skb, !net_eq(t->net, dev_net(dev)));
|
||||
skb_dst_set(skb, dst);
|
||||
skb->dev = skb_dst(skb)->dev;
|
||||
|
Reference in New Issue
Block a user