qcacmn: Add chipset stats for EAPOL/DHCP packets
Add chipset stats for EAPOL/DHCP packets. Change-Id: Icaabd64a84f57b7a556cb7c463fc19cfe0780a2b CRs-Fixed: 3783005
このコミットが含まれているのは:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-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
|
||||
@@ -54,6 +54,9 @@ qdf_declare_param(qdf_log_flush_timer_period, uint);
|
||||
#include "i_host_diag_core_event.h"
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_CHIPSET_STATS
|
||||
#include "wlan_cp_stats_chipset_stats.h"
|
||||
#endif
|
||||
/* Global qdf print id */
|
||||
|
||||
/* Preprocessor definitions and constants */
|
||||
@@ -1615,6 +1618,26 @@ static bool qdf_log_icmp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef WLAN_CHIPSET_STATS
|
||||
static void
|
||||
qdf_log_pkt_cstats(uint8_t *sa, uint8_t *da, enum qdf_proto_type pkt_type,
|
||||
enum qdf_proto_subtype subtype, enum qdf_proto_dir dir,
|
||||
enum qdf_dp_tx_rx_status status, uint8_t vdev_id,
|
||||
enum QDF_OPMODE op_mode)
|
||||
{
|
||||
wlan_cp_stats_cstats_pkt_log(sa, da, pkt_type, subtype, dir,
|
||||
status, vdev_id, op_mode);
|
||||
}
|
||||
#else
|
||||
static void
|
||||
qdf_log_pkt_cstats(uint8_t *sa, uint8_t *da, enum qdf_proto_type pkt_type,
|
||||
enum qdf_proto_subtype subtype, enum qdf_proto_dir dir,
|
||||
enum qdf_dp_tx_rx_status status, uint8_t vdev_id,
|
||||
enum QDF_OPMODE op_mode)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONNECTIVITY_DIAG_EVENT
|
||||
enum diag_tx_status wlan_get_diag_tx_status(enum qdf_dp_tx_rx_status tx_status)
|
||||
{
|
||||
@@ -1881,6 +1904,10 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
QDF_RX, 0, op_mode,
|
||||
vdev_id, skb->data,
|
||||
qdf_nbuf_rx_get_band(skb));
|
||||
qdf_log_pkt_cstats(skb->data + QDF_NBUF_SRC_MAC_OFFSET,
|
||||
skb->data + QDF_NBUF_DEST_MAC_OFFSET,
|
||||
QDF_PROTO_TYPE_EAPOL, subtype, dir,
|
||||
QDF_TX_RX_STATUS_INVALID, vdev_id, op_mode);
|
||||
}
|
||||
|
||||
if (dp_eap_trace) {
|
||||
@@ -1966,6 +1993,10 @@ static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
qdf_fill_wlan_connectivity_log(QDF_PROTO_TYPE_DHCP, subtype,
|
||||
QDF_RX, 0, op_mode, vdev_id, 0,
|
||||
qdf_nbuf_rx_get_band(skb));
|
||||
qdf_log_pkt_cstats(skb->data + QDF_NBUF_SRC_MAC_OFFSET,
|
||||
skb->data + QDF_NBUF_DEST_MAC_OFFSET,
|
||||
QDF_PROTO_TYPE_DHCP, subtype, dir,
|
||||
QDF_TX_RX_STATUS_INVALID, vdev_id, op_mode);
|
||||
}
|
||||
|
||||
if (dp_dhcp_trace) {
|
||||
@@ -2494,6 +2525,11 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
|
||||
QDF_NBUF_CB_TX_VDEV_CTX(nbuf),
|
||||
nbuf->data,
|
||||
qdf_nbuf_tx_get_band(nbuf));
|
||||
qdf_log_pkt_cstats(nbuf->data + QDF_NBUF_SRC_MAC_OFFSET,
|
||||
nbuf->data + QDF_NBUF_DEST_MAC_OFFSET,
|
||||
pkt_type, subtype, QDF_TX,
|
||||
qdf_tx_status, QDF_NBUF_CB_TX_VDEV_CTX(nbuf),
|
||||
op_mode);
|
||||
}
|
||||
|
||||
if (qdf_dp_enable_check(nbuf, code, QDF_TX) == false)
|
||||
|
@@ -284,4 +284,103 @@ int wlan_cp_stats_cstats_send_buffer_to_user(enum cstats_types type)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline enum cstats_pkt_type
|
||||
get_cstat_type(enum qdf_proto_type type,
|
||||
enum qdf_proto_subtype subtype)
|
||||
{
|
||||
if (type == QDF_PROTO_TYPE_EAPOL) {
|
||||
if (subtype == QDF_PROTO_EAPOL_M1)
|
||||
return CSTATS_EAPOL_M1;
|
||||
else if (subtype == QDF_PROTO_EAPOL_M2)
|
||||
return CSTATS_EAPOL_M2;
|
||||
else if (subtype == QDF_PROTO_EAPOL_M3)
|
||||
return CSTATS_EAPOL_M3;
|
||||
else if (subtype == QDF_PROTO_EAPOL_M4)
|
||||
return CSTATS_EAPOL_M4;
|
||||
} else if (type == QDF_PROTO_TYPE_DHCP) {
|
||||
if (subtype == QDF_PROTO_DHCP_DISCOVER)
|
||||
return CSTATS_DHCP_DISCOVER;
|
||||
else if (subtype == QDF_PROTO_DHCP_REQUEST)
|
||||
return CSTATS_DHCP_REQ;
|
||||
else if (subtype == QDF_PROTO_DHCP_OFFER)
|
||||
return CSTATS_DHCP_OFFER;
|
||||
else if (subtype == QDF_PROTO_DHCP_ACK)
|
||||
return CSTATS_DHCP_ACK;
|
||||
else if (subtype == QDF_PROTO_DHCP_NACK)
|
||||
return CSTATS_DHCP_NACK;
|
||||
else if (subtype == QDF_PROTO_DHCP_RELEASE)
|
||||
return CSTATS_DHCP_RELEASE;
|
||||
else if (subtype == QDF_PROTO_DHCP_DECLINE)
|
||||
return CSTATS_DHCP_DECLINE;
|
||||
else if (subtype == QDF_PROTO_DHCP_INFORM)
|
||||
return CSTATS_DHCP_INFORM;
|
||||
}
|
||||
|
||||
return CSTATS_PKT_TYPE_INVALID;
|
||||
}
|
||||
|
||||
static inline enum cstats_dir
|
||||
get_cstat_dir(enum qdf_proto_dir dir)
|
||||
{
|
||||
switch (dir) {
|
||||
case QDF_TX:
|
||||
return CSTATS_DIR_TX;
|
||||
case QDF_RX:
|
||||
return CSTATS_DIR_RX;
|
||||
default:
|
||||
return CSTATS_DIR_INVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static inline enum cstats_pkt_status
|
||||
get_cstat_pkt_status(enum qdf_dp_tx_rx_status status)
|
||||
{
|
||||
switch (status) {
|
||||
case QDF_TX_RX_STATUS_INVALID:
|
||||
return CSTATS_STATUS_INVALID;
|
||||
case QDF_TX_RX_STATUS_OK:
|
||||
return CSTATS_TX_STATUS_OK;
|
||||
case QDF_TX_RX_STATUS_FW_DISCARD:
|
||||
return CSTATS_TX_STATUS_FW_DISCARD;
|
||||
case QDF_TX_RX_STATUS_NO_ACK:
|
||||
return CSTATS_TX_STATUS_NO_ACK;
|
||||
case QDF_TX_RX_STATUS_DROP:
|
||||
return CSTATS_TX_STATUS_DROP;
|
||||
case QDF_TX_RX_STATUS_DOWNLOAD_SUCC:
|
||||
return CSTATS_TX_STATUS_DOWNLOAD_SUCC;
|
||||
case QDF_TX_RX_STATUS_DEFAULT:
|
||||
return CSTATS_TX_STATUS_DEFAULT;
|
||||
default:
|
||||
return CSTATS_STATUS_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
void wlan_cp_stats_cstats_pkt_log(uint8_t *sa, uint8_t *da,
|
||||
enum qdf_proto_type pkt_type,
|
||||
enum qdf_proto_subtype subtype,
|
||||
enum qdf_proto_dir dir,
|
||||
enum qdf_dp_tx_rx_status status,
|
||||
uint8_t vdev_id,
|
||||
enum QDF_OPMODE op_mode)
|
||||
{
|
||||
struct cstats_pkt_info stat = {0};
|
||||
|
||||
stat.cmn.hdr.evt_id = WLAN_CHIPSET_STATS_DATA_PKT_EVENT_ID;
|
||||
stat.cmn.hdr.length = sizeof(struct cstats_pkt_info) -
|
||||
sizeof(struct cstats_hdr);
|
||||
stat.cmn.opmode = op_mode;
|
||||
stat.cmn.vdev_id = vdev_id;
|
||||
stat.cmn.timestamp_us = qdf_get_time_of_the_day_us();
|
||||
stat.cmn.time_tick = qdf_get_log_timestamp();
|
||||
|
||||
CSTATS_MAC_COPY(stat.src_mac, sa);
|
||||
CSTATS_MAC_COPY(stat.dst_mac, da);
|
||||
|
||||
stat.type = get_cstat_type(pkt_type, subtype);
|
||||
stat.dir = get_cstat_dir(dir);
|
||||
stat.status = get_cstat_pkt_status(status);
|
||||
|
||||
wlan_cstats_host_stats(sizeof(struct cstats_pkt_info), &stat);
|
||||
}
|
||||
#endif /* WLAN_CHIPSET_STATS */
|
||||
|
@@ -19,6 +19,8 @@
|
||||
#define MAX_CSTATS_NODE_COUNT 256
|
||||
#define MAX_CSTATS_VERSION_BUFF_LENGTH 100
|
||||
|
||||
#define CSTATS_QMI_EVENT_TYPE 1
|
||||
|
||||
#define ANI_NL_MSG_CSTATS_HOST_LOG_TYPE 110
|
||||
#define ANI_NL_MSG_CSTATS_FW_LOG_TYPE 111
|
||||
|
||||
@@ -133,6 +135,26 @@ void wlan_cp_stats_cstats_write_to_buff(enum cstats_types type,
|
||||
* Return : 0 on success and errno on failure
|
||||
*/
|
||||
int wlan_cp_stats_cstats_send_buffer_to_user(enum cstats_types type);
|
||||
|
||||
/*
|
||||
* wlan_cp_stats_cstats_pkt_log() - Data packets stats
|
||||
* @sa - Source addr
|
||||
* @da - Destination addr
|
||||
* @pkt_type - Packet type
|
||||
* @subtype - Subtype
|
||||
* @dir - Direction
|
||||
* @status - Status
|
||||
* @vdev_id - Vdev iD
|
||||
* @op_mode - opmode
|
||||
*
|
||||
* Return : void
|
||||
*/
|
||||
void wlan_cp_stats_cstats_pkt_log(uint8_t *sa, uint8_t *da,
|
||||
enum qdf_proto_type pkt_type,
|
||||
enum qdf_proto_subtype subtype,
|
||||
enum qdf_proto_dir dir,
|
||||
enum qdf_dp_tx_rx_status status,
|
||||
uint8_t vdev_id, enum QDF_OPMODE op_mode);
|
||||
#else
|
||||
static inline QDF_STATUS wlan_cp_stats_cstats_init(void)
|
||||
{
|
||||
|
新しいイシューから参照
ユーザーをブロックする