diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2017-03-23 16:59:04 +0100 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2017-03-29 09:48:47 +0200 |
commit | 12cc8d729d318bc2a84f05510d11a21c13bdb73f (patch) | |
tree | 1c008463c560d736d97d1bde76f7da4dfe696450 | |
parent | c26229f91bd93aeec8d1917f89cd2e1314a79040 (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.am | 1 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 10 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type | 7 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 23 |
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); |