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-14 17:16:11 -0500
commitad7ec569a6742884cd4f3d48bcc99c9686ca9f00 (patch)
tree376b7c07ac57cf396915049134f1a5dc8f1db3e8
parent09e216b8ab17b132a5f156470c1c5942b822e8b6 (diff)
downloadNetworkManager-ad7ec569a6742884cd4f3d48bcc99c9686ca9f00.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