]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
lwip: add net_lwip_dns_resolve()
authorJerome Forissier <jerome.forissier@linaro.org>
Wed, 25 Jun 2025 13:19:16 +0000 (15:19 +0200)
committerJerome Forissier <jerome.forissier@linaro.org>
Tue, 8 Jul 2025 09:07:37 +0000 (11:07 +0200)
Add a helper fonction to convert an IP address (supplied as a text
string) or a host name to an ip_addr_t.

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
include/net-lwip.h
net/lwip/net-lwip.c

index 58cd38423f8b54beaa398451083c285272c9e5db..f54f23471f1411da136f29b25d360bfe72530357 100644 (file)
@@ -38,6 +38,7 @@ struct netif *net_lwip_new_netif_noip(struct udevice *udev);
 void net_lwip_remove_netif(struct netif *netif);
 struct netif *net_lwip_get_netif(void);
 int net_lwip_rx(struct udevice *udev, struct netif *netif);
+int net_lwip_dns_resolve(char *name_or_ip, ip_addr_t *ip);
 
 /**
  * wget_validate_uri() - varidate the uri
index 040b51e8852ab1890066c401c1c792a8f04b811f..3918d57d7e588ea93161693c6aa2e5e99120ea05 100644 (file)
@@ -7,6 +7,7 @@
 #include <dm/device.h>
 #include <dm/uclass.h>
 #include <hexdump.h>
+#include <linux/kernel.h>
 #include <lwip/ip4_addr.h>
 #include <lwip/dns.h>
 #include <lwip/err.h>
@@ -358,6 +359,44 @@ int net_lwip_rx(struct udevice *udev, struct netif *netif)
        return len;
 }
 
+/**
+ * net_lwip_dns_resolve() - find IP address from name or IP
+ *
+ * @name_or_ip: host name or IP address
+ * @ip: output IP address
+ *
+ * Return value: 0 on success, -1 on failure.
+ */
+int net_lwip_dns_resolve(char *name_or_ip, ip_addr_t *ip)
+{
+#if defined(CONFIG_CMD_DNS)
+       char *var = "_dnsres";
+       char *argv[] = { "dns", name_or_ip, var, NULL };
+       int argc = ARRAY_SIZE(argv) - 1;
+#endif
+
+       if (ipaddr_aton(name_or_ip, ip))
+               return 0;
+
+#if defined(CONFIG_CMD_DNS)
+       if (do_dns(NULL, 0, argc, argv) != CMD_RET_SUCCESS)
+               return -1;
+
+       name_or_ip = env_get(var);
+       if (!name_or_ip)
+               return -1;
+
+       if (!ipaddr_aton(name_or_ip, ip))
+               return -1;
+
+       env_set(var, NULL);
+
+       return 0;
+#else
+       return -1;
+#endif
+}
+
 void net_process_received_packet(uchar *in_packet, int len)
 {
 #if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER)