On Wed, 2012-01-11 at 10:45 +0100, Thomas Graf wrote:
> Adds a new "master" property to NMActiveConnection containing the path
> of the master NMDevice if the connection has a master.

Both these pushed to git master, thanks.

Dan

> Signed-off-by: Thomas Graf <[email protected]>
> ---
>  introspection/nm-active-connection.xml   |    3 ++
>  libnm-glib/libnm-glib.ver                |    1 +
>  libnm-glib/nm-active-connection.c        |   47 
> ++++++++++++++++++++++++++++++
>  libnm-glib/nm-active-connection.h        |    2 +
>  src/nm-activation-request.c              |    7 ++++-
>  src/nm-active-connection.c               |   10 ++++++-
>  src/nm-active-connection.h               |    4 ++-
>  src/nm-device.c                          |   14 +++++++++
>  src/nm-device.h                          |    1 +
>  src/vpn-manager/nm-vpn-connection-base.c |    6 +++-
>  10 files changed, 91 insertions(+), 4 deletions(-)
> 
> diff --git a/introspection/nm-active-connection.xml 
> b/introspection/nm-active-connection.xml
> index a150b2c..710e0e1 100644
> --- a/introspection/nm-active-connection.xml
> +++ b/introspection/nm-active-connection.xml
> @@ -37,6 +37,9 @@
>      <property name="Vpn" type="b" access="read">
>        <tp:docstring>Whether this active connection is also a VPN 
> connection.</tp:docstring>
>      </property>
> +    <property name="Master" type="s" access="read">
> +      <tp:docstring>The path to the master device if the connection is a 
> slave.</tp:docstring>
> +    </property>
>  
>      <signal name="PropertiesChanged">
>          <arg name="properties" type="a{sv}" tp:type="String_Variant_Map">
> diff --git a/libnm-glib/libnm-glib.ver b/libnm-glib/libnm-glib.ver
> index 9c2baf6..77bcd05 100644
> --- a/libnm-glib/libnm-glib.ver
> +++ b/libnm-glib/libnm-glib.ver
> @@ -23,6 +23,7 @@ global:
>       nm_active_connection_get_default6;
>       nm_active_connection_get_default;
>       nm_active_connection_get_devices;
> +     nm_active_connection_get_master;
>       nm_active_connection_get_specific_object;
>       nm_active_connection_get_state;
>       nm_active_connection_get_type;
> diff --git a/libnm-glib/nm-active-connection.c 
> b/libnm-glib/nm-active-connection.c
> index 7dc1c2d..ddde4cc 100644
> --- a/libnm-glib/nm-active-connection.c
> +++ b/libnm-glib/nm-active-connection.c
> @@ -50,6 +50,7 @@ typedef struct {
>       NMActiveConnectionState state;
>       gboolean is_default;
>       gboolean is_default6;
> +     char *master;
>  } NMActiveConnectionPrivate;
>  
>  enum {
> @@ -61,6 +62,7 @@ enum {
>       PROP_STATE,
>       PROP_DEFAULT,
>       PROP_DEFAULT6,
> +     PROP_MASTER,
>  
>       LAST_PROP
>  };
> @@ -72,6 +74,7 @@ enum {
>  #define DBUS_PROP_STATE "State"
>  #define DBUS_PROP_DEFAULT "Default"
>  #define DBUS_PROP_DEFAULT6 "Default6"
> +#define DBUS_PROP_MASTER "Master"
>  
>  /**
>   * nm_active_connection_new:
> @@ -290,6 +293,33 @@ nm_active_connection_get_default6 (NMActiveConnection 
> *connection)
>       return priv->is_default6;
>  }
>  
> +/**
> + * nm_active_connection_get_master:
> + * @connection: a #NMActiveConnection
> + *
> + * Gets the path to the master #NMDevice of the connection.
> + *
> + * Returns: the path of the master #NMDevice of the #NMActiveConnection.
> + * This is the internal string used by the connection, and must not be 
> modified.
> + **/
> +const char *
> +nm_active_connection_get_master (NMActiveConnection *connection)
> +{
> +     NMActiveConnectionPrivate *priv;
> +
> +     g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (connection), NULL);
> +
> +     priv = NM_ACTIVE_CONNECTION_GET_PRIVATE (connection);
> +     if (!priv->master) {
> +             priv->master = _nm_object_get_string_property (NM_OBJECT 
> (connection),
> +                                                            
> NM_DBUS_INTERFACE_ACTIVE_CONNECTION,
> +                                                            DBUS_PROP_MASTER,
> +                                                            NULL);
> +     }
> +
> +     return priv->master;
> +}
> +
>  static void
>  nm_active_connection_init (NMActiveConnection *ap)
>  {
> @@ -324,6 +354,7 @@ finalize (GObject *object)
>       g_free (priv->connection);
>       g_free (priv->uuid);
>       g_free (priv->specific_object);
> +     g_free (priv->master);
>  
>       G_OBJECT_CLASS (nm_active_connection_parent_class)->finalize (object);
>  }
> @@ -355,6 +386,9 @@ get_property (GObject *object,
>       case PROP_DEFAULT6:
>               g_value_set_boolean (value, nm_active_connection_get_default6 
> (self));
>               break;
> +     case PROP_MASTER:
> +             g_value_set_string (value, nm_active_connection_get_master 
> (self));
> +             break;
>       default:
>               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
>               break;
> @@ -514,4 +548,17 @@ nm_active_connection_class_init (NMActiveConnectionClass 
> *ap_class)
>                                                          "Is the default IPv6 
> active connection",
>                                                          FALSE,
>                                                          G_PARAM_READABLE));
> +
> +     /**
> +      * NMActiveConnection:master:
> +      *
> +      * The path of the master device if one exists.
> +      **/
> +     g_object_class_install_property
> +             (object_class, PROP_MASTER,
> +              g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER,
> +                                                   "Master",
> +                                                   "Path of the master 
> device",
> +                                                   NULL,
> +                                                   G_PARAM_READABLE));
>  }
> diff --git a/libnm-glib/nm-active-connection.h 
> b/libnm-glib/nm-active-connection.h
> index 974e551..d6426e9 100644
> --- a/libnm-glib/nm-active-connection.h
> +++ b/libnm-glib/nm-active-connection.h
> @@ -46,6 +46,7 @@ G_BEGIN_DECLS
>  #define NM_ACTIVE_CONNECTION_STATE               "state"
>  #define NM_ACTIVE_CONNECTION_DEFAULT             "default"
>  #define NM_ACTIVE_CONNECTION_DEFAULT6            "default6"
> +#define NM_ACTIVE_CONNECTION_MASTER              "master"
>  
>  typedef struct {
>       NMObject parent;
> @@ -74,6 +75,7 @@ const GPtrArray *nm_active_connection_get_devices         
> (NMActiveConnection *c
>  NMActiveConnectionState nm_active_connection_get_state    
> (NMActiveConnection *connection);
>  gboolean nm_active_connection_get_default                 
> (NMActiveConnection *connection);
>  gboolean nm_active_connection_get_default6                
> (NMActiveConnection *connection);
> +const char * nm_active_connection_get_master              
> (NMActiveConnection *connection);
>  
>  G_END_DECLS
>  
> diff --git a/src/nm-activation-request.c b/src/nm-activation-request.c
> index d3eb920..9d28d80 100644
> --- a/src/nm-activation-request.c
> +++ b/src/nm-activation-request.c
> @@ -91,6 +91,7 @@ enum {
>       PROP_DEFAULT,
>       PROP_DEFAULT6,
>       PROP_VPN,
> +     PROP_MASTER,
>  
>       LAST_PROP
>  };
> @@ -558,6 +559,9 @@ get_property (GObject *object, guint prop_id,
>       case PROP_VPN:
>               g_value_set_boolean (value, FALSE);
>               break;
> +     case PROP_MASTER:
> +             g_value_set_string (value, nm_device_get_master_path 
> (priv->device));
> +             break;
>       default:
>               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
>               break;
> @@ -632,7 +636,8 @@ nm_act_request_class_init (NMActRequestClass *req_class)
>                                               PROP_STATE,
>                                               PROP_DEFAULT,
>                                               PROP_DEFAULT6,
> -                                             PROP_VPN);
> +                                             PROP_VPN,
> +                                             PROP_MASTER);
>  
>       /* Signals */
>       signals[PROPERTIES_CHANGED] = 
> diff --git a/src/nm-active-connection.c b/src/nm-active-connection.c
> index ae2afb0..f27ad70 100644
> --- a/src/nm-active-connection.c
> +++ b/src/nm-active-connection.c
> @@ -41,7 +41,8 @@ nm_active_connection_install_properties (GObjectClass 
> *object_class,
>                                           guint prop_state,
>                                           guint prop_default,
>                                           guint prop_default6,
> -                                         guint prop_vpn)
> +                                         guint prop_vpn,
> +                                         guint prop_master)
>  {
>       g_object_class_install_property (object_class, prop_connection,
>               g_param_spec_boxed (NM_ACTIVE_CONNECTION_CONNECTION,
> @@ -100,5 +101,12 @@ nm_active_connection_install_properties (GObjectClass 
> *object_class,
>                                     "Is a VPN connection",
>                                     FALSE,
>                                     G_PARAM_READABLE));
> +
> +     g_object_class_install_property (object_class, prop_master,
> +             g_param_spec_string (NM_ACTIVE_CONNECTION_MASTER,
> +                                  "Master",
> +                                  "Path of master device",
> +                                  NULL,
> +                                  G_PARAM_READABLE));
>  }
>  
> diff --git a/src/nm-active-connection.h b/src/nm-active-connection.h
> index 4bd8c78..f18f9c1 100644
> --- a/src/nm-active-connection.h
> +++ b/src/nm-active-connection.h
> @@ -32,6 +32,7 @@
>  #define NM_ACTIVE_CONNECTION_DEFAULT "default"
>  #define NM_ACTIVE_CONNECTION_DEFAULT6 "default6"
>  #define NM_ACTIVE_CONNECTION_VPN "vpn"
> +#define NM_ACTIVE_CONNECTION_MASTER "master"
>  
>  char *nm_active_connection_get_next_object_path (void);
>  
> @@ -43,6 +44,7 @@ void nm_active_connection_install_properties (GObjectClass 
> *object_class,
>                                                guint prop_state,
>                                                guint prop_default,
>                                                guint prop_default6,
> -                                              guint prop_vpn);
> +                                              guint prop_vpn,
> +                                              guint prop_master);
>  
>  #endif /* NM_ACTIVE_CONNECTION_H */
> diff --git a/src/nm-device.c b/src/nm-device.c
> index ced8ff3..3a5b3d4 100644
> --- a/src/nm-device.c
> +++ b/src/nm-device.c
> @@ -572,6 +572,17 @@ nm_device_get_master (NMDevice *self)
>       return NM_DEVICE_GET_PRIVATE (self)->master;
>  }
>  
> +const char *
> +nm_device_get_master_path (NMDevice *self)
> +{
> +     g_return_val_if_fail (self != NULL, NULL);
> +
> +     if (NM_DEVICE_GET_PRIVATE (self)->master)
> +             return nm_device_get_path (NM_DEVICE_GET_PRIVATE 
> (self)->master);
> +
> +     return NULL;
> +}
> +
>  void
>  nm_device_set_master (NMDevice *self, NMDevice *master)
>  {
> @@ -580,6 +591,9 @@ nm_device_set_master (NMDevice *self, NMDevice *master)
>       if (priv->master)
>               g_object_unref (priv->master);
>       priv->master = master ? g_object_ref (master) : NULL;
> +
> +     if (priv->act_request)
> +             g_object_notify (G_OBJECT (priv->act_request), 
> NM_ACTIVE_CONNECTION_MASTER);
>  }
>  
>  /*
> diff --git a/src/nm-device.h b/src/nm-device.h
> index 935838a..9d3f74b 100644
> --- a/src/nm-device.h
> +++ b/src/nm-device.h
> @@ -173,6 +173,7 @@ NMIP4Config *     nm_device_get_ip4_config        
> (NMDevice *dev);
>  NMIP6Config *        nm_device_get_ip6_config        (NMDevice *dev);
>  
>  NMDevice *   nm_device_get_master (NMDevice *self);
> +const char *nm_device_get_master_path (NMDevice *self);
>  void         nm_device_set_master (NMDevice *self, NMDevice *master);
>  
>  NMActRequest *       nm_device_get_act_request       (NMDevice *dev);
> diff --git a/src/vpn-manager/nm-vpn-connection-base.c 
> b/src/vpn-manager/nm-vpn-connection-base.c
> index bc2cffb..d53ea63 100644
> --- a/src/vpn-manager/nm-vpn-connection-base.c
> +++ b/src/vpn-manager/nm-vpn-connection-base.c
> @@ -52,6 +52,7 @@ enum {
>       PROP_DEFAULT,
>       PROP_DEFAULT6,
>       PROP_VPN,
> +     PROP_MASTER,
>  
>       LAST_PROP
>  };
> @@ -175,6 +176,8 @@ get_property (GObject *object, guint prop_id,
>       case PROP_VPN:
>               g_value_set_boolean (value, TRUE);
>               break;
> +     case PROP_MASTER:
> +             break;
>       default:
>               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
>               break;
> @@ -201,7 +204,8 @@ nm_vpn_connection_base_class_init 
> (NMVpnConnectionBaseClass *vpn_class)
>                                               PROP_STATE,
>                                               PROP_DEFAULT,
>                                               PROP_DEFAULT6,
> -                                             PROP_VPN);
> +                                             PROP_VPN,
> +                                             PROP_MASTER);
>  
>       dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (vpn_class),
>                                                                        
> &dbus_glib_nm_vpn_connection_base_object_info);


_______________________________________________
networkmanager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to