summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAshish Kumar Dhanotiya <adhanoti@codeaurora.org>2017-02-16 20:35:58 +0530
committerqcabuildsw <qcabuildsw@localhost>2017-03-01 06:28:04 -0800
commitbc57d6e342110ec9d81fb2a9a6acc8d35240d3c7 (patch)
tree8a6dc8d465609cee5fbfe40c63aeeb120504b214
parent5646e73f9db1559688c8d77a13e47bd1abeafb61 (diff)
qcacld-3.0: Support fast transition with open security
qcacld-2.0 to qcacld-3.0 propagation 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/lim_ft_preauth.c10
-rw-r--r--core/sme/src/csr/csr_roam_preauth.c17
2 files changed, 25 insertions, 2 deletions
diff --git a/core/mac/src/pe/lim/lim_ft_preauth.c b/core/mac/src/pe/lim/lim_ft_preauth.c
index 61664b194ec0..c40651654bf8 100644
--- a/core/mac/src/pe/lim/lim_ft_preauth.c
+++ b/core/mac/src/pe/lim/lim_ft_preauth.c
@@ -233,17 +233,23 @@ void lim_perform_ft_pre_auth(tpAniSirGlobal pMac, QDF_STATUS status,
uint32_t *data, tpPESession psessionEntry)
{
tSirMacAuthFrameBody authFrame;
+ unsigned int session_id;
+ eCsrAuthType auth_type;
if (NULL == psessionEntry) {
PELOGE(lim_log(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)) {
lim_log(pMac, LOGE,
FL("FTIEs for Auth Req Seq 1 is absent"));
goto preauth_fail;
diff --git a/core/sme/src/csr/csr_roam_preauth.c b/core/sme/src/csr/csr_roam_preauth.c
index 53c95b2f99e7..05da974b83da 100644
--- a/core/sme/src/csr/csr_roam_preauth.c
+++ b/core/sme/src/csr/csr_roam_preauth.c
@@ -571,6 +571,7 @@ void csr_roam_ft_pre_auth_rsp_processor(tHalHandle hal,
eCsrAuthType conn_Auth_type;
uint32_t session_id = preauth_rsp->smeSessionId;
tCsrRoamSession *csr_session = CSR_GET_SESSION(mac_ctx, session_id);
+ tDot11fAuthentication *p_auth = NULL;
if (NULL == csr_session) {
sms_log(mac_ctx, LOGE, FL("CSR session is NULL"));
@@ -659,6 +660,22 @@ void csr_roam_ft_pre_auth_rsp_processor(tHalHandle hal,
csr_session->ftSmeContext.reassoc_ft_ies_length = 0;
csr_session->ftSmeContext.reassoc_ft_ies = NULL;
}
+ p_auth = (tDot11fAuthentication *) qdf_mem_malloc(
+ sizeof(tDot11fAuthentication));
+
+ if (p_auth == NULL)
+ return;
+
+ status = dot11f_unpack_authentication(mac_ctx,
+ preauth_rsp->ft_ies,
+ preauth_rsp->ft_ies_length, p_auth);
+ if (DOT11F_FAILED(status))
+ sms_log(mac_ctx, LOGE,
+ FL("Failed to parse an Authentication frame"));
+ else if (p_auth->MobilityDomain.present)
+ csr_session->ftSmeContext.addMDIE = true;
+
+ qdf_mem_free(p_auth);
if (!ft_ies_length)
return;