Re: [PATCH net v2] Revert "ipv6: preserve insertion order for same-scope addresses"
Fernando Fernandez Mancera <[email protected]>
| Newsgroups | dev.linux.lists.regressions,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
On 5/29/26 1:41 PM, Stefano Brivio wrote: > On Fri, 29 May 2026 13:23:57 +0200 > Fernando Fernandez Mancera <[email protected]> wrote: > >> Chris Adams reported that preserving insertion order for same-scope >> addresses is causing SSH connections to be dropped after stopping a VM >> while running NetworkManager. >> >> NetworkManager caches the IPv6 address configuration, when a RA arrives, >> it determines the list of addresses to configure and checks if the >> addresses are already in the right order in the kernel. If they aren't, >> NetworkManager removes and re-adds them to achieve the desired order. >> >> As the order changes, NetworkManager is confused and reconfigures the >> addresses on every update. In addition, this would also affect to cloud >> tooling that relies on IPv6 addresses order to identify primary and >> secondaries addresses. > > By the way, I'm still looking into this part, trying to find > "problematic" examples. > > And I couldn't find any, yet, because it looks like there's always a > _single_ IPv6 address being used as a secondary for a primary IPv4 > address. > IIRC, Azure cloud should be one of them. I do not have an account there to test it.. but some years ago I did some work supporting configuring IPV6 primary and secondary addresses via IMDSv2. If someone with an account could test it I would appreciate it. >> >> This reverts commit cb3de96eea66f5e4a580086c6a1be46e765f97f4. >> >> Fixes: cb3de96eea66 ("ipv6: preserve insertion order for same-scope addresses") >> Reported-by: Chris Adams <[email protected]> >> Closes: https://lore.kernel.org/netdev/[email protected]/ >> Signed-off-by: Fernando Fernandez Mancera <[email protected]> >> --- >> v2: updated commit description to make it more accurate >> --- >> net/ipv6/addrconf.c | 2 +- >> tools/testing/selftests/net/ioam6.sh | 2 +- >> 2 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c >> index 5476b6536eb7..bb84a78b80f6 100644 >> --- a/net/ipv6/addrconf.c >> +++ b/net/ipv6/addrconf.c >> @@ -1013,7 +1013,7 @@ ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp) >> list_for_each(p, &idev->addr_list) { >> struct inet6_ifaddr *ifa >> = list_entry(p, struct inet6_ifaddr, if_list); >> - if (ifp_scope > ipv6_addr_src_scope(&ifa->addr)) >> + if (ifp_scope >= ipv6_addr_src_scope(&ifa->addr)) >> break; >> } >> >> diff --git a/tools/testing/selftests/net/ioam6.sh b/tools/testing/selftests/net/ioam6.sh >> index b2b99889942f..845c26dd01a9 100755 >> --- a/tools/testing/selftests/net/ioam6.sh >> +++ b/tools/testing/selftests/net/ioam6.sh >> @@ -273,8 +273,8 @@ setup() >> ip -netns $ioam_node_beta link set ioam-veth-betaR name veth1 &>/dev/null >> ip -netns $ioam_node_gamma link set ioam-veth-gamma name veth0 &>/dev/null >> >> - ip -netns $ioam_node_alpha addr add 2001:db8:1::2/64 dev veth0 &>/dev/null >> ip -netns $ioam_node_alpha addr add 2001:db8:1::50/64 dev veth0 &>/dev/null >> + ip -netns $ioam_node_alpha addr add 2001:db8:1::2/64 dev veth0 &>/dev/null >> ip -netns $ioam_node_alpha link set veth0 up &>/dev/null >> ip -netns $ioam_node_alpha link set lo up &>/dev/null >> ip -netns $ioam_node_alpha route add 2001:db8:2::/64 \ >