Skip to content

Commit

Permalink
lte/alt1250: Fix bug that name resolution failed for a long time
Browse files Browse the repository at this point in the history
Fix bug that name resolution failed for a long time under particular cases.
If a DNS query for IPv6 succeeds and IPv4 fails, only the answer of the
IPv6 query is saved in the cache. If only IPv4 is given from LTE,
name resolution will fail while the answer is saved in the cache.
Therefore, the ALT1250 daemon sets the given IP type to the DNS client,
which can only send DNS queries for that IP type.
  • Loading branch information
SPRESENSE authored and xiaoxiang781216 committed Sep 16, 2023
1 parent 9f2f864 commit a9a8fbb
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions lte/alt1250/callback_handlers/alt1250_evt.c
Original file line number Diff line number Diff line change
Expand Up @@ -1238,6 +1238,31 @@ static uint64_t lte_set_report_netinfo_exec_cb(FAR void *cb,
sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6);
dns_add_nameserver((FAR const struct sockaddr *)&dnsaddr[i], addrlen);
}

if (info->pdn_num > 0)
{
FAR lte_pdn_t *pdn = &info->pdn_stat[0];
FAR lte_ipaddr_t *ipaddr = &pdn->address[0];

/* ALT1250 can only connect one PDN, so check the first PDN. */

if ((pdn->ipaddr_num == 1) && (ipaddr->ip_type == LTE_IPTYPE_V4))
{
dns_set_queryfamily(AF_INET);
}
else if ((pdn->ipaddr_num == 1) && (ipaddr->ip_type == LTE_IPTYPE_V6))
{
dns_set_queryfamily(AF_INET6);
}
else
{
dns_set_queryfamily(AF_UNSPEC);
}
}
else
{
dns_set_queryfamily(AF_UNSPEC);
}
#endif

if (callback)
Expand Down

0 comments on commit a9a8fbb

Please sign in to comment.