diff options
author | Dan Williams <dcbw@redhat.com> | 2014-09-24 14:57:14 -0500 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2015-05-14 17:16:11 -0500 |
commit | ad7ec569a6742884cd4f3d48bcc99c9686ca9f00 (patch) | |
tree | 376b7c07ac57cf396915049134f1a5dc8f1db3e8 | |
parent | 09e216b8ab17b132a5f156470c1c5942b822e8b6 (diff) | |
download | NetworkManager-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.c | 32 |
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 |