char *end = NULL;
gint vlan_id = -1;
guint32 vlan_flags = 0;
- gint gvrp;
+ gint gvrp, reorder_hdr;
value = svGetValue (ifcfg, "VLAN_ID", FALSE);
if (value) {
g_object_set (s_vlan, NM_SETTING_VLAN_PARENT, parent, NULL);
g_clear_pointer (&parent, g_free);
- if (svGetValueBoolean (ifcfg, "REORDER_HDR", FALSE))
- vlan_flags |= NM_VLAN_FLAG_REORDER_HEADERS;
+ vlan_flags |= NM_VLAN_FLAG_REORDER_HEADERS;
gvrp = svGetValueBoolean (ifcfg, "GVRP", -1);
if (gvrp > 0)
value = svGetValue (ifcfg, "VLAN_FLAGS", FALSE);
if (value) {
- /* Prefer GVRP variable; only take VLAN_FLAG=GVRP when GVRP is not specified */
- if (g_strstr_len (value, -1, "GVRP") && gvrp == -1)
- vlan_flags |= NM_VLAN_FLAG_GVRP;
- if (g_strstr_len (value, -1, "LOOSE_BINDING"))
- vlan_flags |= NM_VLAN_FLAG_LOOSE_BINDING;
+ gs_strfreev char **strv = NULL;
+ char **ptr;
+
+ strv = g_strsplit_set (value, ", ", 0);
+
+ for (ptr = strv; ptr && *ptr; ptr++) {
+ if (nm_streq (*ptr, "GVRP") && gvrp == -1)
+ vlan_flags |= NM_VLAN_FLAG_GVRP;
+ if (nm_streq (*ptr, "LOOSE_BINDING"))
+ vlan_flags |= NM_VLAN_FLAG_LOOSE_BINDING;
+ if (nm_streq (*ptr, "NO_REORDER_HDR"))
+ vlan_flags &= ~NM_VLAN_FLAG_REORDER_HEADERS;
+ }
}
+ reorder_hdr = svGetValueBoolean (ifcfg, "REORDER_HDR", -1);
+ if ( reorder_hdr != -1
+ && reorder_hdr != NM_FLAGS_HAS (vlan_flags, NM_VLAN_FLAG_REORDER_HEADERS))
+ PARSE_WARNING ("REORDER_HDR key is deprecated, use VLAN_FLAGS");
+
if (svGetValueBoolean (ifcfg, "MVRP", FALSE))
vlan_flags |= NM_VLAN_FLAG_MVRP;
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==,
- NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING);
+ NM_VLAN_FLAG_GVRP | NM_VLAN_FLAG_LOOSE_BINDING | NM_VLAN_FLAG_REORDER_HEADERS);
/* Ingress map */
g_assert_cmpint (nm_setting_vlan_get_num_priorities (s_vlan, NM_VLAN_INGRESS_MAP), ==, 2);
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 43);
- /* Ensure that flags are 0 if both REORDER_HDR and VLAN_FLAGS are missing */
- g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 0);
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, NM_VLAN_FLAG_REORDER_HEADERS);
g_object_unref (connection);
}
NMConnection *connection;
NMSettingVlan *s_vlan;
+ g_test_expect_message ("NetworkManager", G_LOG_LEVEL_WARNING,
+ "*REORDER_HDR key is deprecated, use VLAN_FLAGS*");
connection = _connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-reorder-hdr-1",
NULL, TYPE_ETHERNET, NULL);
+ g_test_assert_expected_messages ();
+
+ g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan0.3");
+
+ s_vlan = nm_connection_get_setting_vlan (connection);
+ g_assert (s_vlan);
+
+ g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
+ g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
+ /* Check that REORDER_HDR=0 is ignored */
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, NM_VLAN_FLAG_REORDER_HEADERS);
+
+ g_object_unref (connection);
+}
+
+static void
+test_read_vlan_reorder_hdr_2 (void)
+{
+ NMConnection *connection;
+ NMSettingVlan *s_vlan;
+
+ connection = _connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-vlan-reorder-hdr-2",
+ NULL, TYPE_ETHERNET, NULL);
g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan0.3");
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth0");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 3);
- /* Check correct read of REORDER_HDR=1 */
- g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 1);
+ /* Check that VLAN_FLAGS=NO_REORDER_HDR works */
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, NM_VLAN_FLAG_LOOSE_BINDING);
g_object_unref (connection);
}
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 44);
- /* reorder_hdr and loose_binding */
- g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 5);
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==,
+ NM_VLAN_FLAG_LOOSE_BINDING |
+ NM_VLAN_FLAG_REORDER_HEADERS);
g_object_unref (connection);
}
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "eth9");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 44);
- /* gvrp and loose_binding */
- g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 6);
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==,
+ NM_VLAN_FLAG_GVRP |
+ NM_VLAN_FLAG_LOOSE_BINDING |
+ NM_VLAN_FLAG_REORDER_HEADERS);
g_object_unref (connection);
}
g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "vlan201");
g_assert_cmpstr (nm_setting_vlan_get_parent (s_vlan), ==, "enccw0.0.fb00");
g_assert_cmpint (nm_setting_vlan_get_id (s_vlan), ==, 201);
- g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, 0);
+ g_assert_cmpint (nm_setting_vlan_get_flags (s_vlan), ==, NM_VLAN_FLAG_REORDER_HEADERS);
g_object_unref (connection);
}
g_test_add_func (TPATH "vlan/read/only-device", test_read_vlan_only_device);
g_test_add_func (TPATH "vlan/read/physdev", test_read_vlan_physdev);
g_test_add_func (TPATH "vlan/read/reorder-hdr-1", test_read_vlan_reorder_hdr_1);
+ g_test_add_func (TPATH "vlan/read/reorder-hdr-2", test_read_vlan_reorder_hdr_2);
g_test_add_func (TPATH "wired/read/read-wake-on-lan", test_read_wired_wake_on_lan);
g_test_add_func (TPATH "wired/write/static", test_write_wired_static);
#include "nm-core-internal.h"
#include "nm-utils.h"
#include "nm-core-internal.h"
+#include "NetworkManagerUtils.h"
#include "common.h"
#include "shvar.h"
NMSettingConnection *s_con;
char *tmp;
guint32 vlan_flags = 0;
+ gsize s_buf_len;
+ char s_buf[50], *s_buf_ptr;
s_con = nm_connection_get_setting_connection (connection);
if (!s_con) {
svSetValue (ifcfg, "GVRP", vlan_flags & NM_VLAN_FLAG_GVRP ? "yes" : "no", FALSE);
- svSetValue (ifcfg, "VLAN_FLAGS", NULL, FALSE);
- if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING)
- svSetValue (ifcfg, "VLAN_FLAGS", "LOOSE_BINDING", FALSE);
+ nm_utils_strbuf_init (s_buf, &s_buf_ptr, &s_buf_len);
+
+ if (NM_FLAGS_HAS (vlan_flags, NM_VLAN_FLAG_LOOSE_BINDING))
+ nm_utils_strbuf_append_str (&s_buf_ptr, &s_buf_len, "LOOSE_BINDING");
+ if (!NM_FLAGS_HAS (vlan_flags, NM_VLAN_FLAG_REORDER_HEADERS))
+ nm_utils_strbuf_append (&s_buf_ptr, &s_buf_len, "%sNO_REORDER_HDR", s_buf[0] ? "," : "");
+
+ svSetValue (ifcfg, "VLAN_FLAGS", s_buf, FALSE);
svSetValue (ifcfg, "MVRP", vlan_flags & NM_VLAN_FLAG_MVRP ? "yes" : "no", FALSE);