Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06ebe419 authored by Vulupala Shashank Reddy's avatar Vulupala Shashank Reddy Committed by Gerrit - the friendly Code Review server
Browse files

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
parent 2f09f258
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -2952,6 +2952,32 @@ bool qdf_nbuf_data_is_dns_response(qdf_nbuf_t 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
 * @buf:  buffer
@@ -2978,6 +3004,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));
}

/**
 * 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
 * @buf:  buffer
+8 −0
Original line number Diff line number Diff line
@@ -73,6 +73,11 @@ typedef struct sk_buff_head __qdf_nbuf_queue_head_t;
/* mark the first packet after wow wakeup */
#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
 */
@@ -836,8 +841,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);
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_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_ack(uint8_t *data);
bool __qdf_nbuf_data_is_tcp_rst(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_dst_port(uint8_t *data);
+66 −0
Original line number Diff line number Diff line
@@ -1725,6 +1725,50 @@ bool __qdf_nbuf_data_is_dns_response(uint8_t *data)
	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
 * @data: Pointer to network data buffer
@@ -1767,6 +1811,28 @@ bool __qdf_nbuf_data_is_tcp_syn_ack(uint8_t *data)
	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
 * @data: Pointer to network data buffer