From 908cf6b29c9957d255bf3fbaa45432514008f9a2 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Wed, 12 Jun 2024 12:57:22 +0530 Subject: [PATCH] qcacmn: Add API to dump mgmt frame in hex Add API to dump mgmt frame in hex Change-Id: I444ed40714184d14025a72aa8a08856a6dae3a68 CRs-Fixed: 3841017 --- .../dispatcher/inc/wlan_mgmt_txrx_utils_api.h | 12 +- .../dispatcher/src/wlan_mgmt_txrx_tgt_api.c | 178 +++++++++++++++++- 2 files changed, 188 insertions(+), 2 deletions(-) diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h index 34a49c74be..35fe743c21 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h +++ b/umac/cmn_services/mgmt_txrx/dispatcher/inc/wlan_mgmt_txrx_utils_api.h @@ -1,6 +1,6 @@ /* * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2024 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 @@ -60,6 +60,16 @@ #define mgmttxrx_nofl_debug(params...) \ QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_MGMT_TXRX, params) +/** + * mgmt_txrx_frame_hex_dump() - Print the type and dump the rx tx frame + * @frame_data: The base address of the mgmt frame data to be logged. + * @frame_len: The size of the frame to be logged. + * @is_tx: is tx frame + * + * Return: None + */ +void mgmt_txrx_frame_hex_dump(void *frame_data, int frame_len, bool is_tx); + /** * enum mgmt_subtype - enum of mgmt. subtypes * @MGMT_SUBTYPE_ASSOC_REQ: association request frame diff --git a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c index f069a90283..b51c8fb762 100644 --- a/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c +++ b/umac/cmn_services/mgmt_txrx/dispatcher/src/wlan_mgmt_txrx_tgt_api.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. - * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2024 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 @@ -1011,6 +1011,182 @@ mgmt_txrx_get_frm_type(uint8_t mgmt_subtype, uint8_t *mpdu_data_ptr) return frm_type; } +static uint8_t *mgmt_txrx_get_frm_type_string(enum mgmt_frame_type frm_type) +{ + switch (frm_type) { + CASE_RETURN_STRING(MGMT_ASSOC_REQ); + CASE_RETURN_STRING(MGMT_ASSOC_RESP); + CASE_RETURN_STRING(MGMT_REASSOC_REQ); + CASE_RETURN_STRING(MGMT_REASSOC_RESP); + CASE_RETURN_STRING(MGMT_PROBE_REQ); + CASE_RETURN_STRING(MGMT_PROBE_RESP); + CASE_RETURN_STRING(MGMT_BEACON); + CASE_RETURN_STRING(MGMT_ATIM); + CASE_RETURN_STRING(MGMT_DISASSOC); + CASE_RETURN_STRING(MGMT_AUTH); + CASE_RETURN_STRING(MGMT_DEAUTH); + CASE_RETURN_STRING(MGMT_ACTION_MEAS_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_MEAS_REPORT); + CASE_RETURN_STRING(MGMT_ACTION_TPC_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_TPC_REPORT); + CASE_RETURN_STRING(MGMT_ACTION_CHAN_SWITCH); + CASE_RETURN_STRING(MGMT_ACTION_QOS_ADD_TS_REQ); + CASE_RETURN_STRING(MGMT_ACTION_QOS_ADD_TS_RSP); + CASE_RETURN_STRING(MGMT_ACTION_QOS_DEL_TS_REQ); + CASE_RETURN_STRING(MGMT_ACTION_QOS_SCHEDULE); + CASE_RETURN_STRING(MGMT_ACTION_QOS_MAP_CONFIGURE); + CASE_RETURN_STRING(MGMT_ACTION_DLS_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_DLS_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_DLS_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_BA_ADDBA_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_BA_ADDBA_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_BA_DELBA); + CASE_RETURN_STRING(MGMT_ACTION_2040_BSS_COEXISTENCE); + CASE_RETURN_STRING(MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC); + CASE_RETURN_STRING(MGMT_ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED); + CASE_RETURN_STRING(MGMT_ACTION_EXT_CHANNEL_SWITCH_ID); + CASE_RETURN_STRING(MGMT_ACTION_VENDOR_SPECIFIC); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_DISCRESP); + CASE_RETURN_STRING(MGMT_ACTION_RRM_RADIO_MEASURE_REQ); + CASE_RETURN_STRING(MGMT_ACTION_RRM_RADIO_MEASURE_RPT); + CASE_RETURN_STRING(MGMT_ACTION_RRM_LINK_MEASUREMENT_REQ); + CASE_RETURN_STRING(MGMT_ACTION_RRM_LINK_MEASUREMENT_RPT); + CASE_RETURN_STRING(MGMT_ACTION_RRM_NEIGHBOR_REQ); + CASE_RETURN_STRING(MGMT_ACTION_RRM_NEIGHBOR_RPT); + CASE_RETURN_STRING(MGMT_ACTION_FT_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_FT_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_FT_CONFIRM); + CASE_RETURN_STRING(MGMT_ACTION_FT_ACK); + CASE_RETURN_STRING(MGMT_ACTION_HT_NOTIFY_CHANWIDTH); + CASE_RETURN_STRING(MGMT_ACTION_HT_SMPS); + CASE_RETURN_STRING(MGMT_ACTION_HT_PSMP); + CASE_RETURN_STRING(MGMT_ACTION_HT_PCO_PHASE); + CASE_RETURN_STRING(MGMT_ACTION_HT_CSI); + CASE_RETURN_STRING(MGMT_ACTION_HT_NONCOMPRESSED_BF); + CASE_RETURN_STRING(MGMT_ACTION_HT_COMPRESSED_BF); + CASE_RETURN_STRING(MGMT_ACTION_HT_ASEL_IDX_FEEDBACK); + CASE_RETURN_STRING(MGMT_ACTION_SA_QUERY_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_SA_QUERY_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_INIT_REQ); + CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_INIT_RSP); + CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_COMEBACK_REQ); + CASE_RETURN_STRING(MGMT_ACTION_PDPA_GAS_COMEBACK_RSP); + CASE_RETURN_STRING(MGMT_ACTION_WNM_BSS_TM_QUERY); + CASE_RETURN_STRING(MGMT_ACTION_WNM_BSS_TM_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_WNM_BSS_TM_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_WNM_NOTIF_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_WNM_NOTIF_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_WNM_FMS_REQ); + CASE_RETURN_STRING(MGMT_ACTION_WNM_FMS_RESP); + CASE_RETURN_STRING(MGMT_ACTION_WNM_TFS_REQ); + CASE_RETURN_STRING(MGMT_ACTION_WNM_TFS_RESP); + CASE_RETURN_STRING(MGMT_ACTION_WNM_TFS_NOTIFY); + CASE_RETURN_STRING(MGMT_ACTION_WNM_SLEEP_REQ); + CASE_RETURN_STRING(MGMT_ACTION_WNM_SLEEP_RESP); + CASE_RETURN_STRING(MGMT_ACTION_WNM_TIM_REQ); + CASE_RETURN_STRING(MGMT_ACTION_WNM_TIM_RESP); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_SETUP_REQ); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_SETUP_RSP); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_SETUP_CNF); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_TRAFFIC_IND); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_CH_SWITCH_REQ); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_CH_SWITCH_RSP); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_PSM_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_PSM_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_PEER_TRAFFIC_RSP); + CASE_RETURN_STRING(MGMT_ACTION_TDLS_DIS_REQ); + CASE_RETURN_STRING(MGMT_ACTION_MESH_LINK_METRIC_REPORT); + CASE_RETURN_STRING(MGMT_ACTION_MESH_HWMP_PATH_SELECTION); + CASE_RETURN_STRING(MGMT_ACTION_MESH_GATE_ANNOUNCEMENT); + CASE_RETURN_STRING(MGMT_ACTION_MESH_CONGESTION_CONTROL_NOTIFICATION); + CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_SETUP_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_SETUP_REPLY); + CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_ADVERTISEMENT_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_ADVERTISEMENT); + CASE_RETURN_STRING(MGMT_ACTION_MESH_MCCA_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_MESH_TBTT_ADJUSTMENT_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_MESH_TBTT_ADJUSTMENT_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_SP_MESH_PEERING_OPEN); + CASE_RETURN_STRING(MGMT_ACTION_SP_MESH_PEERING_CONFIRM); + CASE_RETURN_STRING(MGMT_ACTION_SP_MESH_PEERING_CLOSE); + CASE_RETURN_STRING(MGMT_ACTION_SP_MGK_INFORM); + CASE_RETURN_STRING(MGMT_ACTION_SP_MGK_ACK); + CASE_RETURN_STRING(MGMT_ACTION_WMM_QOS_SETUP_REQ); + CASE_RETURN_STRING(MGMT_ACTION_WMM_QOS_SETUP_RESP); + CASE_RETURN_STRING(MGMT_ACTION_WMM_QOS_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_VHT_COMPRESSED_BF); + CASE_RETURN_STRING(MGMT_ACTION_VHT_GID_NOTIF); + CASE_RETURN_STRING(MGMT_ACTION_VHT_OPMODE_NOTIF); + CASE_RETURN_STRING(MGMT_ACTION_GAS_INITIAL_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_GAS_INITIAL_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_GAS_COMEBACK_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_GAS_COMEBACK_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_FST_SETUP_REQ); + CASE_RETURN_STRING(MGMT_ACTION_FST_SETUP_RSP); + CASE_RETURN_STRING(MGMT_ACTION_FST_TEAR_DOWN); + CASE_RETURN_STRING(MGMT_ACTION_FST_ACK_REQ); + CASE_RETURN_STRING(MGMT_ACTION_FST_ACK_RSP); + CASE_RETURN_STRING(MGMT_ACTION_FST_ON_CHANNEL_TUNNEL); + CASE_RETURN_STRING(MGMT_ACTION_SCS_REQ); + CASE_RETURN_STRING(MGMT_ACTION_SCS_RSP); + CASE_RETURN_STRING(MGMT_ACTION_GROUP_MEMBERSHIP_REQ); + CASE_RETURN_STRING(MGMT_ACTION_GROUP_MEMBERSHIP_RSP); + CASE_RETURN_STRING(MGMT_ACTION_MCSC_REQ); + CASE_RETURN_STRING(MGMT_ACTION_MCSC_RSP); + CASE_RETURN_STRING(MGMT_FRAME_TYPE_ALL); + CASE_RETURN_STRING(MGMT_CTRL_FRAME); + CASE_RETURN_STRING(MGMT_ACTION_TWT_SETUP); + CASE_RETURN_STRING(MGMT_ACTION_TWT_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_TWT_INFORMATION); + CASE_RETURN_STRING(MGMT_ACTION_EHT_T2LM_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_EHT_T2LM_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_EHT_T2LM_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_EHT_EPCS_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_EHT_EPCS_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_EHT_EPCS_TEARDOWN); + CASE_RETURN_STRING(MGMT_ACTION_FTM_REQUEST); + CASE_RETURN_STRING(MGMT_ACTION_FTM_RESPONSE); + CASE_RETURN_STRING(MGMT_ACTION_FILS_DISCOVERY); + default: + break; + } + + return (uint8_t *)"MGMT_UNKNOWN"; +} + +void mgmt_txrx_frame_hex_dump(void *frame_data, int frame_len, bool is_tx) +{ + struct ieee80211_frame *wh; + uint8_t mgmt_type, mgmt_subtype; + enum mgmt_frame_type frm_type; + uint8_t *mpdu_data_ptr = NULL; + + if (frame_len < sizeof(struct ieee80211_frame)) { + mgmt_txrx_debug("frame len %d less than hdr size", frame_len); + return; + } + wh = (struct ieee80211_frame *)frame_data; + mgmt_type = (wh)->i_fc[0] & IEEE80211_FC0_TYPE_MASK; + mgmt_subtype = (wh)->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK; + + if (mgmt_type != IEEE80211_FC0_TYPE_MGT) { + mgmt_txrx_debug("frame type %d not mgmt type", mgmt_type); + return; + } + /* mpdu_data_ptr is pointer to action header */ + mpdu_data_ptr = (uint8_t *)frame_data + sizeof(struct ieee80211_frame); + + frm_type = mgmt_txrx_get_frm_type(mgmt_subtype, mpdu_data_ptr); + mgmttxrx_nofl_debug("%s MGMT: %s(%d) seq %d len %d:", + is_tx ? "TX" : "RX", + mgmt_txrx_get_frm_type_string(frm_type), frm_type, + le16toh(*(uint16_t *)wh->i_seq) >> + WLAN_SEQ_SEQ_SHIFT, frame_len); + qdf_trace_hex_dump(QDF_MODULE_ID_MGMT_TXRX, QDF_TRACE_LEVEL_DEBUG, + frame_data, frame_len); +} + #ifdef WLAN_IOT_SIM_SUPPORT static QDF_STATUS simulation_frame_update(struct wlan_objmgr_psoc *psoc, qdf_nbuf_t buf,