Re: [PATCH net v2] Revert "ipv6: preserve insertion order for same-scope addresses"
Chris Adams <[email protected]>
| Newsgroups | dev.linux.lists.regressions,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
Once upon a time, Stefano Brivio <[email protected]> said: > 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. I hit two cases that triggered the behavior: - after an overnight suspend/resume cycle (not sure if there's a minimum time suspended) - with a bridge NIC, after stopping a VM with a NIC on the bridge (which removed an fe80:: link-local address); this is the case I used to bisect since it was easy to script In both cases, the next IPv6 router-advertisement received was what triggered NetworkManager to replace the current privacy addresses. This could be 2-3 minutes after the trigger. > > 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 \ > > -- > Stefano -- Chris Adams <[email protected]>