Added Ipv4/Ipv6 stack stack support to lwip DNS queries

If both IPv4 and IPv6 are available, and DNS query fails for first system,
second system is tried.
pull/4911/head
Mika Leppänen 2017-08-07 13:45:04 +03:00
parent b1d41f9afd
commit 457f940a7c
1 changed files with 16 additions and 2 deletions

View File

@ -763,15 +763,29 @@ static nsapi_error_t mbed_lwip_gethostbyname(nsapi_stack_t *stack, const char *h
if (version == NSAPI_UNSPEC) { if (version == NSAPI_UNSPEC) {
const ip_addr_t *ip_addr; const ip_addr_t *ip_addr;
ip_addr = mbed_lwip_get_ip_addr(true, &lwip_netif); ip_addr = mbed_lwip_get_ip_addr(true, &lwip_netif);
// Prefer IPv6
if (IP_IS_V6(ip_addr)) { if (IP_IS_V6(ip_addr)) {
addr_type = NETCONN_DNS_IPV6; // If IPv4 is available use it as backup
if (mbed_lwip_get_ipv4_addr(&lwip_netif)) {
addr_type = NETCONN_DNS_IPV6_IPV4;
} else {
addr_type = NETCONN_DNS_IPV6;
}
// Prefer IPv4
} else { } else {
addr_type = NETCONN_DNS_IPV4; // If IPv6 is available use it as backup
if (mbed_lwip_get_ipv6_addr(&lwip_netif)) {
addr_type = NETCONN_DNS_IPV4_IPV6;
} else {
addr_type = NETCONN_DNS_IPV4;
}
} }
} else if (version == NSAPI_IPv4) { } else if (version == NSAPI_IPv4) {
addr_type = NETCONN_DNS_IPV4; addr_type = NETCONN_DNS_IPV4;
} else if (version == NSAPI_IPv6) { } else if (version == NSAPI_IPv6) {
addr_type = NETCONN_DNS_IPV6; addr_type = NETCONN_DNS_IPV6;
} else {
return NSAPI_ERROR_DNS_FAILURE;
} }
err_t err = netconn_gethostbyname_addrtype(host, &lwip_addr, addr_type); err_t err = netconn_gethostbyname_addrtype(host, &lwip_addr, addr_type);
#elif LWIP_IPV4 #elif LWIP_IPV4