summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-09-24 14:57:14 -0500
committerDan Williams <dcbw@redhat.com>2015-05-19 09:25:16 -0500
commit81db51299719a4cbf3f1f15ead912391d2b52330 (patch)
treec67b2493e8b5a3dfaba3decedf47f1160bc51855
parent652853e0d0749a12db07e34f1a3cd901020a76f8 (diff)
downloadNetworkManager-81db51299719a4cbf3f1f15ead912391d2b52330.tar.gz
core: check duplicate devices by interface name not UDI
We can't have devices with duplicate interface names so we might as well use that for dupe checking instead of the (mostly useless) UDI.
-rw-r--r--src/nm-manager.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 11f9d67794..924d772356 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -467,20 +467,6 @@ _config_changed_cb (NMConfig *config, NMConfigData *config_data, NMConfigChangeF
/************************************************************************/
static NMDevice *
-nm_manager_get_device_by_udi (NMManager *manager, const char *udi)
-{
- GSList *iter;
-
- g_return_val_if_fail (udi != NULL, NULL);
-
- for (iter = NM_MANAGER_GET_PRIVATE (manager)->devices; iter; iter = iter->next) {
- if (!strcmp (nm_device_get_udi (NM_DEVICE (iter->data)), udi))
- return NM_DEVICE (iter->data);
- }
- return NULL;
-}
-
-static NMDevice *
nm_manager_get_device_by_path (NMManager *manager, const char *path)
{
GSList *iter;
@@ -541,6 +527,18 @@ find_device_by_ip_iface (NMManager *self, const gchar *iface)
return NULL;
}
+static NMDevice *
+find_device_by_iface (NMManager *self, const gchar *iface)
+{
+ GSList *iter;
+
+ for (iter = NM_MANAGER_GET_PRIVATE (self)->devices; iter; iter = g_slist_next (iter)) {
+ if (g_strcmp0 (nm_device_get_iface (NM_DEVICE (iter->data)), iface) == 0)
+ return NM_DEVICE (iter->data);
+ }
+ return NULL;
+}
+
static gboolean
manager_sleeping (NMManager *self)
{
@@ -1707,9 +1705,13 @@ add_device (NMManager *self, NMDevice *device, gboolean try_assume)
RfKillType rtype;
GSList *iter, *remove = NULL;
gboolean connection_assumed = FALSE;
+ int ifindex;
/* No duplicates */
- if (nm_manager_get_device_by_udi (self, nm_device_get_udi (device)))
+ ifindex = nm_device_get_ifindex (device);
+ if (ifindex > 0 && nm_manager_get_device_by_ifindex (self, ifindex))
+ return;
+ if (find_device_by_iface (self, nm_device_get_iface (device)))
return;
/* Remove existing devices owned by the new device; eg remove ethernet