summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2013-03-22 09:13:12 -0500
committerDan Williams <dcbw@redhat.com>2013-03-22 09:13:12 -0500
commit360a02fc13635f3d1ff44129ca9d5a8cf7cea2b9 (patch)
treed9bd4aea209d01afd6656ef7c329f36aa197e6b2
parentc934038b59767791792a0634ab356bba33ed506a (diff)
ifcfg-rh: ensure missing STP property is interpreted as "off" (rh #922702)
The initscripts interpreted it this way, so we do too.
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c12
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am1
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-missing-stp5
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c42
4 files changed, 58 insertions, 2 deletions
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 029c2f4279..7c914c8871 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -3792,6 +3792,7 @@ make_bridge_setting (shvarFile *ifcfg,
char *value;
guint32 u;
gboolean stp = FALSE;
+ gboolean stp_set = FALSE;
s_bridge = NM_SETTING_BRIDGE (nm_setting_bridge_new ());
@@ -3809,13 +3810,20 @@ make_bridge_setting (shvarFile *ifcfg,
if (!strcasecmp (value, "on") || !strcasecmp (value, "yes")) {
g_object_set (s_bridge, NM_SETTING_BRIDGE_STP, TRUE, NULL);
stp = TRUE;
- } else if (!strcasecmp (value, "off") || !strcasecmp (value, "no"))
+ stp_set = TRUE;
+ } else if (!strcasecmp (value, "off") || !strcasecmp (value, "no")) {
g_object_set (s_bridge, NM_SETTING_BRIDGE_STP, FALSE, NULL);
- else
+ stp_set = TRUE;
+ } else
PLUGIN_WARN (IFCFG_PLUGIN_NAME, " warning: invalid STP value '%s'", value);
g_free (value);
}
+ if (!stp_set) {
+ /* Missing or invalid STP property means "no" */
+ g_object_set (s_bridge, NM_SETTING_BRIDGE_STP, FALSE, NULL);
+ }
+
value = svGetValue (ifcfg, "DELAY", FALSE);
if (value) {
if (stp) {
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
index 94d8d8347e..28230d7d99 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/Makefile.am
@@ -81,6 +81,7 @@ EXTRA_DIST = \
ifcfg-test-wired-ctc-static \
ifcfg-test-bridge-main \
ifcfg-test-bridge-component \
+ ifcfg-test-bridge-missing-stp \
ifcfg-test-vlan-interface \
ifcfg-test-vlan-only-vlanid \
ifcfg-test-vlan-only-device \
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-missing-stp b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-missing-stp
new file mode 100644
index 0000000000..7135cd4259
--- /dev/null
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-bridge-missing-stp
@@ -0,0 +1,5 @@
+DEVICE=br0
+ONBOOT=no
+TYPE=Bridge
+BOOTPROTO=dhcp
+
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 31207e50af..6c3bd05f54 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -11853,6 +11853,46 @@ test_write_bridge_component (void)
g_object_unref (reread);
}
+static void
+test_read_bridge_missing_stp (void)
+{
+ NMConnection *connection;
+ NMSettingBridge *s_bridge;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+
+ connection = connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-bridge-missing-stp",
+ NULL,
+ TYPE_BRIDGE,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ g_assert (connection);
+ g_assert (nm_connection_verify (connection, &error));
+ g_assert_no_error (error);
+
+ /* ===== Bridging SETTING ===== */
+
+ s_bridge = nm_connection_get_setting_bridge (connection);
+ g_assert (s_bridge);
+ g_assert_cmpstr (nm_setting_bridge_get_interface_name (s_bridge), ==, "br0");
+ g_assert_cmpuint (nm_setting_bridge_get_stp (s_bridge), ==, FALSE);
+
+ g_free (unmanaged);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+ g_object_unref (connection);
+}
+
#define TEST_IFCFG_VLAN_INTERFACE TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-interface"
static void
@@ -13107,10 +13147,12 @@ int main (int argc, char **argv)
test_write_bond_slave ();
test_write_bond_slave_ib ();
+ /* bridging */
test_read_bridge_main ();
test_write_bridge_main ();
test_read_bridge_component ();
test_write_bridge_component ();
+ test_read_bridge_missing_stp ();
/* Stuff we expect to fail for now */
test_write_wired_pppoe ();