diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c index ced1eeddf2..8fafb08f53 100644 --- a/src/nm-initrd-generator/nmi-cmdline-reader.c +++ b/src/nm-initrd-generator/nmi-cmdline-reader.c @@ -496,11 +496,12 @@ _parse_ip_method(const char *kind) /* only certain combinations are allowed... those are listed * and mapped to a canonical value. - * - * For the moment, these map all to "auto". This might be revisited - * in the future to add new kinds like "dhcp+local6". */ + */ if (_strv_is_same_unordered(strv, "dhcp", "dhcp6")) - return "auto"; + return "dhcp4+auto6"; + /* For the moment, this maps to "auto". This might be revisited + * in the future to add new kinds like "dhcp+local6" + */ if (_strv_is_same_unordered(strv, "dhcp", "local6")) return "auto"; @@ -744,6 +745,16 @@ reader_parse_ip(Reader *reader, const char *sysfs_dir, char *argument) NM_SETTING_IP4_CONFIG_METHOD_DISABLED, NULL); } + } else if (nm_streq(kind, "dhcp4+auto6")) { + /* Both DHCPv4 and IPv6 autoconf are enabled, and + * each of them is tried for at least IP_REQUIRED_TIMEOUT_MSEC, + * even if the other one completes before. + */ + clear_ip4_required_timeout = FALSE; + g_object_set(s_ip6, + NM_SETTING_IP_CONFIG_REQUIRED_TIMEOUT, + NMI_IP_REQUIRED_TIMEOUT_MSEC, + NULL); } else if (nm_streq(kind, "link6")) { g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, diff --git a/src/nm-initrd-generator/tests/test-cmdline-reader.c b/src/nm-initrd-generator/tests/test-cmdline-reader.c index d8bbb5e86b..2cb1b2f49d 100644 --- a/src/nm-initrd-generator/tests/test-cmdline-reader.c +++ b/src/nm-initrd-generator/tests/test-cmdline-reader.c @@ -324,11 +324,17 @@ test_if_auto_with_mtu(void) 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_dhcp_timeout(s_ip4), ==, 90); + g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip4), + ==, + NMI_IP_REQUIRED_TIMEOUT_MSEC); 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_ignore_auto_dns(s_ip6)); + g_assert_cmpint(nm_setting_ip_config_get_required_timeout(s_ip6), + ==, + NMI_IP_REQUIRED_TIMEOUT_MSEC); } static void