[PATCH 4/4] vlan: add ifcfg-vlan writer
- From: Weiping Pan <wpan redhat com>
- To: networkmanager-list gnome org
- Cc: tgraf redhat com
- Subject: [PATCH 4/4] vlan: add ifcfg-vlan writer
- Date: Sun, 11 Dec 2011 21:21:46 -0500
add write_vlan_setting() and modify test-ifcfg-rh.c to test it.
Signed-off-by: Weiping Pan <wpan redhat com>
---
.../plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 38 +++++++++
src/settings/plugins/ifcfg-rh/writer.c | 84 ++++++++++++++++++++
2 files changed, 122 insertions(+), 0 deletions(-)
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 d36a01a..186a206 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -43,6 +43,7 @@
#include <nm-setting-gsm.h>
#include <nm-setting-cdma.h>
#include <nm-setting-serial.h>
+#include <nm-setting-vlan.h>
#include "nm-test-helpers.h"
@@ -11775,6 +11776,42 @@ test_read_vlan_interface (void)
g_free (route6file);
}
+static void
+test_write_vlan (void)
+{
+ NMConnection *connection;
+ char *unmanaged = NULL;
+ char *keyfile = NULL;
+ char *routefile = NULL;
+ char *route6file = NULL;
+ gboolean ignore_error = FALSE;
+ GError *error = NULL;
+ gboolean success = FALSE;
+
+ connection = connection_from_file (TEST_IFCFG_VLAN_INTERFACE,
+ NULL,
+ TYPE_VLAN,
+ NULL,
+ &unmanaged,
+ &keyfile,
+ &routefile,
+ &route6file,
+ &error,
+ &ignore_error);
+ g_assert (connection != NULL);
+
+ success = writer_new_connection (connection,
+ TEST_SCRATCH_DIR "/network-scripts/",
+ NULL,
+ &error);
+ g_assert (success);
+
+ g_free (unmanaged);
+ g_free (keyfile);
+ g_free (routefile);
+ g_free (route6file);
+}
+
#define TEST_IFCFG_WIFI_OPEN_SSID_BAD_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-bad-hex"
#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_QUOTED TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-quoted"
#define TEST_IFCFG_WIFI_OPEN_SSID_LONG_HEX TEST_IFCFG_DIR"/network-scripts/ifcfg-test-wifi-open-ssid-long-hex"
@@ -11939,6 +11976,7 @@ int main (int argc, char **argv)
test_read_bridge_main ();
test_read_bridge_component ();
test_read_vlan_interface ();
+ test_write_vlan ();
base = g_path_get_basename (argv[0]);
fprintf (stdout, "%s: SUCCESS\n", base);
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index 968d61e..3fa2dcd 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -36,6 +36,7 @@
#include <nm-setting-ip4-config.h>
#include <nm-setting-ip6-config.h>
#include <nm-setting-pppoe.h>
+#include <nm-setting-vlan.h>
#include <nm-utils.h>
#include "common.h"
@@ -1064,6 +1065,86 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
return TRUE;
}
+static GString *vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap map)
+{
+ GSList *strlist = NULL, *iter;
+ GString *value = NULL;
+
+ if (map == NM_VLAN_INGRESS_MAP)
+ g_object_get (G_OBJECT (s_vlan), NM_SETTING_VLAN_INGRESS_PRIORITY_MAP, &strlist, NULL);
+ else if (map == NM_VLAN_EGRESS_MAP)
+ g_object_get (G_OBJECT (s_vlan), NM_SETTING_VLAN_EGRESS_PRIORITY_MAP, &strlist, NULL);
+ else
+ return NULL;
+
+ value = g_string_new ("");
+ for (iter = strlist; iter; iter = g_slist_next (iter))
+ g_string_append_printf (value, "%s%s", value->len ? "," : "", (const char *) iter->data);
+
+ nm_utils_slist_free (strlist, g_free);
+
+ return value;
+}
+
+static gboolean
+write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
+{
+ NMSettingVlan *s_vlan;
+ const char *interface_name = NULL;
+ const char *vlan_slave = NULL;
+ guint32 vlan_flags = 0;
+ GString *text = NULL;
+
+ s_vlan = (NMSettingVlan *) nm_connection_get_setting (connection, NM_TYPE_SETTING_VLAN);
+ if (!s_vlan) {
+ g_set_error (error, IFCFG_PLUGIN_ERROR, 0,
+ "Missing '%s' setting", NM_SETTING_VLAN_SETTING_NAME);
+ return FALSE;
+ }
+
+ svSetValue (ifcfg, "VLAN", "yes", FALSE);
+ svSetValue (ifcfg, "TYPE", TYPE_VLAN, FALSE);
+
+ interface_name = nm_setting_vlan_get_interface_name (s_vlan);
+ if (!interface_name)
+ return FALSE;
+ svSetValue (ifcfg, "DEVICE", interface_name, FALSE);
+
+ vlan_slave = nm_setting_vlan_get_slave (s_vlan);
+ if (!vlan_slave)
+ return FALSE;
+ svSetValue (ifcfg, "PHYSDEV", vlan_slave, FALSE);
+
+ vlan_flags = nm_setting_vlan_get_flags (s_vlan);
+ if (vlan_flags & NM_VLAN_FLAG_REORDER_HDR)
+ svSetValue (ifcfg, "REORDER_HDR", "1", FALSE);
+ else
+ svSetValue (ifcfg, "REORDER_HDR", "0", FALSE);
+
+ if (vlan_flags & NM_VLAN_FLAG_GVRP)
+ if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING)
+ svSetValue (ifcfg, "VLAN_FLAGS", "GVRP,LOOSE_BINDING", FALSE);
+ else
+ svSetValue (ifcfg, "VLAN_FLAGS", "GVRP", FALSE);
+ else
+ if (vlan_flags & NM_VLAN_FLAG_LOOSE_BINDING)
+ svSetValue (ifcfg, "VLAN_FLAGS", "LOOSE_BINDING", FALSE);
+
+ text = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_INGRESS_MAP);
+ if (text != NULL)
+ svSetValue (ifcfg, "VLAN_INGRESS_PRIORITY_MAP", text->str, FALSE);
+ g_string_free (text, TRUE);
+ text = NULL;
+
+ text = vlan_priority_maplist_to_stringlist (s_vlan, NM_VLAN_EGRESS_MAP);
+ if (text != NULL)
+ svSetValue (ifcfg, "VLAN_EGRESS_PRIORITY_MAP", text->str, FALSE);
+ g_string_free (text, TRUE);
+ text = NULL;
+
+ return TRUE;
+}
+
static void
write_connection_setting (NMSettingConnection *s_con, shvarFile *ifcfg)
{
@@ -1771,6 +1852,9 @@ write_connection (NMConnection *connection,
if (!write_wired_setting (connection, ifcfg, error))
goto out;
wired = TRUE;
+ } else if (!strcmp (type, NM_SETTING_VLAN_SETTING_NAME)) {
+ if (!write_vlan_setting (connection, ifcfg, error))
+ goto out;
} else if (!strcmp (type, NM_SETTING_WIRELESS_SETTING_NAME)) {
if (!write_wireless_setting (connection, ifcfg, &no_8021x, error))
goto out;
--
1.7.4.4
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]