ipv4: apply lwtunnel encap for locally-generated packets
authorRobert Shearman <rshearma@brocade.com>
Mon, 3 Aug 2015 16:39:21 +0000 (17:39 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 4 Aug 2015 05:26:14 +0000 (22:26 -0700)
lwtunnel encap is applied for forwarded packets, but not for
locally-generated packets. This is because the output function is not
overridden in __mkroute_output, unlike it is in __mkroute_input.

The lwtunnel state is correctly set on the rth through the call to
rt_set_nexthop, so all that needs to be done is to override the dst
output function to be lwtunnel_output if there is lwtunnel state
present and it requires output redirection.

Signed-off-by: Robert Shearman <rshearma@brocade.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/route.c

index 908f7ef..18fd7c9 100644 (file)
@@ -2022,6 +2022,8 @@ add:
        }
 
        rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0);
+       if (lwtunnel_output_redirect(rth->rt_lwtstate))
+               rth->dst.output = lwtunnel_output;
 
        return rth;
 }