summary refs log tree commit diff
path: root/src/initrd/nmi-cmdline-reader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/initrd/nmi-cmdline-reader.c')
-rw-r--r--src/initrd/nmi-cmdline-reader.c44
1 files changed, 38 insertions, 6 deletions
diff --git a/src/initrd/nmi-cmdline-reader.c b/src/initrd/nmi-cmdline-reader.c
index 17f9e1df..be39ef89 100644
--- a/src/initrd/nmi-cmdline-reader.c
+++ b/src/initrd/nmi-cmdline-reader.c
@@ -584,7 +584,6 @@ reader_parse_master (Reader *reader,
 {
 	NMConnection *connection;
 	NMSettingConnection *s_con;
-	NMSettingBond *s_bond;
 	gs_free char *master_to_free = NULL;
 	const char *master;
 	char *slaves;
@@ -603,8 +602,15 @@ reader_parse_master (Reader *reader,
 	s_con = nm_connection_get_setting_connection (connection);
 	master = nm_setting_connection_get_uuid (s_con);
 
-	if (nm_streq (type_name, NM_SETTING_BOND_SETTING_NAME)) {
-		s_bond = (NMSettingBond *)nm_connection_get_setting_by_name (connection, type_name);
+	if (nm_streq (type_name, NM_SETTING_BRIDGE_SETTING_NAME)) {
+		NMSettingBridge *s_bridge = nm_connection_get_setting_bridge (connection);
+
+		/* Avoid the forwarding delay */
+		g_object_set (s_bridge,
+		              NM_SETTING_BRIDGE_STP, FALSE,
+		              NULL);
+	} else if (nm_streq (type_name, NM_SETTING_BOND_SETTING_NAME)) {
+		NMSettingBond *s_bond = nm_connection_get_setting_bond (connection);
 
 		opts = get_word (&argument, ':');
 		while (opts && *opts) {
@@ -867,6 +873,27 @@ reader_add_nameservers (Reader *reader, GPtrArray *nameservers)
 	}
 }
 
+static void
+connection_set_needed (NMConnection *connection)
+{
+	NMSettingConnection *s_con;
+
+	s_con = nm_connection_get_setting_connection (connection);
+	if (!nm_streq0 (nm_setting_connection_get_connection_type (s_con),
+	                NM_SETTING_WIRED_SETTING_NAME))
+		return;
+
+	g_object_set (s_con,
+	              NM_SETTING_CONNECTION_WAIT_DEVICE_TIMEOUT, (int) NMI_WAIT_DEVICE_TIMEOUT_MS,
+	              NULL);
+}
+
+static void
+connection_set_needed_cb (gpointer key, gpointer value, gpointer user_data)
+{
+	connection_set_needed (value);
+}
+
 GHashTable *
 nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv, char **hostname)
 {
@@ -1001,11 +1028,16 @@ nmi_cmdline_reader_parse (const char *sysfs_dir, const char *const*argv, char **
 
 		connection = reader_get_connection (reader, bootdev, NULL, TRUE);
 		reader->bootdev_connection = connection;
+		connection_set_needed (connection);
 	}
 
-	if (neednet && g_hash_table_size (reader->hash) == 0) {
-		/* Make sure there's some connection. */
-		reader_get_default_connection (reader);
+	if (neednet) {
+		if (g_hash_table_size (reader->hash) == 0) {
+			/* Make sure there's some connection. */
+			reader_get_default_connection (reader);
+		}
+
+		g_hash_table_foreach (reader->hash, connection_set_needed_cb, NULL);
 	}
 
 	if (routes)