Bläddra i källkod

qcacld-3.0: Populate MLO mgr link info for MBSSID connect

In api wlan_connectivity_sta_info_event(),and in
connectivity_mgmt_event() the band information, link self mac
address is populated from the MLO mgr link info structure. But
MLO mgr link info is updated when we receive unicast probe
request from the AP. But we don't send unicast probe request to
MBSSID non-TX BSS and we could receive beacon from TX BSSID. This
causes the advertised links band information not getting logged
for the assoc request frame connectivity log and STA information
event doesn't have the self link addresses.

Populate MLO mgr link info before sending Join confirm during
MBSSID connect for non-TX BSSID. Introduce a new api
lim_populate_partner_link_chan_info_for_mbssid(), to populate
the link info from join request.

Change-Id: I6148a8a9b9bf15de65e7640f39456dade2e8987f
CRs-Fixed: 3647725
Vijay Raj 1 år sedan
förälder
incheckning
3e61245f1c
1 ändrade filer med 61 tillägg och 0 borttagningar
  1. 61 0
      core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

+ 61 - 0
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -2997,6 +2997,64 @@ lim_process_switch_channel_join_mlo_roam(struct pe_session *session_entry,
 }
 #endif /* (WLAN_FEATURE_ROAM_OFFLOAD) && (WLAN_FEATURE_11BE_MLO) */
 
+#ifdef WLAN_FEATURE_11BE_MLO
+static void
+lim_update_mlo_mgr_ap_link_info_mbssid_connect(struct pe_session *session)
+{
+	struct mlo_partner_info *partner_info;
+	struct mlo_link_info *partner_link_info;
+	struct wlan_channel channel;
+	struct mlo_link_switch_context *link_ctx;
+	uint8_t i = 0;
+
+	if (!session->vdev) {
+		pe_err("vdev:%d is NULL", session->vdev_id);
+		return;
+	}
+
+	if (!wlan_vdev_mlme_is_mlo_vdev(session->vdev))
+		return;
+
+	if (!session->lim_join_req) {
+		pe_err("vdev:%d lim_join_req is NULL", session->vdev_id);
+		return;
+	}
+
+	link_ctx = session->vdev->mlo_dev_ctx->link_ctx;
+	if (!link_ctx) {
+		pe_err("vdev:%d MLO Link_ctx not found",
+		       session->vdev_id);
+		return;
+	}
+
+	/* Populating Assoc Link Band info */
+	channel.ch_freq = (uint16_t)session->curr_op_freq;
+
+	mlo_mgr_reset_ap_link_info(session->vdev);
+	mlo_mgr_update_ap_link_info(session->vdev,
+				    wlan_vdev_get_link_id(session->vdev),
+				    session->bssId, channel);
+
+	/* Populating Partner link band Info */
+	partner_info = &session->lim_join_req->partner_info;
+	for (i = 0; i < partner_info->num_partner_links; i++) {
+		partner_link_info = &partner_info->partner_link_info[i];
+
+		qdf_mem_zero(&channel, sizeof(channel));
+		channel.ch_freq = partner_link_info->chan_freq;
+
+		mlo_mgr_update_ap_link_info(session->vdev,
+					    partner_link_info->link_id,
+					    partner_link_info->ap_link_addr.bytes,
+					    channel);
+	}
+}
+#else
+static void
+lim_update_mlo_mgr_ap_link_info_mbssid_connect(struct pe_session *session)
+{}
+#endif
+
 /**
  * lim_process_switch_channel_join_req() -Initiates probe request
  *
@@ -3098,6 +3156,9 @@ static void lim_process_switch_channel_join_req(
 		join_cnf.sessionId = session_entry->peSessionId;
 		join_cnf.resultCode = eSIR_SME_SUCCESS;
 		join_cnf.protStatusCode = STATUS_SUCCESS;
+
+		lim_update_mlo_mgr_ap_link_info_mbssid_connect(session_entry);
+
 		lim_post_sme_message(mac_ctx, LIM_MLM_JOIN_CNF,
 				     (uint32_t *)&join_cnf);
 		return;