summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/hdd/src/wlan_hdd_cfg80211.c2
-rw-r--r--core/sme/inc/csr_api.h1
-rw-r--r--core/sme/src/common/sme_api.c5
-rw-r--r--core/sme/src/csr/csr_api_roam.c8
4 files changed, 16 insertions, 0 deletions
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index 06581e96d453..49bf0f87a73f 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -10591,8 +10591,10 @@ static int wlan_hdd_cfg80211_connect_start(hdd_adapter_t *pAdapter,
qdf_mem_copy((void *)(pRoamProfile->SSIDs.SSIDList->SSID.ssId),
ssid, ssid_len);
+ pRoamProfile->do_not_roam = false;
if (bssid) {
pRoamProfile->BSSIDs.numOfBSSIDs = 1;
+ pRoamProfile->do_not_roam = true;
qdf_mem_copy((void *)(pRoamProfile->BSSIDs.bssid),
bssid, QDF_MAC_ADDR_SIZE);
/*
diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h
index 70e175cee25b..c68f20546ab7 100644
--- a/core/sme/inc/csr_api.h
+++ b/core/sme/inc/csr_api.h
@@ -967,6 +967,7 @@ typedef struct tagCsrRoamProfile {
uint8_t beacon_tx_rate;
tSirMacRateSet supp_rate_set;
tSirMacRateSet extended_rate_set;
+ bool do_not_roam;
} tCsrRoamProfile;
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c
index 122e5839597b..cf838f0b41da 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -8937,6 +8937,7 @@ QDF_STATUS sme_config_fast_roaming(tHalHandle hal, uint8_t session_id,
const bool is_fast_roam_enabled)
{
tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal);
+ tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
QDF_STATUS status;
if (!mac_ctx->roam.configParam.isFastRoamIniFeatureEnabled) {
@@ -8945,6 +8946,10 @@ QDF_STATUS sme_config_fast_roaming(tHalHandle hal, uint8_t session_id,
return QDF_STATUS_SUCCESS;
return QDF_STATUS_E_FAILURE;
}
+
+ if (is_fast_roam_enabled && session && session->pCurRoamProfile)
+ session->pCurRoamProfile->do_not_roam = false;
+
status = csr_neighbor_roam_update_fast_roaming_enabled(mac_ctx,
session_id, is_fast_roam_enabled);
if (!QDF_IS_STATUS_SUCCESS(status)) {
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 4465d1e6b640..9b9207374642 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -7209,6 +7209,7 @@ QDF_STATUS csr_roam_copy_profile(tpAniSirGlobal pMac,
pDstProfile->wps_state = pSrcProfile->wps_state;
pDstProfile->ieee80211d = pSrcProfile->ieee80211d;
pDstProfile->sap_dot11mc = pSrcProfile->sap_dot11mc;
+ pDstProfile->do_not_roam = pSrcProfile->do_not_roam;
qdf_mem_copy(&pDstProfile->Keys, &pSrcProfile->Keys,
sizeof(pDstProfile->Keys));
#ifdef WLAN_FEATURE_11W
@@ -17406,6 +17407,13 @@ csr_roam_offload_scan(tpAniSirGlobal mac_ctx, uint8_t session_id,
FL("session is null"));
return QDF_STATUS_E_FAILURE;
}
+
+ if ((ROAM_SCAN_OFFLOAD_START == command) && session->pCurRoamProfile &&
+ session->pCurRoamProfile->do_not_roam) {
+ sms_log(mac_ctx, LOGE,
+ FL("Supplicant disabled driver roaming"));
+ return QDF_STATUS_E_FAILURE;
+ }
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
if (session->roam_synch_in_progress
&& (ROAM_SCAN_OFFLOAD_STOP == command)) {