summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiva Mullati <smullati@qti.qualcomm.com>2016-08-02 10:16:41 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-08-03 14:02:10 +0530
commit9f1bd2bd33e9986a1f52ce9c5b3f37de0466d70d (patch)
tree7bb7ed9954ce8a4cebdc28021a451a00fbd24202
parentc030acffb7be92ca35b8af3557b54d1d4c7ddbd1 (diff)
qcacld-2.0: Clear scan cache in kernel cfg80211 when leaving IBSS
In current code, during IBSS join host updates the bss in cfg80211 for that BSSID. But during IBSS leave host is not unlinking the bss from the kernl cache. So the bss reamains exist in the cfg80211 even after leaving IBSS. Fix is to delete scan cache in kerenl cfg80211 and remove BSSID from SME scan list during leave IBSS. Change-Id: Id4dd08d72ba3fb6ed1b4037b038d888379bb9d6f CRs-Fixed: 1049076
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 5e82a3c550d7..347cfabf5b26 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -16642,9 +16642,14 @@ struct cfg80211_bss* wlan_hdd_cfg80211_update_bss_list(
0,
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)) && !defined(WITH_BACKPORTS) \
&& !defined(IEEE80211_PRIVACY)
- WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
+ (pAdapter->device_mode == WLAN_HDD_IBSS) ? \
+ WLAN_CAPABILITY_IBSS : WLAN_CAPABILITY_ESS,
+ (pAdapter->device_mode == WLAN_HDD_IBSS) ? \
+ WLAN_CAPABILITY_IBSS : WLAN_CAPABILITY_ESS);
#else
- IEEE80211_BSS_TYPE_ESS, IEEE80211_PRIVACY_ANY);
+ (pAdapter->device_mode == WLAN_HDD_IBSS) ? \
+ IEEE80211_BSS_TYPE_IBSS : IEEE80211_BSS_TYPE_ESS,
+ IEEE80211_PRIVACY_ANY);
#endif
if (bss == NULL) {
hddLog(LOGE, FL("BSS not present"));
@@ -19827,6 +19832,7 @@ static int __wlan_hdd_cfg80211_leave_ibss(struct wiphy *wiphy,
hdd_wext_state_t *pWextState = WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
tCsrRoamProfile *pRoamProfile;
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
int status;
eHalStatus hal_status;
tSirUpdateIE updateIE;
@@ -19874,6 +19880,13 @@ static int __wlan_hdd_cfg80211_leave_ibss(struct wiphy *wiphy,
hddLog(LOGE, FL("Could not pass on PROBE_RSP_BCN data to PE"));
}
+ /* Delete scan cache in cfg80211 and remove BSSID from SME
+ * scan list
+ */
+ hddLog(LOG1, FL("clear scan cache in kernel cfg80211"));
+ wlan_hdd_cfg80211_update_bss_list(pAdapter, pWextState->req_bssId);
+ sme_remove_bssid_from_scan_list(hHal, pWextState->req_bssId );
+
/* Reset WNI_CFG_PROBE_RSP Flags */
wlan_hdd_reset_prob_rspies(pAdapter);