[PATCH 7/9] device: Add "master" property to provide a reference to the master link



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]