From a551e669601a9c1587fd8fd7cc5ff310c8945b9e Mon Sep 17 00:00:00 2001 From: Jyoti Kumari Date: Fri, 21 Apr 2023 12:59:19 +0530 Subject: [PATCH] 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 --- .../mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c index f32336a2f1..38d11c2333 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c +++ b/components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c @@ -1396,7 +1396,7 @@ static void cm_set_peer_mld_info(struct cm_peer_create_req *req, struct qdf_mac_addr *mld_mac, bool is_assoc_peer) { - if (req) { + if (req && mld_mac) { qdf_copy_macaddr(&req->mld_mac, mld_mac); 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; QDF_STATUS status; struct cm_peer_create_req *req; - bool eht_capab; if (!vdev || !peer_mac) return QDF_STATUS_E_FAILURE; @@ -1429,9 +1428,7 @@ cm_send_bss_peer_create_req(struct wlan_objmgr_vdev *vdev, if (!req) return QDF_STATUS_E_NOMEM; - wlan_psoc_mlme_get_11be_capab(wlan_vdev_get_psoc(vdev), &eht_capab); - if (eht_capab) - cm_set_peer_mld_info(req, mld_mac, is_assoc_peer); + cm_set_peer_mld_info(req, mld_mac, is_assoc_peer); req->vdev_id = wlan_vdev_get_id(vdev); qdf_copy_macaddr(&req->peer_mac, peer_mac);