diff options
| author | Ashish Kumar Dhanotiya <adhanoti@codeaurora.org> | 2017-02-16 20:35:58 +0530 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2017-03-01 06:28:04 -0800 |
| commit | bc57d6e342110ec9d81fb2a9a6acc8d35240d3c7 (patch) | |
| tree | 8a6dc8d465609cee5fbfe40c63aeeb120504b214 | |
| parent | 5646e73f9db1559688c8d77a13e47bd1abeafb61 (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.c | 10 | ||||
| -rw-r--r-- | core/sme/src/csr/csr_roam_preauth.c | 17 |
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; |
