diff options
-rw-r--r-- | src/core/initrd/nmi-cmdline-reader.c | 14 | ||||
-rw-r--r-- | src/core/initrd/tests/test-cmdline-reader.c | 4 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/core/initrd/nmi-cmdline-reader.c b/src/core/initrd/nmi-cmdline-reader.c index 8d1c27890c..1a95e4f7dd 100644 --- a/src/core/initrd/nmi-cmdline-reader.c +++ b/src/core/initrd/nmi-cmdline-reader.c @@ -53,7 +53,6 @@ reader_new(void) g_hash_table_new_full(nm_direct_hash, NULL, g_object_unref, NULL), .vlan_parents = g_ptr_array_new_with_free_func(g_free), .array = g_ptr_array_new(), - .dhcp_timeout = 90, }; return reader; @@ -1061,6 +1060,8 @@ nmi_cmdline_reader_parse(const char * sysfs_dir, gs_unref_ptrarray GPtrArray *routes = NULL; gs_unref_ptrarray GPtrArray *znets = NULL; int i; + guint64 dhcp_timeout = 90; + guint64 dhcp_num_tries = 1; reader = reader_new(); @@ -1079,11 +1080,14 @@ nmi_cmdline_reader_parse(const char * sysfs_dir, reader->ignore_auto_dns = !_nm_utils_ascii_str_to_bool(argument, TRUE); else if (nm_streq(tag, "rd.net.timeout.dhcp")) { if (nm_streq0(argument, "infinity")) { - reader->dhcp_timeout = G_MAXINT32; + dhcp_timeout = G_MAXINT32; } else { - reader->dhcp_timeout = - _nm_utils_ascii_str_to_int64(argument, 10, 1, G_MAXINT32, reader->dhcp_timeout); + dhcp_timeout = + _nm_utils_ascii_str_to_int64(argument, 10, 1, G_MAXINT32, dhcp_timeout); } + } else if (nm_streq(tag, "rd.net.dhcp.retry")) { + dhcp_num_tries = + _nm_utils_ascii_str_to_int64(argument, 10, 1, G_MAXINT32, dhcp_num_tries); } else if (nm_streq(tag, "rd.net.dhcp.vendor-class")) { if (nm_utils_validate_dhcp4_vendor_class_id(argument, NULL)) nm_utils_strdup_reset(&reader->dhcp4_vci, argument); @@ -1093,6 +1097,8 @@ nmi_cmdline_reader_parse(const char * sysfs_dir, } } + reader->dhcp_timeout = NM_CLAMP(dhcp_timeout * dhcp_num_tries, 1, G_MAXINT32); + for (i = 0; argv[i]; i++) { gs_free char *argument_clone = NULL; char * argument; diff --git a/src/core/initrd/tests/test-cmdline-reader.c b/src/core/initrd/tests/test-cmdline-reader.c index 6795e32d37..33fb22d364 100644 --- a/src/core/initrd/tests/test-cmdline-reader.c +++ b/src/core/initrd/tests/test-cmdline-reader.c @@ -240,7 +240,11 @@ test_dhcp_timeout(void) {NM_MAKE_STRV("ip=dhcp", "rd.net.timeout.dhcp=0"), 90}, {NM_MAKE_STRV("ip=dhcp", "rd.net.timeout.dhcp=foobar"), 90}, {NM_MAKE_STRV("ip=dhcp", "rd.net.timeout.dhcp=42"), 42}, + {NM_MAKE_STRV("ip=dhcp", "rd.net.dhcp.retry=2"), 180}, + {NM_MAKE_STRV("ip=dhcp", "rd.net.dhcp.retry=3", "rd.net.timeout.dhcp=40"), 120}, {NM_MAKE_STRV("ip=dhcp", "rd.net.timeout.dhcp=infinity"), G_MAXINT32}, + {NM_MAKE_STRV("ip=dhcp", "rd.net.timeout.dhcp=infinity", "rd.net.dhcp.retry=100"), + G_MAXINT32}, }; guint i; |