qcacmn: Add icmp dptrace for latency issue debug
Ping latency is a key performance KPI for some customers, need log in debug mode Change-Id: I96eebf3f249668dd220aa1062fb339f940d36975 CRs-Fixed: 2039646
This commit is contained in:
@@ -45,6 +45,8 @@
|
|||||||
#define QDF_NBUF_PKT_TRAC_TYPE_DHCP 0x04
|
#define QDF_NBUF_PKT_TRAC_TYPE_DHCP 0x04
|
||||||
#define QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION 0x08
|
#define QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION 0x08
|
||||||
#define QDF_NBUF_PKT_TRAC_TYPE_ARP 0x10
|
#define QDF_NBUF_PKT_TRAC_TYPE_ARP 0x10
|
||||||
|
#define QDF_NBUF_PKT_TRAC_TYPE_ICMP 0x20
|
||||||
|
|
||||||
#define QDF_NBUF_PKT_TRAC_MAX_STRING 12
|
#define QDF_NBUF_PKT_TRAC_MAX_STRING 12
|
||||||
#define QDF_NBUF_PKT_TRAC_PROTO_STRING 4
|
#define QDF_NBUF_PKT_TRAC_PROTO_STRING 4
|
||||||
#define QDF_NBUF_PKT_ERROR 1
|
#define QDF_NBUF_PKT_ERROR 1
|
||||||
@@ -255,6 +257,7 @@ struct mon_rx_status {
|
|||||||
* @QDF_PROTO_TYPE_EAPOL - EAPOL
|
* @QDF_PROTO_TYPE_EAPOL - EAPOL
|
||||||
* @QDF_PROTO_TYPE_ARP - ARP
|
* @QDF_PROTO_TYPE_ARP - ARP
|
||||||
* @QDF_PROTO_TYPE_MGMT - MGMT
|
* @QDF_PROTO_TYPE_MGMT - MGMT
|
||||||
|
* @QDF_PROTO_TYPE_ICMP - ICMP
|
||||||
* QDF_PROTO_TYPE_EVENT - EVENT
|
* QDF_PROTO_TYPE_EVENT - EVENT
|
||||||
*/
|
*/
|
||||||
enum qdf_proto_type {
|
enum qdf_proto_type {
|
||||||
@@ -262,6 +265,7 @@ enum qdf_proto_type {
|
|||||||
QDF_PROTO_TYPE_EAPOL,
|
QDF_PROTO_TYPE_EAPOL,
|
||||||
QDF_PROTO_TYPE_ARP,
|
QDF_PROTO_TYPE_ARP,
|
||||||
QDF_PROTO_TYPE_MGMT,
|
QDF_PROTO_TYPE_MGMT,
|
||||||
|
QDF_PROTO_TYPE_ICMP,
|
||||||
QDF_PROTO_TYPE_EVENT,
|
QDF_PROTO_TYPE_EVENT,
|
||||||
QDF_PROTO_TYPE_MAX
|
QDF_PROTO_TYPE_MAX
|
||||||
};
|
};
|
||||||
|
@@ -170,6 +170,7 @@ typedef struct s_qdf_trace_data {
|
|||||||
* @QDF_DP_TRACE_DHCP_PACKET_RECORD - record DHCP packet
|
* @QDF_DP_TRACE_DHCP_PACKET_RECORD - record DHCP packet
|
||||||
* @QDF_DP_TRACE_ARP_PACKET_RECORD - record ARP packet
|
* @QDF_DP_TRACE_ARP_PACKET_RECORD - record ARP packet
|
||||||
* @QDF_DP_TRACE_MGMT_PACKET_RECORD - record MGMT pacekt
|
* @QDF_DP_TRACE_MGMT_PACKET_RECORD - record MGMT pacekt
|
||||||
|
* @QDF_DP_TRACE_ICMP_PACKET_RECORD - record ICMP packet
|
||||||
* QDF_DP_TRACE_EVENT_RECORD - record events
|
* QDF_DP_TRACE_EVENT_RECORD - record events
|
||||||
* @QDF_DP_TRACE_DEFAULT_VERBOSITY - below this are part of default verbosity
|
* @QDF_DP_TRACE_DEFAULT_VERBOSITY - below this are part of default verbosity
|
||||||
* @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout
|
* @QDF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout
|
||||||
@@ -207,6 +208,7 @@ enum QDF_DP_TRACE_ID {
|
|||||||
QDF_DP_TRACE_DHCP_PACKET_RECORD,
|
QDF_DP_TRACE_DHCP_PACKET_RECORD,
|
||||||
QDF_DP_TRACE_ARP_PACKET_RECORD,
|
QDF_DP_TRACE_ARP_PACKET_RECORD,
|
||||||
QDF_DP_TRACE_MGMT_PACKET_RECORD,
|
QDF_DP_TRACE_MGMT_PACKET_RECORD,
|
||||||
|
QDF_DP_TRACE_ICMP_PACKET_RECORD,
|
||||||
QDF_DP_TRACE_EVENT_RECORD,
|
QDF_DP_TRACE_EVENT_RECORD,
|
||||||
QDF_DP_TRACE_DEFAULT_VERBOSITY,
|
QDF_DP_TRACE_DEFAULT_VERBOSITY,
|
||||||
QDF_DP_TRACE_HDD_TX_TIMEOUT,
|
QDF_DP_TRACE_HDD_TX_TIMEOUT,
|
||||||
|
@@ -65,6 +65,8 @@ typedef struct sk_buff *__qdf_nbuf_t;
|
|||||||
#define QDF_NBUF_CB_PACKET_TYPE_ARP 2
|
#define QDF_NBUF_CB_PACKET_TYPE_ARP 2
|
||||||
#define QDF_NBUF_CB_PACKET_TYPE_WAPI 3
|
#define QDF_NBUF_CB_PACKET_TYPE_WAPI 3
|
||||||
#define QDF_NBUF_CB_PACKET_TYPE_DHCP 4
|
#define QDF_NBUF_CB_PACKET_TYPE_DHCP 4
|
||||||
|
#define QDF_NBUF_CB_PACKET_TYPE_ICMP 5
|
||||||
|
|
||||||
|
|
||||||
/* mark the first packet after wow wakeup */
|
/* mark the first packet after wow wakeup */
|
||||||
#define QDF_MARK_FIRST_WAKEUP_PACKET 0x80000000
|
#define QDF_MARK_FIRST_WAKEUP_PACKET 0x80000000
|
||||||
|
@@ -736,19 +736,7 @@ void qdf_dp_trace_init(void)
|
|||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
qdf_dp_trace_spin_lock_init();
|
qdf_dp_trace_spin_lock_init();
|
||||||
g_qdf_dp_trace_data.head = INVALID_QDF_DP_TRACE_ADDR;
|
qdf_dp_trace_clear_buffer();
|
||||||
g_qdf_dp_trace_data.tail = INVALID_QDF_DP_TRACE_ADDR;
|
|
||||||
g_qdf_dp_trace_data.num = 0;
|
|
||||||
g_qdf_dp_trace_data.proto_bitmap = QDF_NBUF_PKT_TRAC_TYPE_EAPOL |
|
|
||||||
QDF_NBUF_PKT_TRAC_TYPE_DHCP |
|
|
||||||
QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION |
|
|
||||||
QDF_NBUF_PKT_TRAC_TYPE_ARP;
|
|
||||||
g_qdf_dp_trace_data.no_of_record = 0;
|
|
||||||
g_qdf_dp_trace_data.verbosity = QDF_DP_TRACE_VERBOSITY_HIGH;
|
|
||||||
g_qdf_dp_trace_data.enable = true;
|
|
||||||
g_qdf_dp_trace_data.tx_count = 0;
|
|
||||||
g_qdf_dp_trace_data.rx_count = 0;
|
|
||||||
g_qdf_dp_trace_data.live_mode = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(qdf_dp_trace_cb_table); i++)
|
for (i = 0; i < ARRAY_SIZE(qdf_dp_trace_cb_table); i++)
|
||||||
qdf_dp_trace_cb_table[i] = qdf_dp_display_record;
|
qdf_dp_trace_cb_table[i] = qdf_dp_display_record;
|
||||||
@@ -760,6 +748,7 @@ void qdf_dp_trace_init(void)
|
|||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_EAPOL_PACKET_RECORD] =
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_EAPOL_PACKET_RECORD] =
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_DHCP_PACKET_RECORD] =
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_DHCP_PACKET_RECORD] =
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_ARP_PACKET_RECORD] =
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_ARP_PACKET_RECORD] =
|
||||||
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_ICMP_PACKET_RECORD] =
|
||||||
qdf_dp_display_proto_pkt;
|
qdf_dp_display_proto_pkt;
|
||||||
qdf_dp_trace_cb_table[QDF_DP_TRACE_MGMT_PACKET_RECORD] =
|
qdf_dp_trace_cb_table[QDF_DP_TRACE_MGMT_PACKET_RECORD] =
|
||||||
qdf_dp_display_mgmt_pkt;
|
qdf_dp_display_mgmt_pkt;
|
||||||
@@ -977,6 +966,8 @@ const char *qdf_dp_code_to_string(enum QDF_DP_TRACE_ID code)
|
|||||||
return "DHCP:";
|
return "DHCP:";
|
||||||
case QDF_DP_TRACE_ARP_PACKET_RECORD:
|
case QDF_DP_TRACE_ARP_PACKET_RECORD:
|
||||||
return "ARP:";
|
return "ARP:";
|
||||||
|
case QDF_DP_TRACE_ICMP_PACKET_RECORD:
|
||||||
|
return "ICMP:";
|
||||||
case QDF_DP_TRACE_MGMT_PACKET_RECORD:
|
case QDF_DP_TRACE_MGMT_PACKET_RECORD:
|
||||||
return "MGMT:";
|
return "MGMT:";
|
||||||
case QDF_DP_TRACE_EVENT_RECORD:
|
case QDF_DP_TRACE_EVENT_RECORD:
|
||||||
@@ -1065,6 +1056,8 @@ static const char *qdf_dp_type_to_str(enum qdf_proto_type type)
|
|||||||
return "EAPOL";
|
return "EAPOL";
|
||||||
case QDF_PROTO_TYPE_ARP:
|
case QDF_PROTO_TYPE_ARP:
|
||||||
return "ARP";
|
return "ARP";
|
||||||
|
case QDF_PROTO_TYPE_ICMP:
|
||||||
|
return "ICMP";
|
||||||
case QDF_PROTO_TYPE_MGMT:
|
case QDF_PROTO_TYPE_MGMT:
|
||||||
return "MGMT";
|
return "MGMT";
|
||||||
case QDF_PROTO_TYPE_EVENT:
|
case QDF_PROTO_TYPE_EVENT:
|
||||||
@@ -1108,8 +1101,10 @@ static const char *qdf_dp_subtype_to_str(enum qdf_proto_subtype subtype)
|
|||||||
case QDF_PROTO_DHCP_DECLINE:
|
case QDF_PROTO_DHCP_DECLINE:
|
||||||
return "DECLINE";
|
return "DECLINE";
|
||||||
case QDF_PROTO_ARP_REQ:
|
case QDF_PROTO_ARP_REQ:
|
||||||
|
case QDF_PROTO_ICMP_REQ:
|
||||||
return "REQUEST";
|
return "REQUEST";
|
||||||
case QDF_PROTO_ARP_RES:
|
case QDF_PROTO_ARP_RES:
|
||||||
|
case QDF_PROTO_ICMP_RES:
|
||||||
return "RESPONSE";
|
return "RESPONSE";
|
||||||
case QDF_PROTO_MGMT_ASSOC:
|
case QDF_PROTO_MGMT_ASSOC:
|
||||||
return "ASSOC";
|
return "ASSOC";
|
||||||
@@ -1326,6 +1321,40 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qdf_log_icmp_pkt() - log ICMP packet
|
||||||
|
* @session_id: vdev_id
|
||||||
|
* @skb: skb pointer
|
||||||
|
* @dir: direction
|
||||||
|
*
|
||||||
|
* Return: true/false
|
||||||
|
*/
|
||||||
|
static bool qdf_log_icmp_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||||
|
enum qdf_proto_dir dir, uint8_t pdev_id)
|
||||||
|
{
|
||||||
|
enum qdf_proto_subtype proto_subtype;
|
||||||
|
|
||||||
|
if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_ICMP) &&
|
||||||
|
(qdf_nbuf_is_icmp_pkt(skb) == true)) {
|
||||||
|
|
||||||
|
proto_subtype = qdf_nbuf_get_icmp_subtype(skb);
|
||||||
|
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ICMP_PACKET_RECORD,
|
||||||
|
session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
|
||||||
|
(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
|
||||||
|
QDF_PROTO_TYPE_ICMP, proto_subtype, dir, pdev_id));
|
||||||
|
if (QDF_TX == dir)
|
||||||
|
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||||
|
else if (QDF_RX == dir)
|
||||||
|
QDF_NBUF_CB_RX_DP_TRACE(skb) = 1;
|
||||||
|
|
||||||
|
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qdf_dp_trace_log_pkt() - log packet type enabled through iwpriv
|
* qdf_dp_trace_log_pkt() - log packet type enabled through iwpriv
|
||||||
* @session_id: vdev_id
|
* @session_id: vdev_id
|
||||||
@@ -1338,18 +1367,17 @@ static bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
|
|||||||
void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
|
void qdf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||||
enum qdf_proto_dir dir, uint8_t pdev_id)
|
enum qdf_proto_dir dir, uint8_t pdev_id)
|
||||||
{
|
{
|
||||||
if (qdf_dp_get_proto_bitmap()) {
|
if (!qdf_dp_get_proto_bitmap())
|
||||||
if (qdf_log_arp_pkt(session_id,
|
return;
|
||||||
skb, dir, pdev_id) == false) {
|
if (qdf_log_arp_pkt(session_id, skb, dir, pdev_id))
|
||||||
if (qdf_log_dhcp_pkt(session_id,
|
return;
|
||||||
skb, dir, pdev_id) == false) {
|
if (qdf_log_dhcp_pkt(session_id, skb, dir, pdev_id))
|
||||||
if (qdf_log_eapol_pkt(session_id,
|
return;
|
||||||
skb, dir, pdev_id) == false) {
|
if (qdf_log_eapol_pkt(session_id, skb, dir, pdev_id))
|
||||||
return;
|
return;
|
||||||
}
|
if (qdf_log_icmp_pkt(session_id, skb, dir, pdev_id))
|
||||||
}
|
return;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(qdf_dp_trace_log_pkt);
|
EXPORT_SYMBOL(qdf_dp_trace_log_pkt);
|
||||||
|
|
||||||
@@ -1675,7 +1703,8 @@ void qdf_dp_trace_clear_buffer(void)
|
|||||||
g_qdf_dp_trace_data.proto_bitmap = QDF_NBUF_PKT_TRAC_TYPE_EAPOL |
|
g_qdf_dp_trace_data.proto_bitmap = QDF_NBUF_PKT_TRAC_TYPE_EAPOL |
|
||||||
QDF_NBUF_PKT_TRAC_TYPE_DHCP |
|
QDF_NBUF_PKT_TRAC_TYPE_DHCP |
|
||||||
QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION |
|
QDF_NBUF_PKT_TRAC_TYPE_MGMT_ACTION |
|
||||||
QDF_NBUF_PKT_TRAC_TYPE_ARP;
|
QDF_NBUF_PKT_TRAC_TYPE_ARP |
|
||||||
|
QDF_NBUF_PKT_TRAC_TYPE_ICMP;
|
||||||
g_qdf_dp_trace_data.no_of_record = 0;
|
g_qdf_dp_trace_data.no_of_record = 0;
|
||||||
g_qdf_dp_trace_data.verbosity = QDF_DP_TRACE_VERBOSITY_HIGH;
|
g_qdf_dp_trace_data.verbosity = QDF_DP_TRACE_VERBOSITY_HIGH;
|
||||||
g_qdf_dp_trace_data.enable = true;
|
g_qdf_dp_trace_data.enable = true;
|
||||||
|
Reference in New Issue
Block a user