summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiří Klimeš <jklimes@redhat.com>2012-08-20 13:38:23 +0200
committerJiří Klimeš <jklimes@redhat.com>2012-09-21 13:46:54 +0200
commit4ee617ddf2a229a72223e3b6e040772d5624a743 (patch)
tree1a3accba72ad4076067daee43be4da8555d22545
parent004ea8166ac9a64dc14b9cc01c765dd92c79131c (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.ver4
-rw-r--r--libnm-util/nm-setting-connection.c114
-rw-r--r--libnm-util/nm-setting-connection.h7
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