diff --git a/src/nm-config.c b/src/nm-config.c index cb4e0853cf..621d91c6a9 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -1964,10 +1964,17 @@ nm_config_device_state_load (NMConfig *self, return device_state; } +NM_UTILS_LOOKUP_STR_DEFINE_STATIC (_device_state_managed_type_to_str, NMConfigDeviceStateManagedType, + NM_UTILS_LOOKUP_DEFAULT_NM_ASSERT ("unknown"), + NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNKNOWN, "unknown"), + NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED, "unmanaged"), + NM_UTILS_LOOKUP_STR_ITEM (NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED, "managed"), +); + gboolean nm_config_device_state_write (NMConfig *self, int ifindex, - gboolean managed, + NMConfigDeviceStateManagedType managed, const char *perm_hw_addr_fake, const char *connection_uuid) { @@ -1978,17 +1985,21 @@ nm_config_device_state_write (NMConfig *self, g_return_val_if_fail (NM_IS_CONFIG (self), FALSE); g_return_val_if_fail (ifindex > 0, FALSE); g_return_val_if_fail (!connection_uuid || *connection_uuid, FALSE); - g_return_val_if_fail (managed || !connection_uuid, FALSE); + g_return_val_if_fail (managed != NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED || !connection_uuid, FALSE); nm_assert (!perm_hw_addr_fake || nm_utils_hwaddr_valid (perm_hw_addr_fake, -1)); nm_sprintf_buf (path, "%s/%d", NM_CONFIG_DEVICE_STATE_DIR, ifindex); kf = nm_config_create_keyfile (); - g_key_file_set_boolean (kf, - DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE, - DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_MANAGED, - !!managed); + if (NM_IN_SET (managed, + NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED, + NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED)) { + g_key_file_set_boolean (kf, + DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE, + DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_MANAGED, + managed == NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED); + } if (perm_hw_addr_fake) { g_key_file_set_string (kf, DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE, @@ -2007,9 +2018,9 @@ nm_config_device_state_write (NMConfig *self, g_error_free (local); return FALSE; } - _LOGT ("device-state: write #%d (%s); managed=%d%s%s%s%s%s%s", + _LOGT ("device-state: write #%d (%s); managed=%s%s%s%s%s%s%s", ifindex, path, - (bool) managed, + _device_state_managed_type_to_str (managed), NM_PRINT_FMT_QUOTED (connection_uuid, ", connection-uuid=", connection_uuid, "", ""), NM_PRINT_FMT_QUOTED (perm_hw_addr_fake, ", perm-hw-addr-fake=", perm_hw_addr_fake, "", "")); return TRUE; diff --git a/src/nm-config.h b/src/nm-config.h index 933d0b40d4..f66d44baba 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -207,7 +207,7 @@ NMConfigDeviceStateData *nm_config_device_state_load (NMConfig *self, int ifindex); gboolean nm_config_device_state_write (NMConfig *self, int ifindex, - gboolean managed, + NMConfigDeviceStateManagedType managed, const char *perm_hw_addr_fake, const char *connection_uuid); void nm_config_device_state_prune_unseen (NMConfig *self, GHashTable *seen_ifindexes); diff --git a/src/nm-manager.c b/src/nm-manager.c index e75e499a2e..0bbe1c547a 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -4937,6 +4937,7 @@ nm_manager_write_device_state (NMManager *self) NMDevice *device = NM_DEVICE (devices->data); int ifindex; gboolean managed; + NMConfigDeviceStateManagedType managed_type; NMConnection *settings_connection; const char *uuid = NULL; const char *perm_hw_addr_fake = NULL; @@ -4958,7 +4959,11 @@ nm_manager_write_device_state (NMManager *self) settings_connection = NM_CONNECTION (nm_device_get_settings_connection (device)); if (settings_connection) uuid = nm_connection_get_uuid (settings_connection); - } + managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED; + } else if (nm_device_get_unmanaged_flags (device, NM_UNMANAGED_USER_EXPLICIT)) + managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED; + else + managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNKNOWN; perm_hw_addr_fake = nm_device_get_permanent_hw_address_full (device, FALSE, &perm_hw_addr_is_fake); if (perm_hw_addr_fake && !perm_hw_addr_is_fake) @@ -4966,7 +4971,7 @@ nm_manager_write_device_state (NMManager *self) if (nm_config_device_state_write (priv->config, ifindex, - managed, + managed_type, perm_hw_addr_fake, uuid)) g_hash_table_add (seen_ifindexes, GINT_TO_POINTER (ifindex));