diff options
author | David Ahern <dsa@cumulusnetworks.com> | 2015-09-15 15:10:50 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-09-17 16:36:34 -0700 |
commit | 58189ca7b27411c3dc9a5cb9eeee0906da684c59 (patch) | |
tree | a193039f8278a234772c8a84fc21aaead1370457 /include/net/route.h | |
parent | d828755eae637c6ca39e30702e98abaf34cac146 (diff) | |
download | linux-58189ca7b27411c3dc9a5cb9eeee0906da684c59.tar.gz linux-58189ca7b27411c3dc9a5cb9eeee0906da684c59.tar.bz2 linux-58189ca7b27411c3dc9a5cb9eeee0906da684c59.zip |
net: Fix vti use case with oif in dst lookups
Steffen reported that the recent change to add oif to dst lookups breaks
the VTI use case. The problem is that with the oif set in the flow struct
the comparison to the nh_oif is triggered. Fix by splitting the
FLOWI_FLAG_VRFSRC into 2 flags -- one that triggers the vrf device cache
bypass (FLOWI_FLAG_VRFSRC) and another telling the lookup to not compare
nh oif (FLOWI_FLAG_SKIP_NH_OIF).
Fixes: 42a7b32b73d6 ("xfrm: Add oif to dst lookups")
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/route.h')
-rw-r--r-- | include/net/route.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/route.h b/include/net/route.h index cc61cb95f059..f46af256880c 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -255,7 +255,7 @@ static inline void ip_route_connect_init(struct flowi4 *fl4, __be32 dst, __be32 flow_flags |= FLOWI_FLAG_ANYSRC; if (netif_index_is_vrf(sock_net(sk), oif)) - flow_flags |= FLOWI_FLAG_VRFSRC; + flow_flags |= FLOWI_FLAG_VRFSRC | FLOWI_FLAG_SKIP_NH_OIF; flowi4_init_output(fl4, oif, sk->sk_mark, tos, RT_SCOPE_UNIVERSE, protocol, flow_flags, dst, src, dport, sport); |