efi_loader: Run dhcp if an http boot option is selected
authorIlias Apalodimas <ilias.apalodimas@linaro.org>
Fri, 23 May 2025 13:04:04 +0000 (16:04 +0300)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 25 May 2025 09:40:15 +0000 (11:40 +0200)
The EFI boot manager relies on having an IP address before trying to
boot an EFI HTTP(s) boot entry. However, defining it as a boot or
pre-boot command is not always the right answer since it will
unconditionally add delay to the board boot, even if we don't boot
over the network.

So let's do a DHCP request from the boot manager, if 'ipaddr' is
empty and fail early if we don't have an address.

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Tested-by: Michal Simek <michal.simek@amd.com>
lib/efi_loader/efi_bootmgr.c

index 3ef0a9e..1a3461f 100644 (file)
@@ -480,6 +480,13 @@ static efi_status_t try_load_from_uri_path(struct efi_device_path_uri *uridp,
        if (!ctx)
                return EFI_OUT_OF_RESOURCES;
 
+       s = env_get("ipaddr");
+       if (!s && dhcp_run(0, NULL, false)) {
+               log_err("Error: Can't find a valid IP address\n");
+               ret = EFI_DEVICE_ERROR;
+               goto err;
+       }
+
        s = env_get("loadaddr");
        if (!s) {
                log_err("Error: loadaddr is not set\n");