Hi Jerome, [...]
> + > +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) > +{ > + char *var = (char *)arg; const char * > + 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); > + > + 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; > + > + if (argc == 1 || argc > 3) > + return CMD_RET_USAGE; > + > + if (argc >= 2) > + name = argv[1]; > + > + if (argc == 3) > + var = argv[2]; > + > + dns_init(); > + > + nsenv = env_get("dnsip"); > + if (nsenv && ipaddr_aton(nsenv, &ns)) { > + dns_setserver(0, &ns); > + has_server = true; > + } > + > + nsenv = env_get("dnsip2"); > + if (nsenv && ipaddr_aton(nsenv, &ns)) { > + dns_setserver(1, &ns); > + has_server = true; > + } > + > + if (!has_server) { > + log_err("No valid name server (dnsip/dnsip2)\n"); > + return CMD_RET_FAILURE; > + } > + > + done = false; > + > + ret = dns_gethostbyname(name, &ipaddr, dns_cb, var); > + > + if (ret == ERR_OK) { > + dns_cb(name, &ipaddr, var); > + } else if (ret == ERR_INPROGRESS) { > + start = get_timer(0); > + sys_timeout(DNS_RESEND_MS, do_dns_tmr, NULL); > + do { > + eth_rx(); > + if (done) > + break; > + sys_check_timeouts(); > + if (ctrlc()) { > + printf("\nAbort\n"); > + break; > + } > + } while (get_timer(start) < DNS_TIMEOUT_MS); > + sys_untimeout(do_dns_tmr, NULL); > + } Looking at the lwip code there are other ret values than just ERR_OK, ERR_INPROGRESS. Should we have an 'else' handling the rest? > + > + if (done && host_ipaddr.addr != 0) > + return CMD_RET_SUCCESS; > + > + return CMD_RET_FAILURE; > +} > + > -- > 2.40.1 > Thanks /Ilias