summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-09-08 20:38:41 +0200
committerLubomir Rintel <lkundrak@v3.sk>2015-11-02 20:27:00 +0100
commit60d25042911f0554e196f78210ff05a9cde2adc9 (patch)
tree27742ab8bcb2fe6983cd15ce0d77284afa223b6d
parentf70c8f3d29afccb526ba890ab9778636166f4b63 (diff)
downloadNetworkManager-60d25042911f0554e196f78210ff05a9cde2adc9.tar.gz
ifcfg-rh: add support for addr-gen-mode property
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c26
-rw-r--r--src/settings/plugins/ifcfg-rh/writer.c11
2 files changed, 30 insertions, 7 deletions
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 60d0bcee3c..518b90a897 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -1317,8 +1317,9 @@ make_ip6_setting (shvarFile *ifcfg,
shvarFile *network_ifcfg;
gboolean never_default = FALSE;
gboolean ip6_privacy = FALSE, ip6_privacy_prefer_public_ip;
- char *ip6_privacy_str;
NMSettingIP6ConfigPrivacy ip6_privacy_val;
+ NMSettingIP6ConfigAddrGenMode addr_gen_mode;
+ char *tmp;
s_ip6 = (NMSettingIPConfig *) nm_setting_ip6_config_new ();
@@ -1402,20 +1403,20 @@ make_ip6_setting (shvarFile *ifcfg,
/* TODO - handle other methods */
/* Read IPv6 Privacy Extensions configuration */
- ip6_privacy_str = svGetValue (ifcfg, "IPV6_PRIVACY", FALSE);
- if (ip6_privacy_str) {
+ tmp = svGetValue (ifcfg, "IPV6_PRIVACY", FALSE);
+ if (tmp) {
ip6_privacy = svGetValueBoolean (ifcfg, "IPV6_PRIVACY", FALSE);
if (!ip6_privacy)
- ip6_privacy = g_strcmp0 (ip6_privacy_str, "rfc4941") == 0 ||
- g_strcmp0 (ip6_privacy_str, "rfc3041") == 0;
+ ip6_privacy = g_strcmp0 (tmp, "rfc4941") == 0 ||
+ g_strcmp0 (tmp, "rfc3041") == 0;
}
ip6_privacy_prefer_public_ip = svGetValueBoolean (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", FALSE);
- ip6_privacy_val = ip6_privacy_str ?
+ ip6_privacy_val = tmp ?
(ip6_privacy ?
(ip6_privacy_prefer_public_ip ? NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR : NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR) :
NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED) :
NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN;
- g_free (ip6_privacy_str);
+ g_free (tmp);
g_object_set (s_ip6,
NM_SETTING_IP_CONFIG_METHOD, method,
@@ -1499,6 +1500,17 @@ make_ip6_setting (shvarFile *ifcfg,
}
}
+ /* IPv6 addressing mode configuration */
+ tmp = svGetValue (ifcfg, "IPV6_ADDR_GEN_MODE", FALSE);
+ if (tmp) {
+ if (nm_utils_enum_from_str (nm_setting_ip6_config_addr_gen_mode_get_type (), tmp,
+ (int *) &addr_gen_mode, NULL))
+ g_object_set (s_ip6, NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE, addr_gen_mode, NULL);
+ else
+ PARSE_WARNING ("Invalid IPV6_ADDR_GEN_MODE");
+ g_free (tmp);
+ }
+
/* DNS servers
* Pick up just IPv6 addresses (IPv4 addresses are taken by make_ip4_setting())
*/
diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c
index b2d1419123..ca45721934 100644
--- a/src/settings/plugins/ifcfg-rh/writer.c
+++ b/src/settings/plugins/ifcfg-rh/writer.c
@@ -2391,6 +2391,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
gint64 route_metric;
GString *ip_str1, *ip_str2, *ip_ptr;
char *route6_path;
+ NMSettingIP6ConfigAddrGenMode addr_gen_mode;
s_ip6 = nm_connection_get_setting_ip6_config (connection);
if (!s_ip6) {
@@ -2403,6 +2404,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValue (ifcfg, "IPV6_PEERROUTES", "yes", FALSE);
svSetValue (ifcfg, "IPV6_FAILURE_FATAL", "no", FALSE);
svSetValue (ifcfg, "IPV6_ROUTE_METRIC", NULL, FALSE);
+ svSetValue (ifcfg, "IPV6_ADDR_GEN_MODE", "stable-privacy", FALSE);
return TRUE;
}
@@ -2540,6 +2542,15 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
break;
}
+ /* IPv6 Address generation mode */
+ addr_gen_mode = nm_setting_ip6_config_get_addr_gen_mode (NM_SETTING_IP6_CONFIG (s_ip6));
+ if (addr_gen_mode != NM_SETTING_IP6_CONFIG_ADDR_GEN_MODE_EUI64) {
+ tmp = nm_utils_enum_to_str (nm_setting_ip6_config_addr_gen_mode_get_type (),
+ addr_gen_mode);
+ svSetValue (ifcfg, "IPV6_ADDR_GEN_MODE", tmp, FALSE);
+ g_free (tmp);
+ }
+
/* Static routes go to route6-<dev> file */
route6_path = utils_get_route6_path (ifcfg->fileName);
if (!route6_path) {