Kaynağa Gözat

qcacld-3.0: For MLO link vdev get partner link info from connect req

If link beacon is not scanned, host driver will send ML probe request
and generate link scan entry from ML probe response. The ML probe
response does not include RNR IE. This is causing failure in the link
vdev connect path as the partner information is updated from rnr ie.

To fix this, for link vdev connection get partner link information from
connect request.

Change-Id: Id22f57cefbf28cb20fa7e17b4b71b362b1ba0ae5
CRs-Fixed: 3312421
sandhu 2 yıl önce
ebeveyn
işleme
d8b7b21f76

+ 21 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_connect.c

@@ -1165,14 +1165,28 @@ static void cm_fill_ml_info(struct cm_vdev_join_req *join_req)
 		mlme_debug("Assoc link ID:%d", join_req->assoc_link_id);
 	}
 }
+
+static void cm_copy_join_req_info_from_cm_connect_req(struct cm_vdev_join_req *join_req,
+						 struct wlan_cm_vdev_connect_req *req)
+{
+	qdf_mem_copy(&(join_req->partner_info), &(req->ml_parnter_info), sizeof(struct mlo_partner_info));
+	mlme_debug("Num of partner links %d", join_req->partner_info.num_partner_links);
+}
+
 #else
 static void cm_fill_ml_info(struct cm_vdev_join_req *join_req)
 {
 }
+
+static void cm_copy_join_req_info_from_cm_connect_req(struct cm_vdev_join_req *join_req,
+						 struct wlan_cm_vdev_connect_req *req)
+{
+}
 #endif
 
 static QDF_STATUS
-cm_copy_join_params(struct cm_vdev_join_req *join_req,
+cm_copy_join_params(struct wlan_objmgr_vdev *vdev,
+		    struct cm_vdev_join_req *join_req,
 		    struct wlan_cm_vdev_connect_req *req)
 {
 	if (req->assoc_ie.len) {
@@ -1195,7 +1209,11 @@ cm_copy_join_params(struct cm_vdev_join_req *join_req,
 	if (!join_req->entry)
 		return QDF_STATUS_E_NOMEM;
 
-	cm_fill_ml_info(join_req);
+	if (wlan_vdev_mlme_is_mlo_link_vdev(vdev)) {
+		cm_copy_join_req_info_from_cm_connect_req(join_req, req);
+	} else {
+		cm_fill_ml_info(join_req);
+	}
 
 	if (req->owe_trans_ssid.length)
 		join_req->owe_trans_ssid = req->owe_trans_ssid;
@@ -1311,7 +1329,7 @@ cm_handle_connect_req(struct wlan_objmgr_vdev *vdev,
 	if (!join_req)
 		return QDF_STATUS_E_NOMEM;
 
-	status = cm_copy_join_params(join_req, req);
+	status = cm_copy_join_params(vdev ,join_req, req);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		mlme_err(CM_PREFIX_FMT "Failed to copy join req",
 			 CM_PREFIX_REF(req->vdev_id, req->cm_id));