1 /*
2  * Copyright (c) 2011, 2014-2017, 2019 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef _OL_RX_FWD_H_
21 #define _OL_RX_FWD_H_
22 
23 #include <qdf_nbuf.h>           /* qdf_nbuf_t, etc. */
24 
25 #include <ol_txrx_api.h>        /* ol_txrx_peer_t, etc. */
26 
27 /**
28  * ol_rx_fwd_check() - Check if rx frames should be transmitted over WLAN.
29  * @vdev: which virtual device the frames were addressed to
30  * @peer: which peer the rx frames belong to
31  * @tid: which TID within the peer the rx frames belong to
32  * @msdu_list: NULL-terminated list of MSDUs to perform the rx->tx
33  *      forwarding check on
34  *
35  * Check if rx frames should be transmitted back over WLAN, instead of
36  * or in addition to delivering the rx frames to the OS.
37  * Rx frames will be forwarded to the transmit path under the following
38  * conditions:
39  * 1.  If the destination is a STA associated to the same virtual device
40  *     within this physical device, the rx frame will be forwarded to the
41  *     tx path rather than being sent to the OS.  If the destination is a
42  *     STA associated to a different virtual device within this physical
43  *     device, then the rx frame will optionally be forwarded to the tx path.
44  * 2.  If the frame is received by an AP, but the destination is for another
45  *     AP that the current AP is associated with for WDS forwarding, the
46  *     intermediate AP will forward the rx frame to the tx path to transmit
47  *     to send to the destination AP, rather than sending it to the OS.
48  * 3.  If the AP receives a multicast frame, it will retransmit the frame
49  *     within the BSS, in addition to sending the frame to the OS.
50  *
51  */
52 void
53 ol_rx_fwd_check(struct ol_txrx_vdev_t *vdev,
54 		struct ol_txrx_peer_t *peer,
55 		unsigned int tid, qdf_nbuf_t msdu_list);
56 
57 /**
58  * ol_get_intra_bss_fwd_pkts_count() - to get the total tx and rx packets
59  *   that has been forwarded from txrx layer without going to upper layers.
60  * @soc_hdl: Datapath soc handle
61  * @vdev_id: vdev id
62  * @fwd_tx_packets: pointer to forwarded tx packets count parameter
63  * @fwd_rx_packets: pointer to forwarded rx packets count parameter
64  *
65  * Return: status -> A_OK - success, A_ERROR - failure
66  */
67 A_STATUS
68 ol_get_intra_bss_fwd_pkts_count(struct cdp_soc_t *soc_hdl,
69 				uint8_t vdev_id,
70 				uint64_t *fwd_tx_packets,
71 				uint64_t *fwd_rx_packets);
72 
73 #endif /* _OL_RX_FWD_H_ */
74