summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2017-03-23 16:59:04 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2017-03-29 09:48:47 +0200
commit12cc8d729d318bc2a84f05510d11a21c13bdb73f (patch)
tree1c008463c560d736d97d1bde76f7da4dfe696450
parentc26229f91bd93aeec8d1917f89cd2e1314a79040 (diff)
ifcfg-rh: also check BONDING_OPTS to determine the connection type
Connections with "TYPE=Ethernet" and "BONDING_OPTS=..." are regarded by initscripts as bond masters. To maintain the best compatibility, do the same. https://bugzilla.redhat.com/show_bug.cgi?id=1434555 (cherry picked from commit e044071825f2b166a2a7dc16bb2d62b6c68d867a)
-rw-r--r--Makefile.am1
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c10
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type7
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c23
4 files changed, 41 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index f254109bc4..f41ad7d078 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2052,6 +2052,7 @@ EXTRA_DIST += \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wifi-dynamic-wep-leap \
src/settings/plugins/ifcfg-rh/tests/network-scripts/keys-test-wifi-dynamic-wep-leap \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-infiniband \
+ src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-main \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-slave \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-slave-ib \
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 b6d7303845..ee96feea89 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -5352,6 +5352,16 @@ connection_from_file_full (const char *filename,
}
}
+ if (nm_streq0 (type, TYPE_ETHERNET)) {
+ gs_free char *bond_options = NULL;
+
+ if (svGetValueStr (parsed, "BONDING_OPTS", &bond_options)) {
+ /* initscripts consider these as bond masters */
+ g_free (type);
+ type = g_strdup (TYPE_BOND);
+ }
+ }
+
if (svGetValueBoolean (parsed, "BONDING_MASTER", FALSE) &&
strcasecmp (type, TYPE_BOND)) {
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type
new file mode 100644
index 0000000000..8d295c76d6
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type
@@ -0,0 +1,7 @@
+DEVICE=bond0
+NM_CONTROLLED=yes
+TYPE=Ethernet
+BONDING_OPTS="miimon=213 mode=4 lacp_rate=1"
+BONDING_MASTER=yes
+ONBOOT=yes
+BOOTPROTO=none
diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
index d66a4885f3..cd32b06c80 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -7527,6 +7527,28 @@ test_read_bond_main (void)
}
static void
+test_read_bond_eth_type (void)
+{
+ NMConnection *connection;
+ NMSettingBond *s_bond;
+
+ connection = _connection_from_file (TEST_IFCFG_DIR "/network-scripts/ifcfg-test-bond-eth-type",
+ NULL, TYPE_ETHERNET,NULL);
+
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "bond0");
+
+ /* ===== Bonding SETTING ===== */
+
+ s_bond = nm_connection_get_setting_bond (connection);
+ g_assert (s_bond);
+
+ g_assert_cmpstr (nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_MIIMON), ==, "213");
+ g_assert_cmpstr (nm_setting_bond_get_option_by_name (s_bond, NM_SETTING_BOND_OPTION_LACP_RATE), ==, "1");
+
+ g_object_unref (connection);
+}
+
+static void
test_write_bond_main (void)
{
nmtst_auto_unlinkfile char *testfile = NULL;
@@ -9328,6 +9350,7 @@ int main (int argc, char **argv)
g_test_add_data_func (TPATH "fcoe/write-vn2vn", (gpointer) NM_SETTING_DCB_FCOE_MODE_VN2VN, test_write_fcoe_mode);
g_test_add_func (TPATH "bond/read-master", test_read_bond_main);
+ g_test_add_func (TPATH "bond/read-master-eth-type", test_read_bond_eth_type);
g_test_add_func (TPATH "bond/read-slave", test_read_bond_slave);
g_test_add_func (TPATH "bond/read-slave-ib", test_read_bond_slave_ib);
g_test_add_func (TPATH "bond/write-master", test_write_bond_main);