Message ID | 20180123034624.24037-1-Thomas.Winter@alliedtelesis.co.nz |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | ip_tunnel: Use mark in skb by default | expand |
From: Thomas Winter <Thomas.Winter@alliedtelesis.co.nz> Date: Tue, 23 Jan 2018 16:46:24 +1300 > This allows marks set by connmark in iptables > to be used for route lookups. > > Signed-off-by: Thomas Winter <thomas.winter@alliedtelesis.co.nz> Applied to net-next, thanks.
Hello David Miller, Would this patch be able to be reverted? We have found in further testing that this produces undesired results. For example, using some PBR rule that uses conntrack to set the skb->mark and the desired nexthop is a tunnel then the tunnel route selection hits a routing loop as the skb->mark is the mark of the encapsulated traffic and route selected by init_tunnel_flow is via tunnel itself. Regards, Thomas Winter
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index 5ddb1cb52bd4..141f5e865731 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c @@ -711,9 +711,16 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, } } - init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr, - tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link, - tunnel->fwmark); + if (tunnel->fwmark) { + init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr, + tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link, + tunnel->fwmark); + } + else { + init_tunnel_flow(&fl4, protocol, dst, tnl_params->saddr, + tunnel->parms.o_key, RT_TOS(tos), tunnel->parms.link, + skb->mark); + } if (ip_tunnel_encap(skb, tunnel, &protocol, &fl4) < 0) goto tx_error;
This allows marks set by connmark in iptables to be used for route lookups. Signed-off-by: Thomas Winter <thomas.winter@alliedtelesis.co.nz> Cc: "David S. Miller" <davem@davemloft.net> Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> --- net/ipv4/ip_tunnel.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)