summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimanshu Agarwal <himanaga@qti.qualcomm.com>2016-05-23 16:08:10 +0530
committerAnjaneedevi Kapparapu <akappa@codeaurora.org>2016-05-26 15:34:37 +0530
commit4235b981b6548deef493e728f323d22c0402085e (patch)
tree007f11d03919a4d8a2e83bfdf3265b7b535e6b01
parente0751be2eebbdb681336cfa5fc7b715ad0039960 (diff)
qcacld-2.0: Add APIs to get packet type and subtype
Add APIs to get the DHCP, EAPOL, ARP, ICMP, ICMPV6, TCP and UDP packets type and subtype from the netbuf. Change-Id: I8837ad1b976744eeb0e7f0a836eded3a5d34124b CRs-Fixed: 1019037
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.c425
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_nbuf.h535
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.c71
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.h27
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h20
5 files changed, 956 insertions, 122 deletions
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.c b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
index 11f308234d3e..aed95aaa5184 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.c
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.c
@@ -35,6 +35,8 @@
#include <adf_os_io.h>
#include <adf_os_lock.h>
#include <net/ieee80211_radiotap.h>
+#include "adf_trace.h"
+#include "vos_trace.h"
#ifdef CONFIG_WCNSS_MEM_PRE_ALLOC
#include <net/cnss_prealloc.h>
@@ -565,15 +567,211 @@ __adf_nbuf_reg_trace_cb(adf_nbuf_trace_update_t cb_func_ptr)
return;
}
+/**
+ * __adf_nbuf_data_get_dhcp_subtype() - get the subtype
+ * of DHCP packet.
+ * @data: Pointer to DHCP packet data buffer
+ *
+ * This func. returns the subtype of DHCP packet.
+ *
+ * Return: subtype of the DHCP packet.
+ */
+enum adf_proto_subtype
+__adf_nbuf_data_get_dhcp_subtype(uint8_t *data)
+{
+ enum adf_proto_subtype subtype = ADF_PROTO_INVALID;
+
+ if ((data[DHCP_OPTION53_OFFSET] == DHCP_OPTION53) &&
+ (data[DHCP_OPTION53_LENGTH_OFFSET] ==
+ DHCP_OPTION53_LENGTH)) {
+
+ switch (data[DHCP_OPTION53_STATUS_OFFSET]) {
+ case DHCPDISCOVER:
+ subtype = ADF_PROTO_DHCP_DISCOVER;
+ break;
+ case DHCPREQUEST:
+ subtype = ADF_PROTO_DHCP_REQUEST;
+ break;
+ case DHCPOFFER:
+ subtype = ADF_PROTO_DHCP_OFFER;
+ break;
+ case DHCPACK:
+ subtype = ADF_PROTO_DHCP_ACK;
+ break;
+ case DHCPNAK:
+ subtype = ADF_PROTO_DHCP_NACK;
+ break;
+ case DHCPRELEASE:
+ subtype = ADF_PROTO_DHCP_RELEASE;
+ break;
+ case DHCPINFORM:
+ subtype = ADF_PROTO_DHCP_INFORM;
+ break;
+ case DHCPDECLINE:
+ subtype = ADF_PROTO_DHCP_DECLINE;
+ break;
+ default:
+ break;
+ }
+ }
+
+ return subtype;
+}
+
+/**
+ * __adf_nbuf_data_get_eapol_subtype() - get the subtype
+ * of EAPOL packet.
+ * @data: Pointer to EAPOL packet data buffer
+ *
+ * This func. returns the subtype of EAPOL packet.
+ *
+ * Return: subtype of the EAPOL packet.
+ */
+enum adf_proto_subtype
+__adf_nbuf_data_get_eapol_subtype(uint8_t *data)
+{
+ uint16_t eapol_key_info;
+ enum adf_proto_subtype subtype = ADF_PROTO_INVALID;
+ uint16_t mask;
+
+ eapol_key_info = (uint16_t)(*(uint16_t *)
+ (data + EAPOL_KEY_INFO_OFFSET));
+
+ mask = eapol_key_info & EAPOL_MASK;
+ switch (mask) {
+ case EAPOL_M1_BIT_MASK:
+ subtype = ADF_PROTO_EAPOL_M1;
+ break;
+ case EAPOL_M2_BIT_MASK:
+ subtype = ADF_PROTO_EAPOL_M2;
+ break;
+ case EAPOL_M3_BIT_MASK:
+ subtype = ADF_PROTO_EAPOL_M3;
+ break;
+ case EAPOL_M4_BIT_MASK:
+ subtype = ADF_PROTO_EAPOL_M4;
+ break;
+ default:
+ break;
+ }
+
+ return subtype;
+}
+
+/**
+ * __adf_nbuf_data_get_arp_subtype() - get the subtype
+ * of ARP packet.
+ * @data: Pointer to ARP packet data buffer
+ *
+ * This func. returns the subtype of ARP packet.
+ *
+ * Return: subtype of the ARP packet.
+ */
+enum adf_proto_subtype
+__adf_nbuf_data_get_arp_subtype(uint8_t *data)
+{
+ uint16_t subtype;
+ enum adf_proto_subtype proto_subtype = ADF_PROTO_INVALID;
+
+ subtype = (uint16_t)(*(uint16_t *)
+ (data + ARP_SUB_TYPE_OFFSET));
+
+ switch (adf_os_cpu_to_be16(subtype)) {
+ case ARP_REQUEST:
+ proto_subtype = ADF_PROTO_ARP_REQ;
+ break;
+ case ARP_RESPONSE:
+ proto_subtype = ADF_PROTO_ARP_RES;
+ break;
+ default:
+ break;
+ }
+
+ return proto_subtype;
+}
+
+/**
+ * __adf_nbuf_data_get_icmp_subtype() - get the subtype
+ * of IPV4 ICMP packet.
+ * @data: Pointer to IPV4 ICMP packet data buffer
+ *
+ * This func. returns the subtype of ICMP packet.
+ *
+ * Return: subtype of the ICMP packet.
+ */
+enum adf_proto_subtype
+__adf_nbuf_data_get_icmp_subtype(uint8_t *data)
+{
+ uint8_t subtype;
+ enum adf_proto_subtype proto_subtype = ADF_PROTO_INVALID;
+
+ subtype = (uint8_t)(*(uint8_t *)
+ (data + ICMP_SUBTYPE_OFFSET));
+
+ switch (subtype) {
+ case ICMP_REQUEST:
+ proto_subtype = ADF_PROTO_ICMP_REQ;
+ break;
+ case ICMP_RESPONSE:
+ proto_subtype = ADF_PROTO_ICMP_RES;
+ break;
+ default:
+ break;
+ }
+
+ return proto_subtype;
+}
+
+/**
+ * __adf_nbuf_data_get_icmpv6_subtype() - get the subtype
+ * of IPV6 ICMPV6 packet.
+ * @data: Pointer to IPV6 ICMPV6 packet data buffer
+ *
+ * This func. returns the subtype of ICMPV6 packet.
+ *
+ * Return: subtype of the ICMPV6 packet.
+ */
+enum adf_proto_subtype
+__adf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
+{
+ uint8_t subtype;
+ enum adf_proto_subtype proto_subtype = ADF_PROTO_INVALID;
+
+ subtype = (uint8_t)(*(uint8_t *)
+ (data + ICMPV6_SUBTYPE_OFFSET));
+
+ switch (subtype) {
+ case ICMPV6_REQUEST:
+ proto_subtype = ADF_PROTO_ICMPV6_REQ;
+ break;
+ case ICMPV6_RESPONSE:
+ proto_subtype = ADF_PROTO_ICMPV6_RES;
+ break;
+ default:
+ break;
+ }
+
+ return proto_subtype;
+}
+
+/**
+ * __adf_nbuf_data_is_dhcp_pkt() - check if it is DHCP packet.
+ * @data: Pointer to DHCP packet data buffer
+ *
+ * This func. checks whether it is a DHCP packet or not.
+ *
+ * Return: A_STATUS_OK if it is a DHCP packet
+ * A_STATUS_FAILED if not
+ */
a_status_t
-__adf_nbuf_is_dhcp_pkt(struct sk_buff *skb)
+__adf_nbuf_data_is_dhcp_pkt(uint8_t *data)
{
a_uint16_t SPort;
a_uint16_t DPort;
- SPort = (a_uint16_t)(*(a_uint16_t *)(skb->data + ADF_NBUF_TRAC_IPV4_OFFSET +
+ SPort = (a_uint16_t)(*(a_uint16_t *)(data + ADF_NBUF_TRAC_IPV4_OFFSET +
ADF_NBUF_TRAC_IPV4_HEADER_SIZE));
- DPort = (a_uint16_t)(*(a_uint16_t *)(skb->data + ADF_NBUF_TRAC_IPV4_OFFSET +
+ DPort = (a_uint16_t)(*(a_uint16_t *)(data + ADF_NBUF_TRAC_IPV4_OFFSET +
ADF_NBUF_TRAC_IPV4_HEADER_SIZE + sizeof(a_uint16_t)));
if (((ADF_NBUF_TRAC_DHCP_SRV_PORT == adf_os_cpu_to_be16(SPort)) &&
@@ -589,12 +787,22 @@ __adf_nbuf_is_dhcp_pkt(struct sk_buff *skb)
}
}
+/**
+ * __adf_nbuf_data_is_eapol_pkt() - check if it is EAPOL packet.
+ * @data: Pointer to EAPOL packet data buffer
+ *
+ * This func. checks whether it is a EAPOL packet or not.
+ *
+ * Return: A_STATUS_OK if it is a EAPOL packet
+ * A_STATUS_FAILED if not
+ */
a_status_t
-__adf_nbuf_is_eapol_pkt(struct sk_buff *skb)
+__adf_nbuf_data_is_eapol_pkt(uint8_t *data)
{
a_uint16_t ether_type;
- ether_type = (a_uint16_t)(*(a_uint16_t *)(skb->data + ADF_NBUF_TRAC_ETH_TYPE_OFFSET));
+ ether_type = (a_uint16_t)(*(a_uint16_t *)(data +
+ ADF_NBUF_TRAC_ETH_TYPE_OFFSET));
if (ADF_NBUF_TRAC_EAPOL_ETH_TYPE == adf_os_cpu_to_be16(ether_type))
{
return A_STATUS_OK;
@@ -606,18 +814,19 @@ __adf_nbuf_is_eapol_pkt(struct sk_buff *skb)
}
/**
- * __adf_nbuf_is_ipv4_arp_pkt() - check if skb data is a arp packet.
- * @skb: Pointer to network buffer
+ * __adf_nbuf_data_is_ipv4_arp_pkt() - check if it is ARP packet.
+ * @data: Pointer to ARP packet data buffer
*
- * This api is for ipv4 packet.
+ * This func. checks whether it is a ARP packet or not.
*
- * Return: true if packet is ARP packet
+ * Return: TRUE if it is a ARP packet
+ * FALSE if not
*/
-bool __adf_nbuf_is_ipv4_arp_pkt(struct sk_buff *skb)
+bool __adf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data)
{
uint16_t ether_type;
- ether_type = (uint16_t)(*(uint16_t *)(skb->data +
+ ether_type = (uint16_t)(*(uint16_t *)(data +
ADF_NBUF_TRAC_ETH_TYPE_OFFSET));
if (ether_type == adf_os_cpu_to_be16(ADF_NBUF_TRAC_ARP_ETH_TYPE))
@@ -626,6 +835,200 @@ bool __adf_nbuf_is_ipv4_arp_pkt(struct sk_buff *skb)
return false;
}
+/**
+ * __adf_nbuf_data_is_ipv4_pkt() - check if it is IPV4 packet.
+ * @data: Pointer to IPV4 packet data buffer
+ *
+ * This func. checks whether it is a IPV4 packet or not.
+ *
+ * Return: TRUE if it is a IPV4 packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv4_pkt(uint8_t *data)
+{
+ uint16_t ether_type;
+
+ ether_type = (uint16_t)(*(uint16_t *)(data +
+ ADF_NBUF_TRAC_ETH_TYPE_OFFSET));
+
+ if (ether_type == adf_os_cpu_to_be16(ADF_NBUF_TRAC_IPV4_ETH_TYPE))
+ return true;
+ else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_ipv6_pkt() - check if it is IPV6 packet.
+ * @data: Pointer to IPV6 packet data buffer
+ *
+ * This func. checks whether it is a IPV6 packet or not.
+ *
+ * Return: TRUE if it is a IPV6 packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv6_pkt(uint8_t *data)
+{
+ uint16_t ether_type;
+
+ ether_type = (uint16_t)(*(uint16_t *)(data +
+ ADF_NBUF_TRAC_ETH_TYPE_OFFSET));
+
+ if (ether_type == adf_os_cpu_to_be16(ADF_NBUF_TRAC_IPV6_ETH_TYPE))
+ return true;
+ else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_icmp_pkt() - check if it is IPV4 ICMP packet.
+ * @data: Pointer to IPV4 ICMP packet data buffer
+ *
+ * This func. checks whether it is a ICMP packet or not.
+ *
+ * Return: TRUE if it is a ICMP packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_icmp_pkt(uint8_t *data)
+{
+ if (__adf_nbuf_data_is_ipv4_pkt(data)) {
+ uint8_t pkt_type;
+
+ pkt_type = (uint8_t)(*(uint8_t *)(data +
+ ADF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET));
+
+ if (pkt_type == ADF_NBUF_TRAC_ICMP_TYPE)
+ return true;
+ else
+ return false;
+ } else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
+ * @data: Pointer to IPV6 ICMPV6 packet data buffer
+ *
+ * This func. checks whether it is a ICMPV6 packet or not.
+ *
+ * Return: TRUE if it is a ICMPV6 packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_icmpv6_pkt(uint8_t *data)
+{
+ if (__adf_nbuf_data_is_ipv6_pkt(data)) {
+ uint8_t pkt_type;
+
+ pkt_type = (uint8_t)(*(uint8_t *)(data +
+ ADF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET));
+
+ if (pkt_type == ADF_NBUF_TRAC_ICMPv6_TYPE)
+ return true;
+ else
+ return false;
+ } else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
+ * @data: Pointer to IPV4 UDP packet data buffer
+ *
+ * This func. checks whether it is a IPV4 UDP packet or not.
+ *
+ * Return: TRUE if it is a IPV4 UDP packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data)
+{
+ if (__adf_nbuf_data_is_ipv4_pkt(data)) {
+ uint8_t pkt_type;
+
+ pkt_type = (uint8_t)(*(uint8_t *)(data +
+ ADF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET));
+
+ if (pkt_type == ADF_NBUF_TRAC_UDP_TYPE)
+ return true;
+ else
+ return false;
+ } else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
+ * @data: Pointer to IPV4 TCP packet data buffer
+ *
+ * This func. checks whether it is a IPV4 TCP packet or not.
+ *
+ * Return: TRUE if it is a IPV4 TCP packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data)
+{
+ if (__adf_nbuf_data_is_ipv4_pkt(data)) {
+ uint8_t pkt_type;
+
+ pkt_type = (uint8_t)(*(uint8_t *)(data +
+ ADF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET));
+
+ if (pkt_type == ADF_NBUF_TRAC_TCP_TYPE)
+ return true;
+ else
+ return false;
+ } else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
+ * @data: Pointer to IPV6 UDP packet data buffer
+ *
+ * This func. checks whether it is a IPV6 UDP packet or not.
+ *
+ * Return: TRUE if it is a IPV6 UDP packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data)
+{
+ if (__adf_nbuf_data_is_ipv6_pkt(data)) {
+ uint8_t pkt_type;
+
+ pkt_type = (uint8_t)(*(uint8_t *)(data +
+ ADF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET));
+
+ if (pkt_type == ADF_NBUF_TRAC_UDP_TYPE)
+ return true;
+ else
+ return false;
+ } else
+ return false;
+}
+
+/**
+ * __adf_nbuf_data_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
+ * @data: Pointer to IPV6 TCP packet data buffer
+ *
+ * This func. checks whether it is a IPV6 TCP packet or not.
+ *
+ * Return: TRUE if it is a IPV6 TCP packet
+ * FALSE if not
+ */
+bool __adf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data)
+{
+ if (__adf_nbuf_data_is_ipv6_pkt(data)) {
+ uint8_t pkt_type;
+
+ pkt_type = (uint8_t)(*(uint8_t *)(data +
+ ADF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET));
+
+ if (pkt_type == ADF_NBUF_TRAC_TCP_TYPE)
+ return true;
+ else
+ return false;
+ } else
+ return false;
+}
+
#ifdef QCA_PKT_PROTO_TRACE
void
__adf_nbuf_trace_update(struct sk_buff *buf, char *event_string)
diff --git a/CORE/SERVICES/COMMON/adf/adf_nbuf.h b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
index b4584831802a..860aa7f77d28 100644
--- a/CORE/SERVICES/COMMON/adf/adf_nbuf.h
+++ b/CORE/SERVICES/COMMON/adf/adf_nbuf.h
@@ -64,12 +64,22 @@
#define ADF_NBUF_TRAC_ETH_TYPE_OFFSET 12
#define ADF_NBUF_TRAC_EAPOL_ETH_TYPE 0x888E
#define ADF_NBUF_TRAC_ARP_ETH_TYPE 0x0806
+#define ADF_NBUF_TRAC_IPV4_ETH_TYPE 0x0800
+#define ADF_NBUF_TRAC_IPV6_ETH_TYPE 0x86dd
#define ADF_NBUF_DEST_MAC_OFFSET 0
#define ADF_NBUF_SRC_MAC_OFFSET 6
+#define ADF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET 23
+#define ADF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET 20
+#define ADF_NBUF_TRAC_ICMP_TYPE 1
+#define ADF_NBUF_TRAC_TCP_TYPE 6
+#define ADF_NBUF_TRAC_UDP_TYPE 17
+#define ADF_NBUF_TRAC_ICMPv6_TYPE 0x3a
/* EAPOL Related MASK */
#define EAPOL_PACKET_TYPE_OFFSET 15
#define EAPOL_KEY_INFO_OFFSET 19
+#define EAPOL_PKT_LEN_OFFSET 16
+#define EAPOL_KEY_LEN_OFFSET 21
#define EAPOL_MASK 0x8013
#define EAPOL_M1_BIT_MASK 0x8000
#define EAPOL_M2_BIT_MASK 0x0001
@@ -122,6 +132,8 @@ struct mon_rx_status {
#define DHCP_OPTION53_OFFSET (0x11A)
#define DHCP_OPTION53_LENGTH_OFFSET (0x11B)
#define DHCP_OPTION53_STATUS_OFFSET (0x11C)
+#define DHCP_PKT_LEN_OFFSET 16
+#define DHCP_TRANSACTION_ID_OFFSET 46
#define DHCPDISCOVER (1)
#define DHCPOFFER (2)
#define DHCPREQUEST (3)
@@ -131,12 +143,68 @@ struct mon_rx_status {
#define DHCPRELEASE (7)
#define DHCPINFORM (8)
+/* ARP Related Mask */
#define ARP_SUB_TYPE_OFFSET 20
#define ARP_REQUEST (1)
#define ARP_RESPONSE (2)
+/* IPV4 Related Mask */
+#define IPV4_PKT_LEN_OFFSET 16
+#define IPV4_TCP_SEQ_NUM_OFFSET 38
+
+/* IPV4 ICMP Related Mask */
+#define ICMP_SEQ_NUM_OFFSET 40
+#define ICMP_SUBTYPE_OFFSET 34
+#define ICMP_REQUEST 0x08
+#define ICMP_RESPONSE 0x00
+
+/* IPV6 Related Mask */
+#define IPV6_PKT_LEN_OFFSET 18
+#define IPV6_TCP_SEQ_NUM_OFFSET 58
+
+/* IPV6 ICMPV6 Related Mask */
+#define ICMPV6_SEQ_NUM_OFFSET 60
+#define ICMPV6_SUBTYPE_OFFSET 54
+#define ICMPV6_REQUEST 0x80
+#define ICMPV6_RESPONSE 0x81
+
#define ADF_NBUF_IPA_CHECK_MASK 0x80000000
+enum adf_proto_type {
+ ADF_PROTO_TYPE_DHCP = 0,
+ ADF_PROTO_TYPE_EAPOL,
+ ADF_PROTO_TYPE_ARP,
+ ADF_PROTO_TYPE_MAX
+};
+
+enum adf_proto_subtype {
+ ADF_PROTO_INVALID = 0,
+ ADF_PROTO_EAPOL_M1,
+ ADF_PROTO_EAPOL_M2,
+ ADF_PROTO_EAPOL_M3,
+ ADF_PROTO_EAPOL_M4,
+ ADF_PROTO_DHCP_DISCOVER,
+ ADF_PROTO_DHCP_REQUEST,
+ ADF_PROTO_DHCP_OFFER,
+ ADF_PROTO_DHCP_ACK,
+ ADF_PROTO_DHCP_NACK,
+ ADF_PROTO_DHCP_RELEASE,
+ ADF_PROTO_DHCP_INFORM,
+ 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,
+ ADF_PROTO_ICMPV6_RES,
+ ADF_PROTO_IPV4_UDP,
+ ADF_PROTO_IPV4_TCP,
+ ADF_PROTO_IPV6_UDP,
+ ADF_PROTO_IPV6_TCP,
+ ADF_PROTO_SUBTYPE_MAX
+};
+
/**
* @brief Platform indepedent packet abstraction
@@ -1257,43 +1325,484 @@ adf_nbuf_get_tx_parallel_dnload_frm(adf_nbuf_t buf)
}
/**
- * @brief this will return if the skb data is a dhcp packet or not
+ * adf_nbuf_get_dhcp_subtype() - get the subtype
+ * of DHCP packet.
+ * @buf: Pointer to DHCP packet buffer
*
- * @param[in] buf buffer
+ * This func. returns the subtype of DHCP packet.
+ *
+ * Return: subtype of the DHCP packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_get_dhcp_subtype(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_get_dhcp_subtype(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_get_dhcp_subtype() - get the subtype
+ * of DHCP packet.
+ * @buf: Pointer to DHCP packet data buffer
+ *
+ * This func. returns the subtype of DHCP packet.
+ *
+ * Return: subtype of the DHCP packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_data_get_dhcp_subtype(uint8_t *data)
+{
+ return __adf_nbuf_data_get_dhcp_subtype(data);
+}
+
+/**
+ * adf_nbuf_get_eapol_subtype() - get the subtype
+ * of EAPOL packet.
+ * @buf: Pointer to EAPOL packet buffer
+ *
+ * This func. returns the subtype of EAPOL packet.
+ *
+ * Return: subtype of the EAPOL packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_get_eapol_subtype(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_get_eapol_subtype(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_get_eapol_subtype() - get the subtype
+ * of EAPOL packet.
+ * @data: Pointer to EAPOL packet data buffer
+ *
+ * This func. returns the subtype of EAPOL packet.
*
- * @return A_STATUS_OK if packet is DHCP packet
+ * Return: subtype of the EAPOL packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_data_get_eapol_subtype(uint8_t *data)
+{
+ return __adf_nbuf_data_get_eapol_subtype(data);
+}
+
+/**
+ * adf_nbuf_get_arp_subtype() - get the subtype
+ * of ARP packet.
+ * @buf: Pointer to ARP packet buffer
+ *
+ * This func. returns the subtype of ARP packet.
+ *
+ * Return: subtype of the ARP packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_get_arp_subtype(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_get_arp_subtype(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_get_arp_subtype() - get the subtype
+ * of ARP packet.
+ * @data: Pointer to ARP packet data buffer
+ *
+ * This func. returns the subtype of ARP packet.
+ *
+ * Return: subtype of the ARP packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_data_get_arp_subtype(uint8_t *data)
+{
+ return __adf_nbuf_data_get_arp_subtype(data);
+}
+
+/**
+ * adf_nbuf_get_icmp_subtype() - get the subtype
+ * of IPV4 ICMP packet.
+ * @buf: Pointer to IPV4 ICMP packet buffer
+ *
+ * This func. returns the subtype of ICMP packet.
+ *
+ * Return: subtype of the ICMP packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_get_icmp_subtype(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_get_icmp_subtype(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_get_icmp_subtype() - get the subtype
+ * of IPV4 ICMP packet.
+ * @data: Pointer to IPV4 ICMP packet data buffer
+ *
+ * This func. returns the subtype of ICMP packet.
+ *
+ * Return: subtype of the ICMP packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_data_get_icmp_subtype(uint8_t *data)
+{
+ return __adf_nbuf_data_get_icmp_subtype(data);
+}
+
+/**
+ * adf_nbuf_get_icmpv6_subtype() - get the subtype
+ * of IPV6 ICMPV6 packet.
+ * @buf: Pointer to IPV6 ICMPV6 packet buffer
+ *
+ * This func. returns the subtype of ICMPV6 packet.
+ *
+ * Return: subtype of the ICMPV6 packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_get_icmpv6_subtype(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_get_icmpv6_subtype(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_get_icmpv6_subtype() - get the subtype
+ * of IPV6 ICMPV6 packet.
+ * @data: Pointer to IPV6 ICMPV6 packet data buffer
+ *
+ * This func. returns the subtype of ICMPV6 packet.
+ *
+ * Return: subtype of the ICMPV6 packet.
+ */
+static inline enum adf_proto_subtype
+adf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
+{
+ return __adf_nbuf_data_get_icmpv6_subtype(data);
+}
+
+
+/**
+ * adf_nbuf_is_dhcp_pkt() - check if it is DHCP packet.
+ * @buf: Pointer to DHCP packet buffer
+ *
+ * This func. checks whether it is a DHCP packet or not.
+ *
+ * Return: A_STATUS_OK if it is a DHCP packet
+ * A_STATUS_FAILED if not
*/
static inline a_status_t
adf_nbuf_is_dhcp_pkt(adf_nbuf_t buf)
{
- return (__adf_nbuf_is_dhcp_pkt(buf));
+ return __adf_nbuf_data_is_dhcp_pkt(adf_nbuf_data(buf));
}
/**
- * @brief this will return if the skb data is a eapol packet or not
+ * adf_nbuf_data_is_dhcp_pkt() - check if it is DHCP packet.
+ * @data: Pointer to DHCP packet data buffer
*
- * @param[in] buf buffer
+ * This func. checks whether it is a DHCP packet or not.
+ *
+ * Return: A_STATUS_OK if it is a DHCP packet
+ * A_STATUS_FAILED if not
+ */
+static inline a_status_t
+adf_nbuf_data_is_dhcp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_dhcp_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_eapol_pkt() - check if it is EAPOL packet.
+ * @buf: Pointer to EAPOL packet buffer
*
- * @return A_STATUS_OK if packet is EAPOL packet
+ * This func. checks whether it is a EAPOL packet or not.
+ *
+ * Return: A_STATUS_OK if it is a EAPOL packet
+ * A_STATUS_FAILED if not
*/
static inline a_status_t
adf_nbuf_is_eapol_pkt(adf_nbuf_t buf)
{
- return (__adf_nbuf_is_eapol_pkt(buf));
+ return __adf_nbuf_data_is_eapol_pkt(adf_nbuf_data(buf));
}
/**
- * adf_nbuf_is_ipv4_arp_pkt() - check if packet is a arp packet or not
- * @buf: buffer
+ * adf_nbuf_data_is_eapol_pkt() - check if it is EAPOL packet.
+ * @data: Pointer to EAPOL packet data buffer
*
- * This api is for ipv4 packet.
+ * This func. checks whether it is a EAPOL packet or not.
*
- * Return: true if packet is ARP packet
+ * Return: A_STATUS_OK if it is a EAPOL packet
+ * A_STATUS_FAILED if not
+ */
+static inline a_status_t
+adf_nbuf_data_is_eapol_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_eapol_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv4_arp_pkt() - check if it is ARP packet.
+ * @buf: Pointer to ARP packet buffer
+ *
+ * This func. checks whether it is a ARP packet or not.
+ *
+ * Return: TRUE if it is a ARP packet
+ * FALSE if not
*/
static inline
bool adf_nbuf_is_ipv4_arp_pkt(adf_nbuf_t buf)
{
- return __adf_nbuf_is_ipv4_arp_pkt(buf);
+ return __adf_nbuf_data_is_ipv4_arp_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv4_arp_pkt() - check if it is ARP packet.
+ * @data: Pointer to ARP packet data buffer
+ *
+ * This func. checks whether it is a ARP packet or not.
+ *
+ * Return: TRUE if it is a ARP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv4_arp_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv4_pkt() - check if it is IPV4 packet.
+ * @buf: Pointer to IPV4 packet buffer
+ *
+ * This func. checks whether it is a IPV4 packet or not.
+ *
+ * Return: TRUE if it is a IPV4 packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_ipv4_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_ipv4_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv4_pkt() - check if it is IPV4 packet.
+ * @data: Pointer to IPV4 packet data buffer
+ *
+ * This func. checks whether it is a IPV4 packet or not.
+ *
+ * Return: TRUE if it is a IPV4 packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv4_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv4_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv6_pkt() - check if it is IPV6 packet.
+ * @buf: Pointer to IPV6 packet buffer
+ *
+ * This func. checks whether it is a IPV6 packet or not.
+ *
+ * Return: TRUE if it is a IPV6 packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_ipv6_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_ipv6_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv6_pkt() - check if it is IPV6 packet.
+ * @data: Pointer to IPV6 packet data buffer
+ *
+ * This func. checks whether it is a IPV6 packet or not.
+ *
+ * Return: TRUE if it is a IPV6 packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv6_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv6_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_icmp_pkt() - check if it is IPV4 ICMP packet.
+ * @buf: Pointer to IPV4 ICMP packet buffer
+ *
+ * This func. checks whether it is a ICMP packet or not.
+ *
+ * Return: TRUE if it is a ICMP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_icmp_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_icmp_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_icmp_pkt() - check if it is IPV4 ICMP packet.
+ * @data: Pointer to IPV4 ICMP packet data buffer
+ *
+ * This func. checks whether it is a ICMP packet or not.
+ *
+ * Return: TRUE if it is a ICMP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_icmp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_icmp_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
+ * @buf: Pointer to IPV6 ICMPV6 packet buffer
+ *
+ * This func. checks whether it is a ICMPV6 packet or not.
+ *
+ * Return: TRUE if it is a ICMPV6 packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_icmpv6_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_icmpv6_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_icmpv6_pkt() - check if it is IPV6 ICMPV6 packet.
+ * @data: Pointer to IPV6 ICMPV6 packet data buffer
+ *
+ * This func. checks whether it is a ICMPV6 packet or not.
+ *
+ * Return: TRUE if it is a ICMPV6 packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_icmpv6_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_icmpv6_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
+ * @buf: Pointer to IPV4 UDP packet buffer
+ *
+ * This func. checks whether it is a IPV4 UDP packet or not.
+ *
+ * Return: TRUE if it is a IPV4 UDP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_ipv4_udp_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_ipv4_udp_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv4_udp_pkt() - check if it is IPV4 UDP packet.
+ * @data: Pointer to IPV4 UDP packet data buffer
+ *
+ * This func. checks whether it is a IPV4 UDP packet or not.
+ *
+ * Return: TRUE if it is a IPV4 UDP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv4_udp_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
+ * @buf: Pointer to IPV4 TCP packet buffer
+ *
+ * This func. checks whether it is a IPV4 TCP packet or not.
+ *
+ * Return: TRUE if it is a IPV4 TCP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_ipv4_tcp_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_ipv4_tcp_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv4_tcp_pkt() - check if it is IPV4 TCP packet.
+ * @data: Pointer to IPV4 TCP packet data buffer
+ *
+ * This func. checks whether it is a IPV4 TCP packet or not.
+ *
+ * Return: TRUE if it is a IPV4 TCP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv4_tcp_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
+ * @buf: Pointer to IPV6 UDP packet buffer
+ *
+ * This func. checks whether it is a IPV6 UDP packet or not.
+ *
+ * Return: TRUE if it is a IPV6 UDP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_ipv6_udp_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_ipv6_udp_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv6_udp_pkt() - check if it is IPV6 UDP packet.
+ * @data: Pointer to IPV6 UDP packet data buffer
+ *
+ * This func. checks whether it is a IPV6 UDP packet or not.
+ *
+ * Return: TRUE if it is a IPV6 UDP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv6_udp_pkt(data);
+}
+
+/**
+ * adf_nbuf_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
+ * @buf: Pointer to IPV6 TCP packet buffer
+ *
+ * This func. checks whether it is a IPV6 TCP packet or not.
+ *
+ * Return: TRUE if it is a IPV6 TCP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_is_ipv6_tcp_pkt(adf_nbuf_t buf)
+{
+ return __adf_nbuf_data_is_ipv6_tcp_pkt(adf_nbuf_data(buf));
+}
+
+/**
+ * adf_nbuf_data_is_ipv6_tcp_pkt() - check if it is IPV6 TCP packet.
+ * @data: Pointer to IPV6 TCP packet data buffer
+ *
+ * This func. checks whether it is a IPV6 TCP packet or not.
+ *
+ * Return: TRUE if it is a IPV6 TCP packet
+ * FALSE if not
+ */
+static inline
+bool adf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data)
+{
+ return __adf_nbuf_data_is_ipv6_tcp_pkt(data);
}
/**
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c
index e52793650fd6..8311147a7aec 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.c
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.c
@@ -407,33 +407,12 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
bool adf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
uint8_t event_type)
{
- uint16_t mask;
- uint16_t eapol_key_info;
enum adf_proto_subtype subtype;
if ((adf_dp_get_proto_bitmap() & NBUF_PKT_TRAC_TYPE_EAPOL) &&
adf_nbuf_is_eapol_pkt(skb) == A_STATUS_OK) {
- eapol_key_info = (uint16_t)(*(uint16_t *)
- (skb->data + EAPOL_KEY_INFO_OFFSET));
-
- mask = eapol_key_info & EAPOL_MASK;
- switch (mask) {
- case EAPOL_M1_BIT_MASK:
- subtype = ADF_PROTO_EAPOL_M1;
- break;
- case EAPOL_M2_BIT_MASK:
- subtype = ADF_PROTO_EAPOL_M2;
- break;
- case EAPOL_M3_BIT_MASK:
- subtype = ADF_PROTO_EAPOL_M3;
- break;
- case EAPOL_M4_BIT_MASK:
- subtype = ADF_PROTO_EAPOL_M4;
- break;
- default:
- subtype = ADF_PROTO_INVALID;
- }
+ subtype = adf_nbuf_get_eapol_subtype(skb);
DPTRACE(adf_dp_trace_proto_pkt(ADF_DP_TRACE_EAPOL_PACKET_RECORD,
session_id, (skb->data + ADF_NBUF_SRC_MAC_OFFSET),
(skb->data + ADF_NBUF_DEST_MAC_OFFSET),
@@ -462,39 +441,7 @@ bool adf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
if ((adf_dp_get_proto_bitmap() & NBUF_PKT_TRAC_TYPE_DHCP) &&
adf_nbuf_is_dhcp_pkt(skb) == A_STATUS_OK) {
- if ((skb->data[DHCP_OPTION53_OFFSET] == DHCP_OPTION53) &&
- (skb->data[DHCP_OPTION53_LENGTH_OFFSET] ==
- DHCP_OPTION53_LENGTH)) {
-
- switch (skb->data[DHCP_OPTION53_STATUS_OFFSET]) {
- case DHCPDISCOVER:
- subtype = ADF_PROTO_DHCP_DISCOVER;
- break;
- case DHCPREQUEST:
- subtype = ADF_PROTO_DHCP_REQUEST;
- break;
- case DHCPOFFER:
- subtype = ADF_PROTO_DHCP_OFFER;
- break;
- case DHCPACK:
- subtype = ADF_PROTO_DHCP_ACK;
- break;
- case DHCPNAK:
- subtype = ADF_PROTO_DHCP_NACK;
- break;
- case DHCPRELEASE:
- subtype = ADF_PROTO_DHCP_RELEASE;
- break;
- case DHCPINFORM:
- subtype = ADF_PROTO_DHCP_INFORM;
- break;
- case DHCPDECLINE:
- subtype = ADF_PROTO_DHCP_DECLINE;
- break;
- default:
- subtype = ADF_PROTO_INVALID;
- }
- }
+ subtype = adf_nbuf_get_dhcp_subtype(skb);
DPTRACE(adf_dp_trace_proto_pkt(ADF_DP_TRACE_DHCP_PACKET_RECORD,
session_id, (skb->data + ADF_NBUF_SRC_MAC_OFFSET),
(skb->data + ADF_NBUF_DEST_MAC_OFFSET),
@@ -518,24 +465,12 @@ bool adf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
bool adf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
uint8_t event_type)
{
- uint16_t subtype;
enum adf_proto_subtype proto_subtype;
if ((adf_dp_get_proto_bitmap() & NBUF_PKT_TRAC_TYPE_ARP) &&
adf_nbuf_is_ipv4_arp_pkt(skb) == true) {
- subtype = (uint16_t)(*(uint16_t *)
- (skb->data + ARP_SUB_TYPE_OFFSET));
- switch (adf_os_cpu_to_be16(subtype)) {
- case ARP_REQUEST:
- proto_subtype = ADF_PROTO_ARP_REQ;
- break;
- case ARP_RESPONSE:
- proto_subtype = ADF_PROTO_ARP_RES;
- break;
- default:
- proto_subtype = ADF_PROTO_INVALID;
- }
+ proto_subtype = adf_nbuf_get_arp_subtype(skb);
DPTRACE(adf_dp_trace_proto_pkt(ADF_DP_TRACE_ARP_PACKET_RECORD,
session_id, (skb->data + ADF_NBUF_SRC_MAC_OFFSET),
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.h b/CORE/SERVICES/COMMON/adf/adf_trace.h
index 9648b79f8c2d..bf5f96ed26d6 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.h
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.h
@@ -108,33 +108,6 @@ enum ADF_DP_TRACE_ID {
ADF_DP_TRACE_MAX
};
-enum adf_proto_type {
- ADF_PROTO_TYPE_DHCP = 0,
- ADF_PROTO_TYPE_EAPOL,
- ADF_PROTO_TYPE_ARP,
- ADF_PROTO_TYPE_MAX
-};
-
-enum adf_proto_subtype {
- ADF_PROTO_INVALID = 0,
- ADF_PROTO_EAPOL_M1,
- ADF_PROTO_EAPOL_M2,
- ADF_PROTO_EAPOL_M3,
- ADF_PROTO_EAPOL_M4,
- ADF_PROTO_DHCP_DISCOVER,
- ADF_PROTO_DHCP_REQUEST,
- ADF_PROTO_DHCP_OFFER,
- ADF_PROTO_DHCP_ACK,
- ADF_PROTO_DHCP_NACK,
- ADF_PROTO_DHCP_RELEASE,
- ADF_PROTO_DHCP_INFORM,
- ADF_PROTO_DHCP_DECLINE,
- ADF_PROTO_ARP_REQ,
- ADF_PROTO_ARP_RES,
- ADF_PROTO_ARP_SUBTYPE,
- ADF_PROTO_SUBTYPE_MAX
-};
-
enum adf_proto_dir {
ADF_TX,
ADF_RX
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
index cc91cf5ae888..1a48042bd43e 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
@@ -38,6 +38,7 @@
#include <asm/types.h>
#include <asm/scatterlist.h>
#include <adf_os_types.h>
+#include <adf_nbuf.h>
#define __ADF_NBUF_NULL NULL
@@ -330,9 +331,22 @@ void __adf_nbuf_dmamap_info(__adf_os_dma_map_t bmap, adf_os_dmamap_in
void __adf_nbuf_frag_info(struct sk_buff *skb, adf_os_sglist_t *sg);
void __adf_nbuf_dmamap_set_cb(__adf_os_dma_map_t dmap, void *cb, void *arg);
void __adf_nbuf_reg_trace_cb(adf_nbuf_trace_update_t cb_func_ptr);
-a_status_t __adf_nbuf_is_dhcp_pkt(struct sk_buff *skb);
-a_status_t __adf_nbuf_is_eapol_pkt(struct sk_buff *skb);
-bool __adf_nbuf_is_ipv4_arp_pkt(struct sk_buff *skb);
+bool __adf_nbuf_data_is_ipv4_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv6_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_icmp_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_icmpv6_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data);
+a_status_t __adf_nbuf_data_is_dhcp_pkt(uint8_t *data);
+a_status_t __adf_nbuf_data_is_eapol_pkt(uint8_t *data);
+bool __adf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data);
+enum adf_proto_subtype __adf_nbuf_data_get_dhcp_subtype(uint8_t *data);
+enum adf_proto_subtype __adf_nbuf_data_get_eapol_subtype(uint8_t *data);
+enum adf_proto_subtype __adf_nbuf_data_get_arp_subtype(uint8_t *data);
+enum adf_proto_subtype __adf_nbuf_data_get_icmp_subtype(uint8_t *data);
+enum adf_proto_subtype __adf_nbuf_data_get_icmpv6_subtype(uint8_t *data);
#ifdef QCA_PKT_PROTO_TRACE