Explorar el Código

qcacld-3.0: Support fast transition with open security

wlan-cld3.driver.lnx.1.1-dev to wlan-cld3.driver.lnx.2.0-dev 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
Ashish Kumar Dhanotiya hace 8 años
padre
commit
d097251612
Se han modificado 2 ficheros con 25 adiciones y 2 borrados
  1. 8 2
      core/mac/src/pe/lim/lim_ft_preauth.c
  2. 17 0
      core/sme/src/csr/csr_roam_preauth.c

+ 8 - 2
core/mac/src/pe/lim/lim_ft_preauth.c

@@ -234,17 +234,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;

+ 17 - 0
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;