summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2019-07-09 14:23:58 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2019-11-28 17:56:35 +0100
commit292d3f2b57cd9793485ccb724e417f39a4e946bc (patch)
treef76e470aab12914d686e8a3c1706fea491d00463
parent1bde86396b1c98165460d7c884eb1828310052bf (diff)
ifcfg-rh: add support for DHCP hostname flags
-rw-r--r--libnm-core/nm-setting-ip4-config.c7
-rw-r--r--libnm-core/nm-setting-ip6-config.c7
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c34
-rw-r--r--src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c14
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp9
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c22
6 files changed, 80 insertions, 13 deletions
diff --git a/libnm-core/nm-setting-ip4-config.c b/libnm-core/nm-setting-ip4-config.c
index 5f2a1b5a78..31c822202b 100644
--- a/libnm-core/nm-setting-ip4-config.c
+++ b/libnm-core/nm-setting-ip4-config.c
@@ -775,6 +775,13 @@ nm_setting_ip4_config_class_init (NMSettingIP4ConfigClass *klass)
* ---end---
*/
+ /* ---ifcfg-rh---
+ * property: dhcp-hostname-flags
+ * variable: DHCP_HOSTNAME_FLAGS
+ * description: flags for the DHCP hostname and FQDN properties
+ * example: DHCP_HOSTNAME_FLAGS=5
+ */
+
/**
* NMSettingIP4Config:dhcp-fqdn:
*
diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c
index 7cc9aaf9bb..4cbda8304b 100644
--- a/libnm-core/nm-setting-ip6-config.c
+++ b/libnm-core/nm-setting-ip6-config.c
@@ -658,6 +658,13 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *klass)
*/
/* ---ifcfg-rh---
+ * property: dhcp-hostname-flags
+ * variable: DHCPV6_HOSTNAME_FLAGS
+ * description: flags for the DHCP hostname property
+ * example: DHCPV6_HOSTNAME_FLAGS=5
+ */
+
+ /* ---ifcfg-rh---
* property: never-default
* variable: IPV6_DEFROUTE(+), (and IPV6_DEFAULTGW, IPV6_DEFAULTDEV in /etc/sysconfig/network)
* default: IPV6_DEFROUTE=yes (when no variable specified)
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 5f61d4fb0f..a1d3236e9b 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c
@@ -1579,7 +1579,7 @@ make_ip4_setting (shvarFile *ifcfg,
gboolean has_key;
shvarFile *route_ifcfg;
gboolean never_default;
- gint64 timeout;
+ gint64 i64;
int priority;
const char *const *item;
guint32 route_table;
@@ -1682,6 +1682,14 @@ make_ip4_setting (shvarFile *ifcfg,
NULL);
}
+ i64 = svGetValueInt64 (ifcfg, "DHCP_HOSTNAME_FLAGS", 10, 0, G_MAXUINT32, -1);
+ if (i64 > -1) {
+ g_object_set (s_ip4,
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS,
+ (guint) i64,
+ NULL);
+ }
+
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME, svGetValueBoolean (ifcfg, "DHCP_SEND_HOSTNAME", TRUE),
NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, svGetValueInt64 (ifcfg, "IPV4_DHCP_TIMEOUT", 10, 0, G_MAXINT32, 0),
@@ -1852,14 +1860,14 @@ make_ip4_setting (shvarFile *ifcfg,
}
}
- timeout = svGetValueInt64 (ifcfg, "ACD_TIMEOUT", 10, -1, NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX, -2);
- if (timeout == -2) {
- timeout = svGetValueInt64 (ifcfg, "ARPING_WAIT", 10, -1,
- NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX / 1000, -1);
- if (timeout > 0)
- timeout *= 1000;
+ i64 = svGetValueInt64 (ifcfg, "ACD_TIMEOUT", 10, -1, NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX, -2);
+ if (i64 == -2) {
+ i64 = svGetValueInt64 (ifcfg, "ARPING_WAIT", 10, -1,
+ NM_SETTING_IP_CONFIG_DAD_TIMEOUT_MAX / 1000, -1);
+ if (i64 > 0)
+ i64 *= 1000;
}
- g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DAD_TIMEOUT, (int) timeout, NULL);
+ g_object_set (s_ip4, NM_SETTING_IP_CONFIG_DAD_TIMEOUT, (int) i64, NULL);
return NM_SETTING (g_steal_pointer (&s_ip4));
}
@@ -1993,6 +2001,7 @@ make_ip6_setting (shvarFile *ifcfg,
gs_free const char **list = NULL;
const char *const *iter;
guint32 i;
+ gint64 i64;
int i_val;
GError *local = NULL;
int priority;
@@ -2153,6 +2162,15 @@ make_ip6_setting (shvarFile *ifcfg,
g_object_set (s_ip6, NM_SETTING_IP_CONFIG_DHCP_SEND_HOSTNAME,
svGetValueBoolean (ifcfg, "DHCPV6_SEND_HOSTNAME", TRUE), NULL);
+
+ i64 = svGetValueInt64 (ifcfg, "DHCPV6_HOSTNAME_FLAGS", 10, 0, G_MAXUINT32, -1);
+ if (i64 > -1) {
+ g_object_set (s_ip6,
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS,
+ (guint) i64,
+ NULL);
+ }
+
/* Read static IP addresses.
* Read them even for AUTO and DHCP methods - in this case the addresses are
* added to the automatic ones. Note that this is not currently supported by
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 ea2cef803c..d33845c28c 100644
--- a/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
+++ b/src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c
@@ -2438,6 +2438,7 @@ write_ip4_setting (NMConnection *connection,
GString *searches;
const char *method = NULL;
gboolean has_netmask;
+ NMDhcpHostnameFlags flags;
NM_SET_OUT (out_route_content_svformat, NULL);
NM_SET_OUT (out_route_content, NULL);
@@ -2598,6 +2599,12 @@ write_ip4_setting (NMConnection *connection,
value = nm_setting_ip4_config_get_dhcp_fqdn (NM_SETTING_IP4_CONFIG (s_ip4));
svSetValueStr (ifcfg, "DHCP_FQDN", value);
+ flags = nm_setting_ip_config_get_dhcp_hostname_flags (s_ip4);
+ svSetValueInt64_cond (ifcfg,
+ "DHCP_HOSTNAME_FLAGS",
+ flags != NM_DHCP_HOSTNAME_FLAG_NONE,
+ flags);
+
/* Missing DHCP_SEND_HOSTNAME means TRUE, and we prefer not write it explicitly
* in that case, because it is NM-specific variable
*/
@@ -2744,6 +2751,7 @@ write_ip4_aliases (NMConnection *connection, const char *base_ifcfg_path)
static void
write_ip6_setting_dhcp_hostname (NMSettingIPConfig *s_ip6, shvarFile *ifcfg)
{
+ NMDhcpHostnameFlags flags;
const char *hostname;
hostname = nm_setting_ip_config_get_dhcp_hostname (s_ip6);
@@ -2756,6 +2764,12 @@ write_ip6_setting_dhcp_hostname (NMSettingIPConfig *s_ip6, shvarFile *ifcfg)
svUnsetValue (ifcfg, "DHCPV6_SEND_HOSTNAME");
else
svSetValueStr (ifcfg, "DHCPV6_SEND_HOSTNAME", "no");
+
+ flags = nm_setting_ip_config_get_dhcp_hostname_flags (s_ip6);
+ svSetValueInt64_cond (ifcfg,
+ "DHCPV6_HOSTNAME_FLAGS",
+ flags != NM_DHCP_HOSTNAME_FLAG_NONE,
+ flags);
}
static gboolean
diff --git a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp
index 727d2cebcc..5d36675a41 100644
--- a/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp
+++ b/src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp
@@ -8,7 +8,12 @@ USERCTL=yes
IPV6INIT=no
NM_CONTROLLED=yes
PEERDNS=no
-DHCP_HOSTNAME=foobar
+DHCP_FQDN=foo.bar
+DHCP_HOSTNAME_FLAGS=6
DNS1=4.2.2.1
DNS2=4.2.2.2
-
+IPV6_AUTOCONF=no
+IPV6INIT=yes
+DHCPV6C=yes
+DHCPV6_HOSTNAME_FLAGS=8
+DHCPV6_HOSTNAME=foo.bar
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 d3651978f2..675421d3c8 100644
--- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
+++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c
@@ -887,6 +887,7 @@ test_read_wired_dhcp (void)
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingIPConfig *s_ip4;
+ NMSettingIPConfig *s_ip6;
char *unmanaged = NULL;
char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee };
const char *mac;
@@ -916,11 +917,23 @@ test_read_wired_dhcp (void)
s_ip4 = nm_connection_get_setting_ip4_config (connection);
g_assert (s_ip4);
g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_AUTO);
- g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip4), ==, "foobar");
+ g_assert_cmpstr (nm_setting_ip4_config_get_dhcp_fqdn (NM_SETTING_IP4_CONFIG (s_ip4)), ==, "foo.bar");
g_assert (nm_setting_ip_config_get_ignore_auto_dns (s_ip4));
g_assert_cmpuint (nm_setting_ip_config_get_num_dns (s_ip4), ==, 2);
g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 0), ==, "4.2.2.1");
g_assert_cmpstr (nm_setting_ip_config_get_dns (s_ip4, 1), ==, "4.2.2.2");
+ g_assert_cmpuint (nm_setting_ip_config_get_dhcp_hostname_flags (s_ip4),
+ ==,
+ NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED | NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE);
+
+ /* ===== IPv6 SETTING ===== */
+ s_ip6 = nm_connection_get_setting_ip6_config (connection);
+ g_assert (s_ip6);
+ g_assert_cmpstr (nm_setting_ip_config_get_method (s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DHCP);
+ g_assert_cmpstr (nm_setting_ip_config_get_dhcp_hostname (s_ip6), ==, "foo.bar");
+ g_assert_cmpuint (nm_setting_ip_config_get_dhcp_hostname_flags (s_ip6),
+ ==,
+ NM_DHCP_HOSTNAME_FLAG_FQDN_CLEAR_FLAGS);
g_object_unref (connection);
}
@@ -4457,7 +4470,8 @@ test_write_wired_dhcp (void)
g_object_set (s_ip4,
NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO,
NM_SETTING_IP4_CONFIG_DHCP_CLIENT_ID, "random-client-id-00:22:33",
- NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, "awesome-hostname",
+ NM_SETTING_IP4_CONFIG_DHCP_FQDN, "awesome.hostname",
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS, (guint) NM_DHCP_HOSTNAME_FLAG_FQDN_ENCODED,
NM_SETTING_IP_CONFIG_IGNORE_AUTO_ROUTES, TRUE,
NM_SETTING_IP_CONFIG_IGNORE_AUTO_DNS, TRUE,
NM_SETTING_IP_CONFIG_DHCP_IAID, "2864434397",
@@ -4470,8 +4484,10 @@ test_write_wired_dhcp (void)
nm_connection_add_setting (connection, NM_SETTING (s_ip6));
g_object_set (s_ip6,
- NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_IGNORE,
+ NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_DHCP,
NM_SETTING_IP_CONFIG_MAY_FAIL, TRUE,
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, "awesome.hostname",
+ NM_SETTING_IP_CONFIG_DHCP_HOSTNAME_FLAGS, (guint) NM_DHCP_HOSTNAME_FLAG_FQDN_NO_UPDATE,
NULL);
_writer_new_connection (connection,