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

Commit b594f378 authored by Vulupala Shashank Reddy's avatar Vulupala Shashank Reddy
Browse files

Revert "qcacld-3.0: Add filter for data packets in packet capture mode"

This reverts commit 64a2d1ee.

Change-Id: Ia7a8f5ffa4e93efa3c37786ad39f377ceaf5a3fe
parent 2a5fd47f
Loading
Loading
Loading
Loading
+132 −264
Original line number Diff line number Diff line
@@ -251,13 +251,33 @@ pkt_capture_process_ppdu_stats(void *log_data)
	qdf_spin_unlock(&vdev_priv->lock_q);
}

static void
pkt_capture_process_tx_data(void *soc, void *log_data, u_int16_t vdev_id,
			    uint32_t status)
void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
			  u_int16_t vdev_id, uint32_t status)
{
	struct dp_soc *psoc = soc;
	uint8_t tid = 0;
	uint8_t bssid[QDF_MAC_ADDR_SIZE];
	uint8_t tid = 0;
	struct dp_soc *psoc = soc;
	struct wlan_objmgr_vdev *vdev;
	struct wlan_objmgr_psoc *obj_mgr_psoc;
	struct pkt_psoc_priv *psoc_priv;
	struct pkt_capture_frame_filter *frame_filter;

	vdev = pkt_capture_get_vdev();
	if (!vdev)
		return;

	obj_mgr_psoc = wlan_vdev_get_psoc(vdev);
	psoc_priv = pkt_capture_psoc_get_priv(obj_mgr_psoc);
	if (!psoc_priv) {
		pkt_capture_err("psoc_priv is NULL");
		return;
	}

	frame_filter = &psoc_priv->frame_filter;

	switch (event) {
	case WDI_EVENT_PKT_CAPTURE_TX_DATA:
	{
		struct pkt_capture_tx_hdr_elem_t *ptr_pktcapture_hdr;
		struct pkt_capture_tx_hdr_elem_t pktcapture_hdr = {0};
		struct hal_tx_completion_status tx_comp_status = {0};
@@ -272,6 +292,9 @@ pkt_capture_process_tx_data(void *soc, void *log_data, u_int16_t vdev_id,
		hal_tx_comp_get_status(&desc->comp, &tx_comp_status,
				       psoc->hal_soc);

		if (!frame_filter->data_tx_frame_filter)
			return;

		if (tx_comp_status.valid)
			pktcapture_hdr.ppdu_id = tx_comp_status.ppdu_id;
		pktcapture_hdr.timestamp = tx_comp_status.tsf;
@@ -384,129 +407,6 @@ pkt_capture_process_tx_data(void *soc, void *log_data, u_int16_t vdev_id,
			vdev_id, netbuf, TXRX_PROCESS_TYPE_DATA_TX_COMPL,
			tid, status, TXRX_PKTCAPTURE_PKT_FORMAT_8023,
			bssid, NULL, pktcapture_hdr.tx_retry_cnt);
}

/**
 * pkt_capture_is_frame_filter_set() - Check frame filter is set
 * @nbuf: buffer address
 * @frame_filter: frame filter address
 * @direction: frame direction
 *
 * Return: true, if filter bit is set
 *         false, if filter bit is not set
 */
static bool
pkt_capture_is_frame_filter_set(qdf_nbuf_t buf,
				struct pkt_capture_frame_filter *frame_filter,
				bool direction)
{
	enum pkt_capture_data_frame_type data_frame_type =
		PKT_CAPTURE_DATA_FRAME_TYPE_ALL;

	if (qdf_nbuf_is_ipv4_arp_pkt(buf))
		data_frame_type = PKT_CAPTURE_DATA_FRAME_TYPE_ARP;
	else if (qdf_nbuf_is_ipv4_eapol_pkt(buf))
		data_frame_type = PKT_CAPTURE_DATA_FRAME_TYPE_EAPOL;
	else if (qdf_nbuf_data_is_tcp_syn(buf))
		data_frame_type =
			PKT_CAPTURE_DATA_FRAME_TYPE_TCP_SYN;
	else if (qdf_nbuf_data_is_tcp_syn_ack(buf))
		data_frame_type =
			PKT_CAPTURE_DATA_FRAME_TYPE_TCP_SYNACK;
	else if (qdf_nbuf_data_is_tcp_syn(buf))
		data_frame_type =
			PKT_CAPTURE_DATA_FRAME_TYPE_TCP_FIN;
	else if (qdf_nbuf_data_is_tcp_syn_ack(buf))
		data_frame_type =
			PKT_CAPTURE_DATA_FRAME_TYPE_TCP_FINACK;
	else if (qdf_nbuf_data_is_tcp_ack(buf))
		data_frame_type =
			PKT_CAPTURE_DATA_FRAME_TYPE_TCP_ACK;
	else if (qdf_nbuf_data_is_tcp_rst(buf))
		data_frame_type =
			PKT_CAPTURE_DATA_FRAME_TYPE_TCP_RST;
	else if (qdf_nbuf_is_ipv4_pkt(buf)) {
		if (qdf_nbuf_is_ipv4_dhcp_pkt(buf))
			data_frame_type =
				PKT_CAPTURE_DATA_FRAME_TYPE_DHCPV4;
		else if (qdf_nbuf_is_icmp_pkt(buf))
			data_frame_type =
				PKT_CAPTURE_DATA_FRAME_TYPE_ICMPV4;
		else if (qdf_nbuf_data_is_dns_query(buf))
			data_frame_type =
				PKT_CAPTURE_DATA_FRAME_TYPE_DNSV4;
		else if (qdf_nbuf_data_is_dns_response(buf))
			data_frame_type =
				PKT_CAPTURE_DATA_FRAME_TYPE_DNSV4;
	} else if (qdf_nbuf_is_ipv6_pkt(buf)) {
		if (qdf_nbuf_is_ipv6_dhcp_pkt(buf))
			data_frame_type =
				PKT_CAPTURE_DATA_FRAME_TYPE_DHCPV6;
		else if (qdf_nbuf_is_icmpv6_pkt(buf))
			data_frame_type =
				PKT_CAPTURE_DATA_FRAME_TYPE_ICMPV6;
		/* need to add code for
		 * PKT_CAPTURE_DATA_FRAME_TYPE_DNSV6
		 */
	}
	/* Add code for
	 * PKT_CAPTURE_DATA_FRAME_TYPE_RTP
	 * PKT_CAPTURE_DATA_FRAME_TYPE_SIP
	 * PKT_CAPTURE_DATA_FRAME_QOS_NULL
	 */

	if (direction == IEEE80211_FC1_DIR_TODS) {
		if (data_frame_type & frame_filter->data_tx_frame_filter)
			return true;
		else
			return false;
	} else {
		if (data_frame_type & frame_filter->data_rx_frame_filter)
			return true;
		else
			return false;
	}
}

void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
			  u_int16_t vdev_id, uint32_t status)
{
	uint8_t bssid[QDF_MAC_ADDR_SIZE];
	struct wlan_objmgr_vdev *vdev;
	struct wlan_objmgr_psoc *obj_mgr_psoc;
	struct pkt_psoc_priv *psoc_priv;
	struct pkt_capture_frame_filter *frame_filter;

	vdev = pkt_capture_get_vdev();
	if (!vdev)
		return;

	obj_mgr_psoc = wlan_vdev_get_psoc(vdev);
	psoc_priv = pkt_capture_psoc_get_priv(obj_mgr_psoc);
	if (!psoc_priv) {
		pkt_capture_err("psoc_priv is NULL");
		return;
	}

	frame_filter = &psoc_priv->frame_filter;

	switch (event) {
	case WDI_EVENT_PKT_CAPTURE_TX_DATA:
	{
		struct dp_tx_desc_s *desc = log_data;

		if (!frame_filter->data_tx_frame_filter)
			return;

		if (frame_filter->data_tx_frame_filter &
		    PKT_CAPTURE_DATA_FRAME_TYPE_ALL) {
			pkt_capture_process_tx_data(soc, log_data,
						    vdev_id, status);
		} else if (pkt_capture_is_frame_filter_set(
			   desc->nbuf, frame_filter, IEEE80211_FC1_DIR_TODS)) {
			pkt_capture_process_tx_data(soc, log_data,
						    vdev_id, status);
		}

		break;
	}
@@ -525,19 +425,8 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
			return;
		}

		if (frame_filter->data_rx_frame_filter &
		    PKT_CAPTURE_DATA_FRAME_TYPE_ALL) {
			pkt_capture_msdu_process_pkts(bssid, log_data,
						      vdev_id, soc, status);
		} else if (pkt_capture_is_frame_filter_set(
			   nbuf, frame_filter, IEEE80211_FC1_DIR_FROMDS)) {
			pkt_capture_msdu_process_pkts(bssid, log_data,
						      vdev_id, soc, status);
		} else {
			if (status == RX_OFFLOAD_PKT)
				qdf_nbuf_free(nbuf);
		}

		pkt_capture_msdu_process_pkts(bssid, log_data, vdev_id, soc,
					      status);
		break;
	}

@@ -555,19 +444,8 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
			return;
		}

		if (frame_filter->data_rx_frame_filter &
		    PKT_CAPTURE_DATA_FRAME_TYPE_ALL) {
			pkt_capture_process_rx_data_no_peer(soc, vdev_id, bssid,
							    status, nbuf);
		} else if (pkt_capture_is_frame_filter_set(
			   nbuf, frame_filter, IEEE80211_FC1_DIR_FROMDS)) {
			pkt_capture_process_rx_data_no_peer(soc, vdev_id, bssid,
							    status, nbuf);
		} else {
			if (status == RX_OFFLOAD_PKT)
				qdf_nbuf_free(nbuf);
		}

		pkt_capture_process_rx_data_no_peer(soc, vdev_id, bssid, status,
						    nbuf);
		break;
	}

@@ -576,8 +454,6 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
		struct htt_tx_offload_deliver_ind_hdr_t *offload_deliver_msg;
		bool is_pkt_during_roam = false;
		uint32_t freq = 0;
		qdf_nbuf_t buf = log_data +
				sizeof(struct htt_tx_offload_deliver_ind_hdr_t);

		if (!frame_filter->data_tx_frame_filter)
			return;
@@ -595,17 +471,9 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
			vdev_id = offload_deliver_msg->vdev_id;
		}

		if (frame_filter->data_tx_frame_filter &
		    PKT_CAPTURE_DATA_FRAME_TYPE_ALL) {
		pkt_capture_offload_deliver_indication_handler(
						log_data,
						vdev_id, bssid, soc);
		} else if (pkt_capture_is_frame_filter_set(
			   buf, frame_filter, IEEE80211_FC1_DIR_TODS)) {
			pkt_capture_offload_deliver_indication_handler(
							log_data,
							vdev_id, bssid, soc);
		}
		break;
	}