[PATCH 7/9] device: Add "master" property to provide a reference to the master link
- From: Thomas Graf <tgraf redhat com>
- To: networkmanager-list gnome org
- Cc: Thomas Graf <tgraf redhat com>
- Subject: [PATCH 7/9] device: Add "master" property to provide a reference to the master link
- Date: Fri, 23 Sep 2011 14:52:06 +0200
Provides a function nm_device_set_master() to be used internally to assign a
master device to a slave device. a gobject reference will be held until
the assignment is revoked by setting the master NULL.
Adds a a new device interface property "master" which is readable and contains
the UDI of the master device or NULL if not set.
Signed-off-by: Thomas Graf <tgraf redhat com>
---
src/nm-device-interface.c | 8 ++++++++
src/nm-device-interface.h | 2 ++
src/nm-device.c | 34 ++++++++++++++++++++++++++++++++++
src/nm-device.h | 3 +++
4 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/src/nm-device-interface.c b/src/nm-device-interface.c
index fb471f5..fd4e5e7 100644
--- a/src/nm-device-interface.c
+++ b/src/nm-device-interface.c
@@ -219,6 +219,14 @@ nm_device_interface_init (gpointer g_iface)
0, G_MAXINT, 0,
G_PARAM_READABLE | NM_PROPERTY_PARAM_NO_EXPORT));
+ g_object_interface_install_property
+ (g_iface,
+ g_param_spec_string (NM_DEVICE_INTERFACE_MASTER,
+ "Master",
+ "ID of master device",
+ NULL,
+ G_PARAM_READABLE));
+
/* Signals */
g_signal_new ("state-changed",
iface_type,
diff --git a/src/nm-device-interface.h b/src/nm-device-interface.h
index 560cdfe..8126b2c 100644
--- a/src/nm-device-interface.h
+++ b/src/nm-device-interface.h
@@ -62,6 +62,7 @@ typedef enum
#define NM_DEVICE_INTERFACE_DEVICE_TYPE "device-type" /* ugh */
#define NM_DEVICE_INTERFACE_MANAGED "managed"
#define NM_DEVICE_INTERFACE_FIRMWARE_MISSING "firmware-missing"
+#define NM_DEVICE_INTERFACE_MASTER "master"
#define NM_DEVICE_INTERFACE_TYPE_DESC "type-desc" /* Internal only */
#define NM_DEVICE_INTERFACE_RFKILL_TYPE "rfkill-type" /* Internal only */
#define NM_DEVICE_INTERFACE_IFINDEX "ifindex" /* Internal only */
@@ -87,6 +88,7 @@ typedef enum {
NM_DEVICE_INTERFACE_PROP_TYPE_DESC,
NM_DEVICE_INTERFACE_PROP_RFKILL_TYPE,
NM_DEVICE_INTERFACE_PROP_IFINDEX,
+ NM_DEVICE_INTERFACE_PROP_MASTER,
} NMDeviceInterfaceProp;
diff --git a/src/nm-device.c b/src/nm-device.c
index 89c5000..02cd2a0 100644
--- a/src/nm-device.c
+++ b/src/nm-device.c
@@ -150,6 +150,8 @@ typedef struct {
/* inhibit autoconnect feature */
gboolean autoconnect_inhibit;
+
+ NMDevice * master;
} NMDevicePrivate;
static gboolean check_connection_compatible (NMDeviceInterface *device,
@@ -494,6 +496,28 @@ nm_device_get_type_desc (NMDevice *self)
return NM_DEVICE_GET_PRIVATE (self)->type_desc;
}
+NMDevice *
+nm_device_get_master (NMDevice *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->master;
+}
+
+void
+nm_device_set_master (NMDevice *self, NMDevice *master)
+{
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
+
+ if (priv->master)
+ g_object_unref (priv->master);
+
+ if (master)
+ g_object_ref (master);
+
+ priv->master = master;
+}
+
/*
* nm_device_get_act_request
*
@@ -3540,6 +3564,12 @@ get_property (GObject *object, guint prop_id,
case NM_DEVICE_INTERFACE_PROP_RFKILL_TYPE:
g_value_set_uint (value, priv->rfkill_type);
break;
+ case NM_DEVICE_INTERFACE_PROP_MASTER:
+ if (priv->master)
+ g_value_set_string (value, nm_device_get_udi(priv->master));
+ else
+ g_value_set_string (value, NULL);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -3646,6 +3676,10 @@ nm_device_class_init (NMDeviceClass *klass)
NM_DEVICE_INTERFACE_PROP_RFKILL_TYPE,
NM_DEVICE_INTERFACE_RFKILL_TYPE);
+ g_object_class_override_property (object_class,
+ NM_DEVICE_INTERFACE_PROP_MASTER,
+ NM_DEVICE_INTERFACE_MASTER);
+
signals[AUTOCONNECT_ALLOWED] =
g_signal_new ("autoconnect-allowed",
G_OBJECT_CLASS_TYPE (object_class),
diff --git a/src/nm-device.h b/src/nm-device.h
index 62c8fc0..255529f 100644
--- a/src/nm-device.h
+++ b/src/nm-device.h
@@ -154,6 +154,9 @@ NMIP6Config * nm_device_get_ip6_config (NMDevice *dev);
void * nm_device_get_system_config_data (NMDevice *dev);
+NMDevice * nm_device_get_master (NMDevice *self);
+void nm_device_set_master (NMDevice *self, NMDevice *master);
+
NMActRequest * nm_device_get_act_request (NMDevice *dev);
gboolean nm_device_is_available (NMDevice *dev);
--
1.7.6
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]