diff options
Diffstat (limited to 'net-misc/networkmanager/files/networkmanager-1.30.2-iwd-autoconnect-fix-pr785.patch')
-rw-r--r-- | net-misc/networkmanager/files/networkmanager-1.30.2-iwd-autoconnect-fix-pr785.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/net-misc/networkmanager/files/networkmanager-1.30.2-iwd-autoconnect-fix-pr785.patch b/net-misc/networkmanager/files/networkmanager-1.30.2-iwd-autoconnect-fix-pr785.patch new file mode 100644 index 000000000000..0e60ccdcb894 --- /dev/null +++ b/net-misc/networkmanager/files/networkmanager-1.30.2-iwd-autoconnect-fix-pr785.patch @@ -0,0 +1,58 @@ +From 4409900f1d05bf60647492a75e478590647b997a Mon Sep 17 00:00:00 2001 +From: Andrew Zaborowski <andrew.zaborowski@intel.com> +Date: Thu, 18 Mar 2021 00:21:31 +0100 +Subject: [PATCH] iwd: Don't call IWD methods when device unmanaged + +When using IWD-side autoconnect mode (current default), in .deactivate() +and .deactivate_async() refrain from commanding IWD to actually +disconnect until the device is managed. Likely the device is already +disconnected but in any case it's up to IWD to decide in this mode. + +Calling IWD device's .Disconnect() D-Bus method has the side effect of +disabling autoconnect and doing this while NM is still in platform-init +was unexpectedly leaving the device without autoconnect after +platform-init was done, according to user reports. + +Fixes: dc0e31fb7014d8a97aca96bf97a8f86f8236300c +--- + src/core/devices/wifi/nm-device-iwd.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/src/core/devices/wifi/nm-device-iwd.c b/src/core/devices/wifi/nm-device-iwd.c +index 95ade44b58..01f2a30396 100644 +--- a/src/core/devices/wifi/nm-device-iwd.c ++++ b/src/core/devices/wifi/nm-device-iwd.c +@@ -588,10 +588,16 @@ deactivate(NMDevice *device) + return; + } + +- cleanup_association_attempt(self, TRUE); ++ cleanup_association_attempt(self, FALSE); + priv->act_mode_switch = FALSE; + +- if (!priv->dbus_station_proxy) ++ /* Don't trigger any actions on the IWD side until the device is managed */ ++ if (priv->iwd_autoconnect && nm_device_get_state(device) < NM_DEVICE_STATE_DISCONNECTED) ++ return; ++ ++ if (priv->dbus_station_proxy) ++ send_disconnect(self); ++ else + reset_mode(self, NULL, NULL, NULL); + } + +@@ -647,6 +653,11 @@ deactivate_async(NMDevice * device, + cleanup_association_attempt(self, FALSE); + priv->act_mode_switch = FALSE; + ++ if (priv->iwd_autoconnect && nm_device_get_state(device) < NM_DEVICE_STATE_DISCONNECTED) { ++ nm_utils_invoke_on_idle(cancellable, disconnect_cb_on_idle, user_data); ++ return; ++ } ++ + if (priv->dbus_station_proxy) { + g_dbus_proxy_call(priv->dbus_station_proxy, + "Disconnect", +-- +GitLab + |