From 48de7dedc8ea8877eb0398aff2fc6f17d9499bac Mon Sep 17 00:00:00 2001 From: Krishna Kumaar Natarajan Date: Tue, 8 Dec 2015 14:43:13 -0800 Subject: [PATCH] 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 --- .../src/pe/lim/lim_process_sme_req_messages.c | 20 ++----------------- core/mac/src/pe/lim/lim_session.c | 16 ++++++++++++--- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index b3933f9fb7a3..ee010b6a4170 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/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 diff --git a/core/mac/src/pe/lim/lim_session.c b/core/mac/src/pe/lim/lim_session.c index d6914543e697..55a126a180dd 100644 --- a/core/mac/src/pe/lim/lim_session.c +++ b/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;