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 <[email protected]> --- 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 _______________________________________________ networkmanager-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/networkmanager-list
