diff options
author | Jan Vaclav <jvaclav@redhat.com> | 2023-07-13 10:18:33 +0200 |
---|---|---|
committer | Jan Vaclav <jvaclav@redhat.com> | 2023-07-24 11:17:27 +0200 |
commit | c779c22fcb398ba5e05bed9f2116765ec5624bfd (patch) | |
tree | 10005951603d370ff9e29b42e832736c2d2f312f | |
parent | 13d4d4c35c7fd8b8f6c058f04db62509570db400 (diff) |
initrd: unset dhcp options for static profiles
Makes it so that DHCP properties (`dhcp-timeout`, `dhcp-hostname`) are unset when they are deemed unnecessary.
Unit tests have also been updated to account for this change.
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/1276
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1695
-rw-r--r-- | src/nm-initrd-generator/nmi-cmdline-reader.c | 34 | ||||
-rw-r--r-- | src/nm-initrd-generator/tests/test-cmdline-reader.c | 81 |
2 files changed, 109 insertions, 6 deletions
diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c index bafad04182..68fe7004e6 100644 --- a/src/nm-initrd-generator/nmi-cmdline-reader.c +++ b/src/nm-initrd-generator/nmi-cmdline-reader.c @@ -1274,7 +1274,39 @@ reader_parse_ethtool(Reader *reader, char *argument) static void _normalize_conn(gpointer key, gpointer value, gpointer user_data) { - NMConnection *connection = value; + NMConnection *connection = value; + NMSettingIPConfig *s_ip4 = NULL, *s_ip6 = NULL; + + s_ip4 = nm_connection_get_setting_ip4_config(connection); + if (s_ip4) { + const char *method = nm_setting_ip_config_get_method(s_ip4); + + if (!nm_streq(method, NM_SETTING_IP4_CONFIG_METHOD_AUTO)) { + g_object_set(s_ip4, + NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, + NULL, + NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, + NULL, + NM_SETTING_IP4_CONFIG_DHCP_VENDOR_CLASS_IDENTIFIER, + NULL, + NULL); + } + } + + s_ip6 = nm_connection_get_setting_ip6_config(connection); + if (s_ip6) { + const char *method = nm_setting_ip_config_get_method(s_ip6); + + if (!nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) + && !nm_streq(method, NM_SETTING_IP6_CONFIG_METHOD_DHCP)) { + g_object_set(s_ip6, + NM_SETTING_IP_CONFIG_DHCP_HOSTNAME, + NULL, + NM_SETTING_IP_CONFIG_DHCP_TIMEOUT, + NULL, + NULL); + } + } nm_connection_normalize(connection, NULL, NULL, NULL); } diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c index 2dfc23a369..7124d74ed4 100644 --- a/src/nm-initrd-generator/tests/test-cmdline-reader.c +++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c @@ -399,6 +399,7 @@ test_if_auto_with_mtu_and_mac(void) g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL); g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4)); s_ip6 = nm_connection_get_setting_ip6_config(connection); @@ -451,7 +452,7 @@ test_if_ip4_manual(void) g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "192.0.2.2"); g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24); g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "192.0.2.1"); - g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname0.example.com"); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL); g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), ==, -1); s_ip6 = nm_connection_get_setting_ip6_config(connection); @@ -459,6 +460,7 @@ test_if_ip4_manual(void) g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DISABLED); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL); g_assert(nm_setting_ip_config_get_may_fail(s_ip6)); g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1); @@ -480,12 +482,65 @@ test_if_ip4_manual(void) g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "203.0.113.2"); g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 26); g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "203.0.113.1"); - g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "hostname1.example.com"); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL); + + 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_AUTO); + g_assert(nm_setting_ip_config_get_may_fail(s_ip6)); +} + +static void +test_if_ip4_auto(void) +{ + gs_unref_hashtable GHashTable *connections = NULL; + const char *const *ARGV = NM_MAKE_STRV("ip=172.25.1.1::172.25.1.2:24:" + "myhostname:eth0:dhcp", + "rd.net.timeout.dhcp=10"); + NMConnection *connection; + NMSettingConnection *s_con; + NMSettingIPConfig *s_ip4; + NMSettingIPConfig *s_ip6; + NMIPAddress *ip_addr; + gs_free char *hostname = NULL; + gint64 carrier_timeout_sec = 0; + + connections = _parse(ARGV, &hostname, &carrier_timeout_sec); + g_assert_cmpint(g_hash_table_size(connections), ==, 1); + g_assert_cmpstr(hostname, ==, "myhostname"); + g_assert_cmpint(carrier_timeout_sec, ==, 0); + + connection = g_hash_table_lookup(connections, "eth0"); + nmtst_assert_connection_verifies_without_normalization(connection); + g_assert_cmpstr(nm_connection_get_id(connection), ==, "eth0"); + + s_con = nm_connection_get_setting_connection(connection); + g_assert(s_con); + g_assert_cmpint(nm_setting_connection_get_wait_device_timeout(s_con), ==, -1); + + 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(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4)); + g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 0); + g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip4), ==, 0); + g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip4), ==, 1); + g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip4), ==, 10); + g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip4), ==, "172.25.1.2"); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, "myhostname"); + + ip_addr = nm_setting_ip_config_get_address(s_ip4, 0); + g_assert(ip_addr); + g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "172.25.1.1"); + g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 24); 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_AUTO); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "myhostname"); g_assert(nm_setting_ip_config_get_may_fail(s_ip6)); + g_assert_cmpint(nm_setting_ip_config_get_dhcp_timeout(s_ip6), ==, 10); + g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), ==, -1); } static void @@ -535,6 +590,7 @@ test_if_ip6_manual(void) const char *const *ARGV = NM_MAKE_STRV("ip=[2001:0db8::02]/64::[2001:0db8::01]::" "hostname0.example.com:eth4::[2001:0db8::53]"); NMConnection *connection; + NMSettingIPConfig *s_ip4; NMSettingIPConfig *s_ip6; NMIPAddress *ip_addr; gs_free char *hostname = NULL; @@ -549,6 +605,11 @@ test_if_ip6_manual(void) nmtst_assert_connection_verifies_without_normalization(connection); g_assert_cmpstr(nm_connection_get_id(connection), ==, "eth4"); + 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), ==, "hostname0.example.com"); + s_ip6 = nm_connection_get_setting_ip6_config(connection); g_assert(s_ip6); g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), @@ -564,7 +625,7 @@ test_if_ip6_manual(void) g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::2"); g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64); g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1"); - g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "hostname0.example.com"); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL); } static void @@ -616,6 +677,7 @@ test_if_mac_ifname(void) const char *const *ARGV = NM_MAKE_STRV("ip=[2001:0db8::42]/64::[2001:0db8::01]::" "hostname0:00-11-22-33-44-55::[2001:0db8::53]"); NMConnection *connection; + NMSettingIPConfig *s_ip4; NMSettingIPConfig *s_ip6; NMSettingWired *s_wired; NMIPAddress *ip_addr; @@ -636,6 +698,11 @@ test_if_mac_ifname(void) g_assert(s_wired); g_assert_cmpstr(nm_setting_wired_get_mac_address(s_wired), ==, "00:11:22:33:44:55"); + 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), ==, "hostname0"); + s_ip6 = nm_connection_get_setting_ip6_config(connection); g_assert(s_ip6); g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), @@ -646,12 +713,13 @@ test_if_mac_ifname(void) g_assert_cmpstr(nm_setting_ip_config_get_dns(s_ip6, 0), ==, "2001:db8::53"); g_assert_cmpint(nm_setting_ip_config_get_num_routes(s_ip6), ==, 0); g_assert_cmpint(nm_setting_ip_config_get_num_addresses(s_ip6), ==, 1); + g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1"); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL); + ip_addr = nm_setting_ip_config_get_address(s_ip6, 0); g_assert(ip_addr); g_assert_cmpstr(nm_ip_address_get_address(ip_addr), ==, "2001:db8::42"); g_assert_cmpint(nm_ip_address_get_prefix(ip_addr), ==, 64); - g_assert_cmpstr(nm_setting_ip_config_get_gateway(s_ip6), ==, "2001:db8::1"); - g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, "hostname0"); } static void @@ -1040,6 +1108,7 @@ test_bond_ip(void) g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip6), ==, NM_SETTING_IP6_CONFIG_METHOD_DISABLED); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip6), ==, NULL); g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip6)); g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip6), ==, 0); g_assert(!nm_setting_ip_config_get_gateway(s_ip6)); @@ -1403,6 +1472,7 @@ test_team(void) g_assert_cmpstr(nm_setting_ip_config_get_method(s_ip4), ==, NM_SETTING_IP4_CONFIG_METHOD_DISABLED); + g_assert_cmpstr(nm_setting_ip_config_get_dhcp_hostname(s_ip4), ==, NULL); g_assert(!nm_setting_ip_config_get_ignore_auto_dns(s_ip4)); g_assert_cmpint(nm_setting_ip_config_get_num_dns(s_ip4), ==, 0); g_assert(!nm_setting_ip_config_get_gateway(s_ip4)); @@ -2551,6 +2621,7 @@ main(int argc, char **argv) g_test_add_func("/initrd/cmdline/if_dhcp6", test_if_dhcp6); g_test_add_func("/initrd/cmdline/if_auto_with_mtu_and_mac", test_if_auto_with_mtu_and_mac); g_test_add_func("/initrd/cmdline/if_ip4_manual", test_if_ip4_manual); + g_test_add_func("/initrd/cmdline/if_ip4_auto", test_if_ip4_auto); g_test_add_func("/initrd/cmdline/if_ip4_manual_no_dev", test_if_ip4_manual_no_dev); g_test_add_func("/initrd/cmdline/if_ip6_manual", test_if_ip6_manual); g_test_add_func("/initrd/cmdline/if_mac_ifname", test_if_mac_ifname); |