Browse Source

qcacld-3.0: Add basic rates if probe rsp don't have supported rates

Some IOT APs set supported rates to zero in probe response. Host uses
probe response/beacon to update scan cache. Host uses supported rates
from scan cache to update in assoc request.

As the supported rates in probe response are zeros, host doesn't
add supported rate IE in assoc request which leads to association
failure. Hence add BSS basic rates in assoc request if supported
rates in scan cache is not present.

Change-Id: Ie2d75a980f5aede0b7985ddf385516a6b15c7560
CRs-Fixed: 2706797
Abhishek Ambure 4 years ago
parent
commit
f9dc5f972f
1 changed files with 25 additions and 3 deletions
  1. 25 3
      core/sme/src/csr/csr_api_roam.c

+ 25 - 3
core/sme/src/csr/csr_api_roam.c

@@ -15033,9 +15033,19 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 				qdf_mem_copy(&csr_join_req->operationalRateSet.
 						rate, OpRateSet.rate,
 						OpRateSet.numRates);
-			} else
-				csr_join_req->operationalRateSet.numRates = 0;
+			} else if (pProfile->phyMode == eCSR_DOT11_MODE_AUTO &&
+				   WLAN_REG_IS_24GHZ_CH_FREQ(
+						pBssDescription->chan_freq)) {
+				/*
+				 * Some IOT APs don't send supported rates in
+				 * probe resp, hence add BSS basic rates in
+				 * supported rates IE of assoc request.
+				 */
+				tSirMacRateSet b_rates;
 
+				csr_populate_basic_rates(&b_rates, false, true);
+				csr_join_req->operationalRateSet = b_rates;
+			}
 			/* ExtendedRateSet */
 			if (ExRateSet.numRates) {
 				csr_join_req->extendedRateSet.numRates =
@@ -15043,8 +15053,20 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId,
 				qdf_mem_copy(&csr_join_req->extendedRateSet.
 						rate, ExRateSet.rate,
 						ExRateSet.numRates);
-			} else
+			} else {
 				csr_join_req->extendedRateSet.numRates = 0;
+			}
+		} else if (pProfile->phyMode == eCSR_DOT11_MODE_AUTO &&
+			   WLAN_REG_IS_24GHZ_CH_FREQ(
+					pBssDescription->chan_freq)) {
+			/*
+			 * To connect IOT AP, add basic rates in supported
+			 * rates IE of assoc req.
+			 */
+			tSirMacRateSet b_rates;
+
+			csr_populate_basic_rates(&b_rates, false, true);
+			csr_join_req->operationalRateSet = b_rates;
 		} else {
 			csr_join_req->operationalRateSet.numRates = 0;
 			csr_join_req->extendedRateSet.numRates = 0;