> @@ -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? If we do not need it repurpose the void *arg and get rid of the global 'done' > + > + 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