summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiva Mullati <smullati@qti.qualcomm.com>2016-07-13 15:11:14 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-07-29 12:05:12 +0530
commitfd406a4cfd901319f8ac5dc0a500777642aa817d (patch)
tree7e4a09ab8c57aab57da9ce9d7ef6803cd347ba50
parent35f1a7ed86d0d790369693b577d0acdcb27dce0e (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.c23
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"),