[PATCH v2 07/14] net-lwip: add dns command
Maxim Uvarov
muvarov at gmail.com
Thu Jun 6 10:51:30 CEST 2024
чт, 6 июн. 2024 г. в 09:29, Ilias Apalodimas <ilias.apalodimas at 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
More information about the U-Boot
mailing list