* [PATCH net 1/2] Revert "selftests: Add IPv6 link-local address generation tests for GRE devices."
2025-03-19 21:26 [PATCH net 0/2] gre: Revert IPv6 link-local address fix Guillaume Nault
@ 2025-03-19 21:26 ` Guillaume Nault
2025-03-19 21:26 ` [PATCH net 2/2] Revert "gre: Fix IPv6 link-local address generation." Guillaume Nault
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Guillaume Nault @ 2025-03-19 21:26 UTC (permalink / raw)
To: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet
Cc: netdev, Simon Horman, David Ahern, Antonio Quartulli,
Ido Schimmel, Petr Machata, Stanislav Fomichev
This reverts commit 6f50175ccad4278ed3a9394c00b797b75441bd6e.
Commit 183185a18ff9 ("gre: Fix IPv6 link-local address generation.") is
going to be reverted. So let's revert the corresponding kselftest
first.
Signed-off-by: Guillaume Nault <gnault@redhat.com>
---
tools/testing/selftests/net/Makefile | 1 -
.../testing/selftests/net/gre_ipv6_lladdr.sh | 177 ------------------
2 files changed, 178 deletions(-)
delete mode 100755 tools/testing/selftests/net/gre_ipv6_lladdr.sh
diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile
index 5916f3b81c39..73ee88d6b043 100644
--- a/tools/testing/selftests/net/Makefile
+++ b/tools/testing/selftests/net/Makefile
@@ -31,7 +31,6 @@ TEST_PROGS += veth.sh
TEST_PROGS += ioam6.sh
TEST_PROGS += gro.sh
TEST_PROGS += gre_gso.sh
-TEST_PROGS += gre_ipv6_lladdr.sh
TEST_PROGS += cmsg_so_mark.sh
TEST_PROGS += cmsg_so_priority.sh
TEST_PROGS += cmsg_time.sh cmsg_ipv6.sh
diff --git a/tools/testing/selftests/net/gre_ipv6_lladdr.sh b/tools/testing/selftests/net/gre_ipv6_lladdr.sh
deleted file mode 100755
index 5b34f6e1f831..000000000000
--- a/tools/testing/selftests/net/gre_ipv6_lladdr.sh
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/bin/bash
-# SPDX-License-Identifier: GPL-2.0
-
-source ./lib.sh
-
-PAUSE_ON_FAIL="no"
-
-# The trap function handler
-#
-exit_cleanup_all()
-{
- cleanup_all_ns
-
- exit "${EXIT_STATUS}"
-}
-
-# Add fake IPv4 and IPv6 networks on the loopback device, to be used as
-# underlay by future GRE devices.
-#
-setup_basenet()
-{
- ip -netns "${NS0}" link set dev lo up
- ip -netns "${NS0}" address add dev lo 192.0.2.10/24
- ip -netns "${NS0}" address add dev lo 2001:db8::10/64 nodad
-}
-
-# Check if network device has an IPv6 link-local address assigned.
-#
-# Parameters:
-#
-# * $1: The network device to test
-# * $2: An extra regular expression that should be matched (to verify the
-# presence of extra attributes)
-# * $3: The expected return code from grep (to allow checking the absence of
-# a link-local address)
-# * $4: The user visible name for the scenario being tested
-#
-check_ipv6_ll_addr()
-{
- local DEV="$1"
- local EXTRA_MATCH="$2"
- local XRET="$3"
- local MSG="$4"
-
- RET=0
- set +e
- ip -netns "${NS0}" -6 address show dev "${DEV}" scope link | grep "fe80::" | grep -q "${EXTRA_MATCH}"
- check_err_fail "${XRET}" $? ""
- log_test "${MSG}"
- set -e
-}
-
-# Create a GRE device and verify that it gets an IPv6 link-local address as
-# expected.
-#
-# Parameters:
-#
-# * $1: The device type (gre, ip6gre, gretap or ip6gretap)
-# * $2: The local underlay IP address (can be an IPv4, an IPv6 or "any")
-# * $3: The remote underlay IP address (can be an IPv4, an IPv6 or "any")
-# * $4: The IPv6 interface identifier generation mode to use for the GRE
-# device (eui64, none, stable-privacy or random).
-#
-test_gre_device()
-{
- local GRE_TYPE="$1"
- local LOCAL_IP="$2"
- local REMOTE_IP="$3"
- local MODE="$4"
- local ADDR_GEN_MODE
- local MATCH_REGEXP
- local MSG
-
- ip link add netns "${NS0}" name gretest type "${GRE_TYPE}" local "${LOCAL_IP}" remote "${REMOTE_IP}"
-
- case "${MODE}" in
- "eui64")
- ADDR_GEN_MODE=0
- MATCH_REGEXP=""
- MSG="${GRE_TYPE}, mode: 0 (EUI64), ${LOCAL_IP} -> ${REMOTE_IP}"
- XRET=0
- ;;
- "none")
- ADDR_GEN_MODE=1
- MATCH_REGEXP=""
- MSG="${GRE_TYPE}, mode: 1 (none), ${LOCAL_IP} -> ${REMOTE_IP}"
- XRET=1 # No link-local address should be generated
- ;;
- "stable-privacy")
- ADDR_GEN_MODE=2
- MATCH_REGEXP="stable-privacy"
- MSG="${GRE_TYPE}, mode: 2 (stable privacy), ${LOCAL_IP} -> ${REMOTE_IP}"
- XRET=0
- # Initialise stable_secret (required for stable-privacy mode)
- ip netns exec "${NS0}" sysctl -qw net.ipv6.conf.gretest.stable_secret="2001:db8::abcd"
- ;;
- "random")
- ADDR_GEN_MODE=3
- MATCH_REGEXP="stable-privacy"
- MSG="${GRE_TYPE}, mode: 3 (random), ${LOCAL_IP} -> ${REMOTE_IP}"
- XRET=0
- ;;
- esac
-
- # Check that IPv6 link-local address is generated when device goes up
- ip netns exec "${NS0}" sysctl -qw net.ipv6.conf.gretest.addr_gen_mode="${ADDR_GEN_MODE}"
- ip -netns "${NS0}" link set dev gretest up
- check_ipv6_ll_addr gretest "${MATCH_REGEXP}" "${XRET}" "config: ${MSG}"
-
- # Now disable link-local address generation
- ip -netns "${NS0}" link set dev gretest down
- ip netns exec "${NS0}" sysctl -qw net.ipv6.conf.gretest.addr_gen_mode=1
- ip -netns "${NS0}" link set dev gretest up
-
- # Check that link-local address generation works when re-enabled while
- # the device is already up
- ip netns exec "${NS0}" sysctl -qw net.ipv6.conf.gretest.addr_gen_mode="${ADDR_GEN_MODE}"
- check_ipv6_ll_addr gretest "${MATCH_REGEXP}" "${XRET}" "update: ${MSG}"
-
- ip -netns "${NS0}" link del dev gretest
-}
-
-test_gre4()
-{
- local GRE_TYPE
- local MODE
-
- for GRE_TYPE in "gre" "gretap"; do
- printf "\n####\nTesting IPv6 link-local address generation on ${GRE_TYPE} devices\n####\n\n"
-
- for MODE in "eui64" "none" "stable-privacy" "random"; do
- test_gre_device "${GRE_TYPE}" 192.0.2.10 192.0.2.11 "${MODE}"
- test_gre_device "${GRE_TYPE}" any 192.0.2.11 "${MODE}"
- test_gre_device "${GRE_TYPE}" 192.0.2.10 any "${MODE}"
- done
- done
-}
-
-test_gre6()
-{
- local GRE_TYPE
- local MODE
-
- for GRE_TYPE in "ip6gre" "ip6gretap"; do
- printf "\n####\nTesting IPv6 link-local address generation on ${GRE_TYPE} devices\n####\n\n"
-
- for MODE in "eui64" "none" "stable-privacy" "random"; do
- test_gre_device "${GRE_TYPE}" 2001:db8::10 2001:db8::11 "${MODE}"
- test_gre_device "${GRE_TYPE}" any 2001:db8::11 "${MODE}"
- test_gre_device "${GRE_TYPE}" 2001:db8::10 any "${MODE}"
- done
- done
-}
-
-usage()
-{
- echo "Usage: $0 [-p]"
- exit 1
-}
-
-while getopts :p o
-do
- case $o in
- p) PAUSE_ON_FAIL="yes";;
- *) usage;;
- esac
-done
-
-setup_ns NS0
-
-set -e
-trap exit_cleanup_all EXIT
-
-setup_basenet
-
-test_gre4
-test_gre6
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH net 2/2] Revert "gre: Fix IPv6 link-local address generation."
2025-03-19 21:26 [PATCH net 0/2] gre: Revert IPv6 link-local address fix Guillaume Nault
2025-03-19 21:26 ` [PATCH net 1/2] Revert "selftests: Add IPv6 link-local address generation tests for GRE devices." Guillaume Nault
@ 2025-03-19 21:26 ` Guillaume Nault
2025-03-19 21:35 ` [PATCH net 0/2] gre: Revert IPv6 link-local address fix Stanislav Fomichev
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Guillaume Nault @ 2025-03-19 21:26 UTC (permalink / raw)
To: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet
Cc: netdev, Simon Horman, David Ahern, Antonio Quartulli,
Ido Schimmel, Petr Machata, Stanislav Fomichev
This reverts commit 183185a18ff96751db52a46ccf93fff3a1f42815.
This patch broke net/forwarding/ip6gre_custom_multipath_hash.sh in some
circumstances (https://lore.kernel.org/netdev/Z9RIyKZDNoka53EO@mini-arch/).
Let's revert it while the problem is being investigated.
Fixes: 183185a18ff9 ("gre: Fix IPv6 link-local address generation.")
Signed-off-by: Guillaume Nault <gnault@redhat.com>
---
net/ipv6/addrconf.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 8b6258819dad..ac8cc1076536 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3209,13 +3209,16 @@ static void add_v4_addrs(struct inet6_dev *idev)
struct in6_addr addr;
struct net_device *dev;
struct net *net = dev_net(idev->dev);
- int scope, plen;
+ int scope, plen, offset = 0;
u32 pflags = 0;
ASSERT_RTNL();
memset(&addr, 0, sizeof(struct in6_addr));
- memcpy(&addr.s6_addr32[3], idev->dev->dev_addr, 4);
+ /* in case of IP6GRE the dev_addr is an IPv6 and therefore we use only the last 4 bytes */
+ if (idev->dev->addr_len == sizeof(struct in6_addr))
+ offset = sizeof(struct in6_addr) - 4;
+ memcpy(&addr.s6_addr32[3], idev->dev->dev_addr + offset, 4);
if (!(idev->dev->flags & IFF_POINTOPOINT) && idev->dev->type == ARPHRD_SIT) {
scope = IPV6_ADDR_COMPATv4;
@@ -3526,13 +3529,7 @@ static void addrconf_gre_config(struct net_device *dev)
return;
}
- /* Generate the IPv6 link-local address using addrconf_addr_gen(),
- * unless we have an IPv4 GRE device not bound to an IP address and
- * which is in EUI64 mode (as __ipv6_isatap_ifid() would fail in this
- * case). Such devices fall back to add_v4_addrs() instead.
- */
- if (!(dev->type == ARPHRD_IPGRE && *(__be32 *)dev->dev_addr == 0 &&
- idev->cnf.addr_gen_mode == IN6_ADDR_GEN_MODE_EUI64)) {
+ if (dev->type == ARPHRD_ETHER) {
addrconf_addr_gen(idev, true);
return;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH net 0/2] gre: Revert IPv6 link-local address fix.
2025-03-19 21:26 [PATCH net 0/2] gre: Revert IPv6 link-local address fix Guillaume Nault
2025-03-19 21:26 ` [PATCH net 1/2] Revert "selftests: Add IPv6 link-local address generation tests for GRE devices." Guillaume Nault
2025-03-19 21:26 ` [PATCH net 2/2] Revert "gre: Fix IPv6 link-local address generation." Guillaume Nault
@ 2025-03-19 21:35 ` Stanislav Fomichev
2025-03-19 22:04 ` Paolo Abeni
2025-03-20 15:00 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Stanislav Fomichev @ 2025-03-19 21:35 UTC (permalink / raw)
To: Guillaume Nault
Cc: David Miller, Jakub Kicinski, Paolo Abeni, Eric Dumazet, netdev,
Simon Horman, David Ahern, Antonio Quartulli, Ido Schimmel,
Petr Machata
On 03/19, Guillaume Nault wrote:
> Following Paolo's suggestion, let's revert the IPv6 link-local address
> generation fix for GRE devices. The patch introduced regressions in the
> upstream CI, which are still under investigation.
>
> Start by reverting the kselftest that depend on that fix (patch 1), then
> revert the kernel code itself (patch 2).
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net 0/2] gre: Revert IPv6 link-local address fix.
2025-03-19 21:26 [PATCH net 0/2] gre: Revert IPv6 link-local address fix Guillaume Nault
` (2 preceding siblings ...)
2025-03-19 21:35 ` [PATCH net 0/2] gre: Revert IPv6 link-local address fix Stanislav Fomichev
@ 2025-03-19 22:04 ` Paolo Abeni
2025-03-20 15:00 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: Paolo Abeni @ 2025-03-19 22:04 UTC (permalink / raw)
To: Guillaume Nault, David Miller, Jakub Kicinski, Eric Dumazet
Cc: netdev, Simon Horman, David Ahern, Antonio Quartulli,
Ido Schimmel, Petr Machata, Stanislav Fomichev
On 3/19/25 10:26 PM, Guillaume Nault wrote:
> Following Paolo's suggestion, let's revert the IPv6 link-local address
> generation fix for GRE devices. The patch introduced regressions in the
> upstream CI, which are still under investigation.
>
> Start by reverting the kselftest that depend on that fix (patch 1), then
> revert the kernel code itself (patch 2).
>
> Guillaume Nault (2):
> Revert "selftests: Add IPv6 link-local address generation tests for
> GRE devices."
> Revert "gre: Fix IPv6 link-local address generation."
>
> net/ipv6/addrconf.c | 15 +-
> tools/testing/selftests/net/Makefile | 1 -
> .../testing/selftests/net/gre_ipv6_lladdr.sh | 177 ------------------
> 3 files changed, 6 insertions(+), 187 deletions(-)
> delete mode 100755 tools/testing/selftests/net/gre_ipv6_lladdr.sh
I'm going to apply this series well below the 24 grace period, to fit
tomorrow's PR.
Any feedback more than welcome, but it need to be fast ;)
Thanks,
Paolo
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH net 0/2] gre: Revert IPv6 link-local address fix.
2025-03-19 21:26 [PATCH net 0/2] gre: Revert IPv6 link-local address fix Guillaume Nault
` (3 preceding siblings ...)
2025-03-19 22:04 ` Paolo Abeni
@ 2025-03-20 15:00 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-03-20 15:00 UTC (permalink / raw)
To: Guillaume Nault
Cc: davem, kuba, pabeni, edumazet, netdev, horms, dsahern, antonio,
idosch, petrm, stfomichev
Hello:
This series was applied to netdev/net.git (main)
by Paolo Abeni <pabeni@redhat.com>:
On Wed, 19 Mar 2025 22:26:39 +0100 you wrote:
> Following Paolo's suggestion, let's revert the IPv6 link-local address
> generation fix for GRE devices. The patch introduced regressions in the
> upstream CI, which are still under investigation.
>
> Start by reverting the kselftest that depend on that fix (patch 1), then
> revert the kernel code itself (patch 2).
>
> [...]
Here is the summary with links:
- [net,1/2] Revert "selftests: Add IPv6 link-local address generation tests for GRE devices."
https://git.kernel.org/netdev/net/c/355d940f4d5a
- [net,2/2] Revert "gre: Fix IPv6 link-local address generation."
https://git.kernel.org/netdev/net/c/fc486c2d060f
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 6+ messages in thread