summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-10-26 18:00:03 +0100
committerLubomir Rintel <lkundrak@v3.sk>2015-11-02 20:27:00 +0100
commitf70c8f3d29afccb526ba890ab9778636166f4b63 (patch)
treed4100ab4fcf81ff0e1b8c8d2efa5222eff6609de
parent60811b4809e8cddd4ff3808d7d0c803c11801113 (diff)
downloadNetworkManager-f70c8f3d29afccb526ba890ab9778636166f4b63.tar.gz
keyfile: add support for addr-gen-mode property
-rw-r--r--libnm-core/nm-keyfile-reader.c25
-rw-r--r--libnm-core/nm-keyfile-writer.c21
2 files changed, 46 insertions, 0 deletions
diff --git a/libnm-core/nm-keyfile-reader.c b/libnm-core/nm-keyfile-reader.c
index c639fc27bc..d38d37232b 100644
--- a/libnm-core/nm-keyfile-reader.c
+++ b/libnm-core/nm-keyfile-reader.c
@@ -560,6 +560,27 @@ ip6_dns_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key)
}
static void
+ip6_addr_gen_mode_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key)
+{
+ NMSettingIP6ConfigAddrGenMode addr_gen_mode = NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64;
+ const char *setting_name = nm_setting_get_name (setting);
+ char *s;
+
+ s = nm_keyfile_plugin_kf_get_string (info->keyfile, setting_name, key, NULL);
+ if (s) {
+ if (!nm_utils_enum_from_str (nm_setting_ip6_config_addr_gen_mode_get_type (), s,
+ (int *) &addr_gen_mode, NULL)) {
+ handle_warn (info, key, NM_KEYFILE_WARN_SEVERITY_WARN,
+ _("invalid option '%s', use one of [%s]"),
+ s, "eui64,stable-privacy");
+ }
+ g_free (s);
+ }
+
+ g_object_set (G_OBJECT (setting), key, (gint) addr_gen_mode, NULL);
+}
+
+static void
mac_address_parser (KeyfileReaderInfo *info, NMSetting *setting, const char *key, gsize enforce_length)
{
const char *setting_name = nm_setting_get_name (setting);
@@ -1177,6 +1198,10 @@ static KeyParser key_parsers[] = {
NM_SETTING_IP_CONFIG_DNS,
FALSE,
ip6_dns_parser },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+ FALSE,
+ ip6_addr_gen_mode_parser },
{ NM_SETTING_WIRED_SETTING_NAME,
NM_SETTING_WIRED_MAC_ADDRESS,
TRUE,
diff --git a/libnm-core/nm-keyfile-writer.c b/libnm-core/nm-keyfile-writer.c
index ccf516ea12..c62138b484 100644
--- a/libnm-core/nm-keyfile-writer.c
+++ b/libnm-core/nm-keyfile-writer.c
@@ -103,6 +103,24 @@ dns_writer (KeyfileWriterInfo *info,
}
static void
+ip6_addr_gen_mode_writer (KeyfileWriterInfo *info,
+ NMSetting *setting,
+ const char *key,
+ const GValue *value)
+{
+ NMSettingIP6ConfigAddrGenMode addr_gen_mode;
+ const char *str;
+
+ addr_gen_mode = (NMSettingIP6ConfigAddrGenMode) g_value_get_int (value);
+ str = nm_utils_enum_to_str (nm_setting_ip6_config_addr_gen_mode_get_type (),
+ addr_gen_mode);
+ nm_keyfile_plugin_kf_set_string (info->keyfile,
+ nm_setting_get_name (setting),
+ key,
+ str);
+}
+
+static void
write_ip_values (GKeyFile *file,
const char *setting_name,
GPtrArray *array,
@@ -557,6 +575,9 @@ static KeyWriter key_writers[] = {
{ NM_SETTING_IP6_CONFIG_SETTING_NAME,
NM_SETTING_IP_CONFIG_DNS,
dns_writer },
+ { NM_SETTING_IP6_CONFIG_SETTING_NAME,
+ NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE,
+ ip6_addr_gen_mode_writer },
{ NM_SETTING_WIRELESS_SETTING_NAME,
NM_SETTING_WIRELESS_SSID,
ssid_writer },