diff options
| author | Adesh Keremane <adeshk@codeaurora.org> | 2016-11-10 17:42:35 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-12-02 07:00:19 -0800 |
| commit | 9e0e585dfdc40e3d80ecca0fefe6bea8ced55fc9 (patch) | |
| tree | b81d53a2967f3a865b813721bb32eb37952bf1de | |
| parent | e84e0d1ba60d28578db1f60cd717f96c9f712f64 (diff) | |
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
| -rw-r--r-- | CORE/MAC/src/pe/lim/limFT.c | 8 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiRoam.c | 17 |
2 files changed, 24 insertions, 1 deletions
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; |
