Adds a MASTER= directive to ifcfg-rh permitting a connection to define
a master/slave relationship. This is intended to be used to implement
bonding and eventually bridging connections.

Signed-off-by: Thomas Graf <[email protected]>
---
 libnm-util/libnm-util.ver              |    1 +
 libnm-util/nm-setting-connection.c     |   39 ++++++++++++++++++++++++++++++++
 libnm-util/nm-setting-connection.h     |    2 +
 src/settings/plugins/ifcfg-rh/reader.c |    6 +++++
 4 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/libnm-util/libnm-util.ver b/libnm-util/libnm-util.ver
index 8c28edf..0c7aab0 100644
--- a/libnm-util/libnm-util.ver
+++ b/libnm-util/libnm-util.ver
@@ -195,6 +195,7 @@ global:
        nm_setting_connection_get_connection_type;
        nm_setting_connection_get_id;
        nm_setting_connection_get_num_permissions;
+       nm_setting_connection_get_master;
        nm_setting_connection_get_permission;
        nm_setting_connection_get_read_only;
        nm_setting_connection_get_timestamp;
diff --git a/libnm-util/nm-setting-connection.c 
b/libnm-util/nm-setting-connection.c
index e9030b1..5ca6b60 100644
--- a/libnm-util/nm-setting-connection.c
+++ b/libnm-util/nm-setting-connection.c
@@ -97,6 +97,7 @@ typedef struct {
        char *id;
        char *uuid;
        char *type;
+       char *master;
        GSList *permissions; /* list of Permission structs */
        gboolean autoconnect;
        guint64 timestamp;
@@ -112,6 +113,7 @@ enum {
        PROP_AUTOCONNECT,
        PROP_TIMESTAMP,
        PROP_READ_ONLY,
+       PROP_MASTER,
 
        LAST_PROP
 };
@@ -478,6 +480,22 @@ nm_setting_connection_get_read_only (NMSettingConnection 
*setting)
        return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->read_only;
 }
 
+/**
+ * nm_setting_connection_get_master:
+ * @setting: the #NMSettingConnection
+ *
+ * Returns the #NMSettingConnection:master property of the connection.
+ *
+ * Returns: Name of the master device
+ */
+const char *
+nm_setting_connection_get_master (NMSettingConnection *setting)
+{
+       g_return_val_if_fail (NM_IS_SETTING_CONNECTION (setting), NULL);
+
+       return NM_SETTING_CONNECTION_GET_PRIVATE (setting)->master;
+}
+
 static gint
 find_setting_by_name (gconstpointer a, gconstpointer b)
 {
@@ -591,6 +609,7 @@ finalize (GObject *object)
        g_free (priv->id);
        g_free (priv->uuid);
        g_free (priv->type);
+       g_free (priv->master);
        nm_utils_slist_free (priv->permissions, (GDestroyNotify) 
permission_free);
 
        G_OBJECT_CLASS (nm_setting_connection_parent_class)->finalize (object);
@@ -644,6 +663,10 @@ set_property (GObject *object, guint prop_id,
        case PROP_READ_ONLY:
                priv->read_only = g_value_get_boolean (value);
                break;
+       case PROP_MASTER:
+               g_free (priv->master);
+               priv->master = g_value_dup_string (value);
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -689,6 +712,9 @@ get_property (GObject *object, guint prop_id,
        case PROP_READ_ONLY:
                g_value_set_boolean (value, nm_setting_connection_get_read_only 
(setting));
                break;
+       case PROP_MASTER:
+               g_value_set_string (value, nm_setting_connection_get_master 
(setting));
+               break;
        default:
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                break;
@@ -876,4 +902,17 @@ nm_setting_connection_class_init (NMSettingConnectionClass 
*setting_class)
                              "cannot yet write updated connections back out.",
                              FALSE,
                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT | 
NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_FUZZY_IGNORE));
+
+       /**
+        * NMSettingConnection:master:
+        *
+        * Name of the master deviec or UUID of the master connection
+        **/
+       g_object_class_install_property
+               (object_class, PROP_MASTER,
+                g_param_spec_string (NM_SETTING_CONNECTION_MASTER,
+                                                 "Master",
+                                                 "Name of the master device or 
UUID of the master connection",
+                                                 NULL,
+                                                 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 1ec5bf1..0768bd6 100644
--- a/libnm-util/nm-setting-connection.h
+++ b/libnm-util/nm-setting-connection.h
@@ -75,6 +75,7 @@ GQuark nm_setting_connection_error_quark (void);
 #define NM_SETTING_CONNECTION_TIMESTAMP   "timestamp"
 #define NM_SETTING_CONNECTION_READ_ONLY   "read-only"
 #define NM_SETTING_CONNECTION_PERMISSIONS "permissions"
+#define NM_SETTING_CONNECTION_MASTER      "master"
 
 /**
  * NMSettingConnection:
@@ -119,6 +120,7 @@ gboolean    nm_setting_connection_add_permission       
(NMSettingConnection *set
                                                         const char *detail);
 void        nm_setting_connection_remove_permission    (NMSettingConnection 
*setting,
                                                         guint32 idx);
+const char *nm_setting_connection_get_master           (NMSettingConnection 
*setting);
 
 G_END_DECLS
 
diff --git a/src/settings/plugins/ifcfg-rh/reader.c 
b/src/settings/plugins/ifcfg-rh/reader.c
index f20b6cc..1b12069 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -139,6 +139,12 @@ make_connection_setting (const char *file,
                      svTrueValue (ifcfg, "ONBOOT", TRUE),
                      NULL);
 
+       value = svGetValue (ifcfg, "MASTER", FALSE);
+       if (value) {
+               g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
+               g_free (value);
+       }
+
        value = svGetValue (ifcfg, "USERS", FALSE);
        if (value) {
                char **items, **iter;
-- 
1.7.6

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

Reply via email to