1 /*
2  * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 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 /**
21  * DOC: wlan_tdls_ct.h
22  *
23  * TDLS connection tracker declarations
24  */
25 
26 #ifndef _WLAN_TDLS_CT_H_
27 #define _WLAN_TDLS_CT_H_
28 
29  /*
30   * Before UpdateTimer expires, we want to timeout discovery response
31   * should not be more than 2000.
32   */
33 #define TDLS_DISCOVERY_TIMEOUT_ERE_UPDATE     1000
34 
35 #define TDLS_PREFERRED_OFF_CHANNEL_NUM_MIN      1
36 #define TDLS_PREFERRED_OFF_CHANNEL_NUM_MAX      165
37 #define TDLS_PREFERRED_OFF_CHANNEL_NUM_DEFAULT  36
38 
39 /**
40  * tdls_implicit_enable() - enable implicit tdls triggering
41  * @tdls_vdev: TDLS vdev
42  *
43  * Return: Void
44  */
45 void tdls_implicit_enable(struct tdls_vdev_priv_obj *tdls_vdev);
46 
47 /**
48  * tdls_update_rx_pkt_cnt() - Update rx packet count
49  * @vdev: vdev object manager
50  * @mac_addr: mac address of the data
51  * @dest_mac_addr: dest mac address of the data
52  *
53  * Increase the rx packet count, if the sender is not bssid and the packet is
54  * not broadcast and multicast packet
55  *
56  * This sampling information will be used in TDLS connection tracker
57  *
58  * This function expected to be called in an atomic context so blocking APIs
59  * not allowed
60  *
61  * Return: None
62  */
63 void tdls_update_rx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
64 				     struct qdf_mac_addr *mac_addr,
65 				     struct qdf_mac_addr *dest_mac_addr);
66 
67 /**
68  * tdls_update_tx_pkt_cnt() - update tx packet
69  * @vdev: vdev object
70  * @mac_addr: mac address of the data
71  *
72  * Increase the tx packet count, if the sender is not bssid and the packet is
73  * not broadcast and multicast packet
74  *
75  * This sampling information will be used in TDLS connection tracker
76  *
77  * This function expected to be called in an atomic context so blocking APIs
78  * not allowed
79  *
80  * Return: None
81  */
82 void tdls_update_tx_pkt_cnt(struct wlan_objmgr_vdev *vdev,
83 				     struct qdf_mac_addr *mac_addr);
84 
85 /**
86  * tdls_implicit_send_discovery_request() - send discovery request
87  * @tdls_vdev_obj: tdls vdev object
88  *
89  * Return: None
90  */
91 void tdls_implicit_send_discovery_request(
92 				struct tdls_vdev_priv_obj *tdls_vdev_obj);
93 
94 /**
95  * tdls_recv_discovery_resp() - handling of tdls discovery response
96  * @tdls_vdev: tdls vdev object
97  * @mac: mac address of peer from which the response was received
98  *
99  * Return: 0 for success or negative errno otherwise
100  */
101 int tdls_recv_discovery_resp(struct tdls_vdev_priv_obj *tdls_vdev,
102 				   const uint8_t *mac);
103 
104 /**
105  * tdls_indicate_teardown() - indicate teardown to upper layer
106  * @tdls_vdev: tdls vdev object
107  * @curr_peer: teardown peer
108  * @reason: teardown reason
109  *
110  * Return: Void
111  */
112 void tdls_indicate_teardown(struct tdls_vdev_priv_obj *tdls_vdev,
113 				struct tdls_peer *curr_peer,
114 				uint16_t reason);
115 
116 /**
117  * tdls_ct_handler() - TDLS connection tracker handler
118  * @user_data: user data from timer
119  *
120  * tdls connection tracker timer starts, when the STA connected to AP
121  * and it's scan the traffic between two STA peers and make TDLS
122  * connection and teardown, based on the traffic threshold
123  *
124  * Return: None
125  */
126 void tdls_ct_handler(void *user_data);
127 
128 /**
129  * tdls_ct_idle_handler() - Check tdls idle traffic
130  * @user_data: data from tdls idle timer
131  *
132  * Function to check the tdls idle traffic and make a decision about
133  * tdls teardown
134  *
135  * Return: None
136  */
137 void tdls_ct_idle_handler(void *user_data);
138 
139 /**
140  * tdls_discovery_timeout_peer_cb() - tdls discovery timeout callback
141  * @user_data: tdls vdev
142  *
143  * Return: None
144  */
145 void tdls_discovery_timeout_peer_cb(void *user_data);
146 
147 /**
148  * tdls_implicit_disable() - disable implicit tdls triggering
149  * @tdls_vdev: TDLS vdev context
150  *
151  * Return: Void
152  */
153 void tdls_implicit_disable(struct tdls_vdev_priv_obj *tdls_vdev);
154 
155 /**
156  * tdls_is_vdev_authenticated() - check the vdev authentication state
157  * @vdev: vdev object
158  *
159  * Return: true or false
160  */
161 bool tdls_is_vdev_authenticated(struct wlan_objmgr_vdev *vdev);
162 
163 /**
164  * tdls_teardown_connections() - teardown and delete all the tdls peers
165  * @tdls_teardown: tdls teardown struct
166  *
167  * Return: true or false
168  */
169 void tdls_teardown_connections(struct tdls_link_teardown *tdls_teardown);
170 
171 /**
172  * tdls_disable_offchan_and_teardown_links - Disable offchannel
173  * and teardown TDLS links
174  * @vdev: vdev object
175  *
176  * Return: None
177  */
178 void tdls_disable_offchan_and_teardown_links(
179 				struct wlan_objmgr_vdev *vdev);
180 
181 /**
182  * tdls_delete_all_tdls_peers() - send request to delete tdls peers
183  * @vdev: vdev object
184  * @tdls_soc: tdls soc object
185  *
186  * This function sends request to lim to delete tdls peers
187  *
188  * Return: QDF_STATUS
189  */
190 QDF_STATUS tdls_delete_all_tdls_peers(struct wlan_objmgr_vdev *vdev,
191 					  struct tdls_soc_priv_obj *tdls_soc);
192 
193 /**
194  * tdls_set_tdls_offchannel() - set tdls off-channel number
195  * @tdls_soc: tdls soc object
196  * @offchannel: tdls off-channel number
197  *
198  * This function sets tdls off-channel number
199  *
200  * Return: 0 on success; negative errno otherwise
201  */
202 int tdls_set_tdls_offchannel(struct tdls_soc_priv_obj *tdls_soc,
203 			     int offchannel);
204 
205 /**
206  * tdls_set_tdls_offchannelmode() - set tdls off-channel mode
207  * @vdev: vdev object
208  * @offchanmode: tdls off-channel mode
209  *
210  * This function sets tdls off-channel mode
211  *
212  * Return: 0 on success; negative errno otherwise
213  */
214 
215 int tdls_set_tdls_offchannelmode(struct wlan_objmgr_vdev *vdev,
216 				 int offchanmode);
217 
218 /**
219  * tdls_set_tdls_secoffchanneloffset() - set secondary tdls off-channel offset
220  * @tdls_soc: tdls soc object
221  * @offchanoffset: tdls off-channel offset
222  *
223  * This function sets secondary tdls off-channel offset
224  *
225  * Return: 0 on success; negative errno otherwise
226  */
227 
228 int tdls_set_tdls_secoffchanneloffset(struct tdls_soc_priv_obj *tdls_soc,
229 				      int offchanoffset);
230 
231 #endif
232