On 09.10.25 14:30, Jerome Forissier wrote:
> 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 <[email protected]>
> Suggested-by: Tom Rini <[email protected]>
Acked-by: Benjamin Hahn <[email protected]>
> ---
>
>   cmd/net.c            | 36 ++----------------------------------
>   include/net-common.h | 10 ++++++++++
>   include/net-lwip.h   |  1 -
>   net/lwip/dhcp.c      | 22 ----------------------
>   net/net-common.c     | 35 +++++++++++++++++++++++++++++++++++
>   5 files changed, 47 insertions(+), 57 deletions(-)
>
> diff --git a/cmd/net.c b/cmd/net.c
> index 886735ea14f6..24099764493e 100644
> --- a/cmd/net.c
> +++ b/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)
> diff --git a/include/net-common.h b/include/net-common.h
> index 1112af381a98..78d98e5bba07 100644
> --- a/include/net-common.h
> +++ b/include/net-common.h
> @@ -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
> diff --git a/include/net-lwip.h b/include/net-lwip.h
> index e88e2186635b..c910def5719e 100644
> --- a/include/net-lwip.h
> +++ b/include/net-lwip.h
> @@ -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[]);
>   
> diff --git a/net/lwip/dhcp.c b/net/lwip/dhcp.c
> index 531bf2c67057..b798014ebcb9 100644
> --- a/net/lwip/dhcp.c
> +++ b/net/lwip/dhcp.c
> @@ -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);
> -}
> diff --git a/net/net-common.c b/net/net-common.c
> index b064557d5241..442b05975581 100644
> --- a/net/net-common.c
> +++ b/net/net-common.c
> @@ -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


Reply via email to