From 9bbb1139872b6a3cb21e1c08c7853057b4ee2674 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Mon, 30 Jun 2025 15:50:44 +0200 Subject: [PATCH] device: don't disable IPv6 in stage3 on reapply Currently, when a call to Reapply() results in stage3 being re-run, IPv6 ends up messed up. Like this: $ nmcli device modify eth0 ipv4.address '' $ nmcli device modify eth0 ipv4.address 172.31.13.37/24 $ NetworkManager[666]: [1751286095.2070] device[c95ca04a69467d81] (eth0): ip4: reapply... ... NetworkManager[666]: [1751286095.2104] device[c95ca04a69467d81] (eth0): ip6: addrgenmode6: set none (already set) NetworkManager[666]: [1751286095.2105] device[c95ca04a69467d81] (eth0): ip6: addrgenmode6: toggle disable_ipv6 sysctl after disabling addr-gen-mode NetworkManager[666]: [1751286095.2105] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/disable_ipv6' to '1' (current value is '0') NetworkManager[666]: [1751286095.2106] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/disable_ipv6' to '0' (current value is '1') NetworkManager[666]: [1751286095.2106] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/accept_ra' to '0' (current value is identical) NetworkManager[666]: [1751286095.2106] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/disable_ipv6' to '0' (current value is identical) Not only is this unnecessary because addr-gen-mode already has the desired value (as is logged), but also wipes off all IPv6 configuration. This is fine on initial configuration, but not on Reapply(). Let's look at the device state first: if we've progressed past ip-config state, then we can't possibly ever touch the offending sysctls. It's okay -- we don't need to: addr-gen-mode is going to be set right if we went through ip-config before. Resolves: https://issues.redhat.com/browse/NMT-1681 https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2232 --- src/core/devices/nm-device.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index 7aaf4d78ed..9e0a53cd32 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -13437,7 +13437,8 @@ activate_stage3_ip_config(NMDevice *self) * IPv6LL if this is not an assumed connection, since assumed connections * will already have IPv6 set up. */ - if (!nm_device_managed_type_is_external_or_assume(self)) + if ((priv->state <= NM_DEVICE_STATE_IP_CONFIG || priv->ip_data_6.do_reapply) + && !nm_device_managed_type_is_external_or_assume(self)) _dev_addrgenmode6_set(self, NM_IN6_ADDR_GEN_MODE_NONE); /* Re-enable IPv6 on the interface */ -- 2.50.1