From: Ido Schimmel <idosch@idosch.org>
To: David Ahern <dsahern@kernel.org>
Cc: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net,
greearb@candelatech.com
Subject: Re: [PATCH net-next] net: Add l3mdev index to flow struct and avoid oif reset for port devices
Date: Tue, 22 Mar 2022 11:22:47 +0200 [thread overview]
Message-ID: <YjmVZzwE3XY750v6@shredder> (raw)
In-Reply-To: <20220314204551.16369-1-dsahern@kernel.org>
On Mon, Mar 14, 2022 at 02:45:51PM -0600, David Ahern wrote:
> diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
> index 2af2b99e0bea..fb0e49c36c2e 100644
> --- a/net/ipv4/fib_trie.c
> +++ b/net/ipv4/fib_trie.c
> @@ -1429,11 +1429,8 @@ bool fib_lookup_good_nhc(const struct fib_nh_common *nhc, int fib_flags,
> !(fib_flags & FIB_LOOKUP_IGNORE_LINKSTATE))
> return false;
>
> - if (!(flp->flowi4_flags & FLOWI_FLAG_SKIP_NH_OIF)) {
> - if (flp->flowi4_oif &&
> - flp->flowi4_oif != nhc->nhc_oif)
> - return false;
> - }
> + if (flp->flowi4_oif && flp->flowi4_oif != nhc->nhc_oif)
> + return false;
David, we have several test cases that are failing which I have tracked
down to this patch.
Before the patch, if the original output interface was enslaved to a
VRF, the output interface in the flow struct would be updated to the VRF
and the 'FLOWI_FLAG_SKIP_NH_OIF' flag would be set, causing the above
check to be skipped.
After the patch, the check is no longer skipped, as original output
interface is retained and the flag was removed.
This breaks scenarios where a GRE tunnel specifies a dummy device
enslaved to a VRF as its physical device. The purpose of this
configuration is to redirect the underlay lookup to the table associated
with the VRF to which the dummy device is enslaved to. The check fails
because 'flp->flowi4_oif' points to the dummy device, whereas
'nhc->nhc_oif' points to the interface via which the encapsulated packet
should egress.
Skipping the check when an l3mdev was set seems to solve the problem:
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index fb0e49c36c2e..cf1164e05d92 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1429,7 +1429,8 @@ bool fib_lookup_good_nhc(const struct fib_nh_common *nhc, int fib_flags,
!(fib_flags & FIB_LOOKUP_IGNORE_LINKSTATE))
return false;
- if (flp->flowi4_oif && flp->flowi4_oif != nhc->nhc_oif)
+ if (!flp->flowi4_l3mdev &&
+ flp->flowi4_oif && flp->flowi4_oif != nhc->nhc_oif)
return false;
return true;
AFAICT, this scenario does not break with ip6gre/ip6gretap tunnels
because 'RT6_LOOKUP_F_IFACE' is not set in
ip6_route_output_flags_noref() in this case.
WDYT? I plan to test this patch in our regression, but I'm not sure if I
missed other cases that might remain broken.
next prev parent reply other threads:[~2022-03-22 9:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-14 20:45 [PATCH net-next] net: Add l3mdev index to flow struct and avoid oif reset for port devices David Ahern
2022-03-16 5:00 ` patchwork-bot+netdevbpf
2022-03-22 9:22 ` Ido Schimmel [this message]
2022-03-22 14:26 ` David Ahern
2022-03-22 15:31 ` Ido Schimmel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YjmVZzwE3XY750v6@shredder \
--to=idosch@idosch.org \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=greearb@candelatech.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).