qcacmn: Add APIs to get packet type and subtype
Propagation from qcacld-2.0 to qcacmn. Add APIs to get DHCP, EAPOL, ARP, ICMP, ICMPV6, TCP and UDP packets type and subtype from the netbuf. Change-Id: I8837ad1b976744eeb0e7f0a836eded3a5d34124b CRs-Fixed: 1019037
This commit is contained in:

committed by
Vishwajith Upendra

parent
9c3b3fe251
commit
fcd64e9e64
@@ -57,12 +57,22 @@
|
||||
#define QDF_NBUF_TRAC_EAPOL_ETH_TYPE 0x888E
|
||||
#define QDF_NBUF_TRAC_WAPI_ETH_TYPE 0x88b4
|
||||
#define QDF_NBUF_TRAC_ARP_ETH_TYPE 0x0806
|
||||
#define QDF_NBUF_TRAC_IPV4_ETH_TYPE 0x0800
|
||||
#define QDF_NBUF_TRAC_IPV6_ETH_TYPE 0x86dd
|
||||
#define QDF_NBUF_DEST_MAC_OFFSET 0
|
||||
#define QDF_NBUF_SRC_MAC_OFFSET 6
|
||||
#define QDF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET 23
|
||||
#define QDF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET 20
|
||||
#define QDF_NBUF_TRAC_ICMP_TYPE 1
|
||||
#define QDF_NBUF_TRAC_TCP_TYPE 6
|
||||
#define QDF_NBUF_TRAC_UDP_TYPE 17
|
||||
#define QDF_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
|
||||
@@ -135,6 +145,8 @@ struct mon_rx_status {
|
||||
#define QDF_DHCP_OPTION53_OFFSET (0x11A)
|
||||
#define QDF_DHCP_OPTION53_LENGTH_OFFSET (0x11B)
|
||||
#define QDF_DHCP_OPTION53_STATUS_OFFSET (0x11C)
|
||||
#define DHCP_PKT_LEN_OFFSET 16
|
||||
#define DHCP_TRANSACTION_ID_OFFSET 46
|
||||
#define QDF_DHCP_DISCOVER (1)
|
||||
#define QDF_DHCP_OFFER (2)
|
||||
#define QDF_DHCP_REQUEST (3)
|
||||
@@ -144,12 +156,112 @@ struct mon_rx_status {
|
||||
#define QDF_DHCP_RELEASE (7)
|
||||
#define QDF_DHCP_INFORM (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
|
||||
#define IPV4_SRC_PORT_OFFSET 34
|
||||
#define IPV4_DST_PORT_OFFSET 36
|
||||
|
||||
/* 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
|
||||
#define IPV6_SRC_PORT_OFFSET 54
|
||||
#define IPV6_DST_PORT_OFFSET 56
|
||||
|
||||
/* IPV6 ICMPV6 Related Mask */
|
||||
#define ICMPV6_SEQ_NUM_OFFSET 60
|
||||
#define ICMPV6_SUBTYPE_OFFSET 54
|
||||
#define ICMPV6_REQUEST 0x80
|
||||
#define ICMPV6_RESPONSE 0x81
|
||||
|
||||
#define QDF_NBUF_IPA_CHECK_MASK 0x80000000
|
||||
|
||||
/**
|
||||
* qdf_proto_type - protocol type
|
||||
* @QDF_PROTO_TYPE_DHCP - DHCP
|
||||
* @QDF_PROTO_TYPE_EAPOL - EAPOL
|
||||
* @QDF_PROTO_TYPE_ARP - ARP
|
||||
* @QDF_PROTO_TYPE_MGMT - MGMT
|
||||
*/
|
||||
enum qdf_proto_type {
|
||||
QDF_PROTO_TYPE_DHCP,
|
||||
QDF_PROTO_TYPE_EAPOL,
|
||||
QDF_PROTO_TYPE_ARP,
|
||||
QDF_PROTO_TYPE_MGMT,
|
||||
QDF_PROTO_TYPE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* qdf_proto_subtype - subtype of packet
|
||||
* @QDF_PROTO_EAPOL_M1 - EAPOL 1/4
|
||||
* @QDF_PROTO_EAPOL_M2 - EAPOL 2/4
|
||||
* @QDF_PROTO_EAPOL_M3 - EAPOL 3/4
|
||||
* @QDF_PROTO_EAPOL_M4 - EAPOL 4/4
|
||||
* @QDF_PROTO_DHCP_DISCOVER - discover
|
||||
* @QDF_PROTO_DHCP_REQUEST - request
|
||||
* @QDF_PROTO_DHCP_OFFER - offer
|
||||
* @QDF_PROTO_DHCP_ACK - ACK
|
||||
* @QDF_PROTO_DHCP_NACK - NACK
|
||||
* @QDF_PROTO_DHCP_RELEASE - release
|
||||
* @QDF_PROTO_DHCP_INFORM - inform
|
||||
* @QDF_PROTO_DHCP_DECLINE - decline
|
||||
* @QDF_PROTO_ARP_REQ - arp request
|
||||
* @QDF_PROTO_ARP_RES - arp response
|
||||
* @QDF_PROTO_ICMP_REQ - icmp request
|
||||
* @QDF_PROTO_ICMP_RES - icmp response
|
||||
* @QDF_PROTO_ICMPV6_REQ - icmpv6 request
|
||||
* @QDF_PROTO_ICMPV6_RES - icmpv6 response
|
||||
* @QDF_PROTO_IPV4_UDP - ipv4 udp
|
||||
* @QDF_PROTO_IPV4_TCP - ipv4 tcp
|
||||
* @QDF_PROTO_IPV6_UDP - ipv6 udp
|
||||
* @QDF_PROTO_IPV6_TCP - ipv6 tcp
|
||||
* @QDF_PROTO_MGMT_ASSOC -assoc
|
||||
* @QDF_PROTO_MGMT_DISASSOC - disassoc
|
||||
* @QDF_PROTO_MGMT_AUTH - auth
|
||||
* @QDF_PROTO_MGMT_DEAUTH - deauth
|
||||
*/
|
||||
enum qdf_proto_subtype {
|
||||
QDF_PROTO_INVALID,
|
||||
QDF_PROTO_EAPOL_M1,
|
||||
QDF_PROTO_EAPOL_M2,
|
||||
QDF_PROTO_EAPOL_M3,
|
||||
QDF_PROTO_EAPOL_M4,
|
||||
QDF_PROTO_DHCP_DISCOVER,
|
||||
QDF_PROTO_DHCP_REQUEST,
|
||||
QDF_PROTO_DHCP_OFFER,
|
||||
QDF_PROTO_DHCP_ACK,
|
||||
QDF_PROTO_DHCP_NACK,
|
||||
QDF_PROTO_DHCP_RELEASE,
|
||||
QDF_PROTO_DHCP_INFORM,
|
||||
QDF_PROTO_DHCP_DECLINE,
|
||||
QDF_PROTO_ARP_REQ,
|
||||
QDF_PROTO_ARP_RES,
|
||||
QDF_PROTO_ICMP_REQ,
|
||||
QDF_PROTO_ICMP_RES,
|
||||
QDF_PROTO_ICMPV6_REQ,
|
||||
QDF_PROTO_ICMPV6_RES,
|
||||
QDF_PROTO_IPV4_UDP,
|
||||
QDF_PROTO_IPV4_TCP,
|
||||
QDF_PROTO_IPV6_UDP,
|
||||
QDF_PROTO_IPV6_TCP,
|
||||
QDF_PROTO_MGMT_ASSOC,
|
||||
QDF_PROTO_MGMT_DISASSOC,
|
||||
QDF_PROTO_MGMT_AUTH,
|
||||
QDF_PROTO_MGMT_DEAUTH,
|
||||
QDF_PROTO_SUBTYPE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* @qdf_nbuf_t - Platform indepedent packet abstraction
|
||||
*/
|
||||
@@ -1085,6 +1197,156 @@ static inline uint8_t qdf_nbuf_get_tx_parallel_dnload_frm(qdf_nbuf_t buf)
|
||||
return __qdf_nbuf_get_tx_htt2_frm(buf);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_get_dhcp_subtype() - get the subtype
|
||||
* of DHCP packet.
|
||||
* @buf: Pointer to DHCP packet buffer
|
||||
*
|
||||
* This func. returns the subtype of DHCP packet.
|
||||
*
|
||||
* Return: subtype of the DHCP packet.
|
||||
*/
|
||||
static inline enum qdf_proto_subtype
|
||||
qdf_nbuf_get_dhcp_subtype(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_get_dhcp_subtype(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_get_dhcp_subtype(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_get_eapol_subtype(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_get_eapol_subtype(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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.
|
||||
*/
|
||||
static inline enum qdf_proto_subtype
|
||||
qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_get_eapol_subtype(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_get_arp_subtype(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_get_arp_subtype(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_data_get_arp_subtype(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_get_arp_subtype(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_get_icmp_subtype(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_get_icmp_subtype(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_data_get_icmp_subtype(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_get_icmp_subtype(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_get_icmpv6_subtype(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_get_icmpv6_subtype(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_proto_subtype
|
||||
qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_get_icmpv6_subtype(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_is_ipv4_pkt() - check if packet is a ipv4 packet or not
|
||||
* @buf: buffer
|
||||
@@ -1096,7 +1358,21 @@ static inline uint8_t qdf_nbuf_get_tx_parallel_dnload_frm(qdf_nbuf_t buf)
|
||||
static inline
|
||||
bool qdf_nbuf_is_ipv4_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_is_ipv4_pkt(buf);
|
||||
return __qdf_nbuf_data_is_ipv4_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_data_is_ipv4_pkt() - check if packet is a ipv4 packet or not
|
||||
* @data: data
|
||||
*
|
||||
* This api is for Tx packets.
|
||||
*
|
||||
* Return: true if packet is ipv4 packet
|
||||
*/
|
||||
static inline
|
||||
bool qdf_nbuf_data_is_ipv4_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1110,7 +1386,22 @@ bool qdf_nbuf_is_ipv4_pkt(qdf_nbuf_t buf)
|
||||
static inline
|
||||
bool qdf_nbuf_is_ipv4_dhcp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_is_ipv4_dhcp_pkt(buf);
|
||||
return __qdf_nbuf_data_is_ipv4_dhcp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_data_is_ipv4_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: true if it is a DHCP packet
|
||||
* false if not
|
||||
*/
|
||||
static inline
|
||||
bool qdf_nbuf_data_is_ipv4_dhcp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_dhcp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1124,7 +1415,22 @@ bool qdf_nbuf_is_ipv4_dhcp_pkt(qdf_nbuf_t buf)
|
||||
static inline
|
||||
bool qdf_nbuf_is_ipv4_eapol_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_is_ipv4_eapol_pkt(buf);
|
||||
return __qdf_nbuf_data_is_ipv4_eapol_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_data_is_ipv4_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: true if it is a EAPOL packet
|
||||
* false if not
|
||||
*/
|
||||
static inline
|
||||
bool qdf_nbuf_data_is_ipv4_eapol_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_eapol_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1152,7 +1458,232 @@ bool qdf_nbuf_is_ipv4_wapi_pkt(qdf_nbuf_t buf)
|
||||
static inline
|
||||
bool qdf_nbuf_is_ipv4_arp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_is_ipv4_arp_pkt(buf);
|
||||
return __qdf_nbuf_data_is_ipv4_arp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_arp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_ipv6_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv6_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_ipv6_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv6_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_icmp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_icmp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_icmp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_icmp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_icmpv6_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_icmpv6_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_icmpv6_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_icmpv6_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_ipv4_udp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_udp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_udp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_ipv4_tcp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_tcp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv4_tcp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_ipv6_udp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv6_udp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv6_udp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_is_ipv6_tcp_pkt(qdf_nbuf_t buf)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv6_tcp_pkt(qdf_nbuf_data(buf));
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_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 qdf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data)
|
||||
{
|
||||
return __qdf_nbuf_data_is_ipv6_tcp_pkt(data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -233,65 +233,6 @@ enum QDF_DP_TRACE_ID {
|
||||
QDF_DP_TRACE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* qdf_proto_type - protocol type
|
||||
* @QDF_PROTO_TYPE_DHCP - DHCP
|
||||
* @QDF_PROTO_TYPE_EAPOL - EAPOL
|
||||
* @QDF_PROTO_TYPE_ARP - ARP
|
||||
* @QDF_PROTO_TYPE_MGMT - MGMT
|
||||
*/
|
||||
enum qdf_proto_type {
|
||||
QDF_PROTO_TYPE_DHCP,
|
||||
QDF_PROTO_TYPE_EAPOL,
|
||||
QDF_PROTO_TYPE_ARP,
|
||||
QDF_PROTO_TYPE_MGMT,
|
||||
QDF_PROTO_TYPE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* qdf_proto_subtype - subtype of packet
|
||||
* @QDF_PROTO_EAPOL_M1 - EAPOL 1/4
|
||||
* @QDF_PROTO_EAPOL_M2 - EAPOL 2/4
|
||||
* @QDF_PROTO_EAPOL_M3 - EAPOL 3/4
|
||||
* @QDF_PROTO_EAPOL_M4 - EAPOL 4/4
|
||||
* @QDF_PROTO_DHCP_DISCOVER - discover
|
||||
* @QDF_PROTO_DHCP_REQUEST - request
|
||||
* @QDF_PROTO_DHCP_OFFER - offer
|
||||
* @QDF_PROTO_DHCP_ACK - ACK
|
||||
* @QDF_PROTO_DHCP_NACK - NACK
|
||||
* @QDF_PROTO_DHCP_RELEASE - release
|
||||
* @QDF_PROTO_DHCP_INFORM - inform
|
||||
* @QDF_PROTO_DHCP_DECLINE - decline
|
||||
* @QDF_PROTO_ARP_REQ - arp request
|
||||
* @QDF_PROTO_ARP_RES - arp response
|
||||
* @QDF_PROTO_MGMT_ASSOC -assoc
|
||||
* @QDF_PROTO_MGMT_DISASSOC - disassoc
|
||||
* @QDF_PROTO_MGMT_AUTH - auth
|
||||
* @QDF_PROTO_MGMT_DEAUTH - deauth
|
||||
*/
|
||||
enum qdf_proto_subtype {
|
||||
QDF_PROTO_INVALID,
|
||||
QDF_PROTO_EAPOL_M1,
|
||||
QDF_PROTO_EAPOL_M2,
|
||||
QDF_PROTO_EAPOL_M3,
|
||||
QDF_PROTO_EAPOL_M4,
|
||||
QDF_PROTO_DHCP_DISCOVER,
|
||||
QDF_PROTO_DHCP_REQUEST,
|
||||
QDF_PROTO_DHCP_OFFER,
|
||||
QDF_PROTO_DHCP_ACK,
|
||||
QDF_PROTO_DHCP_NACK,
|
||||
QDF_PROTO_DHCP_RELEASE,
|
||||
QDF_PROTO_DHCP_INFORM,
|
||||
QDF_PROTO_DHCP_DECLINE,
|
||||
QDF_PROTO_ARP_REQ,
|
||||
QDF_PROTO_ARP_RES,
|
||||
QDF_PROTO_MGMT_ASSOC,
|
||||
QDF_PROTO_MGMT_DISASSOC,
|
||||
QDF_PROTO_MGMT_AUTH,
|
||||
QDF_PROTO_MGMT_DEAUTH,
|
||||
QDF_PROTO_SUBTYPE_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* qdf_proto_dir - direction
|
||||
* @QDF_TX: TX direction
|
||||
|
@@ -45,6 +45,7 @@
|
||||
#include <qdf_mem.h>
|
||||
#include <linux/tcp.h>
|
||||
#include <qdf_util.h>
|
||||
#include <qdf_nbuf.h>
|
||||
|
||||
/*
|
||||
* Use socket buffer as the underlying implentation as skbuf .
|
||||
@@ -490,11 +491,24 @@ QDF_STATUS __qdf_nbuf_frag_map(
|
||||
qdf_device_t osdev, __qdf_nbuf_t nbuf,
|
||||
int offset, qdf_dma_dir_t dir, int cur_frag);
|
||||
|
||||
bool __qdf_nbuf_is_ipv4_pkt(struct sk_buff *skb);
|
||||
bool __qdf_nbuf_is_ipv4_dhcp_pkt(struct sk_buff *skb);
|
||||
bool __qdf_nbuf_is_ipv4_eapol_pkt(struct sk_buff *skb);
|
||||
bool __qdf_nbuf_is_ipv4_arp_pkt(struct sk_buff *skb);
|
||||
bool __qdf_nbuf_is_ipv4_wapi_pkt(struct sk_buff *skb);
|
||||
bool __qdf_nbuf_data_is_ipv4_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv6_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_icmp_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_icmpv6_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv4_dhcp_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv4_eapol_pkt(uint8_t *data);
|
||||
bool __qdf_nbuf_data_is_ipv4_arp_pkt(uint8_t *data);
|
||||
enum qdf_proto_subtype __qdf_nbuf_data_get_dhcp_subtype(uint8_t *data);
|
||||
enum qdf_proto_subtype __qdf_nbuf_data_get_eapol_subtype(uint8_t *data);
|
||||
enum qdf_proto_subtype __qdf_nbuf_data_get_arp_subtype(uint8_t *data);
|
||||
enum qdf_proto_subtype __qdf_nbuf_data_get_icmp_subtype(uint8_t *data);
|
||||
enum qdf_proto_subtype __qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data);
|
||||
|
||||
|
||||
/**
|
||||
* __qdf_to_status() - OS to QDF status conversion
|
||||
|
@@ -466,39 +466,232 @@ void __qdf_nbuf_reg_trace_cb(qdf_nbuf_trace_update_t cb_func_ptr)
|
||||
EXPORT_SYMBOL(__qdf_nbuf_reg_trace_cb);
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_is_ipv4_pkt() - check if packet is a ipv4 packet
|
||||
* @skb: Pointer to network buffer
|
||||
* __qdf_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 qdf_proto_subtype
|
||||
__qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
|
||||
{
|
||||
enum qdf_proto_subtype subtype = QDF_PROTO_INVALID;
|
||||
|
||||
if ((data[QDF_DHCP_OPTION53_OFFSET] == QDF_DHCP_OPTION53) &&
|
||||
(data[QDF_DHCP_OPTION53_LENGTH_OFFSET] ==
|
||||
QDF_DHCP_OPTION53_LENGTH)) {
|
||||
|
||||
switch (data[QDF_DHCP_OPTION53_STATUS_OFFSET]) {
|
||||
case QDF_DHCP_DISCOVER:
|
||||
subtype = QDF_PROTO_DHCP_DISCOVER;
|
||||
break;
|
||||
case QDF_DHCP_REQUEST:
|
||||
subtype = QDF_PROTO_DHCP_REQUEST;
|
||||
break;
|
||||
case QDF_DHCP_OFFER:
|
||||
subtype = QDF_PROTO_DHCP_OFFER;
|
||||
break;
|
||||
case QDF_DHCP_ACK:
|
||||
subtype = QDF_PROTO_DHCP_ACK;
|
||||
break;
|
||||
case QDF_DHCP_NAK:
|
||||
subtype = QDF_PROTO_DHCP_NACK;
|
||||
break;
|
||||
case QDF_DHCP_RELEASE:
|
||||
subtype = QDF_PROTO_DHCP_RELEASE;
|
||||
break;
|
||||
case QDF_DHCP_INFORM:
|
||||
subtype = QDF_PROTO_DHCP_INFORM;
|
||||
break;
|
||||
case QDF_DHCP_DECLINE:
|
||||
subtype = QDF_PROTO_DHCP_DECLINE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return subtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 qdf_proto_subtype
|
||||
__qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
|
||||
{
|
||||
uint16_t eapol_key_info;
|
||||
enum qdf_proto_subtype subtype = QDF_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 = QDF_PROTO_EAPOL_M1;
|
||||
break;
|
||||
case EAPOL_M2_BIT_MASK:
|
||||
subtype = QDF_PROTO_EAPOL_M2;
|
||||
break;
|
||||
case EAPOL_M3_BIT_MASK:
|
||||
subtype = QDF_PROTO_EAPOL_M3;
|
||||
break;
|
||||
case EAPOL_M4_BIT_MASK:
|
||||
subtype = QDF_PROTO_EAPOL_M4;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return subtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 qdf_proto_subtype
|
||||
__qdf_nbuf_data_get_arp_subtype(uint8_t *data)
|
||||
{
|
||||
uint16_t subtype;
|
||||
enum qdf_proto_subtype proto_subtype = QDF_PROTO_INVALID;
|
||||
|
||||
subtype = (uint16_t)(*(uint16_t *)
|
||||
(data + ARP_SUB_TYPE_OFFSET));
|
||||
|
||||
switch (QDF_SWAP_U16(subtype)) {
|
||||
case ARP_REQUEST:
|
||||
proto_subtype = QDF_PROTO_ARP_REQ;
|
||||
break;
|
||||
case ARP_RESPONSE:
|
||||
proto_subtype = QDF_PROTO_ARP_RES;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return proto_subtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 qdf_proto_subtype
|
||||
__qdf_nbuf_data_get_icmp_subtype(uint8_t *data)
|
||||
{
|
||||
uint8_t subtype;
|
||||
enum qdf_proto_subtype proto_subtype = QDF_PROTO_INVALID;
|
||||
|
||||
subtype = (uint8_t)(*(uint8_t *)
|
||||
(data + ICMP_SUBTYPE_OFFSET));
|
||||
|
||||
switch (subtype) {
|
||||
case ICMP_REQUEST:
|
||||
proto_subtype = QDF_PROTO_ICMP_REQ;
|
||||
break;
|
||||
case ICMP_RESPONSE:
|
||||
proto_subtype = QDF_PROTO_ICMP_RES;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return proto_subtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 qdf_proto_subtype
|
||||
__qdf_nbuf_data_get_icmpv6_subtype(uint8_t *data)
|
||||
{
|
||||
uint8_t subtype;
|
||||
enum qdf_proto_subtype proto_subtype = QDF_PROTO_INVALID;
|
||||
|
||||
subtype = (uint8_t)(*(uint8_t *)
|
||||
(data + ICMPV6_SUBTYPE_OFFSET));
|
||||
|
||||
switch (subtype) {
|
||||
case ICMPV6_REQUEST:
|
||||
proto_subtype = QDF_PROTO_ICMPV6_REQ;
|
||||
break;
|
||||
case ICMPV6_RESPONSE:
|
||||
proto_subtype = QDF_PROTO_ICMPV6_RES;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return proto_subtype;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_data_is_ipv4_pkt() - check if packet is a ipv4 packet
|
||||
* @data: Pointer to network data
|
||||
*
|
||||
* This api is for Tx packets.
|
||||
*
|
||||
* Return: true if packet is ipv4 packet
|
||||
* false otherwise
|
||||
*/
|
||||
bool __qdf_nbuf_is_ipv4_pkt(struct sk_buff *skb)
|
||||
bool __qdf_nbuf_data_is_ipv4_pkt(uint8_t *data)
|
||||
{
|
||||
if (qdf_nbuf_get_protocol(skb) == htons(ETH_P_IP))
|
||||
uint16_t ether_type;
|
||||
|
||||
ether_type = (uint16_t)(*(uint16_t *)(data +
|
||||
QDF_NBUF_TRAC_ETH_TYPE_OFFSET));
|
||||
|
||||
if (ether_type == QDF_SWAP_U16(QDF_NBUF_TRAC_IPV4_ETH_TYPE))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_is_ipv4_dhcp_pkt() - check if skb data is a dhcp packet
|
||||
* @skb: Pointer to network buffer
|
||||
* __qdf_nbuf_data_is_ipv4_dhcp_pkt() - check if skb data is a dhcp packet
|
||||
* @data: Pointer to network data buffer
|
||||
*
|
||||
* This api is for ipv4 packet.
|
||||
*
|
||||
* Return: true if packet is DHCP packet
|
||||
* false otherwise
|
||||
*/
|
||||
bool __qdf_nbuf_is_ipv4_dhcp_pkt(struct sk_buff *skb)
|
||||
bool __qdf_nbuf_data_is_ipv4_dhcp_pkt(uint8_t *data)
|
||||
{
|
||||
uint16_t sport;
|
||||
uint16_t dport;
|
||||
|
||||
sport = (uint16_t)(*(uint16_t *)(skb->data + QDF_NBUF_TRAC_IPV4_OFFSET +
|
||||
sport = (uint16_t)(*(uint16_t *)(data + QDF_NBUF_TRAC_IPV4_OFFSET +
|
||||
QDF_NBUF_TRAC_IPV4_HEADER_SIZE));
|
||||
dport = (uint16_t)(*(uint16_t *)(skb->data + QDF_NBUF_TRAC_IPV4_OFFSET +
|
||||
dport = (uint16_t)(*(uint16_t *)(data + QDF_NBUF_TRAC_IPV4_OFFSET +
|
||||
QDF_NBUF_TRAC_IPV4_HEADER_SIZE +
|
||||
sizeof(uint16_t)));
|
||||
|
||||
@@ -512,19 +705,19 @@ bool __qdf_nbuf_is_ipv4_dhcp_pkt(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_is_ipv4_eapol_pkt() - check if skb data is a eapol packet
|
||||
* @skb: Pointer to network buffer
|
||||
* __qdf_nbuf_data_is_ipv4_eapol_pkt() - check if skb data is a eapol packet
|
||||
* @data: Pointer to network data buffer
|
||||
*
|
||||
* This api is for ipv4 packet.
|
||||
*
|
||||
* Return: true if packet is EAPOL packet
|
||||
* false otherwise.
|
||||
*/
|
||||
bool __qdf_nbuf_is_ipv4_eapol_pkt(struct sk_buff *skb)
|
||||
bool __qdf_nbuf_data_is_ipv4_eapol_pkt(uint8_t *data)
|
||||
{
|
||||
uint16_t ether_type;
|
||||
|
||||
ether_type = (uint16_t)(*(uint16_t *)(skb->data +
|
||||
ether_type = (uint16_t)(*(uint16_t *)(data +
|
||||
QDF_NBUF_TRAC_ETH_TYPE_OFFSET));
|
||||
|
||||
if (ether_type == QDF_SWAP_U16(QDF_NBUF_TRAC_EAPOL_ETH_TYPE))
|
||||
@@ -556,19 +749,19 @@ bool __qdf_nbuf_is_ipv4_wapi_pkt(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_is_ipv4_arp_pkt() - check if skb data is a eapol packet
|
||||
* @skb: Pointer to network buffer
|
||||
* __qdf_nbuf_data_is_ipv4_arp_pkt() - check if skb data is a arp packet
|
||||
* @data: Pointer to network data buffer
|
||||
*
|
||||
* This api is for ipv4 packet.
|
||||
*
|
||||
* Return: true if packet is ARP packet
|
||||
* false otherwise.
|
||||
*/
|
||||
bool __qdf_nbuf_is_ipv4_arp_pkt(struct sk_buff *skb)
|
||||
bool __qdf_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 +
|
||||
QDF_NBUF_TRAC_ETH_TYPE_OFFSET));
|
||||
|
||||
if (ether_type == QDF_SWAP_U16(QDF_NBUF_TRAC_ARP_ETH_TYPE))
|
||||
@@ -577,6 +770,178 @@ bool __qdf_nbuf_is_ipv4_arp_pkt(struct sk_buff *skb)
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_ipv6_pkt(uint8_t *data)
|
||||
{
|
||||
uint16_t ether_type;
|
||||
|
||||
ether_type = (uint16_t)(*(uint16_t *)(data +
|
||||
QDF_NBUF_TRAC_ETH_TYPE_OFFSET));
|
||||
|
||||
if (ether_type == QDF_SWAP_U16(QDF_NBUF_TRAC_IPV6_ETH_TYPE))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_icmp_pkt(uint8_t *data)
|
||||
{
|
||||
if (__qdf_nbuf_data_is_ipv4_pkt(data)) {
|
||||
uint8_t pkt_type;
|
||||
|
||||
pkt_type = (uint8_t)(*(uint8_t *)(data +
|
||||
QDF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET));
|
||||
|
||||
if (pkt_type == QDF_NBUF_TRAC_ICMP_TYPE)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_icmpv6_pkt(uint8_t *data)
|
||||
{
|
||||
if (__qdf_nbuf_data_is_ipv6_pkt(data)) {
|
||||
uint8_t pkt_type;
|
||||
|
||||
pkt_type = (uint8_t)(*(uint8_t *)(data +
|
||||
QDF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET));
|
||||
|
||||
if (pkt_type == QDF_NBUF_TRAC_ICMPV6_TYPE)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_ipv4_udp_pkt(uint8_t *data)
|
||||
{
|
||||
if (__qdf_nbuf_data_is_ipv4_pkt(data)) {
|
||||
uint8_t pkt_type;
|
||||
|
||||
pkt_type = (uint8_t)(*(uint8_t *)(data +
|
||||
QDF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET));
|
||||
|
||||
if (pkt_type == QDF_NBUF_TRAC_UDP_TYPE)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_ipv4_tcp_pkt(uint8_t *data)
|
||||
{
|
||||
if (__qdf_nbuf_data_is_ipv4_pkt(data)) {
|
||||
uint8_t pkt_type;
|
||||
|
||||
pkt_type = (uint8_t)(*(uint8_t *)(data +
|
||||
QDF_NBUF_TRAC_IPV4_PROTO_TYPE_OFFSET));
|
||||
|
||||
if (pkt_type == QDF_NBUF_TRAC_TCP_TYPE)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_ipv6_udp_pkt(uint8_t *data)
|
||||
{
|
||||
if (__qdf_nbuf_data_is_ipv6_pkt(data)) {
|
||||
uint8_t pkt_type;
|
||||
|
||||
pkt_type = (uint8_t)(*(uint8_t *)(data +
|
||||
QDF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET));
|
||||
|
||||
if (pkt_type == QDF_NBUF_TRAC_UDP_TYPE)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_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 __qdf_nbuf_data_is_ipv6_tcp_pkt(uint8_t *data)
|
||||
{
|
||||
if (__qdf_nbuf_data_is_ipv6_pkt(data)) {
|
||||
uint8_t pkt_type;
|
||||
|
||||
pkt_type = (uint8_t)(*(uint8_t *)(data +
|
||||
QDF_NBUF_TRAC_IPV6_PROTO_TYPE_OFFSET));
|
||||
|
||||
if (pkt_type == QDF_NBUF_TRAC_TCP_TYPE)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef MEMORY_DEBUG
|
||||
#define QDF_NET_BUF_TRACK_MAX_SIZE (1024)
|
||||
|
||||
|
@@ -1126,8 +1126,6 @@ EXPORT_SYMBOL(qdf_dp_add_record);
|
||||
bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||
enum qdf_proto_dir dir)
|
||||
{
|
||||
uint16_t mask;
|
||||
uint16_t eapol_key_info;
|
||||
enum qdf_proto_subtype subtype;
|
||||
|
||||
if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_EAPOL) &&
|
||||
@@ -1135,26 +1133,7 @@ bool qdf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||
QDF_NBUF_CB_GET_PACKET_TYPE(skb)) ||
|
||||
(dir == QDF_RX && qdf_nbuf_is_ipv4_eapol_pkt(skb) == true))) {
|
||||
|
||||
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 = QDF_PROTO_EAPOL_M1;
|
||||
break;
|
||||
case EAPOL_M2_BIT_MASK:
|
||||
subtype = QDF_PROTO_EAPOL_M2;
|
||||
break;
|
||||
case EAPOL_M3_BIT_MASK:
|
||||
subtype = QDF_PROTO_EAPOL_M3;
|
||||
break;
|
||||
case EAPOL_M4_BIT_MASK:
|
||||
subtype = QDF_PROTO_EAPOL_M4;
|
||||
break;
|
||||
default:
|
||||
subtype = QDF_PROTO_INVALID;
|
||||
}
|
||||
subtype = qdf_nbuf_get_eapol_subtype(skb);
|
||||
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_EAPOL_PACKET_RECORD,
|
||||
session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
|
||||
(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
|
||||
@@ -1187,39 +1166,7 @@ bool qdf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||
QDF_NBUF_CB_GET_PACKET_TYPE(skb)) ||
|
||||
(dir == QDF_RX && qdf_nbuf_is_ipv4_dhcp_pkt(skb) == true))) {
|
||||
|
||||
if ((skb->data[QDF_DHCP_OPTION53_OFFSET] == QDF_DHCP_OPTION53) &&
|
||||
(skb->data[QDF_DHCP_OPTION53_LENGTH_OFFSET] ==
|
||||
QDF_DHCP_OPTION53_LENGTH)) {
|
||||
|
||||
switch (skb->data[QDF_DHCP_OPTION53_STATUS_OFFSET]) {
|
||||
case QDF_DHCP_DISCOVER:
|
||||
subtype = QDF_PROTO_DHCP_DISCOVER;
|
||||
break;
|
||||
case QDF_DHCP_REQUEST:
|
||||
subtype = QDF_PROTO_DHCP_REQUEST;
|
||||
break;
|
||||
case QDF_DHCP_OFFER:
|
||||
subtype = QDF_PROTO_DHCP_OFFER;
|
||||
break;
|
||||
case QDF_DHCP_ACK:
|
||||
subtype = QDF_PROTO_DHCP_ACK;
|
||||
break;
|
||||
case QDF_DHCP_NAK:
|
||||
subtype = QDF_PROTO_DHCP_NACK;
|
||||
break;
|
||||
case QDF_DHCP_RELEASE:
|
||||
subtype = QDF_PROTO_DHCP_RELEASE;
|
||||
break;
|
||||
case QDF_DHCP_INFORM:
|
||||
subtype = QDF_PROTO_DHCP_INFORM;
|
||||
break;
|
||||
case QDF_DHCP_DECLINE:
|
||||
subtype = QDF_PROTO_DHCP_DECLINE;
|
||||
break;
|
||||
default:
|
||||
subtype = QDF_PROTO_INVALID;
|
||||
}
|
||||
}
|
||||
subtype = qdf_nbuf_get_dhcp_subtype(skb);
|
||||
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_DHCP_PACKET_RECORD,
|
||||
session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
|
||||
(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
|
||||
@@ -1245,7 +1192,6 @@ EXPORT_SYMBOL(qdf_log_dhcp_pkt);
|
||||
bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||
enum qdf_proto_dir dir)
|
||||
{
|
||||
uint16_t subtype;
|
||||
enum qdf_proto_subtype proto_subtype;
|
||||
|
||||
if ((qdf_dp_get_proto_bitmap() & QDF_NBUF_PKT_TRAC_TYPE_ARP) &&
|
||||
@@ -1253,19 +1199,7 @@ bool qdf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
|
||||
QDF_NBUF_CB_GET_PACKET_TYPE(skb)) ||
|
||||
(dir == QDF_RX && qdf_nbuf_is_ipv4_arp_pkt(skb) == true))) {
|
||||
|
||||
subtype = (uint16_t)(*(uint16_t *)
|
||||
(skb->data + ARP_SUB_TYPE_OFFSET));
|
||||
switch (QDF_SWAP_U16(subtype)) {
|
||||
case ARP_REQUEST:
|
||||
proto_subtype = QDF_PROTO_ARP_REQ;
|
||||
break;
|
||||
case ARP_RESPONSE:
|
||||
proto_subtype = QDF_PROTO_ARP_RES;
|
||||
break;
|
||||
default:
|
||||
proto_subtype = QDF_PROTO_INVALID;
|
||||
}
|
||||
|
||||
proto_subtype = qdf_nbuf_get_arp_subtype(skb);
|
||||
DPTRACE(qdf_dp_trace_proto_pkt(QDF_DP_TRACE_ARP_PACKET_RECORD,
|
||||
session_id, (skb->data + QDF_NBUF_SRC_MAC_OFFSET),
|
||||
(skb->data + QDF_NBUF_DEST_MAC_OFFSET),
|
||||
|
Reference in New Issue
Block a user