]> granicus.if.org Git - esp-idf/commitdiff
mesh: update libs
authorqiyueixa <qiyuexia@espressif.com>
Wed, 26 Dec 2018 08:10:55 +0000 (16:10 +0800)
committerqiyueixa <qiyuexia@espressif.com>
Wed, 26 Dec 2018 08:10:55 +0000 (16:10 +0800)
1. when no parent is found, send probe request via broadcast.
2. fix memory leak caused by the remove announcement being sent is not released when esp_mesh_stop() is called.
3. fix modify IE encrypt after mesh is started.
4. ignore esp_mesh_connect() if mesh automatic reconnection is enabled.
5. fix reason is cleared before vote is done.

components/esp32/include/esp_mesh.h
components/esp32/lib
examples/mesh/manual_networking/main/mesh_main.c

index 62b05d7c0c9cf4e81dda63fedd3ff175bd9ac963..8f8d03794de0e2dd04c41ce5274c45fffa488f41 100644 (file)
@@ -624,6 +624,7 @@ esp_err_t esp_mesh_stop(void);
  *             - If the packet is to an external IP network, set this parameter to the IPv4:PORT combination.
  *               This packet will be delivered to the root firstly, then the root will forward this packet to the final IP server address.
  * @param[in]  data  pointer to a sending mesh packet
+ *             - Field size should not exceed MESH_MPS. Note that the size of one mesh packet should not exceed MESH_MTU.
  *             - Field proto should be set to data protocol in use (default is MESH_PROTO_BIN for binary).
  *             - Field tos should be set to transmission tos (type of service) in use (default is MESH_TOS_P2P for point-to-point reliable).
  * @param[in]  flag  bitmap for data sent
@@ -1440,6 +1441,14 @@ esp_err_t esp_mesh_disconnect(void);
  */
 esp_err_t esp_mesh_connect(void);
 
+/**
+ * @brief      Flush scan result
+ *
+ * @return
+ *    - ESP_OK
+ */
+esp_err_t esp_mesh_flush_scan_result(void);
+
 /**
  * @brief      Cause the root device to add Channel Switch Announcement Element (CSA IE) to beacon
  *             - Set the new channel
@@ -1457,6 +1466,18 @@ esp_err_t esp_mesh_connect(void);
  */
 esp_err_t esp_mesh_switch_channel(const uint8_t *new_bssid, int csa_newchan, int csa_count);
 
+/**
+ * @brief      Get the router BSSID
+ *
+ * @param[out] router_bssid  pointer to the router BSSID
+ *
+ * @return
+ *    - ESP_OK
+ *    - ESP_ERR_WIFI_NOT_INIT
+ *    - ESP_ERR_WIFI_ARG
+ */
+esp_err_t esp_mesh_get_router_bssid(uint8_t *router_bssid);
+
 #ifdef __cplusplus
 }
 #endif
index a709618051ef9da220b3b8a8b860e76d854d0e2f..9e729f3065e5b074a92e7515562f7d5a4e087777 160000 (submodule)
@@ -1 +1 @@
-Subproject commit a709618051ef9da220b3b8a8b860e76d854d0e2f
+Subproject commit 9e729f3065e5b074a92e7515562f7d5a4e087777
index 1b3a6f0161fbef5aa4d759af576ff047e431357e..56df30ab6e78421a78cf4e86977a819cae969b80 100644 (file)
@@ -69,6 +69,7 @@ void mesh_scan_done_handler(int num)
                      i, record.ssid, assoc.layer, assoc.layer_cap, assoc.assoc,
                      assoc.assoc_cap, assoc.layer2_cap, MAC2STR(record.bssid),
                      record.primary, record.rssi, MAC2STR(assoc.mesh_id), assoc.encrypted ? "IE Encrypted" : "IE Unencrypted");
+
 #ifdef MESH_SET_NODE
             if (assoc.mesh_type != MESH_IDLE && assoc.layer_cap
                     && assoc.assoc < assoc.assoc_cap && record.rssi > -70) {
@@ -82,6 +83,7 @@ void mesh_scan_done_handler(int num)
                         my_type = MESH_LEAF;
                     }
                     my_layer = parent_assoc.layer + 1;
+                    break;
                 }
             }
 #endif
@@ -99,7 +101,7 @@ void mesh_scan_done_handler(int num)
 #endif
         }
     }
-
+    esp_mesh_flush_scan_result();
     if (parent_found) {
         /*
          * parent
@@ -110,11 +112,20 @@ void mesh_scan_done_handler(int num)
                sizeof(parent_record.ssid));
         parent.sta.bssid_set = 1;
         memcpy(&parent.sta.bssid, parent_record.bssid, 6);
+        ESP_ERROR_CHECK(esp_mesh_set_ap_authmode(parent_record.authmode));
         if (my_type == MESH_ROOT) {
+            if (parent_record.authmode != WIFI_AUTH_OPEN) {
+                memcpy(&parent.sta.password, CONFIG_MESH_ROUTER_PASSWD,
+                       strlen(CONFIG_MESH_ROUTER_PASSWD));
+            }
             ESP_LOGW(MESH_TAG, "<PARENT>%s, "MACSTR", channel:%u, rssi:%d",
                      parent_record.ssid, MAC2STR(parent_record.bssid),
                      parent_record.primary, parent_record.rssi);
         } else {
+            if (parent_record.authmode != WIFI_AUTH_OPEN) {
+                memcpy(&parent.sta.password, CONFIG_MESH_AP_PASSWD,
+                       strlen(CONFIG_MESH_AP_PASSWD));
+            }
             ESP_LOGW(MESH_TAG,
                      "<PARENT>%s, layer:%d/%d, assoc:%d/%d, %d, "MACSTR", channel:%u, rssi:%d",
                      parent_record.ssid, parent_assoc.layer,
@@ -131,13 +142,14 @@ void mesh_scan_done_handler(int num)
         if (CONFIG_MESH_IE_CRYPTO_FUNCS) {
             /* modify IE crypto key */
             ESP_LOGW(MESH_TAG, "<Config>modify IE crypto key to %s", CONFIG_MESH_IE_CRYPTO_KEY);
+            ESP_ERROR_CHECK(esp_mesh_set_ie_crypto_funcs(&g_wifi_default_mesh_crypto_funcs));
             ESP_ERROR_CHECK(esp_mesh_set_ie_crypto_key(CONFIG_MESH_IE_CRYPTO_KEY, strlen(CONFIG_MESH_IE_CRYPTO_KEY)));
         } else {
             /* disable IE crypto */
             ESP_LOGW(MESH_TAG, "<Config>disable IE crypto");
             ESP_ERROR_CHECK(esp_mesh_set_ie_crypto_funcs(NULL));
         }
-        ESP_ERROR_CHECK(esp_wifi_scan_stop());
+        esp_wifi_scan_stop();
         scan_config.show_hidden = 1;
         scan_config.scan_type = WIFI_SCAN_TYPE_PASSIVE;
         ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, 0));
@@ -156,7 +168,7 @@ void mesh_event_handler(mesh_event_t event)
         ESP_LOGI(MESH_TAG, "<MESH_EVENT_STARTED>ID:"MACSTR"", MAC2STR(id.addr));
         mesh_layer = esp_mesh_get_layer();
         ESP_ERROR_CHECK(esp_mesh_set_self_organized(0, 0));
-        ESP_ERROR_CHECK(esp_wifi_scan_stop());
+        esp_wifi_scan_stop();
         wifi_scan_config_t scan_config = { 0 };
         /* mesh softAP is hidden */
         scan_config.show_hidden = 1;
@@ -214,7 +226,7 @@ void mesh_event_handler(mesh_event_t event)
         mesh_disconnected_indicator();
         mesh_layer = esp_mesh_get_layer();
         if (event.info.disconnected.reason == WIFI_REASON_ASSOC_TOOMANY) {
-            ESP_ERROR_CHECK(esp_wifi_scan_stop());
+            esp_wifi_scan_stop();
             scan_config.show_hidden = 1;
             scan_config.scan_type = WIFI_SCAN_TYPE_PASSIVE;
             ESP_ERROR_CHECK(esp_wifi_scan_start(&scan_config, 0));