From: Ido Schimmel <idosch@idosch.org>
To: Guillaume Nault <gnault@redhat.com>
Cc: David Miller <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>,
netdev@vger.kernel.org, Simon Horman <horms@kernel.org>,
David Ahern <dsahern@kernel.org>,
Antonio Quartulli <antonio@mandelbit.com>,
Stanislav Fomichev <stfomichev@gmail.com>,
Petr Machata <petrm@nvidia.com>
Subject: Re: [PATCH net 1/2] gre: Fix again IPv6 link-local address generation.
Date: Mon, 5 May 2025 10:37:54 +0300 [thread overview]
Message-ID: <aBhq0mP-SDV1n5Kz@shredder> (raw)
In-Reply-To: <a88cc5c4811af36007645d610c95102dccb360a6.1746225214.git.gnault@redhat.com>
On Sat, May 03, 2025 at 12:57:52AM +0200, Guillaume Nault wrote:
> Use addrconf_addr_gen() to generate IPv6 link-local addresses on GRE
> devices in most cases and fall back to using add_v4_addrs() only in
> case the GRE configuration is incompatible with addrconf_addr_gen().
>
> GRE used to use addrconf_addr_gen() until commit e5dd729460ca ("ip/ip6_gre:
> use the same logic as SIT interfaces when computing v6LL address")
> restricted this use to gretap and ip6gretap devices, and created
> add_v4_addrs() (borrowed from SIT) for non-Ethernet GRE ones.
>
> The original problem came when commit 9af28511be10 ("addrconf: refuse
> isatap eui64 for INADDR_ANY") made __ipv6_isatap_ifid() fail when its
> addr parameter was 0. The commit says that this would create an invalid
> address, however, I couldn't find any RFC saying that the generated
> interface identifier would be wrong. Anyway, since gre over IPv4
> devices pass their local tunnel address to __ipv6_isatap_ifid(), that
> commit broke their IPv6 link-local address generation when the local
> address was unspecified.
>
> Then commit e5dd729460ca ("ip/ip6_gre: use the same logic as SIT
> interfaces when computing v6LL address") tried to fix that case by
> defining add_v4_addrs() and calling it to generate the IPv6 link-local
> address instead of using addrconf_addr_gen() (apart for gretap and
> ip6gretap devices, which would still use the regular
> addrconf_addr_gen(), since they have a MAC address).
>
> That broke several use cases because add_v4_addrs() isn't properly
> integrated into the rest of IPv6 Neighbor Discovery code. Several of
> these shortcomings have been fixed over time, but add_v4_addrs()
> remains broken on several aspects. In particular, it doesn't send any
> Router Sollicitations, so the SLAAC process doesn't start until the
> interface receives a Router Advertisement. Also, add_v4_addrs() mostly
> ignores the address generation mode of the interface
> (/proc/sys/net/ipv6/conf/*/addr_gen_mode), thus breaking the
> IN6_ADDR_GEN_MODE_RANDOM and IN6_ADDR_GEN_MODE_STABLE_PRIVACY cases.
>
> Fix the situation by using add_v4_addrs() only in the specific scenario
> where the normal method would fail. That is, for interfaces that have
> all of the following characteristics:
>
> * run over IPv4,
> * transport IP packets directly, not Ethernet (that is, not gretap
> interfaces),
> * tunnel endpoint is INADDR_ANY (that is, 0),
> * device address generation mode is EUI64.
>
> In all other cases, revert back to the regular addrconf_addr_gen().
>
> Also, remove the special case for ip6gre interfaces in add_v4_addrs(),
> since ip6gre devices now always use addrconf_addr_gen() instead.
>
> Note:
> This patch was originally applied as commit 183185a18ff9 ("gre: Fix
> IPv6 link-local address generation."). However, it was then reverted
> by commit fc486c2d060f ("Revert "gre: Fix IPv6 link-local address
> generation."") because it uncovered another bug that ended up
> breaking net/forwarding/ip6gre_custom_multipath_hash.sh. That other
> bug has now been fixed by commit 4d0ab3a6885e ("ipv6: Start path
> selection from the first nexthop"). Therefore we can now revive this
> GRE patch (no changes since original commit 183185a18ff9 ("gre: Fix
> IPv6 link-local address generation.").
>
> Fixes: e5dd729460ca ("ip/ip6_gre: use the same logic as SIT interfaces when computing v6LL address")
> Signed-off-by: Guillaume Nault <gnault@redhat.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
next prev parent reply other threads:[~2025-05-05 7:37 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-02 22:57 [PATCH net 0/2] gre: Reapply IPv6 link-local address generation fix Guillaume Nault
2025-05-02 22:57 ` [PATCH net 1/2] gre: Fix again IPv6 link-local address generation Guillaume Nault
2025-05-05 7:37 ` Ido Schimmel [this message]
2025-05-02 22:57 ` [PATCH net 2/2] selftests: Add IPv6 link-local address generation tests for GRE devices Guillaume Nault
2025-05-05 7:38 ` Ido Schimmel
2025-05-06 1:20 ` [PATCH net 0/2] gre: Reapply IPv6 link-local address generation fix patchwork-bot+netdevbpf
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=aBhq0mP-SDV1n5Kz@shredder \
--to=idosch@idosch.org \
--cc=antonio@mandelbit.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=gnault@redhat.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=petrm@nvidia.com \
--cc=stfomichev@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.