summaryrefslogtreecommitdiff
path: root/libnm/nm-client.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2014-10-10 14:28:49 -0500
committerThomas Haller <thaller@redhat.com>2015-12-04 12:16:41 +0100
commit4db851f852b73a85b9b4a5d617e66461836be210 (patch)
tree7d11aa0549e986daa4119d6c2829838ddf33b6e3 /libnm/nm-client.c
parente84587183bfa86d92f24deffeba23a4e928cbee7 (diff)
downloadNetworkManager-4db851f852b73a85b9b4a5d617e66461836be210.tar.gz
libnm/libnm-glib: add NMClient.get_all_devices() method and AllDevices property
Mirror new NetworkManager API to return both real devices and device placeholders.
Diffstat (limited to 'libnm/nm-client.c')
-rw-r--r--libnm/nm-client.c110
1 files changed, 107 insertions, 3 deletions
diff --git a/libnm/nm-client.c b/libnm/nm-client.c
index e17042eb44..dc6db0aad9 100644
--- a/libnm/nm-client.c
+++ b/libnm/nm-client.c
@@ -73,6 +73,7 @@ enum {
PROP_PRIMARY_CONNECTION,
PROP_ACTIVATING_CONNECTION,
PROP_DEVICES,
+ PROP_ALL_DEVICES,
PROP_CONNECTIONS,
PROP_HOSTNAME,
PROP_CAN_MODIFY,
@@ -84,6 +85,8 @@ enum {
enum {
DEVICE_ADDED,
DEVICE_REMOVED,
+ ANY_DEVICE_ADDED,
+ ANY_DEVICE_REMOVED,
PERMISSION_CHANGED,
CONNECTION_ADDED,
CONNECTION_REMOVED,
@@ -720,6 +723,34 @@ nm_client_get_devices (NMClient *client)
}
/**
+ * nm_client_get_all_devices:
+ * @client: a #NMClient
+ *
+ * Gets both real devices and device placeholders (eg, software devices which
+ * do not currently exist, but could be created automatically by NetworkManager
+ * if one of their NMDevice::ActivatableConnections was activated). Use
+ * nm_device_is_real() to determine whether each device is a real device or
+ * a placeholder.
+ *
+ * Use nm_device_get_type() or the NM_IS_DEVICE_XXXX() functions to determine
+ * what kind of device each member of the returned array is, and then you may
+ * use device-specific methods such as nm_device_ethernet_get_hw_address().
+ *
+ * Returns: (transfer none) (element-type NMDevice): a #GPtrArray
+ * containing all the #NMDevices. The returned array is owned by the
+ * #NMClient object and should not be modified.
+ *
+ * Since: 1.2
+ **/
+const GPtrArray *
+nm_client_get_all_devices (NMClient *client)
+{
+ g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+ return nm_manager_get_all_devices (NM_CLIENT_GET_PRIVATE (client)->manager);
+}
+
+/**
* nm_client_get_device_by_path:
* @client: a #NMClient
* @object_path: the object path to search for
@@ -1660,6 +1691,7 @@ manager_device_added (NMManager *manager,
{
g_signal_emit (client, signals[DEVICE_ADDED], 0, device);
}
+
static void
manager_device_removed (NMManager *manager,
NMDevice *device,
@@ -1669,6 +1701,22 @@ manager_device_removed (NMManager *manager,
}
static void
+manager_any_device_added (NMManager *manager,
+ NMDevice *device,
+ gpointer client)
+{
+ g_signal_emit (client, signals[ANY_DEVICE_ADDED], 0, device);
+}
+
+static void
+manager_any_device_removed (NMManager *manager,
+ NMDevice *device,
+ gpointer client)
+{
+ g_signal_emit (client, signals[ANY_DEVICE_REMOVED], 0, device);
+}
+
+static void
manager_permission_changed (NMManager *manager,
NMClientPermission permission,
NMClientPermissionResult result,
@@ -1707,6 +1755,10 @@ constructed (GObject *object)
G_CALLBACK (manager_device_added), client);
g_signal_connect (priv->manager, "device-removed",
G_CALLBACK (manager_device_removed), client);
+ g_signal_connect (priv->manager, "any-device-added",
+ G_CALLBACK (manager_any_device_added), client);
+ g_signal_connect (priv->manager, "any-device-removed",
+ G_CALLBACK (manager_any_device_removed), client);
g_signal_connect (priv->manager, "permission-changed",
G_CALLBACK (manager_permission_changed), client);
@@ -1873,6 +1925,7 @@ get_property (GObject *object, guint prop_id,
case PROP_ACTIVATING_CONNECTION:
case PROP_DEVICES:
case PROP_METERED:
+ case PROP_ALL_DEVICES:
g_object_get_property (G_OBJECT (NM_CLIENT_GET_PRIVATE (object)->manager),
pspec->name, value);
break;
@@ -2092,7 +2145,7 @@ nm_client_class_init (NMClientClass *client_class)
/**
* NMClient:devices:
*
- * List of known network devices.
+ * List of real network devices. Does not include placeholder devices.
*
* Element-type: NMDevice
**/
@@ -2104,6 +2157,21 @@ nm_client_class_init (NMClientClass *client_class)
G_PARAM_STATIC_STRINGS));
/**
+ * NMClient:all-devices:
+ *
+ * List of both real devices and device placeholders.
+ *
+ * Element-type: NMDevice
+ * Since: 1.2
+ **/
+ g_object_class_install_property
+ (object_class, PROP_ALL_DEVICES,
+ g_param_spec_boxed (NM_CLIENT_ALL_DEVICES, "", "",
+ G_TYPE_PTR_ARRAY,
+ G_PARAM_READABLE |
+ G_PARAM_STATIC_STRINGS));
+
+ /**
* NMClient:connections:
*
* The list of configured connections that are available to the user. (Note
@@ -2166,7 +2234,8 @@ nm_client_class_init (NMClientClass *client_class)
* @client: the client that received the signal
* @device: (type NMDevice): the new device
*
- * Notifies that a #NMDevice is added.
+ * Notifies that a #NMDevice is added. This signal is not emitted for
+ * placeholder devices.
**/
signals[DEVICE_ADDED] =
g_signal_new (NM_CLIENT_DEVICE_ADDED,
@@ -2182,7 +2251,8 @@ nm_client_class_init (NMClientClass *client_class)
* @client: the client that received the signal
* @device: (type NMDevice): the removed device
*
- * Notifies that a #NMDevice is removed.
+ * Notifies that a #NMDevice is removed. This signal is not emitted for
+ * placeholder devices.
**/
signals[DEVICE_REMOVED] =
g_signal_new (NM_CLIENT_DEVICE_REMOVED,
@@ -2194,6 +2264,40 @@ nm_client_class_init (NMClientClass *client_class)
G_TYPE_OBJECT);
/**
+ * NMClient::any-device-added:
+ * @client: the client that received the signal
+ * @device: (type NMDevice): the new device
+ *
+ * Notifies that a #NMDevice is added. This signal is emitted for both
+ * regular devices and placeholder devices.
+ **/
+ signals[ANY_DEVICE_ADDED] =
+ g_signal_new (NM_CLIENT_ANY_DEVICE_ADDED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, any_device_added),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ /**
+ * NMClient::any-device-removed:
+ * @client: the client that received the signal
+ * @device: (type NMDevice): the removed device
+ *
+ * Notifies that a #NMDevice is removed. This signal is emitted for both
+ * regular devices and placeholder devices.
+ **/
+ signals[ANY_DEVICE_REMOVED] =
+ g_signal_new (NM_CLIENT_ANY_DEVICE_REMOVED,
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (NMClientClass, any_device_removed),
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ /**
* NMClient::permission-changed:
* @client: the client that received the signal
* @permission: a permission from #NMClientPermission