diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index b3ed74ef66..0527e86e30 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. + * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -1329,44 +1330,6 @@ QDF_STATUS populate_dot11f_twt_extended_caps(struct mac_context *mac_ctx, #endif #ifdef WLAN_FEATURE_11BE_MLO -/** - * sir_convert_mlo_reassoc_req_frame2_struct() - convert mlo reassoc req from - * frame to struct for given - * link id - * @mac_ctx: Global MAC context - * @pFrame: mlo reassoc req frame body - * @nFrame: mlo reassoc req frame length - * @pAssocReq: pointer to REASSOC Request frame - * @link_id: link id - * - * Return: QDF_STATUS_SUCCESS of no error - */ -QDF_STATUS -sir_convert_mlo_reassoc_req_frame2_struct(struct mac_context *mac, - uint8_t *pFrame, - uint32_t nFrame, - tpSirAssocReq pAssocReq, - uint8_t link_id); - -/** - * sir_convert_mlo_assoc_req_frame2_struct() - convert mlo assoc req from - * frame to struct for given - * link id - * @mac_ctx: Global MAC context - * @pFrame: mlo assoc req frame body - * @nFrame: mlo assoc req frame length - * @pAssocReq: pointer to ASSOC Request frame - * @link_id: link id - * - * Return: QDF_STATUS_SUCCESS of no error - */ -QDF_STATUS -sir_convert_mlo_assoc_req_frame2_struct(struct mac_context *mac, - uint8_t *pFrame, - uint32_t nFrame, - tpSirAssocReq pAssocReq, - uint8_t link_id); - /** * populate_dot11f_assoc_rsp_mlo_ie() - populate mlo ie for assoc response * @mac_ctx: Global MAC context @@ -1419,26 +1382,6 @@ void populate_dot11f_rnr_tbtt_info_10(struct mac_context *mac_ctx, tDot11fIEreduced_neighbor_report *dot11f); #else -static inline QDF_STATUS -sir_convert_mlo_reassoc_req_frame2_struct(struct mac_context *mac, - uint8_t *pFrame, - uint32_t nFrame, - tpSirAssocReq pAssocReq, - uint8_t link_id) -{ - return QDF_STATUS_SUCCESS; -} - -static inline QDF_STATUS -sir_convert_mlo_assoc_req_frame2_struct(struct mac_context *mac, - uint8_t *pFrame, - uint32_t nFrame, - tpSirAssocReq pAssocReq, - uint8_t link_id) -{ - return QDF_STATUS_SUCCESS; -} - static inline QDF_STATUS populate_dot11f_assoc_rsp_mlo_ie(struct mac_context *mac_ctx, struct pe_session *session, diff --git a/core/mac/src/pe/lim/lim_mlo.c b/core/mac/src/pe/lim/lim_mlo.c index caa7a81c8e..0de0db2ead 100644 --- a/core/mac/src/pe/lim/lim_mlo.c +++ b/core/mac/src/pe/lim/lim_mlo.c @@ -31,6 +31,7 @@ #include #include #include +#include /** * lim_send_mlo_ie_update - mlo ie is changed, populate new beacon template @@ -437,6 +438,8 @@ QDF_STATUS lim_mlo_proc_assoc_req_frm(struct wlan_objmgr_vdev *vdev, tSirMacFrameCtl fc; tpSirAssocReq assoc_req; QDF_STATUS status; + qdf_size_t link_frame_len; + struct qdf_mac_addr link_bssid; if (!vdev) { pe_err("vdev is null"); @@ -507,19 +510,36 @@ QDF_STATUS lim_mlo_proc_assoc_req_frm(struct wlan_objmgr_vdev *vdev, if (!assoc_req) return QDF_STATUS_E_NOMEM; - status = lim_mlo_partner_assoc_req_parse(mac_ctx, sa, session, - assoc_req, sub_type, - frm_body, frame_len); + assoc_req->assoc_req_buf = qdf_nbuf_clone(buf); + if (!assoc_req->assoc_req_buf) { + pe_err("partner link assoc request buf clone failed"); + qdf_mem_free(assoc_req); + return QDF_STATUS_E_NOMEM; + } + qdf_copy_macaddr(&link_bssid, (struct qdf_mac_addr *)session->bssId); + status = util_gen_link_assoc_req( + frm_body, frame_len, sub_type == LIM_REASSOC, + link_bssid, + qdf_nbuf_data(assoc_req->assoc_req_buf), + qdf_nbuf_len(assoc_req->assoc_req_buf), + &link_frame_len); if (QDF_IS_STATUS_ERROR(status)) { - pe_warn("Assoc Req rejected: frame parsing error. source addr:" + pe_warn("Partner Assoc Req frame gen error. source addr:" QDF_MAC_ADDR_FMT, QDF_MAC_ADDR_REF(sa)); + lim_free_assoc_req_frm_buf(assoc_req); qdf_mem_free(assoc_req); return status; } - return lim_proc_assoc_req_frm_cmn(mac_ctx, frm_body, frame_len, - sub_type, session, sa, assoc_req, - peer_aid); + qdf_nbuf_set_len(assoc_req->assoc_req_buf, link_frame_len); + assoc_req->assocReqFrame = qdf_nbuf_data(assoc_req->assoc_req_buf) + + sizeof(*pHdr); + assoc_req->assocReqFrameLength = link_frame_len - sizeof(*pHdr); + + qdf_copy_macaddr((struct qdf_mac_addr *)assoc_req->mld_mac, + &ml_peer->peer_mld_addr); + return lim_proc_assoc_req_frm_cmn(mac_ctx, sub_type, session, sa, + assoc_req, peer_aid); } void lim_mlo_ap_sta_assoc_suc(struct wlan_objmgr_peer *peer) @@ -804,7 +824,7 @@ QDF_STATUS lim_mlo_assoc_ind_upper_layer(struct mac_context *mac, sme_assoc_ind->messageType = eWNI_SME_ASSOC_IND_UPPER_LAYER; lim_fill_sme_assoc_ind_params(mac, lim_assoc_ind, sme_assoc_ind, - lk_session, false); + lk_session, true); qdf_mem_zero(&msg, sizeof(struct scheduler_msg)); msg.type = eWNI_SME_ASSOC_IND_UPPER_LAYER; @@ -817,6 +837,8 @@ QDF_STATUS lim_mlo_assoc_ind_upper_layer(struct mac_context *mac, lim_sys_process_mmh_msg_api(mac, &msg); qdf_mem_free(lim_assoc_ind); + lim_free_assoc_req_frm_buf( + lk_session->parsedAssocReq[sta->assocId]); qdf_mem_free(lk_session->parsedAssocReq[sta->assocId]); lk_session->parsedAssocReq[sta->assocId] = NULL; status = QDF_STATUS_SUCCESS; diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index f39de50d3e..fec05b974f 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -231,35 +231,6 @@ static bool lim_chk_sa_da(struct mac_context *mac_ctx, tpSirMacMgmtHdr hdr, return false; } -#ifdef WLAN_FEATURE_11BE_MLO -QDF_STATUS lim_mlo_partner_assoc_req_parse(struct mac_context *mac_ctx, - tSirMacAddr sa, - struct pe_session *session, - tpSirAssocReq assoc_req, - uint8_t sub_type, uint8_t *frm_body, - uint32_t frame_len) -{ - QDF_STATUS status; - uint8_t link_id; - - link_id = wlan_vdev_get_link_id(session->vdev); - if (sub_type == LIM_ASSOC) - status = sir_convert_mlo_assoc_req_frame2_struct(mac_ctx, - frm_body, - frame_len, - assoc_req, - link_id); - else - status = sir_convert_mlo_reassoc_req_frame2_struct(mac_ctx, - frm_body, - frame_len, - assoc_req, - link_id); - - return status; -} -#endif - /** * lim_chk_assoc_req_parse_error() - checks for error in frame parsing * @mac_ctx: pointer to Global MAC structure @@ -2377,7 +2348,6 @@ QDF_STATUS lim_check_assoc_req(struct mac_context *mac_ctx, } QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx, - uint8_t *frm_body, uint32_t frame_len, uint8_t sub_type, struct pe_session *session, tSirMacAddr sa, @@ -2393,7 +2363,11 @@ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx, tpDphHashNode sta_ds = NULL; bool dup_entry = false, force_1x1 = false; QDF_STATUS status; + uint8_t *frm_body; + uint32_t frame_len; + frm_body = assoc_req->assocReqFrame; + frame_len = assoc_req->assocReqFrameLength; lim_get_phy_mode(mac_ctx, &phy_mode, session); limGetQosMode(session, &qos_mode); @@ -2439,6 +2413,11 @@ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx, } } + if (!lim_chk_assoc_req_parse_error(mac_ctx, sa, session, + assoc_req, sub_type, + frm_body, frame_len)) + goto error; + if (!lim_chk_capab(mac_ctx, sa, session, assoc_req, sub_type, &local_cap)) goto error; @@ -2691,20 +2670,14 @@ void lim_process_assoc_req_frame(struct mac_context *mac_ctx, if (!assoc_req) return; - /* Parse Assoc Request frame */ - if (!lim_chk_assoc_req_parse_error(mac_ctx, hdr->sa, session, - assoc_req, sub_type, - frm_body, frame_len)) - goto error; - if (!lim_alloc_assoc_req_frm_buf(assoc_req, WMA_GET_QDF_NBUF(rx_pkt_info), WMA_GET_RX_MAC_HEADER_LEN(rx_pkt_info), frame_len)) goto error; - lim_proc_assoc_req_frm_cmn(mac_ctx, frm_body, frame_len, sub_type, - session, hdr->sa, assoc_req, 0); + lim_proc_assoc_req_frm_cmn(mac_ctx, sub_type, session, hdr->sa, + assoc_req, 0); return; error: diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index 3d612cb7f7..82dd3ddfc2 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -430,8 +430,6 @@ QDF_STATUS lim_check_assoc_req(struct mac_context *mac_ctx, /** * lim_proc_assoc_req_frm_cmn() - process assoc req frame * @mac_ctx: pointer to Global MAC structure - * @frm_body: frame body - * @frame_len: frame len * @sub_type: Assoc(=0) or Reassoc(=1) Requestframe * @session: pointer to pe session entry * @sa: Mac address of requesting peer @@ -441,37 +439,12 @@ QDF_STATUS lim_check_assoc_req(struct mac_context *mac_ctx, * Return: QDF_STATUS */ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx, - uint8_t *frm_body, uint32_t frame_len, uint8_t sub_type, struct pe_session *session, tSirMacAddr sa, tpSirAssocReq assoc_req, uint16_t peer_aid); -/** - * lim_mlo_partner_assoc_req_parse() - checks for error in assoc req frame - * parsing for mlo partner link - * @mac_ctx: pointer to Global MAC structure - * @sa: Mac address of requesting peer - * @session: pointer to pe session entry - * @assoc_req: pointer to ASSOC/REASSOC Request frame - * @sub_type: Assoc(=0) or Reassoc(=1) Requestframe - * @frm_body: frame body - * @frame_len: frame len - * - * Checks for error in frame parsing - * - * Return: QDF_STATUS - */ -#ifdef WLAN_FEATURE_11BE_MLO -QDF_STATUS lim_mlo_partner_assoc_req_parse(struct mac_context *mac_ctx, - tSirMacAddr sa, - struct pe_session *session, - tpSirAssocReq assoc_req, - uint8_t sub_type, uint8_t *frm_body, - uint32_t frame_len); -#endif - void lim_process_assoc_req_frame(struct mac_context *, uint8_t *, uint8_t, struct pe_session *); /** diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 0160e817a8..f11a2b0f06 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -6754,372 +6754,6 @@ QDF_STATUS populate_dot11f_eht_operation(struct mac_context *mac_ctx, #endif /* WLAN_FEATURE_11BE */ #ifdef WLAN_FEATURE_11BE_MLO -/* - * is_noninh_ie() - find the noninhertance information element - * in the received frame's IE list, so that we can stop inheriting that IE - * in the caller function. - * - * @elem_id: Element ID in the received frame's IE, which is being processed. - * @non_inh_list: pointer to the non inherited list of element IDs or - * list of extension element IDs. - * @len: Length of non inheritance IE list - * - * Return: False if the element ID is not found or else return true - */ -static bool is_noninh_ie(uint8_t elem_id, - uint8_t *non_inh_list, - int8_t len) -{ - int count; - - for (count = 0; count < len; count++) { - if (elem_id == non_inh_list[count]) - return true; - } - - return false; -} - -QDF_STATUS -sir_convert_mlo_reassoc_req_frame2_struct(struct mac_context *mac, - uint8_t *pFrame, - uint32_t nFrame, - tpSirAssocReq pAssocReq, - uint8_t link_id) -{ - /* TD MLO much more like sir_convert_mlo_assoc_req_frame2_struct */ - return QDF_STATUS_SUCCESS; -} - -QDF_STATUS -sir_convert_mlo_assoc_req_frame2_struct(struct mac_context *mac, - uint8_t *pFrame, - uint32_t nFrame, - tpSirAssocReq pAssocReq, - uint8_t link_id) -{ - tDot11fAssocRequest *ar; - uint32_t status; - tDot11fIEsta_profile *sta_pro = NULL; - uint16_t num_sta_pro; - int sta_index; - uint8_t num_ie_list = 0; - uint8_t *non_inheri_data; - uint8_t ie_list[255]; - uint8_t num_extn_ie_list = 0; - uint8_t extn_ie_list[255]; - - qdf_mem_zero(ie_list, 255); - qdf_mem_zero(extn_ie_list, 255); - ar = qdf_mem_malloc(sizeof(*ar)); - if (!ar) - return QDF_STATUS_E_NOMEM; - /* Zero-init our [out] parameter, */ - qdf_mem_zero((uint8_t *)pAssocReq, sizeof(tSirAssocReq)); - - /* delegate to the framesc-generated code, */ - status = dot11f_unpack_assoc_request(mac, pFrame, nFrame, ar, false); - if (DOT11F_FAILED(status)) { - pe_err("Failed to parse an mlo Association Request (0x%08x, %d bytes):", - status, nFrame); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_ERROR, - pFrame, nFrame); - qdf_mem_free(ar); - return QDF_STATUS_E_FAILURE; - } else if (DOT11F_WARNED(status)) { - pe_debug("There were warnings while unpacking an mlo Assoication Request (0x%08x, %d bytes):", - status, nFrame); - } - /* & "transliterate" from a 'tDot11fAssocRequest' to a 'tSirAssocReq' */ - - /* make sure this is seen as an assoc request */ - pAssocReq->reassocRequest = 0; - - if (!ar->mlo_ie.present) { - pe_err("can't get assoc info since no mlo ie"); - qdf_mem_free(ar); - return QDF_STATUS_E_FAILURE; - } - - num_sta_pro = ar->mlo_ie.num_sta_profile; - for (sta_index = 0; sta_index < num_sta_pro; sta_index++) { - sta_pro = &ar->mlo_ie.sta_profile[sta_index]; - if (link_id == sta_pro->link_id) - break; - } - if (sta_index == num_sta_pro) { - pe_err("can't get link id %d assoc info since no mlo ie", - link_id); - qdf_mem_free(ar); - return QDF_STATUS_E_FAILURE; - } - if (!sta_pro->complete_profile || !sta_pro->sta_mac_addr_present) { - pe_err("Incorrect assoc req mlo ie per sta profile complete %d sta mac %d", - sta_pro->complete_profile, - sta_pro->sta_mac_addr_present); - qdf_mem_free(ar); - return QDF_STATUS_E_FAILURE; - } - /* fix field in mlo TD */ - /* Capabilities */ - pAssocReq->capabilityInfo.ess = sta_pro->mlo_capabilities.ess; - pAssocReq->capabilityInfo.ibss = sta_pro->mlo_capabilities.ibss; - pAssocReq->capabilityInfo.cfPollable = - sta_pro->mlo_capabilities.cfPollable; - pAssocReq->capabilityInfo.cfPollReq = - sta_pro->mlo_capabilities.cfPollReq; - pAssocReq->capabilityInfo.privacy = sta_pro->mlo_capabilities.privacy; - pAssocReq->capabilityInfo.shortPreamble = - sta_pro->mlo_capabilities.shortPreamble; - pAssocReq->capabilityInfo.criticalUpdateFlag = - sta_pro->mlo_capabilities.criticalUpdateFlag; - pAssocReq->capabilityInfo.channelAgility = - sta_pro->mlo_capabilities.channelAgility; - pAssocReq->capabilityInfo.spectrumMgt = - sta_pro->mlo_capabilities.spectrumMgt; - pAssocReq->capabilityInfo.qos = sta_pro->mlo_capabilities.qos; - pAssocReq->capabilityInfo.shortSlotTime = - sta_pro->mlo_capabilities.shortSlotTime; - pAssocReq->capabilityInfo.apsd = sta_pro->mlo_capabilities.apsd; - pAssocReq->capabilityInfo.rrm = sta_pro->mlo_capabilities.rrm; - pAssocReq->capabilityInfo.dsssOfdm = sta_pro->mlo_capabilities.dsssOfdm; - pAssocReq->capabilityInfo.delayedBA = - sta_pro->mlo_capabilities.delayedBA; - pAssocReq->capabilityInfo.immediateBA = - sta_pro->mlo_capabilities.immediateBA; - - /* Listen Interval */ - pAssocReq->listenInterval = ar->ListenInterval.interval; - - if (sta_pro->non_inheritance.present) { - non_inheri_data = sta_pro->non_inheritance.data; - num_ie_list = *non_inheri_data++; - qdf_mem_copy(ie_list, non_inheri_data, num_ie_list); - non_inheri_data += num_ie_list; - num_extn_ie_list = *non_inheri_data++; - qdf_mem_copy(extn_ie_list, non_inheri_data, num_extn_ie_list); - } - /* SSID */ - if (ar->SSID.present) { - pAssocReq->ssidPresent = 1; - convert_ssid(mac, &pAssocReq->ssId, &ar->SSID); - } - - /* Supported Rates */ - if (sta_pro->SuppRates.present) { - pAssocReq->suppRatesPresent = 1; - convert_supp_rates(mac, &pAssocReq->supportedRates, - &sta_pro->SuppRates); - } else if (ar->SuppRates.present && - !is_noninh_ie(DOT11F_EID_SUPPRATES, - ie_list, - num_ie_list)) { - pAssocReq->suppRatesPresent = 1; - convert_supp_rates(mac, &pAssocReq->supportedRates, - &ar->SuppRates); - } - /* Extended Supported Rates */ - if (sta_pro->ExtSuppRates.present) { - pAssocReq->extendedRatesPresent = 1; - convert_ext_supp_rates(mac, &pAssocReq->extendedRates, - &sta_pro->ExtSuppRates); - } else if (ar->ExtSuppRates.present && - !is_noninh_ie(DOT11F_EID_EXTSUPPRATES, - ie_list, - num_ie_list)) { - pAssocReq->extendedRatesPresent = 1; - convert_ext_supp_rates(mac, &pAssocReq->extendedRates, - &ar->ExtSuppRates); - } - if (sta_pro->HTCaps.present) - qdf_mem_copy(&pAssocReq->HTCaps, &sta_pro->HTCaps, - sizeof(tDot11fIEHTCaps)); - else if (ar->HTCaps.present && - !is_noninh_ie(DOT11F_EID_HTCAPS, - ie_list, - num_ie_list)) - qdf_mem_copy(&pAssocReq->HTCaps, &ar->HTCaps, - sizeof(tDot11fIEHTCaps)); - if (sta_pro->WMMInfoStation.present) { - pAssocReq->wmeInfoPresent = 1; - qdf_mem_copy(&pAssocReq->WMMInfoStation, - &sta_pro->WMMInfoStation, - sizeof(tDot11fIEWMMInfoStation)); - } else if (ar->WMMInfoStation.present && - !is_noninh_ie(DOT11F_EID_WMMINFOSTATION, - ie_list, - num_ie_list)) { - pAssocReq->wmeInfoPresent = 1; - qdf_mem_copy(&pAssocReq->WMMInfoStation, &ar->WMMInfoStation, - sizeof(tDot11fIEWMMInfoStation)); - } - if (sta_pro->WMMCaps.present) - pAssocReq->wsmCapablePresent = 1; - else if (ar->WMMCaps.present && - !is_noninh_ie(DOT11F_EID_WMMCAPS, - ie_list, - num_ie_list)) - pAssocReq->wsmCapablePresent = 1; - - if (!pAssocReq->ssidPresent) { - pe_debug("Received Assoc without SSID IE"); - qdf_mem_free(ar); - return QDF_STATUS_E_FAILURE; - } - - if (!pAssocReq->suppRatesPresent && !pAssocReq->extendedRatesPresent) { - pe_debug("Received Assoc without supp rate IE"); - qdf_mem_free(ar); - return QDF_STATUS_E_FAILURE; - } - if (sta_pro->VHTCaps.present) { - qdf_mem_copy(&pAssocReq->VHTCaps, &sta_pro->VHTCaps, - sizeof(tDot11fIEVHTCaps)); - pe_debug("Received Assoc Req with VHT Cap"); - lim_log_vht_cap(mac, &pAssocReq->VHTCaps); - } else if (ar->VHTCaps.present && - !is_noninh_ie(DOT11F_EID_VHTCAPS, - ie_list, - num_ie_list)) { - qdf_mem_copy(&pAssocReq->VHTCaps, &ar->VHTCaps, - sizeof(tDot11fIEVHTCaps)); - pe_debug("Received Assoc Req with VHT Cap"); - lim_log_vht_cap(mac, &pAssocReq->VHTCaps); - } - if (sta_pro->OperatingMode.present) { - qdf_mem_copy(&pAssocReq->operMode, &sta_pro->OperatingMode, - sizeof(tDot11fIEOperatingMode)); - pe_debug("Received Assoc Req with Operating Mode IE"); - lim_log_operating_mode(mac, &pAssocReq->operMode); - } else if (ar->OperatingMode.present && - !is_noninh_ie(DOT11F_EID_OPERATINGMODE, - ie_list, - num_ie_list)) { - qdf_mem_copy(&pAssocReq->operMode, &ar->OperatingMode, - sizeof(tDot11fIEOperatingMode)); - pe_debug("Received Assoc Req with Operating Mode IE"); - lim_log_operating_mode(mac, &pAssocReq->operMode); - } - if (sta_pro->ExtCap.present) { - struct s_ext_cap *ext_cap; - - qdf_mem_copy(&pAssocReq->ExtCap, &sta_pro->ExtCap, - sizeof(tDot11fIEExtCap)); - ext_cap = (struct s_ext_cap *)&pAssocReq->ExtCap.bytes; - pe_debug("timingMeas: %d, finetimingMeas Init: %d, Resp: %d", - ext_cap->timing_meas, - ext_cap->fine_time_meas_initiator, - ext_cap->fine_time_meas_responder); - } else if (ar->ExtCap.present && - !is_noninh_ie(DOT11F_EID_EXTCAP, - ie_list, - num_ie_list)) { - struct s_ext_cap *ext_cap; - - qdf_mem_copy(&pAssocReq->ExtCap, &ar->ExtCap, - sizeof(tDot11fIEExtCap)); - ext_cap = (struct s_ext_cap *)&pAssocReq->ExtCap.bytes; - pe_debug("timingMeas: %d, finetimingMeas Init: %d, Resp: %d", - ext_cap->timing_meas, - ext_cap->fine_time_meas_initiator, - ext_cap->fine_time_meas_responder); - } - if (sta_pro->SuppOperatingClasses.present) { - uint8_t num_classes = sta_pro->SuppOperatingClasses.num_classes; - - if (num_classes > sizeof(sta_pro->SuppOperatingClasses.classes)) - num_classes = - sizeof(sta_pro->SuppOperatingClasses.classes); - qdf_mem_copy(&pAssocReq->supp_operating_classes, - &sta_pro->SuppOperatingClasses, - sizeof(tDot11fIESuppOperatingClasses)); - QDF_TRACE_HEX_DUMP( - QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, - sta_pro->SuppOperatingClasses.classes, num_classes); - } else if (ar->SuppOperatingClasses.present && - !is_noninh_ie(DOT11F_EID_SUPPOPERATINGCLASSES, - ie_list, - num_ie_list)) { - uint8_t num_classes = ar->SuppOperatingClasses.num_classes; - - if (num_classes > sizeof(ar->SuppOperatingClasses.classes)) - num_classes = - sizeof(ar->SuppOperatingClasses.classes); - qdf_mem_copy(&pAssocReq->supp_operating_classes, - &ar->SuppOperatingClasses, - sizeof(tDot11fIESuppOperatingClasses)); - QDF_TRACE_HEX_DUMP( - QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, - ar->SuppOperatingClasses.classes, num_classes); - } - - if (sta_pro->qcn_ie.present) - qdf_mem_copy(&pAssocReq->qcn_ie, &sta_pro->qcn_ie, - sizeof(tDot11fIEqcn_ie)); - else if (ar->qcn_ie.present && - !is_noninh_ie(DOT11F_EID_QCN_IE, - ie_list, - num_ie_list)) - qdf_mem_copy(&pAssocReq->qcn_ie, &ar->qcn_ie, - sizeof(tDot11fIEqcn_ie)); - if (sta_pro->he_cap.present) { - qdf_mem_copy(&pAssocReq->he_cap, &sta_pro->he_cap, - sizeof(tDot11fIEhe_cap)); - pe_debug("Received Assoc Req with HE Capability IE"); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, - &pAssocReq->he_cap, sizeof(tDot11fIEhe_cap)); - } else if (ar->he_cap.present && - !is_noninh_ie( - WLAN_EXTN_ELEMID_HECAP, - extn_ie_list, - num_extn_ie_list)) { - qdf_mem_copy(&pAssocReq->he_cap, &ar->he_cap, - sizeof(tDot11fIEhe_cap)); - pe_debug("Received Assoc Req with HE Capability IE"); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, - &pAssocReq->he_cap, sizeof(tDot11fIEhe_cap)); - } - if (sta_pro->he_6ghz_band_cap.present) { - qdf_mem_copy(&pAssocReq->he_6ghz_band_cap, - &sta_pro->he_6ghz_band_cap, - sizeof(tDot11fIEhe_6ghz_band_cap)); - pe_debug("Received Assoc Req with HE Band Capability IE"); - } else if (ar->he_6ghz_band_cap.present && - !is_noninh_ie( - DOT11F_EID_HE_6GHZ_BAND_CAP, - extn_ie_list, - num_extn_ie_list)) { - qdf_mem_copy(&pAssocReq->he_6ghz_band_cap, - &ar->he_6ghz_band_cap, - sizeof(tDot11fIEhe_6ghz_band_cap)); - pe_debug("Received Assoc Req with HE Band Capability IE"); - } - if (sta_pro->eht_cap.present) { - qdf_mem_copy(&pAssocReq->eht_cap, &sta_pro->eht_cap, - sizeof(tDot11fIEeht_cap)); - pe_debug("Received Assoc Req with EHT Capability IE"); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, - &pAssocReq->eht_cap, - sizeof(tDot11fIEeht_cap)); - } else if (ar->eht_cap.present && - !is_noninh_ie( - WLAN_EXTN_ELEMID_EHTCAP, - extn_ie_list, - num_extn_ie_list)) { - qdf_mem_copy(&pAssocReq->eht_cap, &ar->eht_cap, - sizeof(tDot11fIEeht_cap)); - pe_debug("Received Assoc Req with EHT Capability IE"); - QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, - &pAssocReq->eht_cap, - sizeof(tDot11fIEeht_cap)); - } - qdf_mem_copy(pAssocReq->mld_mac, - ar->mlo_ie.mld_mac_addr.info.mld_mac_addr, - QDF_MAC_ADDR_SIZE); - qdf_mem_free(ar); - return QDF_STATUS_SUCCESS; -} /* End sir_convert_mlo_assoc_req_frame2_struct. */ - QDF_STATUS populate_dot11f_assoc_rsp_mlo_ie(struct mac_context *mac_ctx, struct pe_session *session, tpDphHashNode sta,