Sfoglia il codice sorgente

qcacld-3.0: Initialize PMF timer in create session

Initialize PMF comeback timer in PE create session.

Currenlty PMF comeback timer is initialized in join request and
destroyed in delete session. In offload cases, PE session is
created without join request resulting in destruction of timer
which was not initialized. Add timer initialization in
pe_create_session.

Change-Id: I3dba6713b2bf64cc69f0f2d8322293ff763c0989
CRs-Fixed: 948924
Krishna Kumaar Natarajan 9 anni fa
parent
commit
62bd6b89ab

+ 2 - 18
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -1829,26 +1829,10 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf)
 
 		/* Record if management frames need to be protected */
 #ifdef WLAN_FEATURE_11W
-		if (eSIR_ED_AES_128_CMAC == sme_join_req->MgmtEncryptionType) {
-			CDF_STATUS cdf_status;
+		if (eSIR_ED_AES_128_CMAC == sme_join_req->MgmtEncryptionType)
 			session->limRmfEnabled = 1;
-			session->pmfComebackTimerInfo.pMac = mac_ctx;
-			session->pmfComebackTimerInfo.sessionID =
-				session_id;
-			cdf_status = cdf_mc_timer_init(
-					&session->pmfComebackTimer,
-					CDF_TIMER_TYPE_SW,
-					lim_pmf_comeback_timer_callback,
-					(void *)&session->pmfComebackTimerInfo);
-			if (CDF_STATUS_SUCCESS != cdf_status) {
-				lim_log(mac_ctx, LOGP,
-					FL("cannot init pmf comeback timer."));
-				ret_code = eSIR_LOGP_EXCEPTION;
-				goto end;
-			}
-		} else {
+		else
 			session->limRmfEnabled = 0;
-		}
 #endif
 
 #ifdef FEATURE_WLAN_DIAG_SUPPORT_LIM

+ 13 - 3
core/mac/src/pe/lim/lim_session.c

@@ -384,6 +384,15 @@ pe_create_session(tpAniSirGlobal pMac, uint8_t *bssid, uint8_t *sessionId,
 			CDF_TRACE(CDF_MODULE_ID_PE, CDF_TRACE_LEVEL_ERROR,
 				FL("cannot create or start protectionFieldsResetTimer\n"));
 	}
+
+	session_ptr->pmfComebackTimerInfo.pMac = pMac;
+	session_ptr->pmfComebackTimerInfo.sessionID = *sessionId;
+	status = cdf_mc_timer_init(&session_ptr->pmfComebackTimer,
+			CDF_TIMER_TYPE_SW, lim_pmf_comeback_timer_callback,
+			(void *)&session_ptr->pmfComebackTimerInfo);
+	if (!CDF_IS_STATUS_SUCCESS(status))
+		lim_log(pMac, LOGE, FL("cannot init pmf comeback timer."));
+
 	return &pMac->lim.gpSession[i];
 }
 
@@ -665,9 +674,10 @@ void pe_delete_session(tpAniSirGlobal mac_ctx, tpPESession session)
 		session->addIeParams.probeRespBCNDataLen = 0;
 	}
 #ifdef WLAN_FEATURE_11W
-	/* if PMF connection */
-	if (session->limRmfEnabled)
-		cdf_mc_timer_destroy(&session->pmfComebackTimer);
+	if (CDF_TIMER_STATE_RUNNING ==
+	    cdf_mc_timer_get_current_state(&session->pmfComebackTimer))
+		cdf_mc_timer_stop(&session->pmfComebackTimer);
+	cdf_mc_timer_destroy(&session->pmfComebackTimer);
 #endif
 	session->valid = false;