qcacld-3.0: Filter the blacklist BSSID in scan for ssid

Currently the driver sends a unicast probe request
to the BSSID which is blacklisted, which in turns
violate the SPEC, as the BSSID maybe rejected as
part of OCE assoc reject.

Fix is to check if the BSSID is blacklisted, don't
go for unicast probes.

Change-Id: I14f283d7425d40706cef29db38b48333ee9a7fff
CRs-Fixed: 2500273
This commit is contained in:
gaurank kathpalia 2019-08-05 11:25:26 +05:30 • committed by nshrivas
commit c3587d0340
2 changed files with 14 additions and 12 deletions

View file

@ -8238,7 +8238,11 @@ QDF_STATUS csr_roam_connect(struct mac_context *mac, uint32_t sessionId,
status);
fCallCallback = true;
}
} else if (status != QDF_STATUS_E_EXISTS) {
} else if (status == QDF_STATUS_E_EXISTS &&
pProfile->BSSIDs.numOfBSSIDs) {
sme_debug("Scan entries removed either due to rssi reject or assoc disallowed");
fCallCallback = true;
} else {
/* scan for this SSID */
status = csr_scan_for_ssid(mac, sessionId, pProfile,
roamId, true);
@ -8249,9 +8253,6 @@ QDF_STATUS csr_roam_connect(struct mac_context *mac, uint32_t sessionId,
} else {
sme_debug("SSID scan requested");
}
} else {
sme_debug("Scan entries removed either due to rssi reject or assoc disallowed");
fCallCallback = true;
}
} else {
fCallCallback = true;

View file

@ -2772,7 +2772,7 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
qdf_list_t *list = NULL;
struct scan_filter *filter = NULL;
struct wlan_objmgr_pdev *pdev = NULL;
uint32_t num_bss;
uint32_t num_bss = 0;
if (results)
*results = CSR_INVALID_SCANRESULT_HANDLE;
@ -2800,16 +2800,20 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
list = ucfg_scan_get_result(pdev,
pFilter ? filter : NULL);
if (list)
sme_debug("num_entries %d", qdf_list_size(list));
if (list) {
num_bss = qdf_list_size(list);
sme_debug("num_entries %d", num_bss);
}
/* Filter the scan list with the blacklist, rssi reject, avoided APs */
if (pFilter && pFilter->csrPersona == QDF_STA_MODE)
wlan_blm_filter_bssid(pdev, list);
if (!list || (list && !qdf_list_size(list))) {
sme_debug("scan list empty");
status = QDF_STATUS_E_NULL_VALUE;
if (num_bss)
status = QDF_STATUS_E_EXISTS;
else
status = QDF_STATUS_E_NULL_VALUE;
goto error;
}
@ -2823,9 +2827,6 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
ret_list->pCurEntry = NULL;
status = csr_parse_scan_list(mac_ctx,
ret_list, list);
num_bss = csr_ll_count(&ret_list->List);
sme_debug("status: %d No of BSS: %d",
status, num_bss);
if (QDF_IS_STATUS_ERROR(status) || !results)
/* Fail or No one wants the result. */
csr_scan_result_purge(mac_ctx, (tScanResultHandle) ret_list);