qcacld-3.0: Do not kickout sta if it is in band steering

When a sta is being steered, sending a deauth may interrupt the
association/EAPOL handshake on the new BSS.

Do not kickout sta if it is being steered.

Change-Id: I15dd26bca27699087cdb790de8cb95281dade385
CRs-Fixed: 3042990
This commit is contained in:
bings
2021-07-23 10:17:01 +08:00
committed by Madan Koyyalamudi
parent 9aad58a07d
commit b6c09cbaf4
8 changed files with 202 additions and 8 deletions

View File

@@ -203,3 +203,68 @@ uint32_t wlan_son_get_chan_flag(struct wlan_objmgr_pdev *pdev,
return flags;
}
QDF_STATUS wlan_son_peer_set_kickout_allow(struct wlan_objmgr_vdev *vdev,
struct wlan_objmgr_peer *peer,
bool kickout_allow)
{
struct peer_mlme_priv_obj *peer_priv;
if (!peer) {
qdf_err("invalid peer");
return QDF_STATUS_E_INVAL;
}
if (!vdev) {
qdf_err("invalid vdev");
return QDF_STATUS_E_INVAL;
}
peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
WLAN_UMAC_COMP_MLME);
if (!peer_priv) {
qdf_err("invalid vdev");
return QDF_STATUS_E_INVAL;
}
peer_priv->allow_kickout = kickout_allow;
return QDF_STATUS_SUCCESS;
}
bool wlan_son_peer_is_kickout_allow(struct wlan_objmgr_vdev *vdev,
uint8_t *macaddr)
{
bool kickout_allow = true;
struct wlan_objmgr_peer *peer;
struct wlan_objmgr_psoc *psoc;
struct peer_mlme_priv_obj *peer_priv;
if (!vdev) {
qdf_err("invalid vdev");
return kickout_allow;
}
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc) {
qdf_err("invalid psoc");
return kickout_allow;
}
peer = wlan_objmgr_get_peer_by_mac(psoc, macaddr,
WLAN_SON_ID);
if (!peer) {
qdf_err("peer is null");
return kickout_allow;
}
peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
WLAN_UMAC_COMP_MLME);
if (!peer_priv) {
qdf_err("invalid vdev");
wlan_objmgr_peer_release_ref(peer, WLAN_SON_ID);
return kickout_allow;
}
kickout_allow = peer_priv->allow_kickout;
wlan_objmgr_peer_release_ref(peer, WLAN_SON_ID);
return kickout_allow;
}