From be320e2be7a6bb8837abbe3a07981a261b1656c6 Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Fri, 27 Oct 2017 22:00:24 +0200 Subject: [PATCH] ifcfg-rh: set team and bond master for any connection type Now the plugin can only recognize team or bond slaves of type ethernet, vlan or infiniband. Instead, check the presence of a team or bond master for all types of connection to allow arbitrary stacking of interfaces. --- .../plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c index 3fe8d64c03..826449dfae 100644 --- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c +++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c @@ -95,12 +95,20 @@ check_if_bond_slave (shvarFile *ifcfg, { gs_free char *value = NULL; const char *v; + const char *master; v = svGetValueStr (ifcfg, "MASTER_UUID", &value); if (!v) v = svGetValueStr (ifcfg, "MASTER", &value); if (v) { + master = nm_setting_connection_get_master (s_con); + if (master) { + PARSE_WARNING ("Already configured as slave of %s. Ignoring MASTER{_UUID}=\"%s\"", + master, v); + return; + } + g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, v, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME, @@ -112,35 +120,31 @@ check_if_bond_slave (shvarFile *ifcfg, */ } -static gboolean +static void check_if_team_slave (shvarFile *ifcfg, NMSettingConnection *s_con) { gs_free char *value = NULL; const char *v; + const char *master; v = svGetValueStr (ifcfg, "TEAM_MASTER_UUID", &value); if (!v) v = svGetValueStr (ifcfg, "TEAM_MASTER", &value); if (!v) - return FALSE; + return; + + master = nm_setting_connection_get_master (s_con); + if (master) { + PARSE_WARNING ("Already configured as slave of %s. Ignoring TEAM_MASTER{_UUID}=\"%s\"", + master, v); + return; + } g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, v, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, NULL); - return TRUE; -} - -static void -check_if_slave (shvarFile *ifcfg, - NMSettingConnection *s_con) -{ - g_return_if_fail (NM_IS_SETTING_CONNECTION (s_con)); - - if (check_if_team_slave (ifcfg, s_con)) - return; - check_if_bond_slave (ifcfg, s_con); } static char * @@ -297,6 +301,9 @@ make_connection_setting (const char *file, } } + check_if_bond_slave (ifcfg, s_con); + check_if_team_slave (ifcfg, s_con); + nm_clear_g_free (&value); v = svGetValueStr (ifcfg, "GATEWAY_PING_TIMEOUT", &value); if (v) { @@ -4220,7 +4227,6 @@ wired_connection_from_ifcfg (const char *file, g_object_unref (connection); return NULL; } - check_if_slave (ifcfg, (NMSettingConnection *) con_setting); nm_connection_add_setting (connection, con_setting); wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error); @@ -4370,7 +4376,6 @@ infiniband_connection_from_ifcfg (const char *file, g_object_unref (connection); return NULL; } - check_if_slave (ifcfg, (NMSettingConnection *) con_setting); nm_connection_add_setting (connection, con_setting); infiniband_setting = make_infiniband_setting (ifcfg, file, error); @@ -5060,7 +5065,6 @@ vlan_connection_from_ifcfg (const char *file, g_object_unref (connection); return NULL; } - check_if_slave (ifcfg, (NMSettingConnection *) con_setting); nm_connection_add_setting (connection, con_setting); vlan_setting = make_vlan_setting (ifcfg, file, error);