summaryrefslogtreecommitdiff
path: root/src/nm-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-manager.c')
-rw-r--r--src/nm-manager.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 237a45537d..06dbc86d7c 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -2089,7 +2089,8 @@ _register_device_factory (NMDeviceFactory *factory, gpointer user_data)
static void
platform_link_added (NMManager *self,
int ifindex,
- const NMPlatformLink *plink)
+ const NMPlatformLink *plink,
+ NMDevRunState *run_state)
{
NMDeviceFactory *factory;
NMDevice *device = NULL;
@@ -2200,7 +2201,7 @@ _platform_link_cb_idle (PlatformLinkCbData *data)
NMPlatformLink pllink;
pllink = *l; /* make a copy of the link instance */
- platform_link_added (self, data->ifindex, &pllink);
+ platform_link_added (self, data->ifindex, &pllink, NULL);
} else {
NMDevice *device;
GError *error = NULL;
@@ -2258,11 +2259,23 @@ platform_query_devices (NMManager *self)
GArray *links_array;
NMPlatformLink *links;
int i;
+ gs_unref_hashtable GHashTable *seen_ifindexes = NULL;
+
+ seen_ifindexes = g_hash_table_new (NULL, NULL);
links_array = nm_platform_link_get_all (NM_PLATFORM_GET);
links = (NMPlatformLink *) links_array->data;
- for (i = 0; i < links_array->len; i++)
- platform_link_added (self, links[i].ifindex, &links[i]);
+ for (i = 0; i < links_array->len; i++) {
+ gs_free NMDevRunState *run_state = NULL;
+
+ g_hash_table_add (seen_ifindexes, GINT_TO_POINTER (links[i].ifindex));
+
+ run_state = nm_dev_run_state_load (links[i].ifindex, FALSE);
+
+ platform_link_added (self, links[i].ifindex, &links[i], run_state);
+ }
+
+ nm_dev_run_state_purge_stale_files (seen_ifindexes);
g_array_unref (links_array);
}