diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index 42631a91c..058385d4d 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -1434,6 +1434,9 @@ make_ip6_setting (shvarFile *ifcfg, guint32 i; shvarFile *network_ifcfg; gboolean never_default = FALSE, tmp_success; + gboolean ip6_privacy, ip6_privacy_prefer_public_ip; + char *ip6_privacy_str; + NMSettingIP6ConfigPrivacy ip6_privacy_val; s_ip6 = (NMSettingIP6Config *) nm_setting_ip6_config_new (); if (!s_ip6) { @@ -1520,12 +1523,29 @@ 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) { + ip6_privacy = svTrueValue (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_prefer_public_ip = svTrueValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", FALSE); + ip6_privacy_val = ip6_privacy_str ? + (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_object_set (s_ip6, NM_SETTING_IP6_CONFIG_METHOD, method, NM_SETTING_IP6_CONFIG_IGNORE_AUTO_DNS, !svTrueValue (ifcfg, "IPV6_PEERDNS", TRUE), NM_SETTING_IP6_CONFIG_IGNORE_AUTO_ROUTES, !svTrueValue (ifcfg, "IPV6_PEERROUTES", TRUE), NM_SETTING_IP6_CONFIG_NEVER_DEFAULT, never_default, NM_SETTING_IP6_CONFIG_MAY_FAIL, !svTrueValue (ifcfg, "IPV6_FAILURE_FATAL", FALSE), + NM_SETTING_IP6_CONFIG_IP6_PRIVACY, ip6_privacy_val, NULL); /* Don't bother to read IP, DNS and routes when IPv6 is disabled */ diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index 56be08a08..db79e5e30 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -1795,6 +1795,24 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) nm_setting_ip6_config_get_may_fail (s_ip6) ? "no" : "yes", FALSE); + /* IPv6 Privacy Extensions */ + svSetValue (ifcfg, "IPV6_PRIVACY", NULL, FALSE); + svSetValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", NULL, FALSE); + switch (nm_setting_ip6_config_get_ip6_privacy (s_ip6)){ + case NM_SETTING_IP6_CONFIG_PRIVACY_DISABLED: + svSetValue (ifcfg, "IPV6_PRIVACY", "no", FALSE); + break; + case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_PUBLIC_ADDR: + svSetValue (ifcfg, "IPV6_PRIVACY", "rfc3041", FALSE); + svSetValue (ifcfg, "IPV6_PRIVACY_PREFER_PUBLIC_IP", "yes", FALSE); + break; + case NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR: + svSetValue (ifcfg, "IPV6_PRIVACY", "rfc3041", FALSE); + break; + default: + break; + } + /* Static routes go to route6- file */ route6_path = utils_get_route6_path (ifcfg->fileName); if (!route6_path) {