diff options
| author | Sreelakshmi Konamki <c_skonam@qti.qualcomm.com> | 2016-05-24 12:41:54 +0530 |
|---|---|---|
| committer | Anjaneedevi Kapparapu <akappa@codeaurora.org> | 2016-05-24 19:10:18 +0530 |
| commit | ebedbbb516f4cd702499ee16202ab008fbe16682 (patch) | |
| tree | 57ce1923c0f8f72ad65fe52102e3dc64cf5c83f4 | |
| parent | aafc3b94ac8bf65a490b86fd85b7546fe58752bf (diff) | |
qcacld-2.0: Update ICMP and ICMPV6 WOW wake up stats
Currently ICMP counter is incremented only for IPV4 multicast packets.
But ICMP count includes total unicast/multicast/broadcast ICMP packets.
Add changes to update ICMP counter for unicast/multicast/broadcast
ICMP packets.
Change-Id: I00f9fb0c8231fd69f6c108ced8028eb19315006e
CRs-Fixed: 1020079
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_cfg80211.c | 14 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirApi.h | 4 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 27 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.h | 5 |
4 files changed, 42 insertions, 8 deletions
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index d003774ef817..802308df7b1d 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -10392,6 +10392,7 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx, uint32_t nl_buf_len; uint32_t total_rx_data_wake, rx_multicast_cnt; uint32_t ipv6_rx_multicast_addr_cnt; + uint32_t icmpv6_cnt; ENTER(); @@ -10421,6 +10422,8 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx, data->wow_ipv6_mcast_ns_stats); hddLog(LOG1, "wow_ipv6_mcast_na_stats %d", data->wow_ipv6_mcast_na_stats); + hddLog(LOG1, "wow_icmpv4_count %d", data->wow_icmpv4_count); + hddLog(LOG1, "wow_icmpv6_uc_bc_count %d", data->wow_icmpv6_uc_bc_count); ipv6_rx_multicast_addr_cnt = data->wow_ipv6_mcast_wake_up_count + @@ -10428,6 +10431,12 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx, data->wow_ipv6_mcast_ns_stats + data->wow_ipv6_mcast_na_stats; + icmpv6_cnt = + data->wow_icmpv6_uc_bc_count + + data->wow_ipv6_mcast_ra_stats + + data->wow_ipv6_mcast_ns_stats + + data->wow_ipv6_mcast_na_stats; + rx_multicast_cnt = data->wow_ipv4_mcast_wake_up_count + ipv6_rx_multicast_addr_cnt; @@ -10437,7 +10446,6 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx, data->wow_bcast_wake_up_count + rx_multicast_cnt; - if (nla_put_u32(skb, PARAM_TOTAL_CMD_EVENT_WAKE, 0) || nla_put_u32(skb, PARAM_CMD_EVENT_WAKE_CNT_PTR, 0) || nla_put_u32(skb, PARAM_CMD_EVENT_WAKE_CNT_SZ, 0) || @@ -10453,9 +10461,9 @@ static uint32_t hdd_send_wakelock_stats(hdd_context_t *hdd_ctx, nla_put_u32(skb, PARAM_RX_BROADCAST_CNT, data->wow_bcast_wake_up_count) || nla_put_u32(skb, PARAM_ICMP_PKT, - data->wow_ipv4_mcast_wake_up_count) || + data->wow_icmpv4_count) || nla_put_u32(skb, PARAM_ICMP6_PKT, - ipv6_rx_multicast_addr_cnt) || + icmpv6_cnt) || nla_put_u32(skb, PARAM_ICMP6_RA, data->wow_ipv6_mcast_ra_stats) || nla_put_u32(skb, PARAM_ICMP6_NA, diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index 3b4ce2b04ac9..8ceace5b5883 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -6842,6 +6842,8 @@ struct sir_bpf_get_offload { * @wow_ipv6_mcast_ra_stats: ipv6 multicast ra stats * @wow_ipv6_mcast_ns_stats: ipv6 multicast ns stats * @wow_ipv6_mcast_na_stats: ipv6 multicast na stats + * @wow_icmpv4_count: ipv4 icmp packet count + * @wow_icmpv6_uc_bc_count: ipv6 icmp packet count for unicast and broadcast */ struct sir_wake_lock_stats { uint32_t wow_ucast_wake_up_count; @@ -6851,6 +6853,8 @@ struct sir_wake_lock_stats { uint32_t wow_ipv6_mcast_ra_stats; uint32_t wow_ipv6_mcast_ns_stats; uint32_t wow_ipv6_mcast_na_stats; + uint32_t wow_icmpv4_count; + uint32_t wow_icmpv6_uc_bc_count; }; /** diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 37bd65fba676..2d9c68739b17 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -20599,7 +20599,7 @@ static void wma_extscan_wow_event_callback(void *handle, void *event, */ static void wma_wow_wake_up_stats_display(tp_wma_handle wma) { - WMA_LOGA("uc %d bc %d v4_mc %d v6_mc %d ra %d ns %d na %d pno_match %d pno_complete %d gscan %d low_rssi %d rssi_breach %d", + WMA_LOGA("uc %d bc %d v4_mc %d v6_mc %d ra %d ns %d na %d pno_match %d pno_complete %d gscan %d low_rssi %d rssi_breach %d icmp %d icmpv6 %d", wma->wow_ucast_wake_up_count, wma->wow_bcast_wake_up_count, wma->wow_ipv4_mcast_wake_up_count, @@ -20611,7 +20611,9 @@ static void wma_wow_wake_up_stats_display(tp_wma_handle wma) wma->wow_pno_complete_wake_up_count, wma->wow_gscan_wake_up_count, wma->wow_low_rssi_wake_up_count, - wma->wow_rssi_breach_wake_up_count); + wma->wow_rssi_breach_wake_up_count, + wma->wow_icmpv4_count, + wma->wow_icmpv6_uc_bc_count); return; } @@ -20675,12 +20677,18 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data, switch(event) { case WOW_REASON_PATTERN_MATCH_FOUND: - if (WMA_ICMP_V6_RA_TYPE == *data) { - wma->wow_ipv6_mcast_ra_stats++; - } else if (WMA_BCAST_MAC_ADDR == *data) { + if (WMA_BCAST_MAC_ADDR == *data) { wma->wow_bcast_wake_up_count++; + if (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)) + wma->wow_icmpv4_count++; + if ((len > WMA_ICMP_V6_TYPE_OFFSET) && + (WMA_ICMP_V6_HEADER_TYPE == + *(data + WMA_ICMP_V6_HEADER_OFFSET))) + wma->wow_icmpv6_uc_bc_count++; } else if (WMA_MCAST_IPV4_MAC_ADDR == *data) { wma->wow_ipv4_mcast_wake_up_count++; + if (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)) + wma->wow_icmpv4_count++; } else if (WMA_MCAST_IPV6_MAC_ADDR == *data) { wma->wow_ipv6_mcast_wake_up_count++; if (len > WMA_ICMP_V6_TYPE_OFFSET) @@ -20689,6 +20697,12 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data, WMA_LOGA("ICMP_V6 data len %d", len); } else { wma->wow_ucast_wake_up_count++; + if (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL)) + wma->wow_icmpv4_count++; + if ((len > WMA_ICMP_V6_TYPE_OFFSET) && + (WMA_ICMP_V6_HEADER_TYPE == + *(data + WMA_ICMP_V6_HEADER_OFFSET))) + wma->wow_icmpv6_uc_bc_count++; } break; @@ -29356,6 +29370,9 @@ VOS_STATUS wma_get_wakelock_stats(struct sir_wake_lock_stats *wake_lock_stats) wma_handle->wow_ipv6_mcast_ns_stats; wake_lock_stats->wow_ipv6_mcast_na_stats = wma_handle->wow_ipv6_mcast_na_stats; + wake_lock_stats->wow_icmpv4_count = wma_handle->wow_icmpv4_count; + wake_lock_stats->wow_icmpv6_uc_bc_count = + wma_handle->wow_icmpv6_uc_bc_count; return VOS_STATUS_SUCCESS; } diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h index e6c2ff4a96b7..9bd3dee0e2ab 100644 --- a/CORE/SERVICES/WMA/wma.h +++ b/CORE/SERVICES/WMA/wma.h @@ -170,6 +170,8 @@ #define WMA_ICMP_V6_HEADER_OFFSET (6 + 6 + 2 + 6) /* WMA_ICMP_V6_TYPE_OFFSET = sa(6) + da(6) + eth_type(2) + 40 */ #define WMA_ICMP_V6_TYPE_OFFSET (6 + 6 + 2 + 40) +/* WMA_IPV4_PROTOCOL = sa(6) + da(6) + eth_type(2) + 9 */ +#define WMA_IPV4_PROTOCOL (6 + 6 + 2 + 9) #define WMA_ICMP_V6_HEADER_TYPE (0x3A) #define WMA_ICMP_V6_RA_TYPE (0x86) @@ -178,6 +180,7 @@ #define WMA_BCAST_MAC_ADDR (0xFF) #define WMA_MCAST_IPV4_MAC_ADDR (0x01) #define WMA_MCAST_IPV6_MAC_ADDR (0x33) +#define WMA_ICMP_PROTOCOL (0x01) typedef struct probeTime_dwellTime { u_int8_t dwell_time; @@ -855,6 +858,8 @@ typedef struct wma_handle { uint32_t wow_ipv6_mcast_ra_stats; uint32_t wow_ipv6_mcast_ns_stats; uint32_t wow_ipv6_mcast_na_stats; + uint32_t wow_icmpv4_count; + uint32_t wow_icmpv6_uc_bc_count; uint32_t wow_wakeup_enable_mask; uint32_t wow_wakeup_disable_mask; uint16_t max_mgmt_tx_fail_count; |
