[PATCH 4/4] vlan: add ifcfg-vlan writer

2011-12-12 Thread Weiping Pan
add write_vlan_setting() and modify test-ifcfg-rh.c to test it.

Signed-off-by: Weiping Pan 
---
 .../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 
 #include 
 #include 
+#include 
 
 #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 
 #include 
 #include 
+#include 
 #include 
 
 #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 

[PATCH 4/4] vlan: add ifcfg-vlan writer

2011-12-11 Thread Weiping Pan
add write_vlan_setting() and modify test-ifcfg-rh.c to test it.

Signed-off-by: Weiping Pan 
---
 .../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 
 #include 
 #include 
+#include 
 
 #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 
 #include 
 #include 
+#include 
 #include 
 
 #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 

[PATCH 4/4] vlan: add ifcfg-vlan writer

2011-12-07 Thread Weiping Pan
add write_vlan_setting() and modify test-ifcfg-rh.c to test it.

Signed-off-by: Weiping Pan 
---
 .../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 
 #include 
 #include 
+#include 
 
 #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 
 #include 
 #include 
+#include 
 #include 
 
 #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