qcacld-3.0: Add self bss roam check for connnect cmd

Add self bss roam check in roam invoke cmd handler,
If ini enable_self_bss_roam is 0, don't permit to roam
to current connected bss, just keep current connection.

Change-Id: I7fe724e26d15bcc008957829e4e3384c60b58773
CRs-Fixed: 3069587
This commit is contained in:
Jianmin Zhu
2021-11-06 12:22:11 +08:00
committed by Madan Koyyalamudi
parent 4b35a94b79
commit 22dd408968
3 changed files with 39 additions and 0 deletions

View File

@@ -2790,6 +2790,17 @@ wlan_mlme_get_idle_roam_min_rssi(struct wlan_objmgr_psoc *psoc, uint32_t *val);
*/ */
QDF_STATUS QDF_STATUS
wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val); wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val);
/**
* wlan_mlme_get_self_bss_roam() - Get self bss roam enable status
* @psoc: pointer to psoc object
* @enable_self_bss_roam: Pointer to self bss roam enable status
*
* Return: QDF Status
*/
QDF_STATUS
wlan_mlme_get_self_bss_roam(struct wlan_objmgr_psoc *psoc,
uint8_t *enable_self_bss_roam);
#else #else
static inline QDF_STATUS static inline QDF_STATUS
wlan_mlme_get_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc, wlan_mlme_get_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc,

View File

@@ -4462,6 +4462,25 @@ wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS
wlan_mlme_get_self_bss_roam(struct wlan_objmgr_psoc *psoc,
uint8_t *enable_self_bss_roam)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj) {
*enable_self_bss_roam =
cfg_get(psoc, CFG_LFR3_ENABLE_SELF_BSS_ROAM);
return QDF_STATUS_E_FAILURE;
}
*enable_self_bss_roam = mlme_obj->cfg.lfr.enable_self_bss_roam;
return QDF_STATUS_SUCCESS;
}
#endif #endif
QDF_STATUS QDF_STATUS

View File

@@ -5072,6 +5072,7 @@ cm_send_roam_invoke_req(struct cnx_mgr *cm_ctx, struct cm_req *req)
struct roam_invoke_req *roam_invoke_req = NULL; struct roam_invoke_req *roam_invoke_req = NULL;
wlan_cm_id cm_id; wlan_cm_id cm_id;
uint8_t vdev_id; uint8_t vdev_id;
uint8_t enable_self_bss_roam = false;
if (!req) if (!req)
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
@@ -5097,6 +5098,14 @@ cm_send_roam_invoke_req(struct cnx_mgr *cm_ctx, struct cm_req *req)
} }
wlan_vdev_get_bss_peer_mac(cm_ctx->vdev, &connected_bssid); wlan_vdev_get_bss_peer_mac(cm_ctx->vdev, &connected_bssid);
wlan_mlme_get_self_bss_roam(psoc, &enable_self_bss_roam);
if (!enable_self_bss_roam &&
qdf_is_macaddr_equal(&roam_req->req.bssid, &connected_bssid)) {
mlme_err(CM_PREFIX_FMT "self bss roam disabled",
CM_PREFIX_REF(vdev_id, cm_id));
status = QDF_STATUS_E_FAILURE;
goto roam_err;
}
roam_invoke_req = qdf_mem_malloc(sizeof(*roam_invoke_req)); roam_invoke_req = qdf_mem_malloc(sizeof(*roam_invoke_req));
if (!roam_invoke_req) { if (!roam_invoke_req) {