Merge "qcacld-3.0: Fix pmfComebackTimer during roaming" into wlan-cld3.driver.lnx.1.1-dev
diff --git a/core/mac/src/pe/lim/lim_ft.c b/core/mac/src/pe/lim/lim_ft.c
index c8abf32..ba6ef6c 100644
--- a/core/mac/src/pe/lim/lim_ft.c
+++ b/core/mac/src/pe/lim/lim_ft.c
@@ -493,6 +493,7 @@
tSchBeaconStruct *pBeaconStruct;
uint32_t selfDot11Mode;
ePhyChanBondState cbEnabledMode;
+ QDF_STATUS status;
pBeaconStruct = qdf_mem_malloc(sizeof(tSchBeaconStruct));
if (NULL == pBeaconStruct) {
@@ -678,6 +679,19 @@
pftSessionEntry->encryptType = psessionEntry->encryptType;
#ifdef WLAN_FEATURE_11W
pftSessionEntry->limRmfEnabled = psessionEntry->limRmfEnabled;
+
+ if (pftSessionEntry->limRmfEnabled) {
+ pftSessionEntry->pmfComebackTimerInfo.pMac = pMac;
+ pftSessionEntry->pmfComebackTimerInfo.sessionID =
+ psessionEntry->smeSessionId;
+ status = qdf_mc_timer_init(&pftSessionEntry->pmfComebackTimer,
+ QDF_TIMER_TYPE_SW, lim_pmf_comeback_timer_callback,
+ (void *)&pftSessionEntry->pmfComebackTimerInfo);
+ if (!QDF_IS_STATUS_SUCCESS(status))
+ lim_log(pMac, LOGE,
+ FL("cannot init pmf comeback timer."));
+ }
+
#endif
if ((pftSessionEntry->limRFBand == SIR_BAND_2_4_GHZ) &&
(pftSessionEntry->htSupportedChannelWidthSet ==
diff --git a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c
index 573a288..80c8974 100644
--- a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c
+++ b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c
@@ -810,11 +810,34 @@
timeout_value)) {
lim_log(mac_ctx, LOGE,
FL("Failed to start comeback timer."));
+
+ assoc_cnf.resultCode = eSIR_SME_ASSOC_REFUSED;
+ assoc_cnf.protStatusCode =
+ eSIR_MAC_UNSPEC_FAILURE_STATUS;
+
+ /*
+ * Delete Pre-auth context for the
+ * associated BSS
+ */
+ if (lim_search_pre_auth_list(mac_ctx, hdr->sa))
+ lim_delete_pre_auth_node(mac_ctx,
+ hdr->sa);
+
+ goto assocReject;
}
} else {
lim_log(mac_ctx, LOGW,
- FL("ASSOC resp with try again event recvd. "
- "But try again time interval IE is wrong."));
+ FL("ASSOC resp with try again event recvd, but try again time interval IE is wrong"));
+
+ assoc_cnf.resultCode = eSIR_SME_ASSOC_REFUSED;
+ assoc_cnf.protStatusCode =
+ eSIR_MAC_UNSPEC_FAILURE_STATUS;
+
+ /* Delete Pre-auth context for the associated BSS */
+ if (lim_search_pre_auth_list(mac_ctx, hdr->sa))
+ lim_delete_pre_auth_node(mac_ctx, hdr->sa);
+
+ goto assocReject;
}
qdf_mem_free(beacon);
qdf_mem_free(assoc_rsp);