[PATCH 4/4] bridge: ifcfg-rh: Parse BRIDGE= line and assign to master



Extends the ifcfg-rh reader plugin to parse BRIDGE= directives and
assign such interfaces to the respective briding master using the
NM_SETTING_CONNECTION_MASTER property.

If the connection is already assigned to a different master, the
connection is aborted.

Signed-off-by: Thomas Graf <tgraf redhat com>
---
 src/settings/plugins/ifcfg-rh/reader.c |   31 +++++++++++++++++++++++--------
 1 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index e649be3..d75fbbd 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -150,6 +150,25 @@ make_connection_setting (const char *file,
 		g_free (value);
 	}
 
+	value = svGetValue (ifcfg, "BRIDGE", FALSE);
+	if (value) {
+		const char *master;
+
+		/* Can't be a bridge slave if it's already enslaved to another master */
+		if ((master = nm_setting_connection_get_master (s_con))) {
+			PLUGIN_WARN (IFCFG_PLUGIN_NAME,
+			             "     warning: Already configured as slave of %s. "
+			             "Ignoring BRIDGE=\"%s\"", master, value);
+			g_free (value);
+			goto error;
+		}
+
+		g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
+		g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE,
+		              NM_SETTING_BRIDGE_SETTING_NAME, NULL);
+		g_free (value);
+	}
+
 	value = svGetValue (ifcfg, "USERS", FALSE);
 	if (value) {
 		char **items, **iter;
@@ -175,6 +194,10 @@ make_connection_setting (const char *file,
 	g_free (zone);
 
 	return NM_SETTING (s_con);
+
+error:
+	g_object_unref (s_con);
+	return NULL;
 }
 
 static gboolean
@@ -3974,14 +3997,6 @@ connection_from_file (const char *filename,
 		goto done;
 	}
 
-	/* Ignore BRIDGE= and VLAN= connections for now too (rh #619863) */
-	tmp = svGetValue (parsed, "BRIDGE", FALSE);
-	if (tmp) {
-		g_free (tmp);
-		nm_controlled = FALSE;
-		ignore_reason = IGNORE_REASON_BRIDGE;
-	}
-
 	if (nm_controlled) {
 		tmp = svGetValue (parsed, "VLAN", FALSE);
 		if (tmp) {
-- 
1.7.7.6



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]