diff options
author | Jiří Klimeš <jklimes@redhat.com> | 2012-08-20 13:38:23 +0200 |
---|---|---|
committer | Jiří Klimeš <jklimes@redhat.com> | 2012-09-21 13:46:54 +0200 |
commit | 4ee617ddf2a229a72223e3b6e040772d5624a743 (patch) | |
tree | 1a3accba72ad4076067daee43be4da8555d22545 | |
parent | 004ea8166ac9a64dc14b9cc01c765dd92c79131c (diff) |
libnm-util: add "secondaries" property containing secondary connection UUIDs
These connections are to be activated with the base connection.
-rw-r--r-- | libnm-util/libnm-util.ver | 4 | ||||
-rw-r--r-- | libnm-util/nm-setting-connection.c | 114 | ||||
-rw-r--r-- | libnm-util/nm-setting-connection.h | 7 |
3 files changed, 123 insertions, 2 deletions
diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver index bc14f248..7507dff0 100644 --- a/libnm-util/libnm-util.ver +++ b/libnm-util/libnm-util.ver @@ -214,6 +214,7 @@ global: nm_setting_compare; nm_setting_compare_flags_get_type; nm_setting_connection_add_permission; + nm_setting_connection_add_secondary; nm_setting_connection_error_get_type; nm_setting_connection_error_quark; nm_setting_connection_get_autoconnect; @@ -221,8 +222,10 @@ global: nm_setting_connection_get_id; nm_setting_connection_get_master; nm_setting_connection_get_num_permissions; + nm_setting_connection_get_num_secondaries; nm_setting_connection_get_permission; nm_setting_connection_get_read_only; + nm_setting_connection_get_secondary; nm_setting_connection_get_slave_type; nm_setting_connection_get_timestamp; nm_setting_connection_get_type; @@ -232,6 +235,7 @@ global: nm_setting_connection_new; nm_setting_connection_permissions_user_allowed; nm_setting_connection_remove_permission; + nm_setting_connection_remove_secondary; nm_setting_diff; nm_setting_diff_result_get_type; nm_setting_duplicate; diff --git a/libnm-util/nm-setting-connection.c b/libnm-util/nm-setting-connection.c index 80380f3c..b247a60f 100644 --- a/libnm-util/nm-setting-connection.c +++ b/libnm-util/nm-setting-connection.c @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2011 Red Hat, Inc. + * (C) Copyright 2007 - 2012 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -83,6 +83,7 @@ typedef struct { guint64 timestamp; gboolean read_only; char *zone; + GSList *secondaries; /* secondary connections to activate with the base connection */ } NMSettingConnectionPrivate; enum { @@ -97,6 +98,7 @@ enum { PROP_ZONE, PROP_MASTER, PROP_SLAVE_TYPE, + PROP_SECONDARIES, LAST_PROP }; @@ -529,6 +531,94 @@ nm_setting_connection_is_slave_type (NMSettingConnection *setting, return !g_strcmp0 (NM_SETTING_CONNECTION_GET_PRIVATE (setting)->slave_type, type); } +/** + * nm_setting_connection_get_num_secondaries: + * @setting: the #NMSettingConnection + * + * Returns: the number of configured secondary connection UUIDs + **/ +guint32 +nm_setting_connection_get_num_secondaries (NMSettingConnection *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), 0); + + return g_slist_length (NM_SETTING_CONNECTION_GET_PRIVATE (setting)->secondaries); +} + +/** + * nm_setting_connection_get_secondary: + * @setting: the #NMSettingConnection + * @idx: the zero-based index of the secondary connection UUID entry + * + * Returns: the secondary connection UUID at index @idx + **/ +const char * +nm_setting_connection_get_secondary (NMSettingConnection *setting, guint32 idx) +{ + NMSettingConnectionPrivate *priv; + + g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL); + + priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting); + g_return_val_if_fail (idx <= g_slist_length (priv->secondaries), NULL); + + return (const char *) g_slist_nth_data (priv->secondaries, idx); +} + +/** + * nm_setting_connection_add_secondary: + * @setting: the #NMSettingConnection + * @sec_uuid: the secondary connection UUID to add + * + * Adds a new secondary connetion UUID to the setting. + * + * Returns: %TRUE if the secondary connection UUID was added; %FALSE if the UUID + * was already present + **/ +gboolean +nm_setting_connection_add_secondary (NMSettingConnection *setting, + const char *sec_uuid) +{ + NMSettingConnectionPrivate *priv; + GSList *iter; + + g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), FALSE); + g_return_val_if_fail (sec_uuid != NULL, FALSE); + g_return_val_if_fail (sec_uuid[0] != '\0', FALSE); + + priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting); + for (iter = priv->secondaries; iter; iter = g_slist_next (iter)) { + if (!strcmp (sec_uuid, (char *) iter->data)) + return FALSE; + } + + priv->secondaries = g_slist_append (priv->secondaries, g_strdup (sec_uuid)); + return TRUE; +} + +/** + * nm_setting_connection_remove_secondary: + * @setting: the #NMSettingConnection + * @idx: index number of the secondary connection UUID + * + * Removes the secondary coonnection UUID at index @idx. + **/ +void +nm_setting_connection_remove_secondary (NMSettingConnection *setting, guint32 idx) +{ + NMSettingConnectionPrivate *priv; + GSList *elt; + + g_return_if_fail (NM_IS_SETTING_CONNECTION (setting)); + + priv = NM_SETTING_CONNECTION_GET_PRIVATE (setting); + elt = g_slist_nth (priv->secondaries, idx); + g_return_if_fail (elt != NULL); + + g_free (elt->data); + priv->secondaries = g_slist_delete_link (priv->secondaries, elt); +} + static gint find_setting_by_name (gconstpointer a, gconstpointer b) { @@ -750,6 +840,10 @@ set_property (GObject *object, guint prop_id, g_free (priv->slave_type); priv->slave_type = g_value_dup_string (value); break; + case PROP_SECONDARIES: + nm_utils_slist_free (priv->secondaries, g_free); + priv->secondaries = g_value_dup_boxed (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -804,6 +898,9 @@ get_property (GObject *object, guint prop_id, case PROP_SLAVE_TYPE: g_value_set_string (value, nm_setting_connection_get_slave_type (setting)); break; + case PROP_SECONDARIES: + g_value_set_boxed (value, priv->secondaries); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1042,4 +1139,19 @@ nm_setting_connection_class_init (NMSettingConnectionClass *setting_class) "connection is not a slave.", NULL, G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE)); + + /** + * NMSettingConnection:secondaries: + * + * List of connection UUIDs that should be activated when the base connection + * itself is activated. + **/ + g_object_class_install_property + (object_class, PROP_SECONDARIES, + _nm_param_spec_specialized (NM_SETTING_CONNECTION_SECONDARIES, + "Secondaries", + "List of connection UUIDs that should be activated " + "when the base connection itself is activated.", + DBUS_TYPE_G_LIST_OF_STRING, + G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE)); } diff --git a/libnm-util/nm-setting-connection.h b/libnm-util/nm-setting-connection.h index 44b0f845..73c598cb 100644 --- a/libnm-util/nm-setting-connection.h +++ b/libnm-util/nm-setting-connection.h @@ -19,7 +19,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * (C) Copyright 2007 - 2010 Red Hat, Inc. + * (C) Copyright 2007 - 2012 Red Hat, Inc. * (C) Copyright 2007 - 2008 Novell, Inc. */ @@ -78,6 +78,7 @@ GQuark nm_setting_connection_error_quark (void); #define NM_SETTING_CONNECTION_ZONE "zone" #define NM_SETTING_CONNECTION_MASTER "master" #define NM_SETTING_CONNECTION_SLAVE_TYPE "slave-type" +#define NM_SETTING_CONNECTION_SECONDARIES "secondaries" /** * NMSettingConnection: @@ -127,6 +128,10 @@ const char *nm_setting_connection_get_master (NMSettingConnection *set gboolean nm_setting_connection_is_slave_type (NMSettingConnection *setting, const char *type); const char *nm_setting_connection_get_slave_type (NMSettingConnection *setting); +guint32 nm_setting_connection_get_num_secondaries (NMSettingConnection *setting); +const char *nm_setting_connection_get_secondary (NMSettingConnection *setting, guint32 idx); +gboolean nm_setting_connection_add_secondary (NMSettingConnection *setting, const char *sec_uuid); +void nm_setting_connection_remove_secondary (NMSettingConnection *setting, guint32 idx); G_END_DECLS |