[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