qcacld-3.0: Prioritize the bssid_hint and if fails try with other BSS
qcacld-2.0 to qcacld-3.0 propagation
If connect request has bssid_hint the behaviour is same as
when connect request has bssid present. So driver only try
to connect to BSSID present in the bssid_hint.
With this change if bssid_hint is provided in connect request
driver will prioritize connection to the BSSID provided and if it
fails to connect to bssid_hint, driver will try to connect to
other APs with same profile.
Change-Id: Ie7fd29cdfb2013aca1d4944272da6b3c29a16ab3
CRs-Fixed: 1107816
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index d8a4205..241d7b6 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -11910,6 +11910,12 @@
ssid, ssid_len);
pRoamProfile->do_not_roam = !pAdapter->fast_roaming_allowed;
+ /* cleanup bssid hint */
+ qdf_mem_zero(pRoamProfile->bssid_hint.bytes,
+ QDF_MAC_ADDR_SIZE);
+ qdf_mem_zero((void *)(pRoamProfile->BSSIDs.bssid),
+ QDF_MAC_ADDR_SIZE);
+
if (bssid) {
pRoamProfile->BSSIDs.numOfBSSIDs = 1;
pRoamProfile->do_not_roam = true;
@@ -11925,9 +11931,8 @@
bssid, QDF_MAC_ADDR_SIZE);
hdd_info("bssid is given by upper layer %pM", bssid);
} else if (bssid_hint) {
- pRoamProfile->BSSIDs.numOfBSSIDs = 1;
- qdf_mem_copy((void *)(pRoamProfile->BSSIDs.bssid),
- bssid_hint, QDF_MAC_ADDR_SIZE);
+ qdf_mem_copy(pRoamProfile->bssid_hint.bytes,
+ bssid_hint, QDF_MAC_ADDR_SIZE);
/*
* Save BSSID in a separate variable as
* pRoamProfile's BSSID is getting zeroed out in the
@@ -11938,10 +11943,6 @@
bssid_hint, QDF_MAC_ADDR_SIZE);
hdd_info("bssid_hint is given by upper layer %pM",
bssid_hint);
- } else {
- qdf_mem_zero((void *)(pRoamProfile->BSSIDs.bssid),
- QDF_MAC_ADDR_SIZE);
- hdd_info("no bssid given by upper layer");
}
hdd_notice("Connect to SSID: %.*s operating Channel: %u",