summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Giudici <fgiudici@redhat.com>2017-05-19 17:34:23 +0200
committerFrancesco Giudici <fgiudici@redhat.com>2017-05-26 16:10:26 +0200
commit2c0865db25a30a87c3a8ee9936595c4c233742dd (patch)
tree3ffa058810e6aa74746d466203cebad09e7ce9f8
parent3c7c2738366cec050f8fb560b447ff934ab9ff4f (diff)
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.c9
-rw-r--r--src/nm-manager.c2
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));