xref: /freebsd/contrib/wpa/wpa_supplicant/nan_supplicant.h (revision 71e72c9e91c4b8007a4292e09669e8b549c29e97)
1 /*
2  * wpa_supplicant - NAN
3  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4  * Copyright (C) 2025 Intel Corporation
5  *
6  * This software may be distributed under the terms of the BSD license.
7  * See README for more details.
8  */
9 
10 #ifndef NAN_SUPPLICANT_H
11 #define NAN_SUPPLICANT_H
12 
13 /* NAN synchronization only */
14 #ifdef CONFIG_NAN
15 
16 int wpas_nan_init(struct wpa_supplicant *wpa_s);
17 void wpas_nan_deinit(struct wpa_supplicant *wpa_s);
18 int wpas_nan_start(struct wpa_supplicant *wpa_s);
19 int wpas_nan_set(struct wpa_supplicant *wpa_s, char *cmd);
20 int wpas_nan_update_conf(struct wpa_supplicant *wpa_s);
21 int wpas_nan_stop(struct wpa_supplicant *wpa_s);
22 void wpas_nan_flush(struct wpa_supplicant *wpa_s);
23 void wpas_nan_cluster_join(struct wpa_supplicant *wpa_s,
24 			   const u8 *cluster_id,
25 			   bool new_cluster);
26 void wpas_nan_next_dw(struct wpa_supplicant *wpa_s, u32 freq);
27 void wpas_nan_sched_update_done(struct wpa_supplicant *wpa_s,
28 				const union wpa_event_data *data);
29 void wpas_nan_ulw_update(struct wpa_supplicant *wpa_s,
30 			 const u8 *ulw, size_t ulw_len);
31 void wpas_nan_chan_evacuation(struct wpa_supplicant *wpa_s,
32 			      const struct nan_chan_evacuation_info *info);
33 int wpas_nan_sched_config_map(struct wpa_supplicant *wpa_s, const char *cmd);
34 int wpas_nan_ndp_request(struct wpa_supplicant *wpa_s, char *cmd);
35 void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
36 		     const struct ieee80211_mgmt *mgmt, size_t len);
37 int wpas_nan_ndp_response(struct wpa_supplicant *wpa_s, char *cmd);
38 int wpas_nan_ndp_terminate(struct wpa_supplicant *wpa_s, char *cmd);
39 int wpas_nan_peer_info(struct wpa_supplicant *wpa_s, const char *cmd,
40 		       char *reply, size_t reply_size);
41 int wpas_nan_status(struct wpa_supplicant *wpa_s, char *reply,
42 		    size_t reply_size);
43 int wpas_nan_bootstrap_request(struct wpa_supplicant *wpa_s, char *cmd);
44 int wpas_nan_bootstrap_reset(struct wpa_supplicant *wpa_s, char *cmd);
45 bool wpas_nan_is_peer_paired(struct wpa_supplicant *wpa_s, const u8 *peer_addr);
46 void wpas_nan_data_interface_removed(struct wpa_supplicant *wpa_s);
47 
48 int wpas_nan_pair(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
49 		  u8 auth_mode, int cipher, int handle, u8 peer_instance_id,
50 		  bool responder, const char *password);
51 int wpas_nan_pairing_start(struct wpa_supplicant *wpa_s, char *cmd);
52 int wpas_nan_pairing_abort(struct wpa_supplicant *wpa_s, const char *cmd);
53 int wpas_nan_pasn_auth_tx_status(struct wpa_supplicant *wpa_s, const u8 *data,
54 				 size_t data_len, bool acked);
55 int wpas_nan_pasn_auth_rx(struct wpa_supplicant *wpa_s,
56 			  const struct ieee80211_mgmt *mgmt, size_t len);
57 
58 #else /* CONFIG_NAN */
59 
wpas_nan_init(struct wpa_supplicant * wpa_s)60 static inline int wpas_nan_init(struct wpa_supplicant *wpa_s)
61 {
62 	return -1;
63 }
64 
wpas_nan_deinit(struct wpa_supplicant * wpa_s)65 static inline void wpas_nan_deinit(struct wpa_supplicant *wpa_s)
66 {}
67 
wpas_nan_start(struct wpa_supplicant * wpa_s)68 static inline int wpas_nan_start(struct wpa_supplicant *wpa_s)
69 {
70 	return -1;
71 }
72 
wpas_nan_set(struct wpa_supplicant * wpa_s,char * cmd)73 static inline int wpas_nan_set(struct wpa_supplicant *wpa_s, char *cmd)
74 {
75 	return -1;
76 }
77 
wpas_nan_update_conf(struct wpa_supplicant * wpa_s)78 static inline int wpas_nan_update_conf(struct wpa_supplicant *wpa_s)
79 {
80 	return -1;
81 }
82 
wpas_nan_stop(struct wpa_supplicant * wpa_s)83 static inline int wpas_nan_stop(struct wpa_supplicant *wpa_s)
84 {
85 	return -1;
86 }
87 
wpas_nan_flush(struct wpa_supplicant * wpa_s)88 static inline void wpas_nan_flush(struct wpa_supplicant *wpa_s)
89 {}
90 
wpas_nan_cluster_join(struct wpa_supplicant * wpa_s,const u8 * cluster_id,bool new_cluster)91 static inline void wpas_nan_cluster_join(struct wpa_supplicant *wpa_s,
92 					 const u8 *cluster_id,
93 					 bool new_cluster)
94 {}
95 
wpas_nan_next_dw(struct wpa_supplicant * wpa_s,u32 freq)96 static inline void wpas_nan_next_dw(struct wpa_supplicant *wpa_s, u32 freq)
97 {}
98 
wpas_nan_sched_update_done(struct wpa_supplicant * wpa_s,const union wpa_event_data * data)99 static inline void wpas_nan_sched_update_done(struct wpa_supplicant *wpa_s,
100 					      const union wpa_event_data *data)
101 {}
102 
wpas_nan_ulw_update(struct wpa_supplicant * wpa_s,const u8 * ulw,size_t ulw_len)103 static inline void wpas_nan_ulw_update(struct wpa_supplicant *wpa_s,
104 				       const u8 *ulw, size_t ulw_len)
105 {}
106 
wpas_nan_rx_naf(struct wpa_supplicant * wpa_s,const struct ieee80211_mgmt * mgmt,size_t len)107 static inline void wpas_nan_rx_naf(struct wpa_supplicant *wpa_s,
108 				   const struct ieee80211_mgmt *mgmt,
109 				   size_t len)
110 {}
111 
wpas_nan_is_peer_paired(struct wpa_supplicant * wpa_s,const u8 * peer_addr)112 static inline bool wpas_nan_is_peer_paired(struct wpa_supplicant *wpa_s,
113 					  const u8 *peer_addr)
114 {
115 	return false;
116 }
117 
118 static inline void
wpas_nan_chan_evacuation(struct wpa_supplicant * wpa_s,union wpa_event_data * data)119 wpas_nan_chan_evacuation(struct wpa_supplicant *wpa_s,
120 			 union wpa_event_data *data)
121 {}
122 
123 #endif /* CONFIG_NAN */
124 
125 struct nan_subscribe_params;
126 struct nan_publish_params;
127 enum nan_service_protocol_type;
128 
129 /* NAN sync and USD common */
130 #if defined(CONFIG_NAN_USD) || defined(CONFIG_NAN)
131 
132 int wpas_nan_de_init(struct wpa_supplicant *wpa_s);
133 void wpas_nan_de_deinit(struct wpa_supplicant *wpa_s);
134 void wpas_nan_de_rx_sdf(struct wpa_supplicant *wpa_s, const u8 *src,
135 			const u8 *a3, unsigned int freq,
136 			const u8 *buf, size_t len, int rssi);
137 void wpas_nan_de_flush(struct wpa_supplicant *wpa_s);
138 int wpas_nan_publish(struct wpa_supplicant *wpa_s, const char *service_name,
139 		     enum nan_service_protocol_type srv_proto_type,
140 		     const struct wpabuf *ssi,
141 		     struct nan_publish_params *params, bool p2p);
142 void wpas_nan_cancel_publish(struct wpa_supplicant *wpa_s, int publish_id);
143 int wpas_nan_update_publish(struct wpa_supplicant *wpa_s, int publish_id,
144 			    const struct wpabuf *ssi);
145 int wpas_nan_subscribe(struct wpa_supplicant *wpa_s,
146 		       const char *service_name,
147 		       enum nan_service_protocol_type srv_proto_type,
148 		       const struct wpabuf *ssi,
149 		       struct nan_subscribe_params *params, bool p2p);
150 void wpas_nan_cancel_subscribe(struct wpa_supplicant *wpa_s,
151 			       int subscribe_id);
152 int wpas_nan_transmit(struct wpa_supplicant *wpa_s, int handle,
153 		      const struct wpabuf *ssi, const struct wpabuf *elems,
154 		      const u8 *peer_addr, u8 req_instance_id, u32 *cookie);
155 int wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
156 		       const u8 *data, size_t data_len, int acked);
157 
158 #else /* CONFIG_NAN_USD || CONFIG_NAN */
159 
wpas_nan_de_init(struct wpa_supplicant * wpa_s)160 static inline int wpas_nan_de_init(struct wpa_supplicant *wpa_s)
161 {
162 	return 0;
163 }
164 
wpas_nan_de_deinit(struct wpa_supplicant * wpa_s)165 static inline void wpas_nan_de_deinit(struct wpa_supplicant *wpa_s)
166 {}
167 
168 static inline
wpas_nan_de_rx_sdf(struct wpa_supplicant * wpa_s,const u8 * src,const u8 * a3,unsigned int freq,const u8 * buf,size_t len,int rssi)169 void wpas_nan_de_rx_sdf(struct wpa_supplicant *wpa_s, const u8 *src,
170 			const u8 *a3, unsigned int freq,
171 			const u8 *buf, size_t len, int rssi)
172 {}
173 
wpas_nan_de_flush(struct wpa_supplicant * wpa_s)174 static inline void wpas_nan_de_flush(struct wpa_supplicant *wpa_s)
175 {}
176 
wpas_nan_tx_status(struct wpa_supplicant * wpa_s,const u8 * data,size_t data_len,u8 acked)177 static inline int wpas_nan_tx_status(struct wpa_supplicant *wpa_s,
178 				     const u8 *data, size_t data_len,
179 				     u8 acked)
180 {
181 	return -1;
182 }
183 
184 #endif /* CONFIG_NAN_USD || CONFIG_NAN */
185 
186 /* NAN USD only */
187 #ifdef CONFIG_NAN_USD
188 
189 void wpas_nan_usd_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
190 				       unsigned int freq,
191 				       unsigned int duration);
192 void wpas_nan_usd_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
193 					      unsigned int freq);
194 void wpas_nan_usd_tx_wait_expire(struct wpa_supplicant *wpa_s);
195 int * wpas_nan_usd_all_freqs(struct wpa_supplicant *wpa_s);
196 int wpas_nan_usd_unpause_publish(struct wpa_supplicant *wpa_s, int publish_id,
197 				 u8 peer_instance_id, const u8 *peer_addr);
198 int wpas_nan_usd_publish_stop_listen(struct wpa_supplicant *wpa_s,
199 				     int publish_id);
200 int wpas_nan_usd_subscribe_stop_listen(struct wpa_supplicant *wpa_s,
201 				       int subscribe_id);
202 void wpas_nan_usd_state_change_notif(struct wpa_supplicant *wpa_s);
203 
204 #else /* CONFIG_NAN_USD */
205 
206 static inline
wpas_nan_usd_remain_on_channel_cb(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int duration)207 void wpas_nan_usd_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
208 				       unsigned int freq,
209 				       unsigned int duration)
210 {}
211 
212 static inline
wpas_nan_usd_cancel_remain_on_channel_cb(struct wpa_supplicant * wpa_s,unsigned int freq)213 void wpas_nan_usd_cancel_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
214 					      unsigned int freq)
215 {}
216 
wpas_nan_usd_tx_wait_expire(struct wpa_supplicant * wpa_s)217 static inline void wpas_nan_usd_tx_wait_expire(struct wpa_supplicant *wpa_s)
218 {}
219 
220 static inline
wpas_nan_usd_all_freqs(struct wpa_supplicant * wpa_s)221 int * wpas_nan_usd_all_freqs(struct wpa_supplicant *wpa_s)
222 {
223 	return NULL;
224 }
225 
226 static inline
wpas_nan_usd_unpause_publish(struct wpa_supplicant * wpa_s,int publish_id,u8 peer_instance_id,const u8 * peer_addr)227 int wpas_nan_usd_unpause_publish(struct wpa_supplicant *wpa_s, int publish_id,
228 				 u8 peer_instance_id, const u8 *peer_addr)
229 {
230 	return -1;
231 }
232 
233 static inline
wpas_nan_usd_publish_stop_listen(struct wpa_supplicant * wpa_s,int publish_id)234 int wpas_nan_usd_publish_stop_listen(struct wpa_supplicant *wpa_s,
235 				     int publish_id)
236 {
237 	return -1;
238 }
239 
240 static inline
wpas_nan_usd_subscribe_stop_listen(struct wpa_supplicant * wpa_s,int subscribe_id)241 int wpas_nan_usd_subscribe_stop_listen(struct wpa_supplicant *wpa_s,
242 				       int subscribe_id)
243 {
244 	return -1;
245 }
246 
wpas_nan_usd_state_change_notif(struct wpa_supplicant * wpa_s)247 static inline void wpas_nan_usd_state_change_notif(struct wpa_supplicant *wpa_s)
248 {}
249 
250 #endif /* CONFIG_NAN_USD */
251 
252 #endif /* NAN_SUPPLICANT_H */
253