Re: [PATCH v5 2/7] net: wget: add wget with dns utility function

2023-10-06 Thread Ramon Fried
On Wed, Sep 27, 2023 at 12:37 PM Masahisa Kojima
 wrote:
>
> Current wget takes the target uri in this format:
>  ":"  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 
> Reviewed-by: Ilias Apalodimas 
> ---
>  include/net.h |  9 +
>  net/wget.c| 54 +++
>  2 files changed, 63 insertions(+)
>
> diff --git a/include/net.h b/include/net.h
> index e254df7d7f..57889d8b7a 100644
> --- a/include/net.h
> +++ b/include/net.h
> @@ -926,4 +926,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__ */
> diff --git a/net/wget.c b/net/wget.c
> index a48a8cb624..4801e28eb9 100644
> --- a/net/wget.c
> +++ b/net/wget.c
> @@ -15,6 +15,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>
>  DECLARE_GLOBAL_DATA_PTR;
>
> @@ -504,3 +505,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.
> +*  ":"  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(, "/");
> +   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
> --
> 2.34.1
>
Reviewed-by: Ramon Fried 


[PATCH v5 2/7] net: wget: add wget with dns utility function

2023-09-27 Thread Masahisa Kojima
Current wget takes the target uri in this format:
 ":"  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 
Reviewed-by: Ilias Apalodimas 
---
 include/net.h |  9 +
 net/wget.c| 54 +++
 2 files changed, 63 insertions(+)

diff --git a/include/net.h b/include/net.h
index e254df7d7f..57889d8b7a 100644
--- a/include/net.h
+++ b/include/net.h
@@ -926,4 +926,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__ */
diff --git a/net/wget.c b/net/wget.c
index a48a8cb624..4801e28eb9 100644
--- a/net/wget.c
+++ b/net/wget.c
@@ -15,6 +15,7 @@
 #include 
 #include 
 #include 
+#include 
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -504,3 +505,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.
+*  ":"  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(, "/");
+   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
-- 
2.34.1