qcacld-3.0: Consider connected AP for roaming candidate
If reassoc MAC from user space is broadcast MAC as: "wpa_cli DRIVER FASTREASSOC ff:ff:ff:ff:ff:ff 0", user space invoked roaming candidate selection will be based on firmware score algorithm, current connection will be kept if current AP has highest score. It is requirement from customer which can avoid ping-pong roaming. Change-Id: I8de3e2a26a6f346c900157aa823205f849d233f7 CRs-Fixed: 3106276
This commit is contained in:

committed by
Madan Koyyalamudi

parent
03832d28a5
commit
cd9d714bbb
@@ -1039,9 +1039,17 @@ QDF_STATUS cm_fw_roam_invoke_fail(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
cm_remove_cmd(cm_ctx, &cm_id);
|
||||
|
||||
if (source == CM_ROAMING_HOST ||
|
||||
source == CM_ROAMING_NUD_FAILURE)
|
||||
/*
|
||||
* If reassoc MAC from user space is broadcast MAC as:
|
||||
* "wpa_cli DRIVER FASTREASSOC ff:ff:ff:ff:ff:ff 0",
|
||||
* user space invoked roaming candidate selection will base on firmware
|
||||
* score algorithm, current connection will be kept if current AP has
|
||||
* highest score. It is requirement from customer which can avoid
|
||||
* ping-pong roaming.
|
||||
*/
|
||||
if (qdf_is_macaddr_broadcast(&roam_req->req.bssid))
|
||||
mlme_debug("Keep current connection");
|
||||
else if (source == CM_ROAMING_HOST || source == CM_ROAMING_NUD_FAILURE)
|
||||
status = mlo_disconnect(vdev, CM_ROAM_DISCONNECT,
|
||||
REASON_USER_TRIGGERED_ROAM_FAILURE,
|
||||
NULL);
|
||||
|
@@ -5074,8 +5074,7 @@ QDF_STATUS cm_start_roam_invoke(struct wlan_objmgr_psoc *psoc,
|
||||
if (source == CM_ROAMING_FW)
|
||||
goto send_evt;
|
||||
|
||||
if (qdf_is_macaddr_zero(bssid) ||
|
||||
cm_req->roam_req.req.source == CM_ROAMING_NUD_FAILURE) {
|
||||
if (qdf_is_macaddr_zero(bssid)) {
|
||||
if (!wlan_mlme_is_data_stall_recovery_fw_supported(psoc)) {
|
||||
mlme_debug("FW does not support data stall recovery, aborting roam invoke");
|
||||
qdf_mem_free(cm_req);
|
||||
@@ -5086,6 +5085,12 @@ QDF_STATUS cm_start_roam_invoke(struct wlan_objmgr_psoc *psoc,
|
||||
goto send_evt;
|
||||
}
|
||||
|
||||
if (qdf_is_macaddr_broadcast(bssid)) {
|
||||
qdf_copy_macaddr(&cm_req->roam_req.req.bssid, bssid);
|
||||
mlme_debug("Roam only if better candidate found else stick to current AP");
|
||||
goto send_evt;
|
||||
}
|
||||
|
||||
wlan_vdev_get_bss_peer_mac(vdev, &connected_bssid);
|
||||
if (qdf_is_macaddr_equal(bssid, &connected_bssid)) {
|
||||
mlme_debug("Reassoc BSSID is same as currently associated AP");
|
||||
@@ -5399,6 +5404,11 @@ cm_send_roam_invoke_req(struct cnx_mgr *cm_ctx, struct cm_req *req)
|
||||
goto send_cmd;
|
||||
}
|
||||
|
||||
if (qdf_is_macaddr_broadcast(&roam_req->req.bssid)) {
|
||||
qdf_copy_macaddr(&roam_invoke_req->target_bssid,
|
||||
&roam_req->req.bssid);
|
||||
goto send_cmd;
|
||||
}
|
||||
if (qdf_is_macaddr_equal(&roam_req->req.bssid, &connected_bssid))
|
||||
roam_invoke_req->is_same_bssid = true;
|
||||
|
||||
|
Reference in New Issue
Block a user