diff mbox series

efi_loader: Run dhcp if an http boot option is selected

Message ID 20250523130404.2646298-1-ilias.apalodimas@linaro.org
State New
Headers show
Series efi_loader: Run dhcp if an http boot option is selected | expand

Commit Message

Ilias Apalodimas May 23, 2025, 1:04 p.m. UTC
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>
---
 lib/efi_loader/efi_bootmgr.c | 7 +++++++
 1 file changed, 7 insertions(+)

--
2.49.0

Comments

Michal Simek May 23, 2025, 3:06 p.m. UTC | #1
On 5/23/25 15:04, Ilias Apalodimas wrote:
> 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>
> ---
>   lib/efi_loader/efi_bootmgr.c | 7 +++++++
>   1 file changed, 7 insertions(+)
> 
> diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
> index c0df5cb9acd9..2076630648f7 100644
> --- a/lib/efi_loader/efi_bootmgr.c
> +++ b/lib/efi_loader/efi_bootmgr.c
> @@ -479,6 +479,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");
> --
> 2.49.0
> 

Tested-by: Michal Simek <michal.simek@amd.com>

Thanks,
Michal
diff mbox series

Patch

diff --git a/lib/efi_loader/efi_bootmgr.c b/lib/efi_loader/efi_bootmgr.c
index c0df5cb9acd9..2076630648f7 100644
--- a/lib/efi_loader/efi_bootmgr.c
+++ b/lib/efi_loader/efi_bootmgr.c
@@ -479,6 +479,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");