summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdesh Keremane <adeshk@codeaurora.org>2016-11-10 17:42:35 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-12-02 07:00:19 -0800
commit9e0e585dfdc40e3d80ecca0fefe6bea8ced55fc9 (patch)
treeb81d53a2967f3a865b813721bb32eb37952bf1de
parente84e0d1ba60d28578db1f60cd717f96c9f712f64 (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.c8
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c17
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;