summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2017-10-10 15:00:59 +0200
committerLubomir Rintel <lkundrak@v3.sk>2017-10-26 20:13:07 +0200
commitdc9b642856e558a7b4891cb43df5835d0552afd5 (patch)
tree599ffdd7dffa8c76069227c5a907042abd99e720
parentd9f4db647fc4d654b58ade8e166f9c0804ee18dc (diff)
downloadNetworkManager-dc9b642856e558a7b4891cb43df5835d0552afd5.tar.gz
manager: add a method to get a particular device of given type
And also make the remove_device() method use it behind the scenes.
-rw-r--r--src/devices/nm-device-ppp.c4
-rw-r--r--src/nm-manager.c30
-rw-r--r--src/nm-manager.h7
3 files changed, 31 insertions, 10 deletions
diff --git a/src/devices/nm-device-ppp.c b/src/devices/nm-device-ppp.c
index 09b25f50e2..8b3968d513 100644
--- a/src/devices/nm-device-ppp.c
+++ b/src/devices/nm-device-ppp.c
@@ -117,7 +117,7 @@ ppp_ip4_config (NMPPPManager *ppp_manager,
return;
}
if (renamed)
- nm_manager_remove_device (nm_manager_get (), iface);
+ nm_manager_remove_device (nm_manager_get (), iface, NM_DEVICE_TYPE_PPP);
nm_device_activate_schedule_ip4_config_result (device, config);
return;
@@ -195,7 +195,7 @@ act_stage3_ip4_config_start (NMDevice *device,
if (!nm_device_take_over_link (device, priv->pending_ifname, &renamed))
return NM_ACT_STAGE_RETURN_FAILURE;
if (renamed)
- nm_manager_remove_device (nm_manager_get (), priv->pending_ifname);
+ nm_manager_remove_device (nm_manager_get (), priv->pending_ifname, NM_DEVICE_TYPE_PPP);
if (out_config)
*out_config = g_steal_pointer (&priv->pending_ip4_config);
else
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 575a15e6c6..f5ff5b6170 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -1270,22 +1270,38 @@ nm_manager_iface_for_uuid (NMManager *self, const char *uuid)
return nm_connection_get_interface_name (NM_CONNECTION (connection));
}
-gboolean
-nm_manager_remove_device (NMManager *self, const char *ifname)
+NMDevice *
+nm_manager_get_device (NMManager *self, const char *ifname, NMDeviceType device_type)
{
NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
GSList *iter;
NMDevice *d;
+ g_return_val_if_fail (ifname, NULL);
+ g_return_val_if_fail (device_type == NM_DEVICE_TYPE_UNKNOWN, NULL);
+
for (iter = priv->devices; iter; iter = iter->next) {
d = iter->data;
- if (nm_streq0 (nm_device_get_iface (d), ifname)) {
- remove_device (self, d, FALSE, FALSE);
- return TRUE;
- }
+
+ if ( nm_device_get_device_type (d) == device_type
+ && nm_streq0 (nm_device_get_iface (d), ifname))
+ return d;
}
- return FALSE;
+ return NULL;
+}
+
+gboolean
+nm_manager_remove_device (NMManager *self, const char *ifname, NMDeviceType device_type)
+{
+ NMDevice *d;
+
+ d = nm_manager_get_device (self, ifname, device_type);
+ if (!d)
+ return FALSE;
+
+ remove_device (self, d, FALSE, FALSE);
+ return TRUE;
}
/**
diff --git a/src/nm-manager.h b/src/nm-manager.h
index fdcae121c5..622edb5b54 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -126,6 +126,11 @@ gboolean nm_manager_deactivate_connection (NMManager *manager,
void nm_manager_set_capability (NMManager *self, NMCapability cap);
-gboolean nm_manager_remove_device (NMManager *self, const char *ifname);
+NMDevice * nm_manager_get_device (NMManager *self,
+ const char *ifname,
+ NMDeviceType device_type);
+gboolean nm_manager_remove_device (NMManager *self,
+ const char *ifname,
+ NMDeviceType device_type);
#endif /* __NETWORKMANAGER_MANAGER_H__ */