qcacmn: Add support to log ICMP packet seq no and ID
Add support to log ICMP seq no and ID in DPTRACE. Other protcols can use this private proto data to record there private data accordingly. Currently it is set to 0. Increase the record entry from 40 bytes to 50 bytes. Change-Id: Ief5fb26a97408a364af486f3eaec2e108de71d52 CRs-Fixed: 2951916
This commit is contained in:
@@ -1631,7 +1631,7 @@ static bool qdf_log_icmpv6_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
QDF_DP_TRACE_ICMPv6_PACKET_RECORD,
|
||||
vdev_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
|
||||
(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
|
||||
QDF_PROTO_TYPE_ICMPv6, subtype, dir, pdev_id, false));
|
||||
QDF_PROTO_TYPE_ICMPv6, subtype, dir, pdev_id, false, 0));
|
||||
|
||||
switch (subtype) {
|
||||
case QDF_PROTO_ICMPV6_REQ:
|
||||
@@ -1674,6 +1674,10 @@ static bool qdf_log_icmp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
enum qdf_proto_dir dir, uint8_t pdev_id)
|
||||
{
|
||||
enum qdf_proto_subtype proto_subtype;
|
||||
uint8_t *data = NULL;
|
||||
uint16_t seq_num = 0;
|
||||
uint16_t icmp_id = 0;
|
||||
uint32_t proto_priv_data = 0;
|
||||
|
||||
if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_ICMP) &&
|
||||
(qdf_nbuf_is_icmp_pkt(skb) == true)) {
|
||||
@@ -1681,6 +1685,13 @@ static bool qdf_log_icmp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
QDF_NBUF_CB_DP_TRACE_PRINT(skb) = false;
|
||||
proto_subtype = qdf_nbuf_get_icmp_subtype(skb);
|
||||
|
||||
data = qdf_nbuf_data(skb);
|
||||
icmp_id = qdf_cpu_to_be16(*(uint16_t *)(data + ICMP_ID_OFFSET));
|
||||
seq_num = qdf_cpu_to_be16(*(uint16_t *)(data + ICMP_SEQ_NUM_OFFSET));
|
||||
|
||||
proto_priv_data |= ((proto_priv_data | ((uint32_t)icmp_id)) << 16);
|
||||
proto_priv_data |= (uint32_t)seq_num;
|
||||
|
||||
if (QDF_TX == dir)
|
||||
QDF_NBUF_CB_TX_DP_TRACE(skb) = 1;
|
||||
else if (QDF_RX == dir)
|
||||
@@ -1694,7 +1705,7 @@ static bool qdf_log_icmp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
QDF_NBUF_DEST_MAC_OFFSET,
|
||||
QDF_PROTO_TYPE_ICMP,
|
||||
proto_subtype, dir, pdev_id,
|
||||
false));
|
||||
false, proto_priv_data));
|
||||
|
||||
if (proto_subtype == QDF_PROTO_ICMP_REQ)
|
||||
g_qdf_dp_trace_data.icmp_req++;
|
||||
@@ -1757,7 +1768,7 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
skb->data +
|
||||
QDF_NBUF_DEST_MAC_OFFSET,
|
||||
QDF_PROTO_TYPE_EAPOL, subtype,
|
||||
dir, pdev_id, true));
|
||||
dir, pdev_id, true, 0));
|
||||
|
||||
switch (subtype) {
|
||||
case QDF_PROTO_EAPOL_M1:
|
||||
@@ -1832,7 +1843,7 @@ static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
skb->data +
|
||||
QDF_NBUF_DEST_MAC_OFFSET,
|
||||
QDF_PROTO_TYPE_DHCP, subtype,
|
||||
dir, pdev_id, true));
|
||||
dir, pdev_id, true, 0));
|
||||
|
||||
switch (subtype) {
|
||||
case QDF_PROTO_DHCP_DISCOVER:
|
||||
@@ -1893,7 +1904,7 @@ static bool qdf_log_arp_pkt(uint8_t vdev_id, struct sk_buff *skb,
|
||||
QDF_NBUF_DEST_MAC_OFFSET,
|
||||
QDF_PROTO_TYPE_ARP,
|
||||
proto_subtype, dir, pdev_id,
|
||||
true));
|
||||
true, 0));
|
||||
|
||||
if (QDF_PROTO_ARP_REQ == proto_subtype)
|
||||
g_qdf_dp_trace_data.arp_req++;
|
||||
@@ -2115,24 +2126,25 @@ void qdf_dp_display_proto_pkt(struct qdf_dp_trace_record_s *record,
|
||||
loc = qdf_dp_trace_fill_meta_str(prepend_str, sizeof(prepend_str),
|
||||
index, info, record);
|
||||
DPTRACE_PRINT("%s [%d] [%s] SA: "
|
||||
QDF_MAC_ADDR_FMT " %s DA: "
|
||||
QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_FMT " %s DA:"
|
||||
QDF_MAC_ADDR_FMT " proto priv data = %08x",
|
||||
prepend_str,
|
||||
buf->vdev_id,
|
||||
qdf_dp_subtype_to_str(buf->subtype),
|
||||
QDF_MAC_ADDR_REF(buf->sa.bytes),
|
||||
qdf_dp_dir_to_str(buf->dir),
|
||||
QDF_MAC_ADDR_REF(buf->da.bytes));
|
||||
QDF_MAC_ADDR_REF(buf->da.bytes),
|
||||
buf->proto_priv_data);
|
||||
}
|
||||
qdf_export_symbol(qdf_dp_display_proto_pkt);
|
||||
|
||||
void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
|
||||
uint8_t *sa, uint8_t *da, enum qdf_proto_type type,
|
||||
enum qdf_proto_subtype subtype, enum qdf_proto_dir dir,
|
||||
uint8_t pdev_id, bool print)
|
||||
uint8_t pdev_id, bool print, uint32_t proto_priv_data)
|
||||
{
|
||||
struct qdf_dp_trace_proto_buf buf;
|
||||
int buf_size = sizeof(struct qdf_dp_trace_ptr_buf);
|
||||
int buf_size = sizeof(struct qdf_dp_trace_proto_buf);
|
||||
|
||||
if (qdf_dp_enable_check(NULL, code, dir) == false)
|
||||
return;
|
||||
@@ -2146,6 +2158,7 @@ void qdf_dp_trace_proto_pkt(enum QDF_DP_TRACE_ID code, uint8_t vdev_id,
|
||||
buf.type = type;
|
||||
buf.subtype = subtype;
|
||||
buf.vdev_id = vdev_id;
|
||||
buf.proto_priv_data = proto_priv_data;
|
||||
qdf_dp_add_record(code, pdev_id,
|
||||
(uint8_t *)&buf, buf_size, NULL, 0, print);
|
||||
}
|
||||
|
Reference in New Issue
Block a user