Browse Source

qcacld-3.0: Fix PMF configuration for LFR2 and LFR3 roaming

This commit will fix the incorrect pmf config param for STA DUT
in-case of LFR2/3 roaming scenario.

Change-Id: Ic0d6d4632cfeaa0589b435a6710f3c2380cf5883
CRs-Fixed: 935947
Krunal Soni 9 years ago
parent
commit
b2f1304e77

+ 15 - 0
core/sme/src/csr/csr_api_roam.c

@@ -974,6 +974,11 @@ CDF_STATUS csr_roam_copy_connect_profile(tpAniSirGlobal pMac,
 			pProfile->eseCckmInfo.krk_plumbed =
 				connected_prof->eseCckmInfo.krk_plumbed;
 		}
+#endif
+#ifdef WLAN_FEATURE_11W
+		pProfile->MFPEnabled = connected_prof->MFPEnabled;
+		pProfile->MFPRequired = connected_prof->MFPRequired;
+		pProfile->MFPCapable = connected_prof->MFPCapable;
 #endif
 	}
 	return status;
@@ -6932,6 +6937,11 @@ CDF_STATUS csr_roam_copy_connected_profile(tpAniSirGlobal pMac,
 			pSrcProfile->MDID.mobilityDomain;
 	}
 #endif
+#ifdef WLAN_FEATURE_11W
+	pDstProfile->MFPEnabled = pSrcProfile->MFPEnabled;
+	pDstProfile->MFPRequired = pSrcProfile->MFPRequired;
+	pDstProfile->MFPCapable = pSrcProfile->MFPCapable;
+#endif
 
 end:
 	if (!CDF_IS_STATUS_SUCCESS(status)) {
@@ -13261,6 +13271,11 @@ csr_roam_remove_connected_bss_from_scan_cache(tpAniSirGlobal pMac,
 	pScanFilter->bOSENAssociation = false;
 	pScanFilter->countryCode[0] = 0;
 	pScanFilter->phyMode = eCSR_DOT11_MODE_AUTO;
+#ifdef WLAN_FEATURE_11W
+	pScanFilter->MFPEnabled = pConnProfile->MFPEnabled;
+	pScanFilter->MFPRequired = pConnProfile->MFPRequired;
+	pScanFilter->MFPCapable = pConnProfile->MFPCapable;
+#endif
 	csr_ll_lock(&pMac->scan.scanResultList);
 	pEntry = csr_ll_peek_head(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK);
 	while (pEntry) {

+ 14 - 6
core/sme/src/csr/csr_neighbor_roam.c

@@ -2056,20 +2056,28 @@ bool csr_neighbor_roam_is_ssid_and_security_match(tpAniSirGlobal pMac,
 			pIes->SSID.ssid,
 			pIes->SSID.num_ssid, true);
 	if (true == fMatch) {
+#ifdef WLAN_FEATURE_11W
 		/*
-		 * for now we are sending NULL for all PMF related filter
-		 * parameters during roam to the neighbor AP because
-		 * so far 80211W spec doesn't specify anything about
-		 * roaming scenario.
+		 * We are sending current connected APs profile setting
+		 * if other AP doesn't have the same PMF setting as currently
+		 * connected AP then we will have some issues in roaming.
 		 *
-		 * Once roaming scenario is defined, we should re-visit
-		 * this section and remove this comment.
+		 * Make sure all the APs have same PMF settings to avoid
+		 * any corner cases.
 		 */
+		fMatch = csr_is_security_match(pMac, &authType,
+				&uCEncryptionType, &mCEncryptionType,
+				&pCurProfile->MFPEnabled,
+				&pCurProfile->MFPRequired,
+				&pCurProfile->MFPCapable,
+				pBssDesc, pIes, NULL, NULL, NULL);
+#else
 		fMatch = csr_is_security_match(pMac, &authType,
 				&uCEncryptionType,
 				&mCEncryptionType, NULL,
 				NULL, NULL, pBssDesc,
 				pIes, NULL, NULL, NULL);
+#endif
 		return fMatch;
 	} else {
 		return fMatch;

+ 9 - 0
core/sme/src/csr/csr_util.c

@@ -4867,9 +4867,18 @@ bool csr_match_connected_bss_security(tpAniSirGlobal pMac,
 	authList.numEntries = 1;
 	authList.authType[0] = pProfile->AuthType;
 
+#ifdef WLAN_FEATURE_11W
+	return csr_is_security_match(pMac, &authList, &ucEncryptionList,
+					&mcEncryptionList,
+					&pProfile->MFPEnabled,
+					&pProfile->MFPRequired,
+					&pProfile->MFPCapable,
+					pBssDesc, pIes, NULL, NULL, NULL);
+#else
 	return csr_is_security_match(pMac, &authList, &ucEncryptionList,
 				      &mcEncryptionList, NULL, NULL, NULL,
 				      pBssDesc, pIes, NULL, NULL, NULL);
+#endif
 
 }