diff options
| author | Siva Mullati <smullati@qti.qualcomm.com> | 2016-07-13 15:11:14 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-07-29 12:05:12 +0530 |
| commit | fd406a4cfd901319f8ac5dc0a500777642aa817d (patch) | |
| tree | 7e4a09ab8c57aab57da9ce9d7ef6803cd347ba50 | |
| parent | 35f1a7ed86d0d790369693b577d0acdcb27dce0e (diff) | |
qcacld-2.0: Indicate teardown to all TDLS peers when disconnect from BSS
When one of the TDLS responder(peer) is not implicit and TDLS
link is established. In that case when TDLS initiator disconnect
from the BSS (say by if down), TDLS initiator does not send any
teardown indication to the TDLS peer. Now therefore, for the
TDLS peer,the link is still enabled.When the STA(TDLS initiator)
comes up again (say by user if up) the frames to peer shall go
via AP link since TDLS is down as far as TDLS initiator is
concerned. However, the peer shall try to respond over the TDLS
link since the peer still maintains the connection/link. This
results in failure of frame delivery.
Fix is to indicate teardown to peers when disconnect from BSS
Change-Id: I1d30d58f4249a29ddad5c1c390c6fbc373ed6cff
CRs-Fixed: 1040610
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 2dd81425a9f6..76f9bc67148e 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -19435,9 +19435,6 @@ static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, int status; hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter); -#ifdef FEATURE_WLAN_TDLS - tANI_U8 staIdx; -#endif ENTER(); @@ -19505,22 +19502,10 @@ static int __wlan_hdd_cfg80211_disconnect( struct wiphy *wiphy, wlan_hdd_cleanup_remain_on_channel_ctx(pAdapter); #ifdef FEATURE_WLAN_TDLS - /* First clean up the tdls peers if any */ - for (staIdx = 0 ; staIdx < pHddCtx->max_num_tdls_sta; staIdx++) { - if ((pHddCtx->tdlsConnInfo[staIdx].sessionId == pAdapter->sessionId) && - (pHddCtx->tdlsConnInfo[staIdx].staId)) { - uint8 *mac; - mac = pHddCtx->tdlsConnInfo[staIdx].peerMac.bytes; - hddLog(VOS_TRACE_LEVEL_INFO, - "%s: call sme_DeleteTdlsPeerSta staId %d sessionId %d " MAC_ADDRESS_STR, - __func__, pHddCtx->tdlsConnInfo[staIdx].staId, - pAdapter->sessionId, - MAC_ADDR_ARRAY(mac)); - sme_DeleteTdlsPeerSta(WLAN_HDD_GET_HAL_CTX(pAdapter), - pAdapter->sessionId, - mac); - } - } + /* Delete all connected TDLS peers by sending deauth */ + hddLog(LOG1, FL("Delete all connected TDLS peers")); + sme_delete_all_tdls_peers(WLAN_HDD_GET_HAL_CTX(pAdapter), + pAdapter->sessionId); #endif hddLog(LOGE, FL("Disconnect request from user space with reason: %s"), |
