From 12cc8d729d318bc2a84f05510d11a21c13bdb73f Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Thu, 23 Mar 2017 16:59:04 +0100 Subject: 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) --- Makefile.am | 1 + .../plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 10 ++++++++++ .../tests/network-scripts/ifcfg-test-bond-eth-type | 7 +++++++ .../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 23 ++++++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bond-eth-type 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 @@ -7526,6 +7526,28 @@ test_read_bond_main (void) g_object_unref (connection); } +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) { @@ -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); -- cgit v1.2.3