Эх сурвалжийг харах

qcacmn: Clone security params for MLO STA

Clone security params in MLO STA over the partner links.

Change-Id: I06ba32e384244fe983ecf56d7743c89b33524d6f
Rohan Dutta 3 жил өмнө
parent
commit
a6be671ddf

+ 10 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_cmn.h

@@ -143,6 +143,16 @@ QDF_STATUS mlo_reg_mlme_ext_cb(struct mlo_mgr_context *ctx,
  */
 QDF_STATUS mlo_unreg_mlme_ext_cb(struct mlo_mgr_context *ctx);
 
+/**
+ * mlo_mlme_clone_sta_security() - Clone Security params in partner vdevs
+ * @vdev: Object manager vdev
+ * @req: wlan_cm_connect_req data object to be passed to callback
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS mlo_mlme_clone_sta_security(struct wlan_objmgr_vdev *vdev,
+				       struct wlan_cm_connect_req *req);
+
 /**
  * mlo_mlme_validate_conn_req() - Validate connect request
  * @vdev: Object manager vdev

+ 4 - 0
umac/mlo_mgr/inc/wlan_mlo_mgr_public_structs.h

@@ -365,6 +365,7 @@ struct mlo_tgt_partner_info {
  * @mlo_mlme_ext_assoc_resp: Callback to initiate assoc resp
  * @mlo_mlme_get_link_assoc_req: Calback to get link assoc req buffer
  * @mlo_mlme_ext_deauth: Callback to initiate deauth
+ * @mlo_mlme_ext_clone_security_param: Callback to clone mlo security params
  */
 struct mlo_mlme_ext_ops {
 	QDF_STATUS (*mlo_mlme_ext_validate_conn_req)(
@@ -382,6 +383,9 @@ struct mlo_mlme_ext_ops {
 	qdf_nbuf_t (*mlo_mlme_get_link_assoc_req)(struct wlan_objmgr_peer *peer,
 						  uint8_t link_ix);
 	void (*mlo_mlme_ext_deauth)(struct wlan_objmgr_peer *peer);
+	QDF_STATUS (*mlo_mlme_ext_clone_security_param)(
+		    struct vdev_mlme_obj *vdev_mlme,
+		    struct wlan_cm_connect_req *req);
 };
 
 /* maximum size of vdev bitmap array for MLO link set active command */

+ 24 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_cmn.c

@@ -95,6 +95,30 @@ QDF_STATUS mlo_unreg_mlme_ext_cb(struct mlo_mgr_context *ctx)
 	return QDF_STATUS_SUCCESS;
 }
 
+QDF_STATUS mlo_mlme_clone_sta_security(struct wlan_objmgr_vdev *vdev,
+				       struct wlan_cm_connect_req *req)
+{
+	struct mlo_mgr_context *mlo_ctx = wlan_objmgr_get_mlo_ctx();
+	struct vdev_mlme_obj *vdev_mlme;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	if (!mlo_ctx || !mlo_ctx->mlme_ops ||
+	    !mlo_ctx->mlme_ops->mlo_mlme_ext_validate_conn_req)
+		return QDF_STATUS_E_FAILURE;
+
+	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
+	if (!vdev_mlme)
+		return QDF_STATUS_E_FAILURE;
+
+	if (mlo_ctx->mlme_ops->mlo_mlme_ext_clone_security_param) {
+		status =
+			mlo_ctx->mlme_ops->mlo_mlme_ext_clone_security_param(
+				vdev_mlme, req);
+	}
+
+	return status;
+}
+
 QDF_STATUS mlo_mlme_validate_conn_req(struct wlan_objmgr_vdev *vdev,
 				      void *ext_data)
 {

+ 5 - 0
umac/mlo_mgr/src/wlan_mlo_mgr_sta.c

@@ -342,6 +342,11 @@ mlo_validate_connect_req(struct wlan_objmgr_vdev *vdev,
 					mlo_dev_ctx->wlan_vdev_list[i], NULL);
 			if (status != QDF_STATUS_SUCCESS)
 				return status;
+			/*
+			 * clone security params in all partner sta vaps
+			 */
+			mlo_mlme_clone_sta_security(
+				mlo_dev_ctx->wlan_vdev_list[i], req);
 		}
 	}
 	return status;