qcacld-3.0: Check whether vdev supports mlo cap or not
Scenario: There is dual sta present in HBS mode in DUT where one sta is on wlan0 interface and it has 11be capability, so it has formed ML connection with ML AP. The another STA is present on wlan1 interface and this STA also supports 11be capability. But as per current design, host supports 11be with MLO. It doesn't support 11be alone. Also 11be with MLO is supported only in wlan0 interface. So for another connection which are present in wlan1 interface, even if it supports 11be host will downgrade to 11ax and form connection. During the formation of second connection, host will sends peer create command(WMI_PEER_CREATE_CMDID) to firmware. Before sending this command, host checks only eht cap in cm_create_bss_peer() and fills the mld_mac addr. Because of that, DP assumes that there is an ML connection and it creates MLD peer on wlan1 interface. Due to this, it causes ping failure on wlan1 interface as the ICMP response might be coming on incorrect peer and it's getting dropped. As part of fix, check whether vdev is mlo supported or not in cm_set_peer_mld_info() Change-Id: Ieed67aa2735d200a140f9e771d791b3b9308a0f9 CRs-Fixed: 3474874
This commit is contained in:

committed by
Madan Koyyalamudi

parent
ba31d91be4
commit
a551e66960
@@ -1396,7 +1396,7 @@ static void cm_set_peer_mld_info(struct cm_peer_create_req *req,
|
|||||||
struct qdf_mac_addr *mld_mac,
|
struct qdf_mac_addr *mld_mac,
|
||||||
bool is_assoc_peer)
|
bool is_assoc_peer)
|
||||||
{
|
{
|
||||||
if (req) {
|
if (req && mld_mac) {
|
||||||
qdf_copy_macaddr(&req->mld_mac, mld_mac);
|
qdf_copy_macaddr(&req->mld_mac, mld_mac);
|
||||||
req->is_assoc_peer = is_assoc_peer;
|
req->is_assoc_peer = is_assoc_peer;
|
||||||
}
|
}
|
||||||
@@ -1418,7 +1418,6 @@ cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
|
|||||||
struct scheduler_msg msg;
|
struct scheduler_msg msg;
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
struct cm_peer_create_req *req;
|
struct cm_peer_create_req *req;
|
||||||
bool eht_capab;
|
|
||||||
|
|
||||||
if (!vdev || !peer_mac)
|
if (!vdev || !peer_mac)
|
||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
@@ -1429,9 +1428,7 @@ cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev,
|
|||||||
if (!req)
|
if (!req)
|
||||||
return QDF_STATUS_E_NOMEM;
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
wlan_psoc_mlme_get_11be_capab(wlan_vdev_get_psoc(vdev), &eht_capab);
|
cm_set_peer_mld_info(req, mld_mac, is_assoc_peer);
|
||||||
if (eht_capab)
|
|
||||||
cm_set_peer_mld_info(req, mld_mac, is_assoc_peer);
|
|
||||||
|
|
||||||
req->vdev_id = wlan_vdev_get_id(vdev);
|
req->vdev_id = wlan_vdev_get_id(vdev);
|
||||||
qdf_copy_macaddr(&req->peer_mac, peer_mac);
|
qdf_copy_macaddr(&req->peer_mac, peer_mac);
|
||||||
|
Reference in New Issue
Block a user