From 0104ef37185e90c4e586c0700aa4e3e24fe8a053 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Tue, 19 Mar 2019 15:43:26 +0800 Subject: p2p: finetune group join scan process Sometimes scan might be occupied by WiFi, we just need to fire the scan later but not abort the whole connecting. No need to check scan res handler since we can also use previous scan results with updated request. Bug: 125390567 Test: manually test with FileGo Change-Id: I31a99dfa6c9860d95f25a2b3c8ab8d91e64ffbde --- wpa_supplicant/hidl/1.2/p2p_iface.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/wpa_supplicant/hidl/1.2/p2p_iface.cpp b/wpa_supplicant/hidl/1.2/p2p_iface.cpp index dba66646..bcd96c39 100644 --- a/wpa_supplicant/hidl/1.2/p2p_iface.cpp +++ b/wpa_supplicant/hidl/1.2/p2p_iface.cpp @@ -1675,21 +1675,22 @@ SupplicantStatus P2pIface::addGroup_1_2Internal( wpa_printf(MSG_INFO, "No matched BSS exists, try to find it by scan"); - if (wpa_s->scan_res_handler) { - wpa_printf(MSG_WARNING, "There is on-going scanning, cannot start another scan."); - return {SupplicantStatusCode::FAILURE_UNKNOWN, - "Failed to start scan due to device busy."}; - } - if (pending_scan_res_join_callback != NULL) { - wpa_printf(MSG_WARNING, "There is running group join scan."); - return {SupplicantStatusCode::FAILURE_UNKNOWN, - "Failed to start scan due to device busy."}; + wpa_printf(MSG_WARNING, "P2P: Renew scan result callback with new request."); } pending_join_scan_callback = [wpa_s, ssid, freq]() { - if (0 != joinScanReq(wpa_s, ssid, freq)) { + int ret = joinScanReq(wpa_s, ssid, freq); + // for BUSY case, the scan might be occupied by WiFi. + // Do not give up immediately, but try again later. + if (-EBUSY == ret) { + // re-schedule this join scan and don't consume retry count. + if (pending_scan_res_join_callback) { + wpa_s->p2p_join_scan_count--; + pending_scan_res_join_callback(); + } + } else if (0 != ret) { notifyGroupJoinFailure(wpa_s); pending_scan_res_join_callback = NULL; } @@ -1732,8 +1733,8 @@ SupplicantStatus P2pIface::addGroup_1_2Internal( }; wpa_s->p2p_join_scan_count = 0; - if (0 != joinScanReq(wpa_s, ssid, freq)) { - pending_scan_res_join_callback = NULL; + pending_join_scan_callback(); + if (pending_scan_res_join_callback == NULL) { return {SupplicantStatusCode::FAILURE_UNKNOWN, "Failed to start scan."}; } return {SupplicantStatusCode::SUCCESS, ""}; -- cgit v1.2.3 From 0bb4f862926d833b901415fa19f1aac9f28df4a9 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Thu, 21 Mar 2019 18:41:47 +0800 Subject: bss: fix missing config bss_no_flush_when_down This is Android-specific feature to avoid removing bss on interface down. This config is removed unexpectedly in last upstream merge. Bug: 128935493 Test: manually switch between two access points Change-Id: I718d375f189d2e3bc974f40382c45c48f1d7707c --- wpa_supplicant/config.c | 1 + wpa_supplicant/config_file.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index 2902413f..839dea2d 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -4862,6 +4862,7 @@ static const struct global_parse_data global_fields[] = { { INT_RANGE(gas_rand_mac_addr, 0, 2), 0 }, { INT_RANGE(dpp_config_processing, 0, 2), 0 }, { INT_RANGE(coloc_intf_reporting, 0, 1), 0 }, + { INT_RANGE(bss_no_flush_when_down, 0, 1), 0 }, }; #undef FUNC diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c index f1d865cc..5fcad36e 100644 --- a/wpa_supplicant/config_file.c +++ b/wpa_supplicant/config_file.c @@ -1539,6 +1539,10 @@ static void wpa_config_write_global(FILE *f, struct wpa_config *config) if (config->p2p_interface_random_mac_addr) fprintf(f, "p2p_interface_random_mac_addr=%d\n", config->p2p_interface_random_mac_addr); + if (config->bss_no_flush_when_down) + fprintf(f, "bss_no_flush_when_down=%d\n", + config->bss_no_flush_when_down); + } #endif /* CONFIG_NO_CONFIG_WRITE */ -- cgit v1.2.3