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

qcacmn: 2-link MLO Sap Simulation

Current SAP is unable to support multi-link MLO connection.
To unblock validation we simulate 2-link connection on SAP.

Changes are as follows:
	- Add support for multi-link during assoc
	- disable security check during assoc

Change-Id: I21b3de2298085d7e6676854a7be68608546ccc6c
CRs-Fixed: 3591638
David Oladunjoye 1 жил өмнө
parent
commit
d9fedf26a8

+ 17 - 2
umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c

@@ -1442,6 +1442,14 @@ cm_get_band_score(uint32_t freq, struct scoring_cfg *score_config)
 
 #ifdef WLAN_FEATURE_11BE
 #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
+#if defined (SAP_MULTI_LINK_EMULATION)
+bool wlan_cm_is_eht_allowed_for_current_security(
+			struct wlan_objmgr_psoc *psoc,
+			struct scan_cache_entry *scan_entry)
+{
+	return true;
+}
+#else
 bool wlan_cm_is_eht_allowed_for_current_security(
 			struct wlan_objmgr_psoc *psoc,
 			struct scan_cache_entry *scan_entry)
@@ -1514,6 +1522,7 @@ bool wlan_cm_is_eht_allowed_for_current_security(
 	return false;
 }
 #endif
+#endif
 
 static int cm_calculate_eht_score(struct wlan_objmgr_psoc *psoc,
 				  struct scan_cache_entry *entry,
@@ -2946,7 +2955,13 @@ void wlan_cm_reset_check_6ghz_security(struct wlan_objmgr_psoc *psoc)
 	mlme_psoc_obj->psoc_cfg.score_config.check_6ghz_security =
 					cfg_get(psoc, CFG_CHECK_6GHZ_SECURITY);
 }
-
+#if defined (SAP_MULTI_LINK_EMULATION)
+	/*Disable security check for 2link SAP emulation */
+bool wlan_cm_get_check_6ghz_security(struct wlan_objmgr_psoc *psoc)
+{
+	return true;
+}
+#else
 bool wlan_cm_get_check_6ghz_security(struct wlan_objmgr_psoc *psoc)
 {
 	struct psoc_mlme_obj *mlme_psoc_obj;
@@ -2957,7 +2972,7 @@ bool wlan_cm_get_check_6ghz_security(struct wlan_objmgr_psoc *psoc)
 
 	return mlme_psoc_obj->psoc_cfg.score_config.check_6ghz_security;
 }
-
+#endif
 void wlan_cm_set_standard_6ghz_conn_policy(struct wlan_objmgr_psoc *psoc,
 					   bool value)
 {

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

@@ -54,8 +54,13 @@
 
 /* MAX MLO Assoc Links per MLD */
 #ifndef WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS
+#ifdef SAP_MULTI_LINK_EMULATION
+#define WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS 2
+#else
 #define WLAN_UMAC_MLO_ASSOC_MAX_SUPPORTED_LINKS 1
 #endif
+#endif
+
 
 /* Default Initialization value for Max Recommended Simultaneous Links */
 #ifndef WLAN_UMAC_MLO_RECOM_MAX_SIMULT_LINKS_DEFAULT

+ 10 - 0
umac/mlo_mgr/src/utils_mlo.c

@@ -1386,6 +1386,15 @@ QDF_STATUS util_eval_ie_in_noninheritlist(uint8_t *ie, qdf_size_t total_ie_len,
 	return QDF_STATUS_SUCCESS;
 }
 
+#if defined (SAP_MULTI_LINK_EMULATION)
+static inline
+QDF_STATUS util_validate_reportingsta_ie(const uint8_t *reportingsta_ie,
+					 const uint8_t *frame_iesection,
+					 const qdf_size_t frame_iesection_len)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#else
 static inline
 QDF_STATUS util_validate_reportingsta_ie(const uint8_t *reportingsta_ie,
 					 const uint8_t *frame_iesection,
@@ -1462,6 +1471,7 @@ QDF_STATUS util_validate_reportingsta_ie(const uint8_t *reportingsta_ie,
 
 	return QDF_STATUS_SUCCESS;
 }
+#endif
 
 static inline
 QDF_STATUS util_validate_sta_prof_ie(const uint8_t *sta_prof_ie,

+ 32 - 4
umac/mlo_mgr/src/wlan_mlo_mgr_peer.c

@@ -1015,7 +1015,17 @@ static QDF_STATUS mlo_peer_detach_link_peer(
 
 	return status;
 }
-
+#if defined (SAP_MULTI_LINK_EMULATION)
+/*Skip link vdev check. Second link does not have vdev*/
+static QDF_STATUS mlo_dev_get_link_vdevs(
+			struct wlan_objmgr_vdev *vdev,
+			struct wlan_mlo_dev_context *ml_dev,
+			struct mlo_partner_info *ml_info,
+			struct wlan_objmgr_vdev *link_vdevs[])
+{
+	return QDF_STATUS_SUCCESS;
+}
+#else
 static QDF_STATUS mlo_dev_get_link_vdevs(
 			struct wlan_objmgr_vdev *vdev,
 			struct wlan_mlo_dev_context *ml_dev,
@@ -1059,6 +1069,7 @@ static QDF_STATUS mlo_dev_get_link_vdevs(
 
 	return QDF_STATUS_SUCCESS;
 }
+#endif
 
 static void mlo_dev_release_link_vdevs(
 			struct wlan_objmgr_vdev *link_vdevs[])
@@ -1453,7 +1464,22 @@ QDF_STATUS wlan_mlo_peer_asreq(struct wlan_objmgr_vdev *vdev,
 
 	return QDF_STATUS_SUCCESS;
 }
-
+#if defined (SAP_MULTI_LINK_EMULATION)
+static void
+set_assoc_peer_for_2link_sap(struct wlan_objmgr_peer *assoc_peer,
+			     struct wlan_mlo_peer_context *ml_peer)
+{
+	assoc_peer = ml_peer->peer_list[0].link_peer;
+	if (assoc_peer)
+		mlo_mlme_peer_assoc_resp(assoc_peer);
+}
+#else
+static void
+set_assoc_peer_for_2link_sap(struct wlan_objmgr_peer *assoc_peer,
+			     struct wlan_mlo_peer_context *ml_peer)
+{
+}
+#endif
 QDF_STATUS wlan_mlo_peer_create(struct wlan_objmgr_vdev *vdev,
 				struct wlan_objmgr_peer *link_peer,
 				struct mlo_partner_info *ml_info,
@@ -1467,7 +1493,7 @@ QDF_STATUS wlan_mlo_peer_create(struct wlan_objmgr_vdev *vdev,
 	struct wlan_objmgr_vdev *vdev_link;
 	QDF_STATUS status;
 	uint16_t i, j;
-	struct wlan_objmgr_peer *assoc_peer;
+	struct wlan_objmgr_peer *assoc_peer = NULL;
 	uint8_t bridge_peer_psoc_id = WLAN_OBJMGR_MAX_DEVICES;
 	bool is_ml_peer_attached = false;
 
@@ -1505,7 +1531,6 @@ QDF_STATUS wlan_mlo_peer_create(struct wlan_objmgr_vdev *vdev,
 				QDF_MAC_ADDR_REF(link_peer->mldaddr));
 			return QDF_STATUS_E_FAILURE;
 		}
-
 		for (i = 0; i < WLAN_UMAC_MLO_MAX_VDEVS; i++) {
 			vdev_link = link_vdevs[i];
 			if (!vdev_link) {
@@ -1787,9 +1812,12 @@ QDF_STATUS wlan_mlo_peer_create(struct wlan_objmgr_vdev *vdev,
 			assoc_peer = ml_peer->peer_list[0].link_peer;
 			if (assoc_peer)
 				mlo_mlme_peer_assoc_resp(assoc_peer);
+		} else {
+			set_assoc_peer_for_2link_sap(assoc_peer, ml_peer);
 		}
 	}
 
+
 	if (wlan_vdev_mlme_get_opmode(vdev) == QDF_STA_MODE)
 		wlan_clear_peer_level_tid_to_link_mapping(vdev);