[U-Boot] [PATCH v2 1/3] net: Prefer command line arguments
Joe Hershberger
joe.hershberger at ni.com
Thu Jun 14 16:34:50 UTC 2018
On Thu, Jun 14, 2018 at 5:04 AM, Alexander Graf <agraf at suse.de> wrote:
> We can call commands like dhcp and bootp without arguments or with
> explicit command line arguments that really should tell the code where
> to look for files instead.
>
> Unfortunately, the current code simply overwrites command line arguments
> in the dhcp case with dhcp values.
>
> This patch allows the code to preserve the command line values if they
> were set on the command line. That way the semantics are slightly more
> intuitive.
>
> The reason this patch does that by introducing a new variable is that we
> can not rely on net_boot_file_name[0] being unset, as today it's
> completely legal to call "dhcp" and afterwards run "tftp" and expect the
> latter to repeat the same query as before. I would prefer not to break
> that behavior in case anyone relies on it.
>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
> cmd/net.c | 10 ++++++++--
> include/net.h | 2 ++
> net/bootp.c | 3 ++-
> net/net.c | 2 ++
> 4 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/cmd/net.c b/cmd/net.c
> index f83839c35e..eca6dd8918 100644
> --- a/cmd/net.c
> +++ b/cmd/net.c
> @@ -183,6 +183,8 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
> int size;
> ulong addr;
>
> + net_boot_file_name_explicit = false;
> +
> /* pre-set load_addr */
> s = env_get("loadaddr");
> if (s != NULL)
> @@ -199,15 +201,18 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
> * mis-interpreted as a valid number.
> */
> addr = simple_strtoul(argv[1], &end, 16);
> - if (end == (argv[1] + strlen(argv[1])))
> + if (end == (argv[1] + strlen(argv[1]))) {
> load_addr = addr;
> - else
> + } else {
> + net_boot_file_name_explicit = true;
> copy_filename(net_boot_file_name, argv[1],
> sizeof(net_boot_file_name));
> + }
> break;
>
> case 3:
> load_addr = simple_strtoul(argv[1], NULL, 16);
> + net_boot_file_name_explicit = true;
> copy_filename(net_boot_file_name, argv[2],
> sizeof(net_boot_file_name));
>
> @@ -220,6 +225,7 @@ static int netboot_common(enum proto_t proto, cmd_tbl_t *cmdtp, int argc,
> printf("Invalid address/size\n");
> return CMD_RET_USAGE;
> }
> + net_boot_file_name_explicit = true;
> copy_filename(net_boot_file_name, argv[3],
> sizeof(net_boot_file_name));
> break;
> diff --git a/include/net.h b/include/net.h
> index 5760685556..a259b7c530 100644
> --- a/include/net.h
> +++ b/include/net.h
> @@ -539,6 +539,8 @@ enum proto_t {
> };
>
> extern char net_boot_file_name[1024];/* Boot File name */
> +/* Indicates whether the file name was specified on the command line */
> +extern bool net_boot_file_name_explicit;
> /* The actual transferred size of the bootfile (in bytes) */
> extern u32 net_boot_file_size;
> /* Boot file size in blocks as reported by the DHCP server */
> diff --git a/net/bootp.c b/net/bootp.c
> index 9d7cb5d30c..f3da8572b7 100644
> --- a/net/bootp.c
> +++ b/net/bootp.c
> @@ -157,7 +157,8 @@ static void store_net_params(struct bootp_hdr *bp)
> #if defined(CONFIG_CMD_DHCP)
> !(dhcp_option_overload & OVERLOAD_FILE) &&
> #endif
> - (strlen(bp->bp_file) > 0)) {
> + (strlen(bp->bp_file) > 0) &&
> + !net_boot_file_name_explicit) {
This seems like a reasonable check, but it also needs to happen in the
case that the file is passed under option 67.
> copy_filename(net_boot_file_name, bp->bp_file,
> sizeof(net_boot_file_name));
> }
> diff --git a/net/net.c b/net/net.c
> index a4932f46d9..510d491271 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -165,6 +165,8 @@ ushort net_native_vlan = 0xFFFF;
>
> /* Boot File name */
> char net_boot_file_name[1024];
> +/* Indicates whether the file name was specified on the command line */
> +bool net_boot_file_name_explicit;
> /* The actual transferred size of the bootfile (in bytes) */
> u32 net_boot_file_size;
> /* Boot file size in blocks as reported by the DHCP server */
> --
> 2.12.3
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
More information about the U-Boot
mailing list