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