Skip to content
This repository was archived by the owner on Sep 6, 2023. It is now read-only.

Commit acdafa1

Browse files
MrSurlydpgeorge
authored andcommitted
esp32/modnetwork.c: Fix for setting DNS with network.WLAN.ifconfig().
When configuring a static set of values with ifconfig() the DNS was not being set. This patch fixes that, and additionally uses the tcpip_adapter API to ensure it is thread safe. Further discussion is here: #210
1 parent 74b1df2 commit acdafa1

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

ports/esp32/modnetwork.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,16 +328,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp_isconnected_obj, esp_isconnected);
328328
STATIC mp_obj_t esp_ifconfig(size_t n_args, const mp_obj_t *args) {
329329
wlan_if_obj_t *self = MP_OBJ_TO_PTR(args[0]);
330330
tcpip_adapter_ip_info_t info;
331-
ip_addr_t dns_addr;
331+
tcpip_adapter_dns_info_t dns_info;
332332
tcpip_adapter_get_ip_info(self->if_id, &info);
333+
tcpip_adapter_get_dns_info(self->if_id, TCPIP_ADAPTER_DNS_MAIN, &dns_info);
333334
if (n_args == 1) {
334335
// get
335-
dns_addr = dns_getserver(0);
336336
mp_obj_t tuple[4] = {
337337
netutils_format_ipv4_addr((uint8_t*)&info.ip, NETUTILS_BIG),
338338
netutils_format_ipv4_addr((uint8_t*)&info.netmask, NETUTILS_BIG),
339339
netutils_format_ipv4_addr((uint8_t*)&info.gw, NETUTILS_BIG),
340-
netutils_format_ipv4_addr((uint8_t*)&dns_addr, NETUTILS_BIG),
340+
netutils_format_ipv4_addr((uint8_t*)&dns_info.ip, NETUTILS_BIG),
341341
};
342342
return mp_obj_new_tuple(4, tuple);
343343
} else {
@@ -356,16 +356,18 @@ STATIC mp_obj_t esp_ifconfig(size_t n_args, const mp_obj_t *args) {
356356
netutils_parse_ipv4_addr(items[1], (void*)&info.netmask, NETUTILS_BIG);
357357
}
358358
netutils_parse_ipv4_addr(items[2], (void*)&info.gw, NETUTILS_BIG);
359-
netutils_parse_ipv4_addr(items[3], (void*)&dns_addr, NETUTILS_BIG);
359+
netutils_parse_ipv4_addr(items[3], (void*)&dns_info.ip, NETUTILS_BIG);
360360
// To set a static IP we have to disable DHCP first
361361
if (self->if_id == WIFI_IF_STA) {
362362
esp_err_t e = tcpip_adapter_dhcpc_stop(WIFI_IF_STA);
363363
if (e != ESP_OK && e != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED) _esp_exceptions(e);
364364
ESP_EXCEPTIONS(tcpip_adapter_set_ip_info(WIFI_IF_STA, &info));
365+
ESP_EXCEPTIONS(tcpip_adapter_set_dns_info(WIFI_IF_STA, TCPIP_ADAPTER_DNS_MAIN, &dns_info));
365366
} else if (self->if_id == WIFI_IF_AP) {
366367
esp_err_t e = tcpip_adapter_dhcps_stop(WIFI_IF_AP);
367368
if (e != ESP_OK && e != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED) _esp_exceptions(e);
368369
ESP_EXCEPTIONS(tcpip_adapter_set_ip_info(WIFI_IF_AP, &info));
370+
ESP_EXCEPTIONS(tcpip_adapter_set_dns_info(WIFI_IF_AP, TCPIP_ADAPTER_DNS_MAIN, &dns_info));
369371
ESP_EXCEPTIONS(tcpip_adapter_dhcps_start(WIFI_IF_AP));
370372
}
371373
return mp_const_none;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy