чт, 6 июн. 2024 г. в 09:29, Ilias Apalodimas <ilias.apalodi...@linaro.org>: > > 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? > +1 And check the return code of eth_rx(), that is int function and current code for some reason skips this check.
BR, Maxim. > > + > > + if (done && host_ipaddr.addr != 0) > > + return CMD_RET_SUCCESS; > > + > > + return CMD_RET_FAILURE; > > +} > > + > > -- > > 2.40.1 > > > > Thanks > /Ilias -- Best regards, Maxim Uvarov