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 13:16:04 +0200
commitd4d7e02a0b8700aa669af3e34147fcb019b372fe (patch)
tree0091fa38cea68892504dad32816e1c54cedf100b
parent0c00434a9a71b4859477646a8adf4fcac3353676 (diff)
downloadNetworkManager-fg/sys-iface-remove-update.tar.gz
device: when setting back a device to managed, update internal sys statefg/sys-iface-remove-update
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.
-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 d0fc9c55b1..6115942830 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -13866,9 +13866,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 d29b6788b3..97732eebec 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -3138,6 +3138,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));