summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Giudici <fgiudici@redhat.com>2016-12-05 16:07:10 +0100
committerFrancesco Giudici <fgiudici@redhat.com>2016-12-12 12:41:13 +0100
commit003164540a48f7a0af08cb07243fef0280dce4ea (patch)
tree2d84ee2808f38075a7935e5e3a09060d9b6cc0d4
parentc5fe886a36e67a270ca063675f7330b21a5689e5 (diff)
downloadNetworkManager-003164540a48f7a0af08cb07243fef0280dce4ea.tar.gz
ifcfg-rh: add DHCPV6_HOSTNAME and DHCPV6_SEND_HOSTNAME vars
Currently ipv4 and ipv6 settings share the ifcfg plugin vars for the dhcp-hostname and dhcp-send-hostname options (DHCP_HOSTNAME and DHCP_SEND_HOSTNAME). Add brand new vars DHCPV6_HOSTNAME and DHCPV6_SEND_HOSTNAME to have var-property one to one mappings.
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c13
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c26
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c2
3 files changed, 34 insertions, 7 deletions
diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
index 843bad1c62..5ddd8db0fe 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -1511,10 +1511,19 @@ make_ip6_setting (shvarFile *ifcfg,
if ( !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO)
|| !strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
/* METHOD_AUTO may trigger DHCPv6, so save the hostname to send to DHCP */
- value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
- if (value && value[0])
+ value = svGetValueString (ifcfg, "DHCPV6_HOSTNAME");
+ if (!value) {
+ /* Use DHCP_HOSTNAME as fallback if it is a FQDN to support old ifcfg files */
+ value = svGetValueString (ifcfg, "DHCP_HOSTNAME");
+ if (value && !strchr (value, '.'))
+ g_clear_pointer (&value, g_free);
+ }
+ if (value)
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, value, NULL);
g_free (value);
+
+ g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME,
+ svGetValueBoolean (ifcfg, "DHCPV6_SEND_HOSTNAME", TRUE), NULL);
}
/* Read static IP addresses.
diff --git a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
index 22454fb347..de19ee1fcc 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -2446,6 +2446,23 @@ error:
return success;
}
+static void
+write_ip6_setting_dhcp_hostname (NMSettingIPConfig *s_ip6, shvarFile *ifcfg)
+{
+ const char *hostname;
+
+ hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
+ svSetValueString (ifcfg, "DHCPV6_HOSTNAME", hostname);
+
+ /* Missing DHCPV6_SEND_HOSTNAME means TRUE, and we prefer not write it
+ * explicitly in that case, because it is NM-specific variable
+ */
+ if (nm_setting_ip_config_get_dhcp_send_hostname (s_ip6))
+ svUnsetValue (ifcfg, "DHCPV6_SEND_HOSTNAME");
+ else
+ svSetValueString (ifcfg, "DHCPV6_SEND_HOSTNAME", "no");
+}
+
static gboolean
write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
{
@@ -2473,6 +2490,8 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svUnsetValue (ifcfg, "IPV6INIT");
svUnsetValue (ifcfg, "IPV6_AUTOCONF");
svUnsetValue (ifcfg, "DHCPV6C");
+ svUnsetValue (ifcfg, "DHCPV6_HOSTNAME");
+ svUnsetValue (ifcfg, "DHCPV6_SEND_HOSTNAME");
svUnsetValue (ifcfg, "IPV6_DEFROUTE");
svUnsetValue (ifcfg, "IPV6_PEERDNS");
svUnsetValue (ifcfg, "IPV6_PEERROUTES");
@@ -2492,14 +2511,12 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
svSetValueString (ifcfg, "IPV6INIT", "yes");
svSetValueString (ifcfg, "IPV6_AUTOCONF", "yes");
svUnsetValue (ifcfg, "DHCPV6C");
+ write_ip6_setting_dhcp_hostname (s_ip6, ifcfg);
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) {
- const char *hostname;
svSetValueString (ifcfg, "IPV6INIT", "yes");
svSetValueString (ifcfg, "IPV6_AUTOCONF", "no");
svSetValueString (ifcfg, "DHCPV6C", "yes");
- hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
- if (hostname)
- svSetValueString (ifcfg, "DHCP_HOSTNAME", hostname);
+ write_ip6_setting_dhcp_hostname (s_ip6, ifcfg);
} else if (!strcmp (value, NM_SETTING_IP6_CONFIG_METHOD_MANUAL)) {
svSetValueString (ifcfg, "IPV6INIT", "yes");
svSetValueString (ifcfg, "IPV6_AUTOCONF", "no");
@@ -2570,6 +2587,7 @@ write_ip6_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
g_free (ip4_domains);
}
+
/* handle IPV6_DEFROUTE */
/* IPV6_DEFROUTE has the opposite meaning from 'never-default' */
if (nm_setting_ip_config_get_never_default(s_ip6))
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 a35a830b86..9a9d48d3e9 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -3891,7 +3891,7 @@ test_read_write_wired_dhcp_send_hostname (void)
g_assert (s_ip6);
g_assert (nm_setting_ip_config_get_dhcp_send_hostname (s_ip4) == TRUE);
g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip4), ==, "svata-pulec");
- g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip6), ==, "svata-pulec");
+ g_assert_null (nm_setting_ip_config_get_dhcp_hostname (s_ip6));
/* Set dhcp-send-hostname=false dhcp-hostname="kamil-patka" and write the connection. */
g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, FALSE, NULL);