Skip to content

Commit

Permalink
Merge branch 'bugfix/update_wifi_mesh_example' into 'master'
Browse files Browse the repository at this point in the history
fix(wifi/mesh): fixed the netif issue when root restart multiple times

See merge request espressif/esp-idf!32200
  • Loading branch information
jack0c committed Aug 1, 2024
2 parents b2c5481 + 5ca25c8 commit d321c06
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 20 deletions.
6 changes: 6 additions & 0 deletions examples/mesh/ip_internal_network/main/Kconfig.projbuild
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ menu "Example Configuration"
help
The number of non-mesh stations allowed to connect in.

config MESH_IE_ENCRYPTED
bool "Mesh IE encrypted"
default y
help
The mesh IE is encrypted by default.

config MESH_MAX_LAYER
int "Mesh Max Layer"
range 1 25
Expand Down
5 changes: 5 additions & 0 deletions examples/mesh/ip_internal_network/main/mesh_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,12 @@ void app_main(void)
ESP_ERROR_CHECK(esp_mesh_set_max_layer(CONFIG_MESH_MAX_LAYER));
ESP_ERROR_CHECK(esp_mesh_set_vote_percentage(1));
ESP_ERROR_CHECK(esp_mesh_set_ap_assoc_expire(10));
/* set blocking time of esp_mesh_send() to 30s, to prevent the esp_mesh_send() from permanently for some reason */
ESP_ERROR_CHECK(esp_mesh_send_block_time(30000));
mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT();
#if !MESH_IE_ENCRYPTED
cfg.crypto_funcs = NULL;
#endif
/* mesh ID */
memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6);
/* router */
Expand Down
37 changes: 17 additions & 20 deletions examples/mesh/ip_internal_network/main/mesh_netif.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ static esp_err_t set_dhcps_dns(esp_netif_t *netif, uint32_t addr)
dns.ip.u_addr.ip4.addr = addr;
dns.ip.type = IPADDR_TYPE_V4;
dhcps_offer_t dhcps_dns_value = OFFER_DNS;
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_netif_dhcps_stop(netif));
ESP_ERROR_CHECK(esp_netif_dhcps_option(netif, ESP_NETIF_OP_SET, ESP_NETIF_DOMAIN_NAME_SERVER, &dhcps_dns_value, sizeof(dhcps_dns_value)));
ESP_ERROR_CHECK(esp_netif_set_dns_info(netif, ESP_NETIF_DNS_MAIN, &dns));
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_netif_dhcps_start(netif));
Expand Down Expand Up @@ -350,6 +349,20 @@ static esp_netif_t* create_mesh_link_ap(void)
return netif;
}

/**
* @brief Destroy esp-netif for AP interface over mesh
*/
static void destory_mesh_link_ap(void)
{
if (netif_ap) {
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_netif_dhcps_stop(netif_ap));
esp_netif_action_disconnected(netif_ap, NULL, 0, NULL);
mesh_delete_if_driver(esp_netif_get_io_driver(netif_ap));
esp_netif_destroy(netif_ap);
netif_ap = NULL;
}
}

/**
* @brief Creates esp-netif for station interface over mesh
*
Expand All @@ -376,12 +389,7 @@ static esp_netif_t* create_mesh_link_sta(void)
esp_err_t mesh_netif_start_root_ap(bool is_root, uint32_t addr)
{
if (is_root) {
if (netif_ap) {
esp_netif_action_disconnected(netif_ap, NULL, 0, NULL);
mesh_delete_if_driver(esp_netif_get_io_driver(netif_ap));
esp_netif_destroy(netif_ap);
netif_ap = NULL;
}
destory_mesh_link_ap();
netif_ap = create_mesh_link_ap();
mesh_netif_driver_t driver = mesh_create_if_driver(true, true);
if (driver == NULL) {
Expand Down Expand Up @@ -445,13 +453,7 @@ esp_err_t mesh_netifs_start(bool is_root)
esp_netif_attach(netif_sta, driver);
start_mesh_link_sta();
// If we have a AP on NODE -> stop and remove it!
if (netif_ap) {
esp_netif_action_disconnected(netif_ap, NULL, 0, NULL);
mesh_delete_if_driver(esp_netif_get_io_driver(netif_ap));
esp_netif_destroy(netif_ap);
netif_ap = NULL;
}

destory_mesh_link_ap();
}
return ESP_OK;
}
Expand All @@ -475,12 +477,7 @@ esp_err_t mesh_netifs_stop(void)
netif_sta = NULL;
}

if (netif_ap) {
esp_netif_action_disconnected(netif_ap, NULL, 0, NULL);
mesh_delete_if_driver(esp_netif_get_io_driver(netif_ap));
esp_netif_destroy(netif_ap);
netif_ap = NULL;
}
destory_mesh_link_ap();
// reserve the default (STA gets ready to become root)
mesh_netif_init_station();
start_wifi_link_sta();
Expand Down

0 comments on commit d321c06

Please sign in to comment.