qcacld-3.0: Add check to find IPV6 mcast packet

Propagation from qcacld-2.0 to qcacld-3.0.

1) Add check to find IPV6 mcast packet embedded in a
   link layer unicast packet in wma_wow_wake_up_stats.
2) Add extra length check for IPV4 packets.

Change-Id: Ic2af69032262237b8751019817ae181913346818
CRs-Fixed: 1049254
This commit is contained in:
Himanshu Agarwal 2016-08-10 15:39:54 +05:30 • committed by qcabuildsw
commit 11a08c08db

View file

@ -2449,14 +2449,16 @@ static void wma_wow_wake_up_stats(tp_wma_handle wma, uint8_t *data,
case WOW_REASON_PATTERN_MATCH_FOUND:
if (WMA_BCAST_MAC_ADDR == *data) {
wma->wow_bcast_wake_up_count++;
if (qdf_nbuf_data_is_icmp_pkt(data))
if (len >= WMA_IPV4_PROTO_GET_MIN_LEN &&
qdf_nbuf_data_is_icmp_pkt(data))
wma->wow_icmpv4_count++;
else if ((len > WMA_ICMP_V6_TYPE_OFFSET) &&
qdf_nbuf_data_is_icmpv6_pkt(data))
wma->wow_icmpv6_count++;
} else if (WMA_MCAST_IPV4_MAC_ADDR == *data) {
wma->wow_ipv4_mcast_wake_up_count++;
if (WMA_ICMP_PROTOCOL == *(data + WMA_IPV4_PROTOCOL))
if (len >= WMA_IPV4_PROTO_GET_MIN_LEN &&
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++;
@ -2466,13 +2468,15 @@ 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 (qdf_nbuf_data_is_ipv4_pkt(data)) {
if (qdf_nbuf_data_is_ipv4_mcast_pkt(data))
wma->wow_ipv4_mcast_wake_up_count++;
if (WMA_ICMP_PROTOCOL ==
*(data + WMA_IPV4_PROTOCOL))
wma->wow_icmpv4_count++;
} else if ((len > WMA_ICMP_V6_TYPE_OFFSET) &&
if (qdf_nbuf_data_is_ipv4_mcast_pkt(data))
wma->wow_ipv4_mcast_wake_up_count++;
else if (qdf_nbuf_data_is_ipv6_mcast_pkt(data))
wma->wow_ipv6_mcast_wake_up_count++;
if (len >= WMA_IPV4_PROTO_GET_MIN_LEN &&
qdf_nbuf_data_is_icmp_pkt(data))
wma->wow_icmpv4_count++;
else if (len > WMA_ICMP_V6_TYPE_OFFSET &&
qdf_nbuf_data_is_icmpv6_pkt(data))
wma->wow_icmpv6_count++;
}