If IPsec policy uses skb mark, then we have to do route look up with skb mark as well.
Issue: 14870 Signed-off-by: Ansis Atteka <aatt...@nicira.com> --- datapath/tunnel.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/datapath/tunnel.c b/datapath/tunnel.c index 6193891..5564d32 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -360,7 +360,7 @@ void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb) static struct rtable *find_route(struct net *net, __be32 *saddr, __be32 daddr, u8 ipproto, - u8 tos) + u8 tos, u32 skb_mark) { struct rtable *rt; /* Tunnel configuration keeps DSCP part of TOS bits, But Linux @@ -381,6 +381,7 @@ static struct rtable *find_route(struct net *net, struct flowi4 fl = { .daddr = daddr, .saddr = *saddr, .flowi4_tos = RT_TOS(tos), + .flowi4_mark = skb_mark, .flowi4_proto = ipproto }; rt = ip_route_output_key(net, &fl); @@ -609,7 +610,7 @@ int ovs_tnl_send(struct vport *vport, struct sk_buff *skb) /* Route lookup */ rt = find_route(port_key_get_net(&mutable->key), &saddr, daddr, - tnl_vport->tnl_ops->ipproto, tos); + tnl_vport->tnl_ops->ipproto, tos, skb->mark); if (IS_ERR(rt)) goto error_free; @@ -773,7 +774,7 @@ static int tnl_set_config(struct net *net, struct nlattr *options, rt = find_route(port_key_get_net(&mutable->key), &saddr, mutable->key.daddr, - tnl_ops->ipproto, mutable->tos); + tnl_ops->ipproto, mutable->tos, 0); if (IS_ERR(rt)) return -EADDRNOTAVAIL; dev = rt_dst(rt).dev; -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev