mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-02 12:14:32 +02:00
Merge branch 'bugfix/fix_mesh_ie_issue_from_leaf_to_root_v5.2' into 'release/v5.2'
fix(wifi/mesh): clear the rootless state in mesh ie when changing from leaf to root (v5.2) See merge request espressif/esp-idf!32987
This commit is contained in:
Submodule components/esp_wifi/lib updated: 8b791fef0a...b0bb937e26
@@ -64,6 +64,12 @@ menu "Example Configuration"
|
|||||||
help
|
help
|
||||||
The number of non-mesh stations allowed to connect in.
|
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
|
config MESH_MAX_LAYER
|
||||||
int "Mesh Max Layer"
|
int "Mesh Max Layer"
|
||||||
range 1 25
|
range 1 25
|
||||||
|
@@ -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_max_layer(CONFIG_MESH_MAX_LAYER));
|
||||||
ESP_ERROR_CHECK(esp_mesh_set_vote_percentage(1));
|
ESP_ERROR_CHECK(esp_mesh_set_vote_percentage(1));
|
||||||
ESP_ERROR_CHECK(esp_mesh_set_ap_assoc_expire(10));
|
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();
|
mesh_cfg_t cfg = MESH_INIT_CONFIG_DEFAULT();
|
||||||
|
#if !MESH_IE_ENCRYPTED
|
||||||
|
cfg.crypto_funcs = NULL;
|
||||||
|
#endif
|
||||||
/* mesh ID */
|
/* mesh ID */
|
||||||
memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6);
|
memcpy((uint8_t *) &cfg.mesh_id, MESH_ID, 6);
|
||||||
/* router */
|
/* router */
|
||||||
|
@@ -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.u_addr.ip4.addr = addr;
|
||||||
dns.ip.type = IPADDR_TYPE_V4;
|
dns.ip.type = IPADDR_TYPE_V4;
|
||||||
dhcps_offer_t dhcps_dns_value = OFFER_DNS;
|
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_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(esp_netif_set_dns_info(netif, ESP_NETIF_DNS_MAIN, &dns));
|
||||||
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_netif_dhcps_start(netif));
|
ESP_ERROR_CHECK_WITHOUT_ABORT(esp_netif_dhcps_start(netif));
|
||||||
@@ -350,6 +349,20 @@ static esp_netif_t* create_mesh_link_ap(void)
|
|||||||
return netif;
|
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
|
* @brief Creates esp-netif for station interface over mesh
|
||||||
*
|
*
|
||||||
@@ -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)
|
esp_err_t mesh_netif_start_root_ap(bool is_root, uint32_t addr)
|
||||||
{
|
{
|
||||||
if (is_root) {
|
if (is_root) {
|
||||||
if (netif_ap) {
|
destory_mesh_link_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;
|
|
||||||
}
|
|
||||||
netif_ap = create_mesh_link_ap();
|
netif_ap = create_mesh_link_ap();
|
||||||
mesh_netif_driver_t driver = mesh_create_if_driver(true, true);
|
mesh_netif_driver_t driver = mesh_create_if_driver(true, true);
|
||||||
if (driver == NULL) {
|
if (driver == NULL) {
|
||||||
@@ -445,13 +453,7 @@ esp_err_t mesh_netifs_start(bool is_root)
|
|||||||
esp_netif_attach(netif_sta, driver);
|
esp_netif_attach(netif_sta, driver);
|
||||||
start_mesh_link_sta();
|
start_mesh_link_sta();
|
||||||
// If we have a AP on NODE -> stop and remove it!
|
// If we have a AP on NODE -> stop and remove it!
|
||||||
if (netif_ap) {
|
destory_mesh_link_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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
@@ -475,12 +477,7 @@ esp_err_t mesh_netifs_stop(void)
|
|||||||
netif_sta = NULL;
|
netif_sta = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (netif_ap) {
|
destory_mesh_link_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;
|
|
||||||
}
|
|
||||||
// reserve the default (STA gets ready to become root)
|
// reserve the default (STA gets ready to become root)
|
||||||
mesh_netif_init_station();
|
mesh_netif_init_station();
|
||||||
start_wifi_link_sta();
|
start_wifi_link_sta();
|
||||||
|
Reference in New Issue
Block a user