[PATCH] net: lwip: dhcp: support arguments for TFTP file download
Jerome Forissier
jerome.forissier at linaro.org
Thu Nov 14 18:10:01 CET 2024
The dhcp command is supposed to have the following syntax as per
"help dhcp":
dhcp [loadAddress] [[hostIPaddr:]bootfilename]
In other words, any arguments should be passed to an implicit
tftpboot command after the DHCP exchange has occurred.
Add the missing code to the lwIP version of do_dhcp().
Signed-off-by: Jerome Forissier <jerome.forissier at linaro.org>
---
net/lwip/dhcp.c | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/net/lwip/dhcp.c b/net/lwip/dhcp.c
index 23b56226921..6f987e469d6 100644
--- a/net/lwip/dhcp.c
+++ b/net/lwip/dhcp.c
@@ -111,9 +111,34 @@ static int dhcp_loop(struct udevice *udev)
int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
{
+ int ret;
+
eth_set_current();
- return dhcp_loop(eth_get_dev());
+ ret = dhcp_loop(eth_get_dev());
+ if (ret)
+ return ret;
+
+ if (argc > 1) {
+ int i;
+ char **tftp_argv;
+ struct cmd_tbl cmdtp = {};
+
+ /* Invoke tftpboot with the arguments passed to dhcp */
+ if (argc > 3)
+ return CMD_RET_FAILURE;
+ tftp_argv = malloc(argc * sizeof(char *));
+ if (!tftp_argv)
+ return CMD_RET_FAILURE;
+ tftp_argv[0] = "tftpboot";
+ for (i = 1; i < argc; i++)
+ tftp_argv[i] = argv[i];
+ ret = do_tftpb(&cmdtp, 0, argc, tftp_argv);
+ free(tftp_argv);
+ return ret;
+ }
+
+ return CMD_RET_SUCCESS;
}
int dhcp_run(ulong addr, const char *fname, bool autoload)
--
2.40.1
More information about the U-Boot
mailing list