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]: <debug> [1751286095.2070] device[c95ca04a69467d81] (eth0): ip4: reapply... ... NetworkManager[666]: <debug> [1751286095.2104] device[c95ca04a69467d81] (eth0): ip6: addrgenmode6: set none (already set) NetworkManager[666]: <debug> [1751286095.2105] device[c95ca04a69467d81] (eth0): ip6: addrgenmode6: toggle disable_ipv6 sysctl after disabling addr-gen-mode NetworkManager[666]: <debug> [1751286095.2105] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/disable_ipv6' to '1' (current value is '0') NetworkManager[666]: <debug> [1751286095.2106] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/disable_ipv6' to '0' (current value is '1') NetworkManager[666]: <debug> [1751286095.2106] platform-linux: sysctl: setting '/proc/sys/net/ipv6/conf/eth0/accept_ra' to '0' (current value is identical) NetworkManager[666]: <debug> [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
This commit is contained in:
@@ -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 */
|
||||
|
Reference in New Issue
Block a user