1 /*
2 * wpa_supplicant - Internal driver interface wrappers
3 * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi>
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9 #ifndef DRIVER_I_H
10 #define DRIVER_I_H
11
12 #include "common/nan_de.h"
13 #include "drivers/driver.h"
14
15 /* driver_ops */
wpa_drv_init(struct wpa_supplicant * wpa_s,const char * ifname)16 static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
17 const char *ifname)
18 {
19 if (wpa_s->driver->init2) {
20 enum wpa_p2p_mode p2p_mode = WPA_P2P_MODE_WFD_R1;
21
22 #ifdef CONFIG_P2P
23 p2p_mode = wpa_s->p2p_mode;
24 #endif /* CONFIG_P2P */
25
26 return wpa_s->driver->init2(wpa_s, ifname,
27 wpa_s->global_drv_priv,
28 p2p_mode);
29 }
30 if (wpa_s->driver->init) {
31 return wpa_s->driver->init(wpa_s, ifname);
32 }
33 return NULL;
34 }
35
wpa_drv_deinit(struct wpa_supplicant * wpa_s)36 static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
37 {
38 if (wpa_s->driver->deinit)
39 wpa_s->driver->deinit(wpa_s->drv_priv);
40 }
41
wpa_drv_set_param(struct wpa_supplicant * wpa_s,const char * param)42 static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
43 const char *param)
44 {
45 if (wpa_s->driver->set_param)
46 return wpa_s->driver->set_param(wpa_s->drv_priv, param);
47 return 0;
48 }
49
wpa_drv_set_countermeasures(struct wpa_supplicant * wpa_s,int enabled)50 static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
51 int enabled)
52 {
53 if (wpa_s->driver->set_countermeasures) {
54 return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
55 enabled);
56 }
57 return -1;
58 }
59
wpa_drv_authenticate(struct wpa_supplicant * wpa_s,struct wpa_driver_auth_params * params)60 static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
61 struct wpa_driver_auth_params *params)
62 {
63 if (wpa_s->driver->authenticate)
64 return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
65 return -1;
66 }
67
wpa_drv_associate(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params)68 static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
69 struct wpa_driver_associate_params *params)
70 {
71 if (wpa_s->driver->associate) {
72 if (params)
73 params->freq.link_id = -1;
74
75 return wpa_s->driver->associate(wpa_s->drv_priv, params);
76 }
77 return -1;
78 }
79
wpa_drv_init_mesh(struct wpa_supplicant * wpa_s)80 static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s)
81 {
82 if (wpa_s->driver->init_mesh)
83 return wpa_s->driver->init_mesh(wpa_s->drv_priv);
84 return -1;
85 }
86
wpa_drv_join_mesh(struct wpa_supplicant * wpa_s,struct wpa_driver_mesh_join_params * params)87 static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s,
88 struct wpa_driver_mesh_join_params *params)
89 {
90 if (wpa_s->driver->join_mesh)
91 return wpa_s->driver->join_mesh(wpa_s->drv_priv, params);
92 return -1;
93 }
94
wpa_drv_leave_mesh(struct wpa_supplicant * wpa_s)95 static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s)
96 {
97 if (wpa_s->driver->leave_mesh)
98 return wpa_s->driver->leave_mesh(wpa_s->drv_priv);
99 return -1;
100 }
101
wpa_drv_mesh_link_probe(struct wpa_supplicant * wpa_s,const u8 * addr,const u8 * eth,size_t len)102 static inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s,
103 const u8 *addr,
104 const u8 *eth, size_t len)
105 {
106 if (wpa_s->driver->probe_mesh_link)
107 return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr,
108 eth, len);
109 return -1;
110 }
111
wpa_drv_scan(struct wpa_supplicant * wpa_s,struct wpa_driver_scan_params * params)112 static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
113 struct wpa_driver_scan_params *params)
114 {
115 params->link_id = -1;
116
117 #ifdef CONFIG_TESTING_OPTIONS
118 if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER)
119 return -EBUSY;
120 #endif /* CONFIG_TESTING_OPTIONS */
121 if (wpa_s->driver->scan2)
122 return wpa_s->driver->scan2(wpa_s->drv_priv, params);
123 return -1;
124 }
125
wpa_drv_sched_scan(struct wpa_supplicant * wpa_s,struct wpa_driver_scan_params * params)126 static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
127 struct wpa_driver_scan_params *params)
128 {
129 if (wpa_s->driver->sched_scan)
130 return wpa_s->driver->sched_scan(wpa_s->drv_priv, params);
131 return -1;
132 }
133
wpa_drv_stop_sched_scan(struct wpa_supplicant * wpa_s)134 static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s)
135 {
136 if (wpa_s->driver->stop_sched_scan)
137 return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv);
138 return -1;
139 }
140
141 struct wpa_scan_results *
142 wpa_drv_get_scan_results(struct wpa_supplicant *wpa_s, const u8 *bssid);
143
wpa_drv_get_bssid(struct wpa_supplicant * wpa_s,u8 * bssid)144 static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
145 {
146 if (wpa_s->driver->get_bssid) {
147 return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
148 }
149 return -1;
150 }
151
wpa_drv_get_ssid(struct wpa_supplicant * wpa_s,u8 * ssid)152 static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
153 {
154 if (wpa_s->driver->get_ssid) {
155 return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
156 }
157 return -1;
158 }
159
wpa_drv_set_key(struct wpa_supplicant * wpa_s,int link_id,enum wpa_alg alg,const u8 * addr,int key_idx,int set_tx,const u8 * seq,size_t seq_len,const u8 * key,size_t key_len,enum key_flag key_flag)160 static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, int link_id,
161 enum wpa_alg alg, const u8 *addr,
162 int key_idx, int set_tx,
163 const u8 *seq, size_t seq_len,
164 const u8 *key, size_t key_len,
165 enum key_flag key_flag)
166 {
167 struct wpa_driver_set_key_params params;
168
169 os_memset(¶ms, 0, sizeof(params));
170 params.ifname = wpa_s->ifname;
171 params.alg = alg;
172 params.addr = addr;
173 params.key_idx = key_idx;
174 params.set_tx = set_tx;
175 params.seq = seq;
176 params.seq_len = seq_len;
177 params.key = key;
178 params.key_len = key_len;
179 params.key_flag = key_flag;
180 params.link_id = link_id;
181
182 if (alg != WPA_ALG_NONE) {
183 /* keyidx = 1 can be either a broadcast or--with
184 * Extended Key ID--a unicast key. Use bit 15 for
185 * the pairwise keyidx 1 which is hopefully high enough
186 * to not clash with future extensions.
187 */
188 if (key_idx == 1 && (key_flag & KEY_FLAG_PAIRWISE))
189 wpa_s->keys_cleared &= ~BIT(15);
190 else if (key_idx >= 0 && key_idx <= 5)
191 wpa_s->keys_cleared &= ~BIT(key_idx);
192 else
193 wpa_s->keys_cleared = 0;
194 }
195 if (wpa_s->driver->set_key) {
196 return wpa_s->driver->set_key(wpa_s->drv_priv, ¶ms);
197 }
198 return -1;
199 }
200
wpa_drv_get_seqnum(struct wpa_supplicant * wpa_s,const u8 * addr,int idx,u8 * seq)201 static inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s,
202 const u8 *addr, int idx, u8 *seq)
203 {
204 if (wpa_s->driver->get_seqnum)
205 return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv,
206 addr, idx, -1, seq);
207 return -1;
208 }
209
wpa_drv_sta_deauth(struct wpa_supplicant * wpa_s,const u8 * addr,u16 reason_code)210 static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s,
211 const u8 *addr, u16 reason_code)
212 {
213 if (wpa_s->driver->sta_deauth) {
214 return wpa_s->driver->sta_deauth(wpa_s->drv_priv,
215 wpa_s->own_addr, addr,
216 reason_code, -1);
217 }
218 return -1;
219 }
220
wpa_drv_deauthenticate(struct wpa_supplicant * wpa_s,const u8 * addr,u16 reason_code)221 static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
222 const u8 *addr, u16 reason_code)
223 {
224 if (wpa_s->driver->deauthenticate) {
225 return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
226 reason_code);
227 }
228 return -1;
229 }
230
wpa_drv_add_pmkid(struct wpa_supplicant * wpa_s,struct wpa_pmkid_params * params)231 static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
232 struct wpa_pmkid_params *params)
233 {
234 if (wpa_s->driver->add_pmkid) {
235 return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params);
236 }
237 return -1;
238 }
239
wpa_drv_remove_pmkid(struct wpa_supplicant * wpa_s,struct wpa_pmkid_params * params)240 static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
241 struct wpa_pmkid_params *params)
242 {
243 if (wpa_s->driver->remove_pmkid) {
244 return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params);
245 }
246 return -1;
247 }
248
wpa_drv_flush_pmkid(struct wpa_supplicant * wpa_s)249 static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
250 {
251 if (wpa_s->driver->flush_pmkid) {
252 return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
253 }
254 return -1;
255 }
256
wpa_drv_get_capa(struct wpa_supplicant * wpa_s,struct wpa_driver_capa * capa)257 static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
258 struct wpa_driver_capa *capa)
259 {
260 if (wpa_s->driver->get_capa) {
261 return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
262 }
263 return -1;
264 }
265
wpa_drv_poll(struct wpa_supplicant * wpa_s)266 static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
267 {
268 if (wpa_s->driver->poll) {
269 wpa_s->driver->poll(wpa_s->drv_priv);
270 }
271 }
272
wpa_drv_get_ifname(struct wpa_supplicant * wpa_s)273 static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
274 {
275 if (wpa_s->driver->get_ifname) {
276 return wpa_s->driver->get_ifname(wpa_s->drv_priv);
277 }
278 return NULL;
279 }
280
281 static inline const char *
wpa_driver_get_radio_name(struct wpa_supplicant * wpa_s)282 wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s)
283 {
284 if (wpa_s->driver->get_radio_name)
285 return wpa_s->driver->get_radio_name(wpa_s->drv_priv);
286 return NULL;
287 }
288
wpa_drv_get_mac_addr(struct wpa_supplicant * wpa_s)289 static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
290 {
291 if (wpa_s->driver->get_mac_addr) {
292 return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
293 }
294 return NULL;
295 }
296
wpa_drv_set_operstate(struct wpa_supplicant * wpa_s,int state)297 static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
298 int state)
299 {
300 if (wpa_s->driver->set_operstate)
301 return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
302 return 0;
303 }
304
wpa_drv_mlme_setprotection(struct wpa_supplicant * wpa_s,const u8 * addr,int protect_type,int key_type)305 static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
306 const u8 *addr, int protect_type,
307 int key_type)
308 {
309 if (wpa_s->driver->mlme_setprotection)
310 return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
311 protect_type,
312 key_type);
313 return 0;
314 }
315
316 static inline struct hostapd_hw_modes *
wpa_drv_get_hw_feature_data(struct wpa_supplicant * wpa_s,u16 * num_modes,u16 * flags,u8 * dfs_domain,char * alpha2,size_t alpha2_len)317 wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
318 u16 *flags, u8 *dfs_domain,
319 char *alpha2, size_t alpha2_len)
320 {
321 if (wpa_s->driver->get_hw_feature_data)
322 return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
323 num_modes, flags,
324 dfs_domain,
325 alpha2, alpha2_len);
326 return NULL;
327 }
328
wpa_drv_set_country(struct wpa_supplicant * wpa_s,const char * alpha2)329 static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
330 const char *alpha2)
331 {
332 if (wpa_s->driver->set_country)
333 return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
334 return 0;
335 }
336
wpa_drv_send_mlme(struct wpa_supplicant * wpa_s,const u8 * data,size_t data_len,int noack,unsigned int freq,unsigned int wait)337 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
338 const u8 *data, size_t data_len, int noack,
339 unsigned int freq, unsigned int wait)
340 {
341 if (wpa_s->driver->send_mlme)
342 return wpa_s->driver->send_mlme(wpa_s->drv_priv,
343 data, data_len, noack,
344 freq, NULL, 0, 0, wait, -1);
345 return -1;
346 }
347
wpa_drv_update_ft_ies(struct wpa_supplicant * wpa_s,const u8 * md,const u8 * ies,size_t ies_len)348 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
349 const u8 *md,
350 const u8 *ies, size_t ies_len)
351 {
352 if (wpa_s->driver->update_ft_ies)
353 return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
354 ies, ies_len);
355 return -1;
356 }
357
wpa_drv_sta_add(struct wpa_supplicant * wpa_s,struct hostapd_sta_add_params * params)358 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
359 struct hostapd_sta_add_params *params)
360 {
361 if (wpa_s->driver->sta_add) {
362 /* Set link_id to -1 for non-TDLS peers */
363 if (!(params->flags & WPA_STA_TDLS_PEER))
364 params->mld_link_id = -1;
365 return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
366 }
367 return -1;
368 }
369
wpa_drv_sta_remove(struct wpa_supplicant * wpa_s,const u8 * addr)370 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
371 const u8 *addr)
372 {
373 if (wpa_s->driver->sta_remove)
374 return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
375 return -1;
376 }
377
wpa_drv_tx_control_port(struct wpa_supplicant * wpa_s,const u8 * dest,u16 proto,const u8 * buf,size_t len,int no_encrypt)378 static inline int wpa_drv_tx_control_port(struct wpa_supplicant *wpa_s,
379 const u8 *dest, u16 proto,
380 const u8 *buf, size_t len,
381 int no_encrypt)
382 {
383 if (!wpa_s->driver->tx_control_port)
384 return -1;
385 return wpa_s->driver->tx_control_port(wpa_s->drv_priv, dest, proto,
386 buf, len, no_encrypt, -1);
387 }
388
wpa_drv_hapd_send_eapol(struct wpa_supplicant * wpa_s,const u8 * addr,const u8 * data,size_t data_len,int encrypt,const u8 * own_addr,u32 flags)389 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
390 const u8 *addr, const u8 *data,
391 size_t data_len, int encrypt,
392 const u8 *own_addr, u32 flags)
393 {
394 if (wpa_s->driver->hapd_send_eapol)
395 return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
396 data, data_len, encrypt,
397 own_addr, flags, -1);
398 return -1;
399 }
400
wpa_drv_sta_set_flags(struct wpa_supplicant * wpa_s,const u8 * addr,int total_flags,int flags_or,int flags_and)401 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
402 const u8 *addr, int total_flags,
403 int flags_or, int flags_and)
404 {
405 if (wpa_s->driver->sta_set_flags)
406 return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
407 total_flags, flags_or,
408 flags_and);
409 return -1;
410 }
411
wpa_drv_set_supp_port(struct wpa_supplicant * wpa_s,int authorized)412 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
413 int authorized)
414 {
415 if (wpa_s->driver->set_supp_port) {
416 return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
417 authorized);
418 }
419 return 0;
420 }
421
422 int wpa_drv_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
423 unsigned int wait, const u8 *dst, const u8 *src,
424 const u8 *bssid, const u8 *data, size_t data_len,
425 int no_cck);
426
wpa_drv_send_action_cancel_wait(struct wpa_supplicant * wpa_s)427 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
428 {
429 if (wpa_s->driver->send_action_cancel_wait)
430 wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
431 }
432
wpa_drv_set_freq(struct wpa_supplicant * wpa_s,struct hostapd_freq_params * freq)433 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
434 struct hostapd_freq_params *freq)
435 {
436 if (wpa_s->driver->set_freq)
437 return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
438 return -1;
439 }
440
wpa_drv_if_add(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname,const u8 * addr,void * bss_ctx,char * force_ifname,u8 * if_addr,const char * bridge)441 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
442 enum wpa_driver_if_type type,
443 const char *ifname, const u8 *addr,
444 void *bss_ctx, char *force_ifname,
445 u8 *if_addr, const char *bridge)
446 {
447 if (wpa_s->driver->if_add)
448 return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
449 addr, bss_ctx, NULL, force_ifname,
450 if_addr, bridge, 0, 0);
451 return -1;
452 }
453
wpa_drv_if_remove(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname)454 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
455 enum wpa_driver_if_type type,
456 const char *ifname)
457 {
458 if (wpa_s->driver->if_remove)
459 return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
460 return -1;
461 }
462
wpa_drv_remain_on_channel(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int duration,const u8 * filter_addr)463 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
464 unsigned int freq,
465 unsigned int duration,
466 const u8 *filter_addr)
467 {
468 if (wpa_s->driver->remain_on_channel)
469 return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
470 duration, filter_addr);
471 return -1;
472 }
473
wpa_drv_cancel_remain_on_channel(struct wpa_supplicant * wpa_s)474 static inline int wpa_drv_cancel_remain_on_channel(
475 struct wpa_supplicant *wpa_s)
476 {
477 if (wpa_s->driver->cancel_remain_on_channel)
478 return wpa_s->driver->cancel_remain_on_channel(
479 wpa_s->drv_priv);
480 return -1;
481 }
482
wpa_drv_probe_req_report(struct wpa_supplicant * wpa_s,int report)483 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
484 int report)
485 {
486 if (wpa_s->driver->probe_req_report)
487 return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
488 report);
489 return -1;
490 }
491
wpa_drv_deinit_ap(struct wpa_supplicant * wpa_s)492 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
493 {
494 if (wpa_s->driver->deinit_ap)
495 return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
496 return 0;
497 }
498
wpa_drv_deinit_p2p_cli(struct wpa_supplicant * wpa_s)499 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
500 {
501 if (wpa_s->driver->deinit_p2p_cli)
502 return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
503 return 0;
504 }
505
wpa_drv_suspend(struct wpa_supplicant * wpa_s)506 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
507 {
508 if (wpa_s->driver->suspend)
509 wpa_s->driver->suspend(wpa_s->drv_priv);
510 }
511
wpa_drv_resume(struct wpa_supplicant * wpa_s)512 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
513 {
514 if (wpa_s->driver->resume)
515 wpa_s->driver->resume(wpa_s->drv_priv);
516 }
517
wpa_drv_signal_monitor(struct wpa_supplicant * wpa_s,int threshold,int hysteresis)518 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
519 int threshold, int hysteresis)
520 {
521 if (wpa_s->driver->signal_monitor)
522 return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
523 threshold, hysteresis);
524 return -1;
525 }
526
527 int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
528 struct wpa_signal_info *si);
529
wpa_drv_mlo_signal_poll(struct wpa_supplicant * wpa_s,struct wpa_mlo_signal_info * mlo_si)530 static inline int wpa_drv_mlo_signal_poll(struct wpa_supplicant *wpa_s,
531 struct wpa_mlo_signal_info *mlo_si)
532 {
533 if (wpa_s->driver->mlo_signal_poll)
534 return wpa_s->driver->mlo_signal_poll(wpa_s->drv_priv, mlo_si);
535 return -1;
536 }
537
538 static inline int
wpa_drv_setup_link_reconfig(struct wpa_supplicant * wpa_s,struct wpa_mlo_reconfig_info * info)539 wpa_drv_setup_link_reconfig(struct wpa_supplicant *wpa_s,
540 struct wpa_mlo_reconfig_info *info)
541 {
542 if (wpa_s->driver->setup_link_reconfig)
543 return wpa_s->driver->setup_link_reconfig(wpa_s->drv_priv,
544 info);
545 return -1;
546 }
547
wpa_drv_channel_info(struct wpa_supplicant * wpa_s,struct wpa_channel_info * ci)548 static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s,
549 struct wpa_channel_info *ci)
550 {
551 if (wpa_s->driver->channel_info)
552 return wpa_s->driver->channel_info(wpa_s->drv_priv, ci);
553 return -1;
554 }
555
wpa_drv_pktcnt_poll(struct wpa_supplicant * wpa_s,struct hostap_sta_driver_data * sta)556 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
557 struct hostap_sta_driver_data *sta)
558 {
559 if (wpa_s->driver->read_sta_data)
560 return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
561 wpa_s->bssid);
562 return -1;
563 }
564
wpa_drv_set_ap_wps_ie(struct wpa_supplicant * wpa_s,const struct wpabuf * beacon,const struct wpabuf * proberesp,const struct wpabuf * assocresp)565 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
566 const struct wpabuf *beacon,
567 const struct wpabuf *proberesp,
568 const struct wpabuf *assocresp)
569 {
570 if (!wpa_s->driver->set_ap_wps_ie)
571 return -1;
572 return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
573 proberesp, assocresp);
574 }
575
wpa_drv_get_noa(struct wpa_supplicant * wpa_s,u8 * buf,size_t buf_len)576 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
577 u8 *buf, size_t buf_len)
578 {
579 if (!wpa_s->driver->get_noa)
580 return -1;
581 return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
582 }
583
wpa_drv_set_p2p_powersave(struct wpa_supplicant * wpa_s,int legacy_ps,int opp_ps,int ctwindow)584 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
585 int legacy_ps, int opp_ps,
586 int ctwindow)
587 {
588 if (!wpa_s->driver->set_p2p_powersave)
589 return -1;
590 return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
591 opp_ps, ctwindow);
592 }
593
wpa_drv_ampdu(struct wpa_supplicant * wpa_s,int ampdu)594 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
595 {
596 if (!wpa_s->driver->ampdu)
597 return -1;
598 return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
599 }
600
wpa_drv_send_tdls_mgmt(struct wpa_supplicant * wpa_s,const u8 * dst,u8 action_code,u8 dialog_token,u16 status_code,u32 peer_capab,int initiator,const u8 * buf,size_t len,int link_id)601 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
602 const u8 *dst, u8 action_code,
603 u8 dialog_token, u16 status_code,
604 u32 peer_capab, int initiator,
605 const u8 *buf, size_t len, int link_id)
606 {
607 if (wpa_s->driver->send_tdls_mgmt) {
608 return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
609 action_code, dialog_token,
610 status_code, peer_capab,
611 initiator, buf, len,
612 link_id);
613 }
614 return -1;
615 }
616
wpa_drv_tdls_oper(struct wpa_supplicant * wpa_s,enum tdls_oper oper,const u8 * peer)617 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
618 enum tdls_oper oper, const u8 *peer)
619 {
620 if (!wpa_s->driver->tdls_oper)
621 return -1;
622 return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
623 }
624
625 #ifdef ANDROID
wpa_drv_driver_cmd(struct wpa_supplicant * wpa_s,char * cmd,char * buf,size_t buf_len)626 static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
627 char *cmd, char *buf, size_t buf_len)
628 {
629 if (!wpa_s->driver->driver_cmd)
630 return -1;
631 return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
632 }
633 #endif /* ANDROID */
634
wpa_drv_set_rekey_info(struct wpa_supplicant * wpa_s,const u8 * kek,size_t kek_len,const u8 * kck,size_t kck_len,const u8 * replay_ctr)635 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
636 const u8 *kek, size_t kek_len,
637 const u8 *kck, size_t kck_len,
638 const u8 *replay_ctr)
639 {
640 if (!wpa_s->driver->set_rekey_info)
641 return;
642 wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
643 kck, kck_len, replay_ctr);
644 }
645
wpa_drv_radio_disable(struct wpa_supplicant * wpa_s,int disabled)646 static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
647 int disabled)
648 {
649 if (!wpa_s->driver->radio_disable)
650 return -1;
651 return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
652 }
653
wpa_drv_switch_channel(struct wpa_supplicant * wpa_s,struct csa_settings * settings)654 static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
655 struct csa_settings *settings)
656 {
657 if (!wpa_s->driver->switch_channel)
658 return -1;
659 return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
660 }
661
wpa_drv_add_ts(struct wpa_supplicant * wpa_s,u8 tsid,const u8 * address,u8 user_priority,u16 admitted_time)662 static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
663 const u8 *address, u8 user_priority,
664 u16 admitted_time)
665 {
666 if (!wpa_s->driver->add_tx_ts)
667 return -1;
668 return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
669 user_priority, admitted_time);
670 }
671
wpa_drv_del_ts(struct wpa_supplicant * wpa_s,u8 tid,const u8 * address)672 static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
673 const u8 *address)
674 {
675 if (!wpa_s->driver->del_tx_ts)
676 return -1;
677 return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
678 }
679
wpa_drv_tdls_enable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr,u8 oper_class,const struct hostapd_freq_params * freq_params)680 static inline int wpa_drv_tdls_enable_channel_switch(
681 struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
682 const struct hostapd_freq_params *freq_params)
683 {
684 if (!wpa_s->driver->tdls_enable_channel_switch)
685 return -1;
686 return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
687 oper_class,
688 freq_params);
689 }
690
691 static inline int
wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr)692 wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
693 const u8 *addr)
694 {
695 if (!wpa_s->driver->tdls_disable_channel_switch)
696 return -1;
697 return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
698 addr);
699 }
700
wpa_drv_wnm_oper(struct wpa_supplicant * wpa_s,enum wnm_oper oper,const u8 * peer,u8 * buf,u16 * buf_len)701 static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
702 enum wnm_oper oper, const u8 *peer,
703 u8 *buf, u16 *buf_len)
704 {
705 if (!wpa_s->driver->wnm_oper)
706 return -1;
707 return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
708 buf_len);
709 }
710
wpa_drv_status(struct wpa_supplicant * wpa_s,char * buf,size_t buflen)711 static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
712 char *buf, size_t buflen)
713 {
714 if (!wpa_s->driver->status)
715 return -1;
716 return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
717 }
718
wpa_drv_set_qos_map(struct wpa_supplicant * wpa_s,const u8 * qos_map_set,u8 qos_map_set_len)719 static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
720 const u8 *qos_map_set, u8 qos_map_set_len)
721 {
722 if (!wpa_s->driver->set_qos_map)
723 return -1;
724 return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
725 qos_map_set_len);
726 }
727
wpa_drv_get_wowlan(struct wpa_supplicant * wpa_s)728 static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s)
729 {
730 if (!wpa_s->driver->get_wowlan)
731 return 0;
732 return wpa_s->driver->get_wowlan(wpa_s->drv_priv);
733 }
734
wpa_drv_wowlan(struct wpa_supplicant * wpa_s,const struct wowlan_triggers * triggers)735 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
736 const struct wowlan_triggers *triggers)
737 {
738 if (!wpa_s->driver->set_wowlan)
739 return -1;
740 return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
741 }
742
743 #ifdef CONFIG_PR
744
745 static inline int
wpa_drv_pd_start(struct wpa_supplicant * wpa_s,const u8 * addr,u8 * pd_addr)746 wpa_drv_pd_start(struct wpa_supplicant *wpa_s, const u8 *addr, u8 *pd_addr)
747 {
748 if (!wpa_s->driver->pd_start)
749 return -1;
750 return wpa_s->driver->pd_start(wpa_s->drv_priv, addr, pd_addr);
751 }
752
753 static inline void
wpa_drv_pd_stop(struct wpa_supplicant * wpa_s)754 wpa_drv_pd_stop(struct wpa_supplicant *wpa_s)
755 {
756 if (!wpa_s->driver->pd_stop)
757 return;
758 wpa_s->driver->pd_stop(wpa_s->drv_priv);
759 }
760
761 static inline int
wpa_drv_start_peer_measurement(struct wpa_supplicant * wpa_s,const u8 * peer,int freq,u8 channel,int bw,struct pr_pasn_ranging_params * params)762 wpa_drv_start_peer_measurement(struct wpa_supplicant *wpa_s, const u8 *peer,
763 int freq, u8 channel, int bw,
764 struct pr_pasn_ranging_params *params)
765 {
766 if (!wpa_s->driver->start_peer_measurement)
767 return -1;
768 return wpa_s->driver->start_peer_measurement(wpa_s->drv_priv, peer,
769 freq, channel, bw,
770 params);
771 }
772
773 static inline void
wpa_drv_stop_peer_measurement(struct wpa_supplicant * wpa_s)774 wpa_drv_stop_peer_measurement(struct wpa_supplicant *wpa_s)
775 {
776 if (!wpa_s->driver->stop_peer_measurement)
777 return;
778 wpa_s->driver->stop_peer_measurement(wpa_s->drv_priv);
779 }
780
781 #endif /* CONFIG_PR */
782
wpa_drv_vendor_cmd(struct wpa_supplicant * wpa_s,int vendor_id,int subcmd,const u8 * data,size_t data_len,enum nested_attr nested_attr_flag,struct wpabuf * buf)783 static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
784 int vendor_id, int subcmd, const u8 *data,
785 size_t data_len,
786 enum nested_attr nested_attr_flag,
787 struct wpabuf *buf)
788 {
789 if (!wpa_s->driver->vendor_cmd)
790 return -1;
791 return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
792 data, data_len, nested_attr_flag, buf);
793 }
794
wpa_drv_roaming(struct wpa_supplicant * wpa_s,int allowed,const u8 * bssid)795 static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
796 const u8 *bssid)
797 {
798 if (!wpa_s->driver->roaming)
799 return -1;
800 return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
801 }
802
wpa_drv_disable_fils(struct wpa_supplicant * wpa_s,int disable)803 static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s,
804 int disable)
805 {
806 if (!wpa_s->driver->disable_fils)
807 return -1;
808 return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable);
809 }
810
wpa_drv_set_mac_addr(struct wpa_supplicant * wpa_s,const u8 * addr)811 static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
812 const u8 *addr)
813 {
814 if (!wpa_s->driver->set_mac_addr)
815 return -1;
816 return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
817 }
818
819
820 #ifdef CONFIG_MACSEC
821
wpa_drv_macsec_init(struct wpa_supplicant * wpa_s,struct macsec_init_params * params)822 static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
823 struct macsec_init_params *params)
824 {
825 if (!wpa_s->driver->macsec_init)
826 return -1;
827 return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
828 }
829
wpa_drv_macsec_deinit(struct wpa_supplicant * wpa_s)830 static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
831 {
832 if (!wpa_s->driver->macsec_deinit)
833 return -1;
834 return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
835 }
836
wpa_drv_macsec_get_capability(struct wpa_supplicant * wpa_s,enum macsec_cap * cap)837 static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s,
838 enum macsec_cap *cap)
839 {
840 if (!wpa_s->driver->macsec_get_capability)
841 return -1;
842 return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap);
843 }
844
wpa_drv_enable_protect_frames(struct wpa_supplicant * wpa_s,bool enabled)845 static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
846 bool enabled)
847 {
848 if (!wpa_s->driver->enable_protect_frames)
849 return -1;
850 return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
851 }
852
wpa_drv_enable_encrypt(struct wpa_supplicant * wpa_s,bool enabled)853 static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s,
854 bool enabled)
855 {
856 if (!wpa_s->driver->enable_encrypt)
857 return -1;
858 return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled);
859 }
860
wpa_drv_set_replay_protect(struct wpa_supplicant * wpa_s,bool enabled,u32 window)861 static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
862 bool enabled, u32 window)
863 {
864 if (!wpa_s->driver->set_replay_protect)
865 return -1;
866 return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
867 window);
868 }
869
wpa_drv_set_offload(struct wpa_supplicant * wpa_s,u8 offload)870 static inline int wpa_drv_set_offload(struct wpa_supplicant *wpa_s, u8 offload)
871 {
872 if (!wpa_s->driver->set_offload)
873 return -1;
874 return wpa_s->driver->set_offload(wpa_s->drv_priv, offload);
875
876 }
877
wpa_drv_set_current_cipher_suite(struct wpa_supplicant * wpa_s,u64 cs)878 static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
879 u64 cs)
880 {
881 if (!wpa_s->driver->set_current_cipher_suite)
882 return -1;
883 return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs);
884 }
885
wpa_drv_enable_controlled_port(struct wpa_supplicant * wpa_s,bool enabled)886 static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
887 bool enabled)
888 {
889 if (!wpa_s->driver->enable_controlled_port)
890 return -1;
891 return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
892 }
893
wpa_drv_get_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)894 static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
895 struct receive_sa *sa)
896 {
897 if (!wpa_s->driver->get_receive_lowest_pn)
898 return -1;
899 return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa);
900 }
901
wpa_drv_get_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)902 static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
903 struct transmit_sa *sa)
904 {
905 if (!wpa_s->driver->get_transmit_next_pn)
906 return -1;
907 return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa);
908 }
909
wpa_drv_set_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)910 static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
911 struct transmit_sa *sa)
912 {
913 if (!wpa_s->driver->set_transmit_next_pn)
914 return -1;
915 return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
916 }
917
wpa_drv_set_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)918 static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s,
919 struct receive_sa *sa)
920 {
921 if (!wpa_s->driver->set_receive_lowest_pn)
922 return -1;
923 return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa);
924 }
925
926 static inline int
wpa_drv_create_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc,unsigned int conf_offset,int validation)927 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
928 unsigned int conf_offset, int validation)
929 {
930 if (!wpa_s->driver->create_receive_sc)
931 return -1;
932 return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc,
933 conf_offset, validation);
934 }
935
wpa_drv_delete_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc)936 static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
937 struct receive_sc *sc)
938 {
939 if (!wpa_s->driver->delete_receive_sc)
940 return -1;
941 return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc);
942 }
943
wpa_drv_create_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)944 static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
945 struct receive_sa *sa)
946 {
947 if (!wpa_s->driver->create_receive_sa)
948 return -1;
949 return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa);
950 }
951
wpa_drv_delete_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)952 static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s,
953 struct receive_sa *sa)
954 {
955 if (!wpa_s->driver->delete_receive_sa)
956 return -1;
957 return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa);
958 }
959
wpa_drv_enable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)960 static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
961 struct receive_sa *sa)
962 {
963 if (!wpa_s->driver->enable_receive_sa)
964 return -1;
965 return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa);
966 }
967
wpa_drv_disable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)968 static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
969 struct receive_sa *sa)
970 {
971 if (!wpa_s->driver->disable_receive_sa)
972 return -1;
973 return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa);
974 }
975
976 static inline int
wpa_drv_create_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc,unsigned int conf_offset)977 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc,
978 unsigned int conf_offset)
979 {
980 if (!wpa_s->driver->create_transmit_sc)
981 return -1;
982 return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc,
983 conf_offset);
984 }
985
wpa_drv_delete_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc)986 static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
987 struct transmit_sc *sc)
988 {
989 if (!wpa_s->driver->delete_transmit_sc)
990 return -1;
991 return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc);
992 }
993
wpa_drv_create_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)994 static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
995 struct transmit_sa *sa)
996 {
997 if (!wpa_s->driver->create_transmit_sa)
998 return -1;
999 return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa);
1000 }
1001
wpa_drv_delete_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)1002 static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s,
1003 struct transmit_sa *sa)
1004 {
1005 if (!wpa_s->driver->delete_transmit_sa)
1006 return -1;
1007 return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa);
1008 }
1009
wpa_drv_enable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)1010 static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
1011 struct transmit_sa *sa)
1012 {
1013 if (!wpa_s->driver->enable_transmit_sa)
1014 return -1;
1015 return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa);
1016 }
1017
wpa_drv_disable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)1018 static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
1019 struct transmit_sa *sa)
1020 {
1021 if (!wpa_s->driver->disable_transmit_sa)
1022 return -1;
1023 return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa);
1024 }
1025 #endif /* CONFIG_MACSEC */
1026
wpa_drv_setband(struct wpa_supplicant * wpa_s,u32 band_mask)1027 static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
1028 u32 band_mask)
1029 {
1030 if (!wpa_s->driver->set_band)
1031 return -1;
1032 return wpa_s->driver->set_band(wpa_s->drv_priv, band_mask);
1033 }
1034
wpa_drv_get_pref_freq_list(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type if_type,unsigned int * num,struct weighted_pcl * freq_list)1035 static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s,
1036 enum wpa_driver_if_type if_type,
1037 unsigned int *num,
1038 struct weighted_pcl *freq_list)
1039 {
1040 #ifdef CONFIG_TESTING_OPTIONS
1041 if (wpa_s->get_pref_freq_list_override)
1042 return wpas_ctrl_iface_get_pref_freq_list_override(
1043 wpa_s, if_type, num, freq_list);
1044 #endif /* CONFIG_TESTING_OPTIONS */
1045 if (!wpa_s->driver->get_pref_freq_list)
1046 return -1;
1047 return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type,
1048 num, freq_list);
1049 }
1050
wpa_drv_set_prob_oper_freq(struct wpa_supplicant * wpa_s,unsigned int freq)1051 static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s,
1052 unsigned int freq)
1053 {
1054 if (!wpa_s->driver->set_prob_oper_freq)
1055 return 0;
1056 return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq);
1057 }
1058
wpa_drv_abort_scan(struct wpa_supplicant * wpa_s,u64 scan_cookie)1059 static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s,
1060 u64 scan_cookie)
1061 {
1062 if (!wpa_s->driver->abort_scan)
1063 return -1;
1064 return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie);
1065 }
1066
wpa_drv_configure_frame_filters(struct wpa_supplicant * wpa_s,u32 filters)1067 static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s,
1068 u32 filters)
1069 {
1070 if (!wpa_s->driver->configure_data_frame_filters)
1071 return -1;
1072 return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv,
1073 filters);
1074 }
1075
wpa_drv_get_ext_capa(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type)1076 static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s,
1077 enum wpa_driver_if_type type)
1078 {
1079 if (!wpa_s->driver->get_ext_capab)
1080 return -1;
1081 return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type,
1082 &wpa_s->extended_capa,
1083 &wpa_s->extended_capa_mask,
1084 &wpa_s->extended_capa_len);
1085 }
1086
wpa_drv_get_mld_capa(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,u16 * mld_eml_capa,u16 * mld_mld_capa)1087 static inline int wpa_drv_get_mld_capa(struct wpa_supplicant *wpa_s,
1088 enum wpa_driver_if_type type,
1089 u16 *mld_eml_capa, u16 *mld_mld_capa)
1090 {
1091 if (!wpa_s->driver->get_mld_capab)
1092 return -1;
1093 return wpa_s->driver->get_mld_capab(wpa_s->drv_priv, type,
1094 mld_eml_capa, mld_mld_capa);
1095 }
1096
wpa_drv_p2p_lo_start(struct wpa_supplicant * wpa_s,unsigned int channel,unsigned int period,unsigned int interval,unsigned int count,const u8 * device_types,size_t dev_types_len,const u8 * ies,size_t ies_len)1097 static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s,
1098 unsigned int channel,
1099 unsigned int period,
1100 unsigned int interval,
1101 unsigned int count,
1102 const u8 *device_types,
1103 size_t dev_types_len,
1104 const u8 *ies, size_t ies_len)
1105 {
1106 if (!wpa_s->driver->p2p_lo_start)
1107 return -1;
1108 return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period,
1109 interval, count, device_types,
1110 dev_types_len, ies, ies_len);
1111 }
1112
wpa_drv_p2p_lo_stop(struct wpa_supplicant * wpa_s)1113 static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s)
1114 {
1115 if (!wpa_s->driver->p2p_lo_stop)
1116 return -1;
1117 return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv);
1118 }
1119
wpa_drv_set_default_scan_ies(struct wpa_supplicant * wpa_s,const u8 * ies,size_t len)1120 static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s,
1121 const u8 *ies, size_t len)
1122 {
1123 if (!wpa_s->driver->set_default_scan_ies)
1124 return -1;
1125 return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len);
1126 }
1127
wpa_drv_set_tdls_mode(struct wpa_supplicant * wpa_s,int tdls_external_control)1128 static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s,
1129 int tdls_external_control)
1130 {
1131 if (!wpa_s->driver->set_tdls_mode)
1132 return -1;
1133 return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv,
1134 tdls_external_control);
1135 }
1136
1137 static inline struct wpa_bss_candidate_info *
wpa_drv_get_bss_trans_status(struct wpa_supplicant * wpa_s,struct wpa_bss_trans_info * params)1138 wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s,
1139 struct wpa_bss_trans_info *params)
1140 {
1141 if (!wpa_s->driver->get_bss_transition_status)
1142 return NULL;
1143 return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv,
1144 params);
1145 }
1146
wpa_drv_ignore_assoc_disallow(struct wpa_supplicant * wpa_s,int val)1147 static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s,
1148 int val)
1149 {
1150 if (!wpa_s->driver->ignore_assoc_disallow)
1151 return -1;
1152 return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val);
1153 }
1154
wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant * wpa_s,unsigned int num_bssid,const u8 * bssids)1155 static inline int wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant *wpa_s,
1156 unsigned int num_bssid,
1157 const u8 *bssids)
1158 {
1159 if (!wpa_s->driver->set_bssid_tmp_disallow)
1160 return -1;
1161 return wpa_s->driver->set_bssid_tmp_disallow(wpa_s->drv_priv, num_bssid,
1162 bssids);
1163 }
1164
wpa_drv_update_connect_params(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params,enum wpa_drv_update_connect_params_mask mask)1165 static inline int wpa_drv_update_connect_params(
1166 struct wpa_supplicant *wpa_s,
1167 struct wpa_driver_associate_params *params,
1168 enum wpa_drv_update_connect_params_mask mask)
1169 {
1170 if (!wpa_s->driver->update_connect_params)
1171 return -1;
1172
1173 if (params)
1174 params->freq.link_id = -1;
1175
1176 return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params,
1177 mask);
1178 }
1179
1180 static inline int
wpa_drv_send_external_auth_status(struct wpa_supplicant * wpa_s,struct external_auth * params)1181 wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s,
1182 struct external_auth *params)
1183 {
1184 if (!wpa_s->driver->send_external_auth_status)
1185 return -1;
1186 return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv,
1187 params);
1188 }
1189
wpa_drv_set_4addr_mode(struct wpa_supplicant * wpa_s,int val)1190 static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
1191 {
1192 if (!wpa_s->driver->set_4addr_mode)
1193 return -1;
1194 return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv,
1195 wpa_s->bridge_ifname, val);
1196 }
1197
wpa_drv_dpp_listen(struct wpa_supplicant * wpa_s,bool enable)1198 static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable)
1199 {
1200 if (!wpa_s->driver->dpp_listen)
1201 return 0;
1202 return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable);
1203 }
1204
wpa_drv_send_pasn_resp(struct wpa_supplicant * wpa_s,struct pasn_auth * params)1205 static inline int wpa_drv_send_pasn_resp(struct wpa_supplicant *wpa_s,
1206 struct pasn_auth *params)
1207 {
1208 if (!wpa_s->driver->send_pasn_resp)
1209 return -1;
1210 return wpa_s->driver->send_pasn_resp(wpa_s->drv_priv, params);
1211 }
1212
wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant * wpa_s,const u8 * own_addr,const u8 * peer_addr,u32 cipher,u8 tk_len,const u8 * tk,u8 ltf_keyseed_len,const u8 * ltf_keyseed,u32 action)1213 static inline int wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant *wpa_s,
1214 const u8 *own_addr,
1215 const u8 *peer_addr,
1216 u32 cipher, u8 tk_len,
1217 const u8 *tk,
1218 u8 ltf_keyseed_len,
1219 const u8 *ltf_keyseed,
1220 u32 action)
1221 {
1222 struct secure_ranging_params params;
1223
1224 /* Configure secure ranging context only to the drivers that support it.
1225 */
1226 if (!wpa_s->driver->set_secure_ranging_ctx)
1227 return 0;
1228
1229 os_memset(¶ms, 0, sizeof(params));
1230 params.action = action;
1231 params.own_addr = own_addr;
1232 params.peer_addr = peer_addr;
1233 params.cipher = cipher;
1234 params.tk_len = tk_len;
1235 params.tk = tk;
1236 params.ltf_keyseed_len = ltf_keyseed_len;
1237 params.ltf_keyseed = ltf_keyseed;
1238
1239 return wpa_s->driver->set_secure_ranging_ctx(wpa_s->drv_priv, ¶ms);
1240 }
1241
1242 static inline int
wpas_drv_get_sta_mlo_info(struct wpa_supplicant * wpa_s,struct driver_sta_mlo_info * mlo_info)1243 wpas_drv_get_sta_mlo_info(struct wpa_supplicant *wpa_s,
1244 struct driver_sta_mlo_info *mlo_info)
1245 {
1246 if (!wpa_s->driver->get_sta_mlo_info)
1247 return 0;
1248
1249 return wpa_s->driver->get_sta_mlo_info(wpa_s->drv_priv, mlo_info);
1250 }
1251
1252 static inline int
wpas_drv_nan_flush(struct wpa_supplicant * wpa_s)1253 wpas_drv_nan_flush(struct wpa_supplicant *wpa_s)
1254 {
1255 if (!wpa_s->driver->nan_flush)
1256 return 0;
1257
1258 return wpa_s->driver->nan_flush(wpa_s->drv_priv);
1259 }
1260
1261 static inline int
wpas_drv_nan_publish(struct wpa_supplicant * wpa_s,const u8 * addr,int publish_id,const char * service_name,const u8 * service_id,enum nan_service_protocol_type srv_proto_type,const struct wpabuf * ssi,const struct wpabuf * elems,struct nan_publish_params * params,const u8 * network_id)1262 wpas_drv_nan_publish(struct wpa_supplicant *wpa_s, const u8 *addr,
1263 int publish_id, const char *service_name,
1264 const u8 *service_id,
1265 enum nan_service_protocol_type srv_proto_type,
1266 const struct wpabuf *ssi, const struct wpabuf *elems,
1267 struct nan_publish_params *params, const u8 *network_id)
1268 {
1269 if (!wpa_s->driver->nan_publish)
1270 return 0;
1271
1272 return wpa_s->driver->nan_publish(wpa_s->drv_priv, addr, publish_id,
1273 service_name, service_id,
1274 srv_proto_type, ssi, elems, params,
1275 network_id);
1276 }
1277
1278 static inline int
wpas_drv_nan_cancel_publish(struct wpa_supplicant * wpa_s,int publish_id)1279 wpas_drv_nan_cancel_publish(struct wpa_supplicant *wpa_s, int publish_id)
1280 {
1281 if (!wpa_s->driver->nan_cancel_publish)
1282 return 0;
1283
1284 return wpa_s->driver->nan_cancel_publish(wpa_s->drv_priv, publish_id);
1285 }
1286
1287 static inline int
wpas_drv_nan_update_publish(struct wpa_supplicant * wpa_s,int publish_id,const struct wpabuf * ssi)1288 wpas_drv_nan_update_publish(struct wpa_supplicant *wpa_s, int publish_id,
1289 const struct wpabuf *ssi)
1290 {
1291 if (!wpa_s->driver->nan_update_publish)
1292 return 0;
1293
1294 return wpa_s->driver->nan_update_publish(wpa_s->drv_priv, publish_id,
1295 ssi);
1296 }
1297
1298 static inline int
wpas_drv_nan_subscribe(struct wpa_supplicant * wpa_s,const u8 * addr,int subscribe_id,const char * service_name,const u8 * service_id,enum nan_service_protocol_type srv_proto_type,const struct wpabuf * ssi,const struct wpabuf * elems,struct nan_subscribe_params * params,const u8 * network_id)1299 wpas_drv_nan_subscribe(struct wpa_supplicant *wpa_s, const u8 *addr,
1300 int subscribe_id, const char *service_name,
1301 const u8 *service_id,
1302 enum nan_service_protocol_type srv_proto_type,
1303 const struct wpabuf *ssi, const struct wpabuf *elems,
1304 struct nan_subscribe_params *params,
1305 const u8 *network_id)
1306 {
1307 if (!wpa_s->driver->nan_subscribe)
1308 return 0;
1309
1310 return wpa_s->driver->nan_subscribe(wpa_s->drv_priv, addr, subscribe_id,
1311 service_name, service_id,
1312 srv_proto_type, ssi, elems, params,
1313 network_id);
1314 }
1315
1316 static inline int
wpas_drv_nan_cancel_subscribe(struct wpa_supplicant * wpa_s,int subscribe_id)1317 wpas_drv_nan_cancel_subscribe(struct wpa_supplicant *wpa_s, int subscribe_id)
1318 {
1319 if (!wpa_s->driver->nan_cancel_subscribe)
1320 return 0;
1321
1322 return wpa_s->driver->nan_cancel_subscribe(wpa_s->drv_priv,
1323 subscribe_id);
1324 }
1325
1326
1327 #ifdef CONFIG_NAN
1328
wpa_drv_nan_start(struct wpa_supplicant * wpa_s,const struct nan_cluster_config * conf)1329 static inline int wpa_drv_nan_start(struct wpa_supplicant *wpa_s,
1330 const struct nan_cluster_config *conf)
1331 {
1332 if (!wpa_s->driver->nan_start)
1333 return -1;
1334 return wpa_s->driver->nan_start(wpa_s->drv_priv, conf);
1335 }
1336
wpa_drv_nan_stop(struct wpa_supplicant * wpa_s)1337 static inline void wpa_drv_nan_stop(struct wpa_supplicant *wpa_s)
1338 {
1339 if (!wpa_s->driver->nan_stop)
1340 return;
1341 wpa_s->driver->nan_stop(wpa_s->drv_priv);
1342 }
1343
1344 static inline int
wpa_drv_nan_update_config(struct wpa_supplicant * wpa_s,const struct nan_cluster_config * conf)1345 wpa_drv_nan_update_config(struct wpa_supplicant *wpa_s,
1346 const struct nan_cluster_config *conf)
1347 {
1348 if (!wpa_s->driver->nan_change_config)
1349 return -1;
1350 return wpa_s->driver->nan_change_config(wpa_s->drv_priv, conf);
1351 }
1352
wpa_drv_nan_config_schedule(struct wpa_supplicant * wpa_s,u8 map_id,struct nan_schedule_config * conf)1353 static inline int wpa_drv_nan_config_schedule(struct wpa_supplicant *wpa_s,
1354 u8 map_id,
1355 struct nan_schedule_config *conf)
1356 {
1357 if (!wpa_s->driver->nan_config_schedule)
1358 return -1;
1359 return wpa_s->driver->nan_config_schedule(wpa_s->drv_priv, map_id,
1360 conf);
1361 }
1362
1363 static inline int
wpa_drv_nan_config_peer_schedule(struct wpa_supplicant * wpa_s,const u8 * peer,u16 cdw,u8 sequence_id,u16 max_chan_switch_time,const struct wpabuf * ulw,struct nan_peer_schedule_config * sched)1364 wpa_drv_nan_config_peer_schedule(struct wpa_supplicant *wpa_s, const u8 *peer,
1365 u16 cdw, u8 sequence_id,
1366 u16 max_chan_switch_time,
1367 const struct wpabuf *ulw,
1368 struct nan_peer_schedule_config *sched)
1369 {
1370 if (!wpa_s->driver->nan_config_peer_schedule)
1371 return -1;
1372 return wpa_s->driver->nan_config_peer_schedule(wpa_s->drv_priv, peer,
1373 cdw, sequence_id,
1374 max_chan_switch_time,
1375 ulw, sched);
1376 }
1377
wpa_drv_get_inact_sec(struct wpa_supplicant * wpa_s,const u8 * addr)1378 static inline int wpa_drv_get_inact_sec(struct wpa_supplicant *wpa_s,
1379 const u8 *addr)
1380 {
1381 if (!wpa_s->driver->get_inact_sec)
1382 return -1;
1383
1384 return wpa_s->driver->get_inact_sec(wpa_s->drv_priv, addr);
1385 }
1386
1387 #endif /* CONFIG_NAN */
1388
1389 #endif /* DRIVER_I_H */
1390