[PATCH 4/4] vlan: add ifcfg-vlan writer
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
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
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