Skip to content

Commit 8f04b74

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: micropython#210
1 parent dba3796 commit 8f04b74

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

ports/esp32/modnetwork.c

+6-4
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)