qcacmn: Add APIs to get data packets info

Add APIs to get TCP fin/fin-ack/rst packets information.

Change-Id: Ia1150c81076fa47ae7f34d14bc73efc82003258a
CRs-Fixed: 3046235
This commit is contained in:
Vulupala Shashank Reddy
2021-09-13 11:01:44 +05:30
committed by Madan Koyyalamudi
parent ef5ccaa3e1
commit 2da40899eb
3 changed files with 113 additions and 0 deletions

View File

@@ -3011,6 +3011,32 @@ bool qdf_nbuf_data_is_dns_response(qdf_nbuf_t buf)
return __qdf_nbuf_data_is_dns_response(qdf_nbuf_data(buf)); return __qdf_nbuf_data_is_dns_response(qdf_nbuf_data(buf));
} }
/**
* qdf_nbuf_data_is_tcp_fin() - check if skb data is a tcp fin
* @buf: buffer
*
* Return: true if packet is tcp fin packet.
* false otherwise.
*/
static inline
bool qdf_nbuf_data_is_tcp_fin(qdf_nbuf_t buf)
{
return __qdf_nbuf_data_is_tcp_fin(qdf_nbuf_data(buf));
}
/**
* qdf_nbuf_data_is_tcp_fin_ack() - check if skb data is a tcp fin ack
* @buf: buffer
*
* Return: true if packet is tcp fin ack packet.
* false otherwise.
*/
static inline
bool qdf_nbuf_data_is_tcp_fin_ack(qdf_nbuf_t buf)
{
return __qdf_nbuf_data_is_tcp_fin_ack(qdf_nbuf_data(buf));
}
/** /**
* qdf_nbuf_data_is_tcp_syn() - check if skb data is a tcp syn * qdf_nbuf_data_is_tcp_syn() - check if skb data is a tcp syn
* @buf: buffer * @buf: buffer
@@ -3037,6 +3063,19 @@ bool qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_t buf)
return __qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_data(buf)); return __qdf_nbuf_data_is_tcp_syn_ack(qdf_nbuf_data(buf));
} }
/**
* qdf_nbuf_data_is_tcp_rst() - check if skb data is a tcp rst
* @buf: buffer
*
* Return: true if packet is tcp rst packet.
* false otherwise.
*/
static inline
bool qdf_nbuf_data_is_tcp_rst(qdf_nbuf_t buf)
{
return __qdf_nbuf_data_is_tcp_rst(qdf_nbuf_data(buf));
}
/** /**
* qdf_nbuf_data_is_tcp_ack() - check if skb data is a tcp ack * qdf_nbuf_data_is_tcp_ack() - check if skb data is a tcp ack
* @buf: buffer * @buf: buffer

View File

@@ -82,6 +82,11 @@ typedef struct sk_buff_head __qdf_nbuf_queue_head_t;
/* mark the first packet after wow wakeup */ /* mark the first packet after wow wakeup */
#define QDF_MARK_FIRST_WAKEUP_PACKET 0x80000000 #define QDF_MARK_FIRST_WAKEUP_PACKET 0x80000000
/* TCP Related MASK */
#define QDF_NBUF_PKT_TCPOP_FIN 0x01
#define QDF_NBUF_PKT_TCPOP_FIN_ACK 0x11
#define QDF_NBUF_PKT_TCPOP_RST 0x04
/* /*
* Make sure that qdf_dma_addr_t in the cb block is always 64 bit aligned * Make sure that qdf_dma_addr_t in the cb block is always 64 bit aligned
*/ */
@@ -862,8 +867,11 @@ uint32_t __qdf_nbuf_get_arp_tgt_ip(uint8_t *data);
uint8_t *__qdf_nbuf_get_dns_domain_name(uint8_t *data, uint32_t len); uint8_t *__qdf_nbuf_get_dns_domain_name(uint8_t *data, uint32_t len);
bool __qdf_nbuf_data_is_dns_query(uint8_t *data); bool __qdf_nbuf_data_is_dns_query(uint8_t *data);
bool __qdf_nbuf_data_is_dns_response(uint8_t *data); bool __qdf_nbuf_data_is_dns_response(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_fin(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_fin_ack(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_syn(uint8_t *data); bool __qdf_nbuf_data_is_tcp_syn(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_syn_ack(uint8_t *data); bool __qdf_nbuf_data_is_tcp_syn_ack(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_rst(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_ack(uint8_t *data); bool __qdf_nbuf_data_is_tcp_ack(uint8_t *data);
uint16_t __qdf_nbuf_data_get_tcp_src_port(uint8_t *data); uint16_t __qdf_nbuf_data_get_tcp_src_port(uint8_t *data);
uint16_t __qdf_nbuf_data_get_tcp_dst_port(uint8_t *data); uint16_t __qdf_nbuf_data_get_tcp_dst_port(uint8_t *data);

View File

@@ -1810,6 +1810,50 @@ bool __qdf_nbuf_data_is_dns_response(uint8_t *data)
return false; return false;
} }
/**
* __qdf_nbuf_data_is_tcp_fin() - check if skb data is a tcp fin
* @data: Pointer to network data buffer
*
* This api is to check if the packet is tcp fin.
*
* Return: true if packet is tcp fin packet.
* false otherwise.
*/
bool __qdf_nbuf_data_is_tcp_fin(uint8_t *data)
{
uint8_t op_code;
op_code = (uint8_t)(*(uint8_t *)(data +
QDF_NBUF_PKT_TCP_OPCODE_OFFSET));
if (op_code == QDF_NBUF_PKT_TCPOP_FIN)
return true;
return false;
}
/**
* __qdf_nbuf_data_is_tcp_fin_ack() - check if skb data is a tcp fin ack
* @data: Pointer to network data buffer
*
* This api is to check if the tcp packet is fin ack.
*
* Return: true if packet is tcp fin ack packet.
* false otherwise.
*/
bool __qdf_nbuf_data_is_tcp_fin_ack(uint8_t *data)
{
uint8_t op_code;
op_code = (uint8_t)(*(uint8_t *)(data +
QDF_NBUF_PKT_TCP_OPCODE_OFFSET));
if (op_code == QDF_NBUF_PKT_TCPOP_FIN_ACK)
return true;
return false;
}
/** /**
* __qdf_nbuf_data_is_tcp_syn() - check if skb data is a tcp syn * __qdf_nbuf_data_is_tcp_syn() - check if skb data is a tcp syn
* @data: Pointer to network data buffer * @data: Pointer to network data buffer
@@ -1852,6 +1896,28 @@ bool __qdf_nbuf_data_is_tcp_syn_ack(uint8_t *data)
return false; return false;
} }
/**
* __qdf_nbuf_data_is_tcp_rst() - check if skb data is a tcp rst
* @data: Pointer to network data buffer
*
* This api is to check if the tcp packet is rst.
*
* Return: true if packet is tcp rst packet.
* false otherwise.
*/
bool __qdf_nbuf_data_is_tcp_rst(uint8_t *data)
{
uint8_t op_code;
op_code = (uint8_t)(*(uint8_t *)(data +
QDF_NBUF_PKT_TCP_OPCODE_OFFSET));
if (op_code == QDF_NBUF_PKT_TCPOP_RST)
return true;
return false;
}
/** /**
* __qdf_nbuf_data_is_tcp_ack() - check if skb data is a tcp ack * __qdf_nbuf_data_is_tcp_ack() - check if skb data is a tcp ack
* @data: Pointer to network data buffer * @data: Pointer to network data buffer