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

Commit 1d3fee30 authored by Surabhi Vishnoi's avatar Surabhi Vishnoi Committed by Madan Koyyalamudi
Browse files

qcacld-3.0: Add support for beacon filters in packet capture mode

Add support to send beacon received from firmware on STA interface
to mon interface based on management rx filters set by user in
vendor command.

Change-Id: I186ab0d697da831894854d7680265e82dd3adcef
CRs-Fixed: 3073478
parent 37540338
Loading
Loading
Loading
Loading
+46 −2
Original line number Diff line number Diff line
@@ -459,6 +459,51 @@ pkt_capture_mgmt_tx_completion(struct wlan_objmgr_pdev *pdev,
		qdf_nbuf_free(wbuf);
}

/**
 * pkt_capture_is_beacon_forward_enable() - API to check whether particular
 * beacon needs to be forwarded on mon interface based on vendor command
 * @vdev: vdev object
 * @wbuf: netbuf
 *
 * Return: bool
 */
static bool
pkt_capture_is_beacon_forward_enable(struct wlan_objmgr_vdev *vdev,
				     qdf_nbuf_t wbuf)
{
	struct pkt_capture_vdev_priv *vdev_priv;
	struct qdf_mac_addr connected_bssid = {0};
	tpSirMacMgmtHdr mac_hdr;
	bool my_beacon = false;

	vdev_priv = pkt_capture_vdev_get_priv(vdev);
	if (!vdev_priv) {
		pkt_capture_err("packet capture vdev priv is NULL");
		return false;
	}

	if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
	    PKT_CAPTURE_MGMT_CONNECT_NO_BEACON)
		return false;

	mac_hdr = (tpSirMacMgmtHdr)(qdf_nbuf_data(wbuf));
	wlan_vdev_get_bss_peer_mac(vdev, &connected_bssid);

	if (qdf_is_macaddr_equal((struct qdf_mac_addr *)mac_hdr->bssId,
				 &connected_bssid))
		my_beacon = true;

	if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
	    PKT_CAPTURE_MGMT_CONNECT_BEACON && !my_beacon)
		return false;

	if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
	    PKT_CAPTURE_MGMT_CONNECT_SCAN_BEACON && my_beacon)
		return false;

	return true;
}

/**
 * process_pktcapture_mgmt_rx_data_cb() -  process management rx packets
 * @rx_params: mgmt rx event params
@@ -508,8 +553,7 @@ pkt_capture_mgmt_rx_data_cb(struct wlan_objmgr_psoc *psoc,

	if (pfc->type == SIR_MAC_MGMT_FRAME) {
		if (pfc->subType == SIR_MAC_MGMT_BEACON) {
			if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
			    PKT_CAPTURE_MGMT_CONNECT_NO_BEACON)
			if (!pkt_capture_is_beacon_forward_enable(vdev, wbuf))
				goto exit;
		} else {
			if (!((vdev_priv->frame_filter.mgmt_rx_frame_filter &
+3 −3
Original line number Diff line number Diff line
@@ -51,9 +51,9 @@ enum pkt_capture_mode {
enum pkt_capture_config {
	PACKET_CAPTURE_CONFIG_TRIGGER_ENABLE = BIT(0),
	PACKET_CAPTURE_CONFIG_QOS_ENABLE = BIT(1),
	PACKET_CAPTURE_CONFIG_NO_BEACON_ENABLE = BIT(2),
	PACKET_CAPTURE_CONFIG_BEACON_ENABLE = BIT(3),
	PACKET_CAPTURE_CONFIG_OFF_CHANNEL_BEACON_ENABLE = BIT(4),
	PACKET_CAPTURE_CONFIG_BEACON_ENABLE = BIT(2),
	PACKET_CAPTURE_CONFIG_OFF_CHANNEL_BEACON_ENABLE = BIT(3),
	PACKET_CAPTURE_CONFIG_NO_BEACON_ENABLE = BIT(4),
};

/**