From bc20f7e76e83f807ab54232b84cb13a20eacb8a8 Mon Sep 17 00:00:00 2001 From: "tarun.kumar" Date: Wed, 26 Aug 2026 14:46:09 +0530 Subject: [PATCH] fix(wifi): Send Low RSSI reason in BTM Query for roaming Roaming previously used REASON_RSSI (5), which APs decode as Load Balancing. Send Low RSSI (16) from RoamingApp and the example without changing the public btm_query_reason enum. --- .../wifi_apps/roaming_app/src/roaming_app.c | 5 +++- .../roaming_11kvr/main/roaming_example.c | 25 +++++++++++-------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/components/esp_wifi/wifi_apps/roaming_app/src/roaming_app.c b/components/esp_wifi/wifi_apps/roaming_app/src/roaming_app.c index bb9b8d4e2cf..bc2b731a006 100644 --- a/components/esp_wifi/wifi_apps/roaming_app/src/roaming_app.c +++ b/components/esp_wifi/wifi_apps/roaming_app/src/roaming_app.c @@ -33,6 +33,8 @@ #include "common/wpa_common.h" #include "esp_wpas_glue.h" +#define BTM_QUERY_REASON_LOW_RSSI 16 + static struct roaming_app g_roaming_app; extern bool current_task_is_wifi_task(void); @@ -1440,7 +1442,8 @@ static bool trigger_network_assisted_roam(struct cand_bss *bss) btm_candidates = query_list; } - if (esp_wnm_send_bss_transition_mgmt_query(REASON_RSSI, btm_candidates, 1) < 0) { + if (esp_wnm_send_bss_transition_mgmt_query((enum btm_query_reason)BTM_QUERY_REASON_LOW_RSSI, + btm_candidates, 1) < 0) { ESP_LOGD(ROAMING_TAG, "failed to send btm query"); os_free(query_list); return false; diff --git a/examples/wifi/roaming/roaming_11kvr/main/roaming_example.c b/examples/wifi/roaming/roaming_11kvr/main/roaming_example.c index 35a201b8ed5..cd7b3c3efe7 100644 --- a/examples/wifi/roaming/roaming_11kvr/main/roaming_example.c +++ b/examples/wifi/roaming/roaming_11kvr/main/roaming_example.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Unlicense OR CC0-1.0 */ @@ -20,6 +20,8 @@ #include "esp_netif.h" #include +#define BTM_QUERY_REASON_LOW_RSSI 16 + /* Configuration */ #define EXAMPLE_WIFI_SSID CONFIG_EXAMPLE_WIFI_SSID #define EXAMPLE_WIFI_PASSWORD CONFIG_EXAMPLE_WIFI_PASSWORD @@ -344,18 +346,18 @@ static void esp_neighbor_report_recv_handler(void* arg, esp_event_base_t event_b wifi_scan_config_t params; memset(¶ms, 0, sizeof(wifi_scan_config_t)); if (esp_wifi_scan_start(¶ms, true) != ESP_OK) { - goto cleanup; - } - /* cleanup from net802.11 */ + goto cleanup; + } + /* cleanup from net802.11 */ esp_wifi_clear_ap_list(); cand_list = 1; - } - /* send AP btm query, this will cause STA to roam as well */ - esp_wnm_send_bss_transition_mgmt_query(REASON_FRAME_LOSS, neighbor_list, cand_list); + } + /* send AP btm query, this will cause STA to roam as well */ + esp_wnm_send_bss_transition_mgmt_query(REASON_FRAME_LOSS, neighbor_list, cand_list); cleanup: - if (neighbor_list) - free(neighbor_list); - + if (neighbor_list) { + free(neighbor_list); + } } #if EXAMPLE_WIFI_RSSI_THRESHOLD @@ -369,7 +371,8 @@ static void esp_bss_rssi_low_handler(void* arg, esp_event_base_t event_base, if (esp_rrm_send_neighbor_report_request() < 0) { /* failed to send neighbor report request */ ESP_LOGI(TAG, "failed to send neighbor report request"); - if (esp_wnm_send_bss_transition_mgmt_query(REASON_FRAME_LOSS, NULL, 0) < 0) { + if (esp_wnm_send_bss_transition_mgmt_query((enum btm_query_reason)BTM_QUERY_REASON_LOW_RSSI, + NULL, 0) < 0) { ESP_LOGI(TAG, "failed to send btm query"); } } else {