
On 6/6/24 17:46, Ilias Apalodimas wrote:
@@ -7,6 +7,7 @@ obj-$(CONFIG_$(SPL_)DM_ETH) += ../net/eth_common.o obj-$(CONFIG_$(SPL_)DM_ETH) += ../net/eth-uclass.o obj-$(CONFIG_$(SPL_)DM_ETH) += net-lwip.o obj-$(CONFIG_CMD_DHCP) += dhcp.o +obj-$(CONFIG_CMD_DNS) += dns.o obj-$(CONFIG_CMD_PING) += ping.o obj-$(CONFIG_CMD_TFTPBOOT) += tftp.o
diff --git a/net-lwip/dns.c b/net-lwip/dns.c new file mode 100644 index 00000000000..24a5149343a --- /dev/null +++ b/net-lwip/dns.c @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* Copyright (C) 2024 Linaro Ltd. */
+#include <command.h> +#include <console.h> +#include <lwip/dns.h> +#include <lwip/timeouts.h> +#include <net-lwip.h> +#include <time.h>
+#define DNS_RESEND_MS 1000 +#define DNS_TIMEOUT_MS 10000
+static ulong start; +static ip_addr_t host_ipaddr; +static bool done;
+static void do_dns_tmr(void *arg) +{
dns_tmr();
+}
+static void dns_cb(const char *name, const ip_addr_t *ipaddr, void *arg) +{
const char *var = arg;
char *ipstr = ip4addr_ntoa(ipaddr);
done = true;
if (!ipaddr) {
printf("DNS: host not found\n");
host_ipaddr.addr = 0;
return;
}
if (var)
env_set(var, ipstr);
Do we need this? Won't this set <dns_name> == ipaddr?
No, the syntax of the dns command is: 'dns hostname [env_var]' so one can pretty much give any variable name to receive the IP address.
If we do not need it repurpose the void *arg and get rid of the global 'done'
I could probably use a struct to get rid of the globals. Let me see what I can do.
printf("%s\n", ipstr);
+}
+int do_dns(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) +{
bool has_server = false;
ip_addr_t ipaddr;
ip_addr_t ns;
char *nsenv;
char *name;
char *var;
int ret;
[...]
Thanks /Ilias