From 9e0e585dfdc40e3d80ecca0fefe6bea8ced55fc9 Mon Sep 17 00:00:00 2001 From: Adesh Keremane Date: Thu, 10 Nov 2016 17:42:35 +0530 Subject: qcacld-2.0: Support fast transition with open security If station is connected to an AP with open security, fast transition would fail as preauth is attempted only if FT ies are present. To fix this, Preauth is attempted even if FT ies are not present for a 11R connection in open security. Change-Id: I0ac15fc63b4b97a0e2fcecfe70d7cfc1c9277318 CRs-Fixed: 1086498 --- CORE/MAC/src/pe/lim/limFT.c | 8 +++++++- CORE/SME/src/csr/csrApiRoam.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CORE/MAC/src/pe/lim/limFT.c b/CORE/MAC/src/pe/lim/limFT.c index cf42bca429a2..7ddfd03bc1a4 100644 --- a/CORE/MAC/src/pe/lim/limFT.c +++ b/CORE/MAC/src/pe/lim/limFT.c @@ -336,16 +336,22 @@ void limPerformFTPreAuth(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data, tpPESession psessionEntry) { tSirMacAuthFrameBody authFrame; + tANI_U32 session_id; + eCsrAuthType auth_type; if (NULL == psessionEntry) { PELOGE(limLog(pMac, LOGE, FL("psessionEntry is NULL"));) return; } + session_id = psessionEntry->smeSessionId; + auth_type = pMac->roam.roamSession[session_id].connectedProfile.AuthType; + if (psessionEntry->is11Rconnection && psessionEntry->ftPEContext.pFTPreAuthReq) { /* Only 11r assoc has FT IEs */ - if (psessionEntry->ftPEContext.pFTPreAuthReq->ft_ies_length == 0) { + if ((auth_type != eCSR_AUTH_TYPE_OPEN_SYSTEM) && + (psessionEntry->ftPEContext.pFTPreAuthReq->ft_ies_length == 0)) { PELOGE(limLog( pMac, LOGE, "%s: FTIEs for Auth Req Seq 1 is absent", __func__);) diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 1e745f675d16..4703b1354921 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -19093,6 +19093,7 @@ void csrRoamFTPreAuthRspProcessor( tHalHandle hHal, tpSirFTPreAuthRsp pFTPreAuth eCsrAuthType conn_Auth_type; tANI_U32 sessionId = pFTPreAuthRsp->smeSessionId; tCsrRoamSession *pSession = CSR_GET_SESSION( pMac, sessionId ); + tDot11fAuthentication *pAuth = NULL; if (NULL == pSession) { @@ -19200,6 +19201,22 @@ void csrRoamFTPreAuthRspProcessor( tHalHandle hHal, tpSirFTPreAuthRsp pFTPreAuth pSession->ftSmeContext.reassoc_ft_ies = NULL; } + pAuth = (tDot11fAuthentication *) vos_mem_malloc(sizeof(tDot11fAuthentication)); + if(pAuth == NULL) + return; + + status = dot11fUnpackAuthentication(pMac, pFTPreAuthRsp->ft_ies, + pFTPreAuthRsp->ft_ies_length, pAuth); + if (DOT11F_FAILED(status)) + { + smsLog( pMac, LOGE, FL("Failed to parse an Authentication frame")); + } + else if (pAuth->MobilityDomain.present) + { + pSession->ftSmeContext.addMDIE = TRUE; + } + vos_mem_free(pAuth); + if (!ft_ies_length) return; -- cgit v1.2.3