summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c
index 4fb055b9badc..ca09b87abf74 100644
--- a/CORE/MAC/src/pe/lim/limUtils.c
+++ b/CORE/MAC/src/pe/lim/limUtils.c
@@ -958,6 +958,11 @@ limCleanupMlm(tpAniSirGlobal pMac)
{
tANI_U32 n;
tLimPreAuthNode *pAuthNode;
+#ifdef WLAN_FEATURE_11W
+ tANI_U32 bss_entry, sta_entry;
+ tpDphHashNode pStaDs = NULL;
+ tpPESession psessionEntry = NULL;
+#endif
if (pMac->lim.gLimTimersCreated == 1)
{
@@ -1096,6 +1101,41 @@ limCleanupMlm(tpAniSirGlobal pMac)
pMac->lim.gLimTimersCreated = 0;
}
+#ifdef WLAN_FEATURE_11W
+ /*
+ * When SSR is triggered, we need to loop through
+ * each STA associated per BSSId and deactivate/delete
+ * the pmfSaQueryTimer for it
+ */
+ if (vos_is_logp_in_progress(VOS_MODULE_ID_PE, NULL))
+ {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ FL("SSR is detected, proceed to clean up pmfSaQueryTimer"));
+ for (bss_entry = 0; bss_entry < pMac->lim.maxBssId; bss_entry++)
+ {
+ if (pMac->lim.gpSession[bss_entry].valid)
+ {
+ for (sta_entry = 1; sta_entry < pMac->lim.gLimAssocStaLimit;
+ sta_entry++)
+ {
+ psessionEntry = &pMac->lim.gpSession[bss_entry];
+ pStaDs = dphGetHashEntry(pMac, sta_entry,
+ &psessionEntry->dph.dphHashTable);
+ if (NULL == pStaDs)
+ {
+ continue;
+ }
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ FL("Deleting pmfSaQueryTimer for staid[%d]"),
+ pStaDs->staIndex) ;
+ tx_timer_deactivate(&pStaDs->pmfSaQueryTimer);
+ tx_timer_delete(&pStaDs->pmfSaQueryTimer);
+ }
+ }
+ }
+ }
+#endif
+
/// Cleanup cached scan list
limReInitScanResults(pMac);
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD