ip_tunnel: Use mark in skb by default
authorThomas Winter <Thomas.Winter@alliedtelesis.co.nz>
Tue, 23 Jan 2018 03:46:24 +0000 (16:46 +1300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Jan 2018 21:30:23 +0000 (16:30 -0500)
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_tunnel.c

index 5ddb1cb52bd405ed10cce43195a25607d136efbf..141f5e865731cce632d93824c065d1f95aac6633 100644 (file)
@@ -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;