diff options
| author | Jakub Kicinski <kuba@kernel.org> | 2022-04-15 14:27:30 -0700 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2022-04-15 14:27:31 -0700 |
| commit | 268b41b34d9afd0e49bb266d5cca54c50abbe4c2 (patch) | |
| tree | a4478d8286c17d1a9a228a07ac69aac30e6e4563 /include | |
| parent | 0b9dcf37755381e9d0b70969b5178d91e32defc8 (diff) | |
| parent | db53cd3d88dc328dea2e968c9c8d3b4294a8a674 (diff) | |
Merge branch 'l3mdev-fix-ip-tunnel-case-after-recent-l3mdev-change'
David Ahern says:
====================
l3mdev: Fix ip tunnel case after recent l3mdev change
Second patch provides a fix for ip tunnels after the recent l3mdev change
that avoids touching the oif in the flow struct. First patch preemptively
provides a fix to an existing function that the second patch uses.
====================
Link: https://lore.kernel.org/r/20220413174320.28989-1-dsahern@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/ip_tunnels.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index 0219fe907b26..88dee57eac8a 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h @@ -243,11 +243,18 @@ static inline __be32 tunnel_id_to_key32(__be64 tun_id) static inline void ip_tunnel_init_flow(struct flowi4 *fl4, int proto, __be32 daddr, __be32 saddr, - __be32 key, __u8 tos, int oif, + __be32 key, __u8 tos, + struct net *net, int oif, __u32 mark, __u32 tun_inner_hash) { memset(fl4, 0, sizeof(*fl4)); - fl4->flowi4_oif = oif; + + if (oif) { + fl4->flowi4_l3mdev = l3mdev_master_upper_ifindex_by_index_rcu(net, oif); + /* Legacy VRF/l3mdev use case */ + fl4->flowi4_oif = fl4->flowi4_l3mdev ? 0 : oif; + } + fl4->daddr = daddr; fl4->saddr = saddr; fl4->flowi4_tos = tos; |
