This allows marks set by connmark in iptables
to be used for route lookups.

Signed-off-by: Thomas Winter <[email protected]>
Cc: "David S. Miller" <[email protected]>
Cc: Alexey Kuznetsov <[email protected]>
Cc: Hideaki YOSHIFUJI <[email protected]>
---
 net/ipv4/ip_tunnel.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

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;
-- 
2.15.1

Reply via email to