2023-01-31 03:47:04

by Thomas Winter

[permalink] [raw]
Subject: [PATCH v5 0/2] ip/ip6_gre: Fix GRE tunnels not generating IPv6 link local addresses

For our point-to-point GRE tunnels, they have IN6_ADDR_GEN_MODE_NONE
when they are created then we set IN6_ADDR_GEN_MODE_EUI64 when they
come up to generate the IPv6 link local address for the interface.
Recently we found that they were no longer generating IPv6 addresses.

Also, non-point-to-point tunnels were not generating any IPv6 link
local address and instead generating an IPv6 compat address,
breaking IPv6 communication on the tunnel.

These failures were caused by commit e5dd729460ca and this patch set
aims to resolve these issues.

Thomas Winter (2):
ip/ip6_gre: Fix changing addr gen mode not generating IPv6 link local
address
ip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link
local address

net/ipv6/addrconf.c | 59 ++++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 27 deletions(-)

--
2.39.0



2023-01-31 03:47:08

by Thomas Winter

[permalink] [raw]
Subject: [PATCH v5 2/2] ip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link local address

We recently found that our non-point-to-point tunnels were not
generating any IPv6 link local address and instead generating an
IPv6 compat address, breaking IPv6 communication on the tunnel.

Previously, addrconf_gre_config always would call addrconf_addr_gen
and generate a EUI64 link local address for the tunnel.
Then commit e5dd729460ca changed the code path so that add_v4_addrs
is called but this only generates a compat IPv6 address for
non-point-to-point tunnels.

I assume the compat address is specifically for SIT tunnels so
have kept that only for SIT - GRE tunnels now always generate link
local addresses.

Fixes: e5dd729460ca ("ip/ip6_gre: use the same logic as SIT interfaces when computing v6LL address")
Signed-off-by: Thomas Winter <[email protected]>
---
net/ipv6/addrconf.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index f4ba68e096ac..faa47f9ea73a 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3127,17 +3127,17 @@ static void add_v4_addrs(struct inet6_dev *idev)
offset = sizeof(struct in6_addr) - 4;
memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4);

- if (idev->dev->flags&IFF_POINTOPOINT) {
+ if (!(idev->dev->flags & IFF_POINTOPOINT) && idev->dev->type == ARPHRD_SIT) {
+ scope = IPV6_ADDR_COMPATv4;
+ plen = 96;
+ pflags |= RTF_NONEXTHOP;
+ } else {
if (idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_NONE)
return;

addr.s6_addr32[0] = htonl(0xfe800000);
scope = IFA_LINK;
plen = 64;
- } else {
- scope = IPV6_ADDR_COMPATv4;
- plen = 96;
- pflags |= RTF_NONEXTHOP;
}

if (addr.s6_addr32[3]) {
--
2.39.0


2023-02-02 04:00:32

by patchwork-bot+netdevbpf

[permalink] [raw]
Subject: Re: [PATCH v5 0/2] ip/ip6_gre: Fix GRE tunnels not generating IPv6 link local addresses

Hello:

This series was applied to netdev/net.git (master)
by Jakub Kicinski <[email protected]>:

On Tue, 31 Jan 2023 16:46:44 +1300 you wrote:
> For our point-to-point GRE tunnels, they have IN6_ADDR_GEN_MODE_NONE
> when they are created then we set IN6_ADDR_GEN_MODE_EUI64 when they
> come up to generate the IPv6 link local address for the interface.
> Recently we found that they were no longer generating IPv6 addresses.
>
> Also, non-point-to-point tunnels were not generating any IPv6 link
> local address and instead generating an IPv6 compat address,
> breaking IPv6 communication on the tunnel.
>
> [...]

Here is the summary with links:
- [v5,1/2] ip/ip6_gre: Fix changing addr gen mode not generating IPv6 link local address
https://git.kernel.org/netdev/net/c/23ca0c2c9340
- [v5,2/2] ip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link local address
https://git.kernel.org/netdev/net/c/30e2291f61f9

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html