Skip to content

Commit

Permalink
net: wget: add wget with dns utility function
Browse files Browse the repository at this point in the history
Current wget takes the target uri in this format:
 "<http server ip>:<file path>"  e.g.) 192.168.1.1:/bar
The http server ip address must be resolved before
calling wget.

This commit adds the utility function runs wget with dhs.
User can call wget with the uri like "http://foo/bar".

Signed-off-by: Masahisa Kojima <[email protected]>
Reviewed-by: Ilias Apalodimas <[email protected]>
Reviewed-by: Ramon Fried <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
Signed-off-by: Ilias Apalodimas <[email protected]>
  • Loading branch information
Masahisa Kojima authored and apalos committed Nov 18, 2023
1 parent 04592ad commit 8cf18da
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
9 changes: 9 additions & 0 deletions include/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -930,4 +930,13 @@ void eth_set_enable_bootdevs(bool enable);
static inline void eth_set_enable_bootdevs(bool enable) {}
#endif

/**
* wget_with_dns() - runs dns host IP address resulution before wget
*
* @dst_addr: destination address to download the file
* @uri: uri string of target file of wget
* Return: downloaded file size, negative if failed
*/
int wget_with_dns(ulong dst_addr, char *uri);

#endif /* __NET_H__ */
54 changes: 54 additions & 0 deletions net/wget.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <net.h>
#include <net/tcp.h>
#include <net/wget.h>
#include <stdlib.h>

DECLARE_GLOBAL_DATA_PTR;

Expand Down Expand Up @@ -512,3 +513,56 @@ void wget_start(void)

wget_send(TCP_SYN, 0, 0, 0);
}

#if (IS_ENABLED(CONFIG_CMD_DNS))
int wget_with_dns(ulong dst_addr, char *uri)
{
int ret;
char *s, *host_name, *file_name, *str_copy;

/*
* Download file using wget.
*
* U-Boot wget takes the target uri in this format.
* "<http server ip>:<file path>" e.g.) 192.168.1.1:/sample/test.iso
* Need to resolve the http server ip address before starting wget.
*/
str_copy = strdup(uri);
if (!str_copy)
return -ENOMEM;

s = str_copy + strlen("http://");
host_name = strsep(&s, "/");
if (!s) {
log_err("Error: invalied uri, no file path\n");
ret = -EINVAL;
goto out;
}
file_name = s;

/* TODO: If the given uri has ip address for the http server, skip dns */
net_dns_resolve = host_name;
net_dns_env_var = "httpserverip";
if (net_loop(DNS) < 0) {
log_err("Error: dns lookup of %s failed, check setup\n", net_dns_resolve);
ret = -EINVAL;
goto out;
}
s = env_get("httpserverip");
if (!s) {
ret = -EINVAL;
goto out;
}

strlcpy(net_boot_file_name, s, sizeof(net_boot_file_name));
strlcat(net_boot_file_name, ":/", sizeof(net_boot_file_name)); /* append '/' which is removed by strsep() */
strlcat(net_boot_file_name, file_name, sizeof(net_boot_file_name));
image_load_addr = dst_addr;
ret = net_loop(WGET);

out:
free(str_copy);

return ret;
}
#endif

0 comments on commit 8cf18da

Please sign in to comment.