diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2019-07-09 14:23:58 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2019-11-28 17:56:35 +0100 |
commit | 292d3f2b57cd9793485ccb724e417f39a4e946bc (patch) | |
tree | f76e470aab12914d686e8a3c1706fea491d00463 | |
parent | 1bde86396b1c98165460d7c884eb1828310052bf (diff) |
ifcfg-rh: add support for DHCP hostname flags
-rw-r--r-- | libnm-core/nm-setting-ip4-config.c | 7 | ||||
-rw-r--r-- | libnm-core/nm-setting-ip6-config.c | 7 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-reader.c | 34 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/nms-ifcfg-rh-writer.c | 14 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-dhcp | 9 | ||||
-rw-r--r-- | src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c | 22 |
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, |