net: make dhcp_run() common for NET and NET_LWIP
There are currently two implementations of dhcp_run(): one in cmd/net.c for NET and one in net/lwip/dhcp.c for NET_LWIP. There is no justification for that. Therefore, move the NET version into net/net-common.c to be used by both stacks, and drop the NET_LWIP version which by the way does not look totally correct. Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org> Suggested-by: Tom Rini <trini@konsulko.com> Acked-by: Benjamin Hahn <B.Hahn@phytec.de>
This commit is contained in:
36
cmd/net.c
36
cmd/net.c
@@ -134,8 +134,8 @@ U_BOOT_CMD(dhcp6, 3, 1, do_dhcp6,
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CMD_DHCP)
|
||||
static int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
char *const argv[])
|
||||
int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
char *const argv[])
|
||||
{
|
||||
return netboot_common(DHCP, cmdtp, argc, argv);
|
||||
}
|
||||
@@ -145,38 +145,6 @@ U_BOOT_CMD(
|
||||
"boot image via network using DHCP/TFTP protocol",
|
||||
"[loadAddress] [[hostIPaddr:]bootfilename]"
|
||||
);
|
||||
|
||||
int dhcp_run(ulong addr, const char *fname, bool autoload)
|
||||
{
|
||||
char *dhcp_argv[] = {"dhcp", NULL, (char *)fname, NULL};
|
||||
struct cmd_tbl cmdtp = {}; /* dummy */
|
||||
char file_addr[17];
|
||||
int old_autoload;
|
||||
int ret, result;
|
||||
|
||||
log_debug("addr=%lx, fname=%s, autoload=%d\n", addr, fname, autoload);
|
||||
old_autoload = env_get_yesno("autoload");
|
||||
ret = env_set("autoload", autoload ? "y" : "n");
|
||||
if (ret)
|
||||
return log_msg_ret("en1", -EINVAL);
|
||||
|
||||
if (autoload) {
|
||||
sprintf(file_addr, "%lx", addr);
|
||||
dhcp_argv[1] = file_addr;
|
||||
}
|
||||
|
||||
result = do_dhcp(&cmdtp, 0, !autoload ? 1 : fname ? 3 : 2, dhcp_argv);
|
||||
|
||||
ret = env_set("autoload", old_autoload == -1 ? NULL :
|
||||
old_autoload ? "y" : "n");
|
||||
if (ret)
|
||||
return log_msg_ret("en2", -EINVAL);
|
||||
|
||||
if (result)
|
||||
return log_msg_ret("res", -ENOENT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CMD_NFS)
|
||||
|
||||
@@ -479,6 +479,16 @@ int net_loop(enum proto_t protocol);
|
||||
*/
|
||||
int dhcp_run(ulong addr, const char *fname, bool autoload);
|
||||
|
||||
/**
|
||||
* do_dhcp - Run the dhcp command
|
||||
*
|
||||
* @cmdtp: Unused
|
||||
* @flag: Command flags (CMD_FLAG_...)
|
||||
* @argc: Number of arguments
|
||||
* @argv: List of arguments
|
||||
* Return: result (see enum command_ret_t)
|
||||
*/
|
||||
int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
|
||||
|
||||
/**
|
||||
* do_ping - Run the ping command
|
||||
|
||||
@@ -50,7 +50,6 @@ int net_lwip_dns_resolve(char *name_or_ip, ip_addr_t *ip);
|
||||
*/
|
||||
bool wget_validate_uri(char *uri);
|
||||
|
||||
int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
|
||||
int do_dns(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
|
||||
int do_wget(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]);
|
||||
|
||||
|
||||
@@ -150,25 +150,3 @@ int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
||||
int dhcp_run(ulong addr, const char *fname, bool autoload)
|
||||
{
|
||||
char *dhcp_argv[] = {"dhcp", NULL, };
|
||||
#ifdef CONFIG_CMD_TFTPBOOT
|
||||
char *tftp_argv[] = {"tftpboot", boot_file_name, NULL, };
|
||||
#endif
|
||||
struct cmd_tbl cmdtp = {}; /* dummy */
|
||||
|
||||
if (autoload) {
|
||||
#ifdef CONFIG_CMD_TFTPBOOT
|
||||
/* Assume DHCP was already performed */
|
||||
if (boot_file_name[0])
|
||||
return do_tftpb(&cmdtp, 0, 2, tftp_argv);
|
||||
return 0;
|
||||
#else
|
||||
return -EOPNOTSUPP;
|
||||
#endif
|
||||
}
|
||||
|
||||
return do_dhcp(&cmdtp, 0, 1, dhcp_argv);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
#include <dm/uclass.h>
|
||||
#include <env.h>
|
||||
#include <net-common.h>
|
||||
#include <linux/time.h>
|
||||
#include <rtc.h>
|
||||
@@ -48,3 +49,37 @@ void net_sntp_set_rtc(u32 seconds)
|
||||
tm.tm_year, tm.tm_mon, tm.tm_mday,
|
||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_CMD_DHCP)
|
||||
int dhcp_run(ulong addr, const char *fname, bool autoload)
|
||||
{
|
||||
char *dhcp_argv[] = {"dhcp", NULL, (char *)fname, NULL};
|
||||
struct cmd_tbl cmdtp = {}; /* dummy */
|
||||
char file_addr[17];
|
||||
int old_autoload;
|
||||
int ret, result;
|
||||
|
||||
log_debug("addr=%lx, fname=%s, autoload=%d\n", addr, fname, autoload);
|
||||
old_autoload = env_get_yesno("autoload");
|
||||
ret = env_set("autoload", autoload ? "y" : "n");
|
||||
if (ret)
|
||||
return log_msg_ret("en1", -EINVAL);
|
||||
|
||||
if (autoload) {
|
||||
sprintf(file_addr, "%lx", addr);
|
||||
dhcp_argv[1] = file_addr;
|
||||
}
|
||||
|
||||
result = do_dhcp(&cmdtp, 0, !autoload ? 1 : fname ? 3 : 2, dhcp_argv);
|
||||
|
||||
ret = env_set("autoload", old_autoload == -1 ? NULL :
|
||||
old_autoload ? "y" : "n");
|
||||
if (ret)
|
||||
return log_msg_ret("en2", -EINVAL);
|
||||
|
||||
if (result)
|
||||
return log_msg_ret("res", -ENOENT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user