qcacld-3.0: Generate assoc resp for MLO links
- Generate association response for secondary MLO links - Update pe session and connect resp with partner link info CRs-Fixed: 2977970 Change-Id: I17a820abef4f4df082c1f219f35599f669142670
This commit is contained in:

کامیت شده توسط
Madan Koyyalamudi

والد
43709382b1
کامیت
46d873e37a
1
Kbuild
1
Kbuild
@@ -1254,6 +1254,7 @@ ifeq ($(CONFIG_WLAN_FEATURE_11BE_MLO), y)
|
||||
UMAC_MLO_MGR_OBJS := $(UMAC_MLO_MGR_CMN_DIR)/src/wlan_mlo_mgr_main.o \
|
||||
$(UMAC_MLO_MGR_CMN_DIR)/src/wlan_mlo_mgr_cmn.o \
|
||||
$(UMAC_MLO_MGR_CMN_DIR)/src/wlan_mlo_mgr_sta.o \
|
||||
$(UMAC_MLO_MGR_CMN_DIR)/src/utils_mlo.o \
|
||||
$(UMAC_MLO_MGR_CMN_DIR)/src/wlan_mlo_mgr_ap.o
|
||||
|
||||
$(call add-wlan-objs,umac_ifmgr,$(UMAC_MLO_MGR_OBJS))
|
||||
|
@@ -653,6 +653,7 @@ struct pe_session {
|
||||
tDot11fIEeht_op eht_op;
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
struct mlo_link_ie_info mlo_link_info;
|
||||
struct mlo_partner_info ml_partner_info;
|
||||
#endif
|
||||
#endif /* WLAN_FEATURE_11BE */
|
||||
};
|
||||
|
@@ -741,6 +741,34 @@ lim_update_iot_aggr_sz(struct mac_context *mac_ctx, uint8_t *ie_ptr,
|
||||
pe_err("Failed to set iot amsdu size: %d", ret);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void lim_update_ml_partner_info(struct pe_session *session_entry,
|
||||
tpSirAssocRsp assoc_rsp)
|
||||
{
|
||||
int i;
|
||||
tDot11fIEmlo_ie ie;
|
||||
struct mlo_partner_info partner_info;
|
||||
|
||||
if (!assoc_rsp || !session_entry)
|
||||
return;
|
||||
|
||||
ie = assoc_rsp->mlo_ie.mlo_ie;
|
||||
partner_info = session_entry->ml_partner_info;
|
||||
|
||||
partner_info.num_partner_links = mlo_ie.num_sta_profile;
|
||||
pe_err("copying partner info from join req to join rsp, num_partner_links %d",
|
||||
partner_info.num_partner_links);
|
||||
|
||||
for (i = 0; i < partner_info.num_partner_links; i++) {
|
||||
partner_info.partner_link_info[i].link_id =
|
||||
ie.sta_profile[i].link_id;
|
||||
qdf_mem_copy(&partner_info.partner_link_info[i].link_addr,
|
||||
ie.sta_profile[i].sta_mac_addr.info.sta_mac_addr,
|
||||
QDF_MAC_ADDR_SIZE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* lim_process_assoc_rsp_frame() - Processes assoc response
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
@@ -790,7 +818,8 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
|
||||
return;
|
||||
}
|
||||
|
||||
if (lim_is_roam_synch_in_progress(mac_ctx->psoc, session_entry)) {
|
||||
if (lim_is_roam_synch_in_progress(mac_ctx->psoc, session_entry) ||
|
||||
wlan_vdev_mlme_is_mlo_link_vdev(session_entry->vdev)) {
|
||||
hdr = (tpSirMacMgmtHdr)rx_pkt_info;
|
||||
frame_len = reassoc_frame_len - SIR_MAC_HDR_LEN_3A;
|
||||
rssi = 0;
|
||||
@@ -876,7 +905,8 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
|
||||
return;
|
||||
}
|
||||
/* Get pointer to Re/Association Response frame body */
|
||||
if (lim_is_roam_synch_in_progress(mac_ctx->psoc, session_entry))
|
||||
if (lim_is_roam_synch_in_progress(mac_ctx->psoc, session_entry) ||
|
||||
wlan_vdev_mlme_is_mlo_link_vdev(session_entry->vdev))
|
||||
body = rx_pkt_info + SIR_MAC_HDR_LEN_3A;
|
||||
else
|
||||
body = WMA_GET_RX_MPDU_DATA(rx_pkt_info);
|
||||
@@ -916,7 +946,9 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
|
||||
session_entry->assocRspLen = frame_len;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
lim_update_ml_partner_info(session_entry, assoc_rsp);
|
||||
#endif
|
||||
lim_update_ric_data(mac_ctx, session_entry, assoc_rsp);
|
||||
|
||||
lim_set_r0kh(assoc_rsp, session_entry);
|
||||
@@ -1257,6 +1289,13 @@ lim_process_assoc_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
|
||||
beacon,
|
||||
&session_entry->lim_join_req->bssDescription, true,
|
||||
session_entry)) {
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
if (wlan_vdev_mlme_is_mlo_link_vdev(session_entry->vdev)) {
|
||||
pe_err("sending assoc cnf for MLO link vdev");
|
||||
lim_post_sme_message(mac_ctx, LIM_MLM_ASSOC_CNF,
|
||||
(uint32_t *)&assoc_cnf);
|
||||
}
|
||||
#endif
|
||||
clean_up_ft_sha384(assoc_rsp, sha384_akm);
|
||||
qdf_mem_free(assoc_rsp);
|
||||
qdf_mem_free(beacon);
|
||||
|
@@ -44,6 +44,8 @@
|
||||
#include "wlan_pkt_capture_ucfg_api.h"
|
||||
#include "wlan_lmac_if_def.h"
|
||||
#include <lim_mlo.h>
|
||||
#include "wlan_mlo_mgr_sta.h"
|
||||
#include "../../../../qca-wifi-host-cmn/umac/mlo_mgr/inc/utils_mlo.h"
|
||||
|
||||
#define MAX_SUPPORTED_PEERS_WEP 16
|
||||
|
||||
@@ -2164,6 +2166,12 @@ void lim_process_sta_add_bss_rsp_pre_assoc(struct mac_context *mac_ctx,
|
||||
MTRACE(mac_trace(mac_ctx, TRACE_CODE_SME_STATE,
|
||||
session_entry->peSessionId,
|
||||
session_entry->limSmeState));
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
if (wlan_vdev_mlme_is_mlo_link_vdev(session_entry->vdev)) {
|
||||
pe_err("vdev is an MLO link, skip Auth");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
lim_post_mlm_message(mac_ctx, LIM_MLM_AUTH_REQ,
|
||||
(uint32_t *) pMlmAuthReq);
|
||||
return;
|
||||
@@ -2715,6 +2723,63 @@ static void lim_process_switch_channel_join_req(
|
||||
/* Apply previously set configuration at HW */
|
||||
lim_apply_configuration(mac_ctx, session_entry);
|
||||
|
||||
/* WLAN_FEATURE_11BE_MLO flag will be removed
|
||||
* once the MLO testing is complete
|
||||
*/
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
if (wlan_vdev_mlme_is_mlo_link_vdev(session_entry->vdev)) {
|
||||
struct element_info *assoc_rsp = NULL;
|
||||
struct qdf_mac_addr sta_link_addr;
|
||||
|
||||
mlo_get_assoc_rsp(session_entry->vdev, &assoc_rsp);
|
||||
if (!assoc_rsp)
|
||||
goto error;
|
||||
|
||||
if (!session_entry->ml_partner_info.num_partner_links) {
|
||||
pe_debug("MLO: num_partner_links is 0");
|
||||
goto error;
|
||||
}
|
||||
/* Todo: update the sta addr by matching link id */
|
||||
qdf_mem_copy(&sta_link_addr, session_entry->self_mac_addr,
|
||||
QDF_MAC_ADDR_SIZE);
|
||||
|
||||
pe_debug("MLO: assoc rsp len %d ", assoc_rsp.len);
|
||||
|
||||
if (assoc_rsp.len) {
|
||||
struct element_info link_assoc_rsp;
|
||||
tLimMlmJoinCnf mlm_join_cnf;
|
||||
|
||||
mlm_join_cnf.resultCode = eSIR_SME_SUCCESS;
|
||||
mlm_join_cnf.protStatusCode = STATUS_SUCCESS;
|
||||
/* Update PE sessionId */
|
||||
mlm_join_cnf.sessionId = session_entry->peSessionId;
|
||||
lim_post_sme_message(mac_ctx, LIM_MLM_JOIN_CNF,
|
||||
(uint32_t *)&mlm_join_cnf);
|
||||
|
||||
session_entry->limSmeState = eLIM_SME_WT_ASSOC_STATE;
|
||||
assoc_rsp.len += SIR_MAC_HDR_LEN_3A;
|
||||
pe_debug("MLO:assoc rsp len + hdr %d ", assoc_rsp.len);
|
||||
|
||||
link_assoc_rsp.ptr = qdf_mem_malloc(assoc_rsp.len);
|
||||
if (link_assoc_rsp.ptr) {
|
||||
link_assoc_rsp.len = assoc_rsp.len;
|
||||
session_entry->limMlmState = eLIM_MLM_WT_ASSOC_RSP_STATE;
|
||||
pe_debug("MLO: Generate and process assoc rsp for link vdev");
|
||||
|
||||
if (QDF_IS_STATUS_SUCCESS(util_gen_link_assoc_rsp(assoc_rsp.ptr,
|
||||
assoc_rsp.len,
|
||||
sta_link_addr,
|
||||
link_assoc_rsp.ptr)))
|
||||
lim_process_assoc_rsp_frame(mac_ctx,
|
||||
link_assoc_rsp.ptr,
|
||||
link_assoc_rsp.len,
|
||||
LIM_ASSOC,
|
||||
session_entry);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* If deauth_before_connection is enabled, Send Deauth first to AP if
|
||||
* last disconnection was caused by HB failure.
|
||||
|
@@ -383,6 +383,27 @@ static void lim_free_pession_ies(struct pe_session *pe_session)
|
||||
lim_free_tspec_ie(pe_session);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void lim_copy_ml_partner_info(struct cm_vdev_join_rsp *rsp,
|
||||
struct pe_session *pe_session)
|
||||
{
|
||||
int i;
|
||||
struct mlo_partner_info partner_info;
|
||||
struct mlo_partner_info rsp_partner_info;
|
||||
|
||||
partner_info = pe_session->ml_partner_info;
|
||||
rsp_partner_info = rsp->connect_rsp.ml_parnter_info;
|
||||
|
||||
rsp_partner_info.num_partner_links = partner_info.num_partner_links;
|
||||
|
||||
for (i = 0; i < rsp_partner_info.num_partner_links; i++) {
|
||||
rsp_partner_info.partner_link_info[i].link_id =
|
||||
partner_info.partner_link_info[i].link_id;
|
||||
qdf_copy_macaddr(&rsp_partner_info.partner_link_info[i].link_addr,
|
||||
&partner_info.partner_link_info[i].link_addr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
void lim_cm_send_connect_rsp(struct mac_context *mac_ctx,
|
||||
struct pe_session *pe_session,
|
||||
struct cm_vdev_join_req *req,
|
||||
@@ -415,6 +436,9 @@ void lim_cm_send_connect_rsp(struct mac_context *mac_ctx,
|
||||
connect_status,
|
||||
status_code);
|
||||
lim_free_pession_ies(pe_session);
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
lim_copy_ml_partner_info(rsp, pe_session);
|
||||
#endif
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
pe_err("vdev_id: %d cm_id 0x%x : fail to prepare rsp",
|
||||
rsp->connect_rsp.vdev_id,
|
||||
|
مرجع در شماره جدید
Block a user