diff options
author | Francesco Giudici <fgiudici@redhat.com> | 2017-05-19 17:34:23 +0200 |
---|---|---|
committer | Francesco Giudici <fgiudici@redhat.com> | 2017-05-26 16:10:26 +0200 |
commit | 2c0865db25a30a87c3a8ee9936595c4c233742dd (patch) | |
tree | 3ffa058810e6aa74746d466203cebad09e7ce9f8 | |
parent | 3c7c2738366cec050f8fb560b447ff934ab9ff4f (diff) | |
download | NetworkManager-2c0865db25a30a87c3a8ee9936595c4c233742dd.tar.gz |
device: when setting back a device to managed, update internal sys state
Otherwise a device which was set as unmanaged (updated to the REMOVED
internal sys-state) will never update its own sys-state if later set
back as managed.
Manage either when setting explictly the device to managed either when
just upping a connection on an unmanaged device.
(cherry picked from commit adbf383628138b4f868456996123c4900537a4fb)
-rw-r--r-- | src/devices/nm-device.c | 9 | ||||
-rw-r--r-- | src/nm-manager.c | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index b0fe2a2ff1..f351bbc2d9 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -13916,9 +13916,14 @@ set_property (GObject *object, guint prop_id, NMDeviceStateReason reason; managed = g_value_get_boolean (value); - if (managed) + if (managed) { reason = NM_DEVICE_STATE_REASON_CONNECTION_ASSUMED; - else { + if (NM_IN_SET_TYPED (NMDeviceSysIfaceState, + priv->sys_iface_state, + NM_DEVICE_SYS_IFACE_STATE_EXTERNAL, + NM_DEVICE_SYS_IFACE_STATE_REMOVED)) + nm_device_sys_iface_state_set (self, NM_DEVICE_SYS_IFACE_STATE_ASSUME); + } else { reason = NM_DEVICE_STATE_REASON_REMOVED; nm_device_sys_iface_state_set (self, NM_DEVICE_SYS_IFACE_STATE_REMOVED); } diff --git a/src/nm-manager.c b/src/nm-manager.c index 3d94ce9167..08da4049a8 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -3155,6 +3155,8 @@ unmanaged_to_disconnected (NMDevice *device) * and force the device to be managed. */ nm_device_set_unmanaged_by_flags (device, NM_UNMANAGED_PLATFORM_INIT, FALSE, NM_DEVICE_STATE_REASON_USER_REQUESTED); + if (nm_device_sys_iface_state_get (device) == NM_DEVICE_SYS_IFACE_STATE_REMOVED) + nm_device_sys_iface_state_set (device, NM_DEVICE_SYS_IFACE_STATE_ASSUME); nm_device_set_unmanaged_by_flags (device, NM_UNMANAGED_USER_EXPLICIT, FALSE, NM_DEVICE_STATE_REASON_USER_REQUESTED); g_return_if_fail (nm_device_get_managed (device, FALSE)); |