Browse Source

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
Jyoti Kumari 2 years ago
parent
commit
a551e66960

+ 2 - 5
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);