diff options
| author | Himanshu Agarwal <himanaga@codeaurora.org> | 2017-01-04 14:52:01 +0530 |
|---|---|---|
| committer | Ashish kumar goswami <agoswa@codeaurora.org> | 2017-01-09 15:03:23 +0530 |
| commit | 2e4d8ba22fe059647612082aaf4711a76ec54ae3 (patch) | |
| tree | f68ebc4603f5b88c2ec502e95b8e1d8968cf405d | |
| parent | 23a6196c92d29c581aadf8a86468fd3d9beb036a (diff) | |
qcacld-2.0: Add infrastructure to log mgmt pkts in DPTRACE
Add infrastructure to log mgmt packets like assoc, disassoc,
auth and deauth in DPTRACE.
Change-Id: I0437a2100554628607c561b0e815c0009f1c5606
CRs-Fixed: 1008087
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_assoc.c | 12 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 11 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_nbuf.h | 46 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_trace.c | 52 | ||||
| -rw-r--r-- | CORE/SERVICES/COMMON/adf/adf_trace.h | 100 |
5 files changed, 193 insertions, 28 deletions
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c index 939633940253..97db2a909ef2 100644 --- a/CORE/HDD/src/wlan_hdd_assoc.c +++ b/CORE/HDD/src/wlan_hdd_assoc.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -71,6 +71,7 @@ #include <wlan_logging_sock_svc.h> #include "tl_shim.h" #include "wlan_hdd_oemdata.h" +#include "adf_trace.h" struct ether_addr { @@ -984,6 +985,10 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo * } #endif /* QCA_PKT_PROTO_TRACE */ + DPTRACE(adf_dp_trace_mgmt_pkt(ADF_DP_TRACE_MGMT_PACKET_RECORD, + pAdapter->sessionId, + ADF_PROTO_TYPE_MGMT, ADF_PROTO_MGMT_DISASSOC)); + /* HDD has initiated disconnect, do not send disconnect indication * to kernel. Sending disconnected event to kernel for userspace * initiated disconnect will be handled by diconnect handler call @@ -1859,6 +1864,11 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs vos_pkt_trace_buf_update("ST:ASSOC"); } #endif /* QCA_PKT_PROTO_TRACE */ + + DPTRACE(adf_dp_trace_mgmt_pkt(ADF_DP_TRACE_MGMT_PACKET_RECORD, + pAdapter->sessionId, + ADF_PROTO_TYPE_MGMT, ADF_PROTO_MGMT_ASSOC)); + //For reassoc, the station is already registered, all we need is to change the state //of the STA in TL. //If authentication is required (WPA/WPA2/DWEP), change TL to CONNECTED instead of AUTHENTICATED diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 553e293831ef..693c0c95d879 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -2327,6 +2327,10 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa } #endif /* QCA_PKT_PROTO_TRACE */ + DPTRACE(adf_dp_trace_mgmt_pkt(ADF_DP_TRACE_MGMT_PACKET_RECORD, + pHostapdAdapter->sessionId, + ADF_PROTO_TYPE_MGMT, ADF_PROTO_MGMT_ASSOC)); + #ifdef FEATURE_BUS_BANDWIDTH /* start timer in sap/p2p_go */ if (pHddApCtx->bApActive == VOS_FALSE) @@ -2469,6 +2473,11 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa vos_pkt_trace_buf_update("HA:DISASC"); } #endif /* QCA_PKT_PROTO_TRACE */ + + DPTRACE(adf_dp_trace_mgmt_pkt(ADF_DP_TRACE_MGMT_PACKET_RECORD, + pHostapdAdapter->sessionId, + ADF_PROTO_TYPE_MGMT, ADF_PROTO_MGMT_DISASSOC)); + hdd_softap_DeregisterSTA(pHostapdAdapter, staId); pHddApCtx->bApActive = VOS_FALSE; diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h index 0e8f5e18d700..e14de34a1f46 100644 --- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h +++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2014, 2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2014, 2016-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -182,13 +182,52 @@ struct mon_rx_status { #define ICMPV6_NA 0x88 #define ADF_NBUF_IPA_CHECK_MASK 0x80000000 +/** + * adf_proto_type - protocol type + * @ADF_PROTO_TYPE_DHCP - DHCP + * @ADF_PROTO_TYPE_EAPOL - EAPOL + * @ADF_PROTO_TYPE_ARP - ARP + * @ADF_PROTO_TYPE_MGMT - MGMT + */ enum adf_proto_type { ADF_PROTO_TYPE_DHCP = 0, ADF_PROTO_TYPE_EAPOL, ADF_PROTO_TYPE_ARP, + ADF_PROTO_TYPE_MGMT, ADF_PROTO_TYPE_MAX }; +/** + * adf_proto_subtype - subtype of packet + * @ADF_PROTO_EAPOL_M1 - EAPOL 1/4 + * @ADF_PROTO_EAPOL_M2 - EAPOL 2/4 + * @ADF_PROTO_EAPOL_M3 - EAPOL 3/4 + * @ADF_PROTO_EAPOL_M4 - EAPOL 4/4 + * @ADF_PROTO_DHCP_DISCOVER - discover + * @ADF_PROTO_DHCP_REQUEST - request + * @ADF_PROTO_DHCP_OFFER - offer + * @ADF_PROTO_DHCP_ACK - ACK + * @ADF_PROTO_DHCP_NACK - NACK + * @ADF_PROTO_DHCP_RELEASE - release + * @ADF_PROTO_DHCP_INFORM - inform + * @ADF_PROTO_DHCP_DECLINE - decline + * @ADF_PROTO_ARP_REQ - arp request + * @ADF_PROTO_ARP_RES - arp response + * @ADF_PROTO_ICMP_REQ - icmp request + * @ADF_PROTO_ICMP_RES - icmp response + * @ADF_PROTO_ICMPV6_REQ - icmpv6 request + * @ADF_PROTO_ICMPV6_RES - icmpv6 response + * @ADF_PROTO_ICMPV6_NS - icmpv6 ns packet + * @ADF_PROTO_ICMPV6_NA - icmpv6 na packet + * @ADF_PROTO_IPV4_UDP - ipv4 udp + * @ADF_PROTO_IPV4_TCP - ipv4 tcp + * @ADF_PROTO_IPV6_UDP - ipv6 udp + * @ADF_PROTO_IPV6_TCP - ipv6 tcp + * @ADF_PROTO_MGMT_ASSOC -assoc + * @ADF_PROTO_MGMT_DISASSOC - disassoc + * @ADF_PROTO_MGMT_AUTH - auth + * @ADF_PROTO_MGMT_DEAUTH - deauth + */ enum adf_proto_subtype { ADF_PROTO_INVALID = 0, ADF_PROTO_EAPOL_M1, @@ -205,7 +244,6 @@ enum adf_proto_subtype { ADF_PROTO_DHCP_DECLINE, ADF_PROTO_ARP_REQ, ADF_PROTO_ARP_RES, - ADF_PROTO_ARP_SUBTYPE, ADF_PROTO_ICMP_REQ, ADF_PROTO_ICMP_RES, ADF_PROTO_ICMPV6_REQ, @@ -216,6 +254,10 @@ enum adf_proto_subtype { ADF_PROTO_IPV4_TCP, ADF_PROTO_IPV6_UDP, ADF_PROTO_IPV6_TCP, + ADF_PROTO_MGMT_ASSOC, + ADF_PROTO_MGMT_DISASSOC, + ADF_PROTO_MGMT_AUTH, + ADF_PROTO_MGMT_DEAUTH, ADF_PROTO_SUBTYPE_MAX }; diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c index cfcfe687f391..612cbbbff1e6 100644 --- a/CORE/SERVICES/COMMON/adf/adf_trace.c +++ b/CORE/SERVICES/COMMON/adf/adf_trace.c @@ -76,7 +76,7 @@ void adf_dp_trace_init(void) g_adf_dp_trace_data.tail = INVALID_ADF_DP_TRACE_ADDR; g_adf_dp_trace_data.num = 0; g_adf_dp_trace_data.proto_bitmap = NBUF_PKT_TRAC_TYPE_DHCP | - NBUF_PKT_TRAC_TYPE_EAPOL; + NBUF_PKT_TRAC_TYPE_EAPOL | NBUF_PKT_TRAC_TYPE_MGMT_ACTION; g_adf_dp_trace_data.no_of_record = 0; g_adf_dp_trace_data.verbosity = ADF_DP_TRACE_VERBOSITY_LOW; g_adf_dp_trace_data.enable = true; @@ -85,13 +85,14 @@ void adf_dp_trace_init(void) adf_dp_trace_cb_table[i] = adf_dp_display_record; adf_dp_trace_cb_table[ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD] = - adf_dp_trace_cb_table[ADF_DP_TRACE_TXRX_FAST_PACKET_PTR_RECORD] = adf_dp_trace_cb_table[ADF_DP_TRACE_FREE_PACKET_PTR_RECORD] = adf_dp_display_ptr_record; adf_dp_trace_cb_table[ADF_DP_TRACE_EAPOL_PACKET_RECORD] = adf_dp_trace_cb_table[ADF_DP_TRACE_DHCP_PACKET_RECORD] = adf_dp_trace_cb_table[ADF_DP_TRACE_ARP_PACKET_RECORD] = adf_dp_display_proto_pkt; + adf_dp_trace_cb_table[ADF_DP_TRACE_MGMT_PACKET_RECORD] = + adf_dp_display_mgmt_pkt; } /** @@ -216,14 +217,14 @@ const char *adf_dp_code_to_string(enum ADF_DP_TRACE_ID code) return "DHCP:"; case ADF_DP_TRACE_ARP_PACKET_RECORD: return "ARP:"; + case ADF_DP_TRACE_MGMT_PACKET_RECORD: + return "MGMT:"; case ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD: return "HDD: TX: PTR:"; case ADF_DP_TRACE_HDD_TX_PACKET_RECORD: return "HDD: TX: DATA:"; case ADF_DP_TRACE_CE_PACKET_PTR_RECORD: return "CE: TX: PTR:"; - case ADF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD: - return "CE: TX: FAST: PTR:"; case ADF_DP_TRACE_FREE_PACKET_PTR_RECORD: return "FREE: TX: PTR:"; case ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD: @@ -238,8 +239,6 @@ const char *adf_dp_code_to_string(enum ADF_DP_TRACE_ID code) return "TXRX: TX: Q: PTR:"; case ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD: return "TXRX: TX: PTR:"; - case ADF_DP_TRACE_TXRX_FAST_PACKET_PTR_RECORD: - return "TXRX: TX: FAST: PTR:"; case ADF_DP_TRACE_HTT_PACKET_PTR_RECORD: return "HTT: TX: PTR:"; case ADF_DP_TRACE_HTC_PACKET_PTR_RECORD: @@ -290,6 +289,8 @@ const char *adf_dp_type_to_str(enum adf_proto_type type) return "EAPOL"; case ADF_PROTO_TYPE_ARP: return "ARP"; + case ADF_PROTO_TYPE_MGMT: + return "MGMT"; default: return "invalid"; } @@ -332,6 +333,14 @@ const char *adf_dp_subtype_to_str(enum adf_proto_subtype subtype) return "REQUEST"; case ADF_PROTO_ARP_RES: return "RESPONSE"; + case ADF_PROTO_MGMT_ASSOC: + return "ASSOC"; + case ADF_PROTO_MGMT_DISASSOC: + return "DISASSOC"; + case ADF_PROTO_MGMT_AUTH: + return "AUTH"; + case ADF_PROTO_MGMT_DEAUTH: + return "DEAUTH"; default: return "invalid"; } @@ -606,6 +615,37 @@ void adf_dp_trace_proto_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id, adf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); } +void adf_dp_display_mgmt_pkt(struct adf_dp_trace_record_s *record, + uint16_t index) +{ + struct adf_dp_trace_mgmt_buf *buf = + (struct adf_dp_trace_mgmt_buf *)record->data; + + adf_os_print("DPT: %04d: %012llu: %s vdev_id %d", index, + record->time, adf_dp_code_to_string(record->code), + buf->vdev_id); + adf_os_print("DPT: Type %s Subtype %s", adf_dp_type_to_str(buf->type), + adf_dp_subtype_to_str(buf->subtype)); +} + +void adf_dp_trace_mgmt_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id, + enum adf_proto_type type, enum adf_proto_subtype subtype) +{ + struct adf_dp_trace_mgmt_buf buf; + int buf_size = sizeof(struct adf_dp_trace_mgmt_buf); + + if (adf_dp_enable_check(NULL, code, ADF_NA) == false) + return; + + if (buf_size > ADF_DP_TRACE_RECORD_SIZE) + ADF_BUG(0); + + buf.type = type; + buf.subtype = subtype; + buf.vdev_id = vdev_id; + adf_dp_add_record(code, (uint8_t *)&buf, buf_size, true); +} + /** * adf_dp_display_ptr_record() - display record * @record: dptrace record diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.h b/CORE/SERVICES/COMMON/adf/adf_trace.h index c1359c886606..c853b4b57d8f 100644 --- a/CORE/SERVICES/COMMON/adf/adf_trace.h +++ b/CORE/SERVICES/COMMON/adf/adf_trace.h @@ -71,34 +71,45 @@ struct adf_mac_addr { /** * enum ADF_DP_TRACE_ID - Generic ID to identify various events in data path - * @ADF_DP_TRACE_INVALID: Invalid ID - * @ADF_DP_TRACE_DROP_PACKET_RECORD: Dropped packet stored with this id - * @ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD: nbuf->data ptr of HDD - * @ADF_DP_TRACE_HDD_TX_PACKET_RECORD: nbuf->data stored with this id - * @ADF_DP_TRACE_CE_PACKET_PTR_RECORD: nbuf->data ptr of CE - * @ADF_DP_TRACE_CE_PACKET_RECORD: nbuf->data stored with this id - * @ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD: nbuf->data ptr of txrx queue - * @ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD: nbuf->data ptr of txrx - * @ADF_DP_TRACE_HTT_PACKET_PTR_RECORD: nbuf->data ptr of htt - * @ADF_DP_TRACE_HTC_PACKET_PTR_RECORD: nbuf->data ptr of htc - * @ADF_DP_TRACE_HIF_PACKET_PTR_RECORD: nbuf->data ptr of hif - * @ADF_DP_TRACE_HDD_TX_TIMEOUT: hdd tx timeout event - * @ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT: hdd tx softap timeout event - * + * @ADF_DP_TRACE_INVALID - invalid + * @ADF_DP_TRACE_DROP_PACKET_RECORD - record drop packet + * @ADF_DP_TRACE_EAPOL_PACKET_RECORD - record EAPOL packet + * @ADF_DP_TRACE_DHCP_PACKET_RECORD - record DHCP packet + * @ADF_DP_TRACE_ARP_PACKET_RECORD - record ARP packet + * @ADF_DP_TRACE_MGMT_PACKET_RECORD - record MGMT pacekt + * @ADF_DP_TRACE_DEFAULT_VERBOSITY - below this are part of default verbosity + * @ADF_DP_TRACE_HDD_TX_TIMEOUT - HDD tx timeout + * @ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT- SOFTAP HDD tx timeout + * @ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD - HDD layer ptr record + * @ADF_DP_TRACE_CE_PACKET_PTR_RECORD - CE layer ptr record + * @ADF_DP_TRACE_FREE_PACKET_PTR_RECORD - tx completion ptr record + * @ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD - HTT RX record + * @ADF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD- HTT RX offload record + * @ADF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD - HDD RX record + * @ADF_DP_TRACE_LOW_VERBOSITY - below this are part of low verbosity + * @ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD -tx queue ptr record + * @ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD - txrx packet ptr record + * @ADF_DP_TRACE_HTT_PACKET_PTR_RECORD - htt packet ptr record + * @ADF_DP_TRACE_HTC_PACKET_PTR_RECORD - htc packet ptr record + * @ADF_DP_TRACE_HIF_PACKET_PTR_RECORD - hif packet ptr record + * @ADF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD - txrx packet ptr record + * @ADF_DP_TRACE_MED_VERBOSITY - below this are part of med verbosity + * @ADF_DP_TRACE_HDD_TX_PACKET_RECORD - record 32 bytes at HDD + * @ADF_DP_TRACE_HDD_RX_PACKET_RECORD - record 32 bytes at HDD + * @ADF_DP_TRACE_HIGH_VERBOSITY - below this are part of high verbosity */ - enum ADF_DP_TRACE_ID { ADF_DP_TRACE_INVALID = 0, ADF_DP_TRACE_DROP_PACKET_RECORD, ADF_DP_TRACE_EAPOL_PACKET_RECORD, ADF_DP_TRACE_DHCP_PACKET_RECORD, ADF_DP_TRACE_ARP_PACKET_RECORD, + ADF_DP_TRACE_MGMT_PACKET_RECORD, ADF_DP_TRACE_DEFAULT_VERBOSITY, ADF_DP_TRACE_HDD_TX_TIMEOUT, ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT, ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD, ADF_DP_TRACE_CE_PACKET_PTR_RECORD, - ADF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD, ADF_DP_TRACE_FREE_PACKET_PTR_RECORD, ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD, ADF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD, @@ -106,7 +117,6 @@ enum ADF_DP_TRACE_ID { ADF_DP_TRACE_LOW_VERBOSITY, ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD, ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD, - ADF_DP_TRACE_TXRX_FAST_PACKET_PTR_RECORD, ADF_DP_TRACE_HTT_PACKET_PTR_RECORD, ADF_DP_TRACE_HTC_PACKET_PTR_RECORD, ADF_DP_TRACE_HIF_PACKET_PTR_RECORD, @@ -118,17 +128,39 @@ enum ADF_DP_TRACE_ID { ADF_DP_TRACE_MAX }; +/** + * adf_proto_dir - direction + * @ADF_TX: TX direction + * @ADF_RX: RX direction + * @ADF_NA: not applicable + */ enum adf_proto_dir { ADF_TX, - ADF_RX + ADF_RX, + ADF_NA }; +/** + * struct adf_dp_trace_ptr_buf - pointer record buffer + * @cookie: cookie value + * @msdu_id: msdu_id + * @status: completion status + */ struct adf_dp_trace_ptr_buf { uint64_t cookie; uint16_t msdu_id; uint16_t status; }; +/** + * struct adf_dp_trace_proto_buf - proto packet buffer + * @sa: source address + * @da: destination address + * @vdev_id : vdev id + * @type: packet type + * @subtype: packet subtype + * @dir: direction + */ struct adf_dp_trace_proto_buf { struct adf_mac_addr sa; struct adf_mac_addr da; @@ -138,6 +170,17 @@ struct adf_dp_trace_proto_buf { uint8_t dir; }; +/** + * struct adf_dp_trace_mgmt_buf - mgmt packet buffer + * @vdev_id : vdev id + * @type: packet type + * @subtype: packet subtype + */ +struct adf_dp_trace_mgmt_buf { + uint8_t vdev_id; + uint8_t type; + uint8_t subtype; +}; /** * struct adf_dp_trace_record_s - Describes a record in DP trace @@ -210,6 +253,27 @@ void adf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb, void adf_dp_trace_enable_live_mode(void); void adf_dp_trace_clear_buffer(void); +/** + * adf_dp_trace_mgmt_pkt() - record mgmt packet + * @code: dptrace code + * @vdev_id: vdev id + * @type: proto type + * @subtype: proto subtype + * + * Return: none + */ +void adf_dp_trace_mgmt_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id, + enum adf_proto_type type, enum adf_proto_subtype subtype); + +/** + * adf_dp_display_mgmt_pkt() - display proto packet + * @record: dptrace record + * @index: index + * + * Return: none + */ +void adf_dp_display_mgmt_pkt(struct adf_dp_trace_record_s *record, + uint16_t index); #else static inline void adf_dp_trace_init(void) { |
