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)317 wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
318 u16 *flags, u8 *dfs_domain)
319 {
320 if (wpa_s->driver->get_hw_feature_data)
321 return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
322 num_modes, flags,
323 dfs_domain);
324 return NULL;
325 }
326
wpa_drv_set_country(struct wpa_supplicant * wpa_s,const char * alpha2)327 static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
328 const char *alpha2)
329 {
330 if (wpa_s->driver->set_country)
331 return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
332 return 0;
333 }
334
wpa_drv_send_mlme(struct wpa_supplicant * wpa_s,const u8 * data,size_t data_len,int noack,unsigned int freq,unsigned int wait)335 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
336 const u8 *data, size_t data_len, int noack,
337 unsigned int freq, unsigned int wait)
338 {
339 if (wpa_s->driver->send_mlme)
340 return wpa_s->driver->send_mlme(wpa_s->drv_priv,
341 data, data_len, noack,
342 freq, NULL, 0, 0, wait, -1);
343 return -1;
344 }
345
wpa_drv_update_ft_ies(struct wpa_supplicant * wpa_s,const u8 * md,const u8 * ies,size_t ies_len)346 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
347 const u8 *md,
348 const u8 *ies, size_t ies_len)
349 {
350 if (wpa_s->driver->update_ft_ies)
351 return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
352 ies, ies_len);
353 return -1;
354 }
355
wpa_drv_sta_add(struct wpa_supplicant * wpa_s,struct hostapd_sta_add_params * params)356 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
357 struct hostapd_sta_add_params *params)
358 {
359 if (wpa_s->driver->sta_add) {
360 /* Set link_id to -1 for non-TDLS peers */
361 if (!(params->flags & WPA_STA_TDLS_PEER))
362 params->mld_link_id = -1;
363 return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
364 }
365 return -1;
366 }
367
wpa_drv_sta_remove(struct wpa_supplicant * wpa_s,const u8 * addr)368 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
369 const u8 *addr)
370 {
371 if (wpa_s->driver->sta_remove)
372 return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
373 return -1;
374 }
375
wpa_drv_tx_control_port(struct wpa_supplicant * wpa_s,const u8 * dest,u16 proto,const u8 * buf,size_t len,int no_encrypt)376 static inline int wpa_drv_tx_control_port(struct wpa_supplicant *wpa_s,
377 const u8 *dest, u16 proto,
378 const u8 *buf, size_t len,
379 int no_encrypt)
380 {
381 if (!wpa_s->driver->tx_control_port)
382 return -1;
383 return wpa_s->driver->tx_control_port(wpa_s->drv_priv, dest, proto,
384 buf, len, no_encrypt, -1);
385 }
386
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)387 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
388 const u8 *addr, const u8 *data,
389 size_t data_len, int encrypt,
390 const u8 *own_addr, u32 flags)
391 {
392 if (wpa_s->driver->hapd_send_eapol)
393 return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
394 data, data_len, encrypt,
395 own_addr, flags, -1);
396 return -1;
397 }
398
wpa_drv_sta_set_flags(struct wpa_supplicant * wpa_s,const u8 * addr,int total_flags,int flags_or,int flags_and)399 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
400 const u8 *addr, int total_flags,
401 int flags_or, int flags_and)
402 {
403 if (wpa_s->driver->sta_set_flags)
404 return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
405 total_flags, flags_or,
406 flags_and);
407 return -1;
408 }
409
wpa_drv_set_supp_port(struct wpa_supplicant * wpa_s,int authorized)410 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
411 int authorized)
412 {
413 if (wpa_s->driver->set_supp_port) {
414 return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
415 authorized);
416 }
417 return 0;
418 }
419
420 int wpa_drv_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
421 unsigned int wait, const u8 *dst, const u8 *src,
422 const u8 *bssid, const u8 *data, size_t data_len,
423 int no_cck);
424
wpa_drv_send_action_cancel_wait(struct wpa_supplicant * wpa_s)425 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
426 {
427 if (wpa_s->driver->send_action_cancel_wait)
428 wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
429 }
430
wpa_drv_set_freq(struct wpa_supplicant * wpa_s,struct hostapd_freq_params * freq)431 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
432 struct hostapd_freq_params *freq)
433 {
434 if (wpa_s->driver->set_freq)
435 return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
436 return -1;
437 }
438
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)439 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
440 enum wpa_driver_if_type type,
441 const char *ifname, const u8 *addr,
442 void *bss_ctx, char *force_ifname,
443 u8 *if_addr, const char *bridge)
444 {
445 if (wpa_s->driver->if_add)
446 return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
447 addr, bss_ctx, NULL, force_ifname,
448 if_addr, bridge, 0, 0);
449 return -1;
450 }
451
wpa_drv_if_remove(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname)452 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
453 enum wpa_driver_if_type type,
454 const char *ifname)
455 {
456 if (wpa_s->driver->if_remove)
457 return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
458 return -1;
459 }
460
wpa_drv_remain_on_channel(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int duration)461 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
462 unsigned int freq,
463 unsigned int duration)
464 {
465 if (wpa_s->driver->remain_on_channel)
466 return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
467 duration);
468 return -1;
469 }
470
wpa_drv_cancel_remain_on_channel(struct wpa_supplicant * wpa_s)471 static inline int wpa_drv_cancel_remain_on_channel(
472 struct wpa_supplicant *wpa_s)
473 {
474 if (wpa_s->driver->cancel_remain_on_channel)
475 return wpa_s->driver->cancel_remain_on_channel(
476 wpa_s->drv_priv);
477 return -1;
478 }
479
wpa_drv_probe_req_report(struct wpa_supplicant * wpa_s,int report)480 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
481 int report)
482 {
483 if (wpa_s->driver->probe_req_report)
484 return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
485 report);
486 return -1;
487 }
488
wpa_drv_deinit_ap(struct wpa_supplicant * wpa_s)489 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
490 {
491 if (wpa_s->driver->deinit_ap)
492 return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
493 return 0;
494 }
495
wpa_drv_deinit_p2p_cli(struct wpa_supplicant * wpa_s)496 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
497 {
498 if (wpa_s->driver->deinit_p2p_cli)
499 return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
500 return 0;
501 }
502
wpa_drv_suspend(struct wpa_supplicant * wpa_s)503 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
504 {
505 if (wpa_s->driver->suspend)
506 wpa_s->driver->suspend(wpa_s->drv_priv);
507 }
508
wpa_drv_resume(struct wpa_supplicant * wpa_s)509 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
510 {
511 if (wpa_s->driver->resume)
512 wpa_s->driver->resume(wpa_s->drv_priv);
513 }
514
wpa_drv_signal_monitor(struct wpa_supplicant * wpa_s,int threshold,int hysteresis)515 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
516 int threshold, int hysteresis)
517 {
518 if (wpa_s->driver->signal_monitor)
519 return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
520 threshold, hysteresis);
521 return -1;
522 }
523
524 int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
525 struct wpa_signal_info *si);
526
wpa_drv_mlo_signal_poll(struct wpa_supplicant * wpa_s,struct wpa_mlo_signal_info * mlo_si)527 static inline int wpa_drv_mlo_signal_poll(struct wpa_supplicant *wpa_s,
528 struct wpa_mlo_signal_info *mlo_si)
529 {
530 if (wpa_s->driver->mlo_signal_poll)
531 return wpa_s->driver->mlo_signal_poll(wpa_s->drv_priv, mlo_si);
532 return -1;
533 }
534
wpa_drv_channel_info(struct wpa_supplicant * wpa_s,struct wpa_channel_info * ci)535 static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s,
536 struct wpa_channel_info *ci)
537 {
538 if (wpa_s->driver->channel_info)
539 return wpa_s->driver->channel_info(wpa_s->drv_priv, ci);
540 return -1;
541 }
542
wpa_drv_pktcnt_poll(struct wpa_supplicant * wpa_s,struct hostap_sta_driver_data * sta)543 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
544 struct hostap_sta_driver_data *sta)
545 {
546 if (wpa_s->driver->read_sta_data)
547 return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
548 wpa_s->bssid);
549 return -1;
550 }
551
wpa_drv_set_ap_wps_ie(struct wpa_supplicant * wpa_s,const struct wpabuf * beacon,const struct wpabuf * proberesp,const struct wpabuf * assocresp)552 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
553 const struct wpabuf *beacon,
554 const struct wpabuf *proberesp,
555 const struct wpabuf *assocresp)
556 {
557 if (!wpa_s->driver->set_ap_wps_ie)
558 return -1;
559 return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
560 proberesp, assocresp);
561 }
562
wpa_drv_get_noa(struct wpa_supplicant * wpa_s,u8 * buf,size_t buf_len)563 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
564 u8 *buf, size_t buf_len)
565 {
566 if (!wpa_s->driver->get_noa)
567 return -1;
568 return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
569 }
570
wpa_drv_set_p2p_powersave(struct wpa_supplicant * wpa_s,int legacy_ps,int opp_ps,int ctwindow)571 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
572 int legacy_ps, int opp_ps,
573 int ctwindow)
574 {
575 if (!wpa_s->driver->set_p2p_powersave)
576 return -1;
577 return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
578 opp_ps, ctwindow);
579 }
580
wpa_drv_ampdu(struct wpa_supplicant * wpa_s,int ampdu)581 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
582 {
583 if (!wpa_s->driver->ampdu)
584 return -1;
585 return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
586 }
587
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)588 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
589 const u8 *dst, u8 action_code,
590 u8 dialog_token, u16 status_code,
591 u32 peer_capab, int initiator,
592 const u8 *buf, size_t len, int link_id)
593 {
594 if (wpa_s->driver->send_tdls_mgmt) {
595 return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
596 action_code, dialog_token,
597 status_code, peer_capab,
598 initiator, buf, len,
599 link_id);
600 }
601 return -1;
602 }
603
wpa_drv_tdls_oper(struct wpa_supplicant * wpa_s,enum tdls_oper oper,const u8 * peer)604 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
605 enum tdls_oper oper, const u8 *peer)
606 {
607 if (!wpa_s->driver->tdls_oper)
608 return -1;
609 return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
610 }
611
612 #ifdef ANDROID
wpa_drv_driver_cmd(struct wpa_supplicant * wpa_s,char * cmd,char * buf,size_t buf_len)613 static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
614 char *cmd, char *buf, size_t buf_len)
615 {
616 if (!wpa_s->driver->driver_cmd)
617 return -1;
618 return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
619 }
620 #endif /* ANDROID */
621
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)622 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
623 const u8 *kek, size_t kek_len,
624 const u8 *kck, size_t kck_len,
625 const u8 *replay_ctr)
626 {
627 if (!wpa_s->driver->set_rekey_info)
628 return;
629 wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
630 kck, kck_len, replay_ctr);
631 }
632
wpa_drv_radio_disable(struct wpa_supplicant * wpa_s,int disabled)633 static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
634 int disabled)
635 {
636 if (!wpa_s->driver->radio_disable)
637 return -1;
638 return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
639 }
640
wpa_drv_switch_channel(struct wpa_supplicant * wpa_s,struct csa_settings * settings)641 static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
642 struct csa_settings *settings)
643 {
644 if (!wpa_s->driver->switch_channel)
645 return -1;
646 return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
647 }
648
wpa_drv_add_ts(struct wpa_supplicant * wpa_s,u8 tsid,const u8 * address,u8 user_priority,u16 admitted_time)649 static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
650 const u8 *address, u8 user_priority,
651 u16 admitted_time)
652 {
653 if (!wpa_s->driver->add_tx_ts)
654 return -1;
655 return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
656 user_priority, admitted_time);
657 }
658
wpa_drv_del_ts(struct wpa_supplicant * wpa_s,u8 tid,const u8 * address)659 static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
660 const u8 *address)
661 {
662 if (!wpa_s->driver->del_tx_ts)
663 return -1;
664 return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
665 }
666
wpa_drv_tdls_enable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr,u8 oper_class,const struct hostapd_freq_params * freq_params)667 static inline int wpa_drv_tdls_enable_channel_switch(
668 struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
669 const struct hostapd_freq_params *freq_params)
670 {
671 if (!wpa_s->driver->tdls_enable_channel_switch)
672 return -1;
673 return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
674 oper_class,
675 freq_params);
676 }
677
678 static inline int
wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr)679 wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
680 const u8 *addr)
681 {
682 if (!wpa_s->driver->tdls_disable_channel_switch)
683 return -1;
684 return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
685 addr);
686 }
687
wpa_drv_wnm_oper(struct wpa_supplicant * wpa_s,enum wnm_oper oper,const u8 * peer,u8 * buf,u16 * buf_len)688 static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
689 enum wnm_oper oper, const u8 *peer,
690 u8 *buf, u16 *buf_len)
691 {
692 if (!wpa_s->driver->wnm_oper)
693 return -1;
694 return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
695 buf_len);
696 }
697
wpa_drv_status(struct wpa_supplicant * wpa_s,char * buf,size_t buflen)698 static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
699 char *buf, size_t buflen)
700 {
701 if (!wpa_s->driver->status)
702 return -1;
703 return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
704 }
705
wpa_drv_set_qos_map(struct wpa_supplicant * wpa_s,const u8 * qos_map_set,u8 qos_map_set_len)706 static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
707 const u8 *qos_map_set, u8 qos_map_set_len)
708 {
709 if (!wpa_s->driver->set_qos_map)
710 return -1;
711 return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
712 qos_map_set_len);
713 }
714
wpa_drv_get_wowlan(struct wpa_supplicant * wpa_s)715 static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s)
716 {
717 if (!wpa_s->driver->get_wowlan)
718 return 0;
719 return wpa_s->driver->get_wowlan(wpa_s->drv_priv);
720 }
721
wpa_drv_wowlan(struct wpa_supplicant * wpa_s,const struct wowlan_triggers * triggers)722 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
723 const struct wowlan_triggers *triggers)
724 {
725 if (!wpa_s->driver->set_wowlan)
726 return -1;
727 return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
728 }
729
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)730 static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
731 int vendor_id, int subcmd, const u8 *data,
732 size_t data_len,
733 enum nested_attr nested_attr_flag,
734 struct wpabuf *buf)
735 {
736 if (!wpa_s->driver->vendor_cmd)
737 return -1;
738 return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
739 data, data_len, nested_attr_flag, buf);
740 }
741
wpa_drv_roaming(struct wpa_supplicant * wpa_s,int allowed,const u8 * bssid)742 static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
743 const u8 *bssid)
744 {
745 if (!wpa_s->driver->roaming)
746 return -1;
747 return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
748 }
749
wpa_drv_disable_fils(struct wpa_supplicant * wpa_s,int disable)750 static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s,
751 int disable)
752 {
753 if (!wpa_s->driver->disable_fils)
754 return -1;
755 return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable);
756 }
757
wpa_drv_set_mac_addr(struct wpa_supplicant * wpa_s,const u8 * addr)758 static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
759 const u8 *addr)
760 {
761 if (!wpa_s->driver->set_mac_addr)
762 return -1;
763 return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
764 }
765
766
767 #ifdef CONFIG_MACSEC
768
wpa_drv_macsec_init(struct wpa_supplicant * wpa_s,struct macsec_init_params * params)769 static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
770 struct macsec_init_params *params)
771 {
772 if (!wpa_s->driver->macsec_init)
773 return -1;
774 return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
775 }
776
wpa_drv_macsec_deinit(struct wpa_supplicant * wpa_s)777 static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
778 {
779 if (!wpa_s->driver->macsec_deinit)
780 return -1;
781 return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
782 }
783
wpa_drv_macsec_get_capability(struct wpa_supplicant * wpa_s,enum macsec_cap * cap)784 static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s,
785 enum macsec_cap *cap)
786 {
787 if (!wpa_s->driver->macsec_get_capability)
788 return -1;
789 return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap);
790 }
791
wpa_drv_enable_protect_frames(struct wpa_supplicant * wpa_s,bool enabled)792 static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
793 bool enabled)
794 {
795 if (!wpa_s->driver->enable_protect_frames)
796 return -1;
797 return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
798 }
799
wpa_drv_enable_encrypt(struct wpa_supplicant * wpa_s,bool enabled)800 static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s,
801 bool enabled)
802 {
803 if (!wpa_s->driver->enable_encrypt)
804 return -1;
805 return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled);
806 }
807
wpa_drv_set_replay_protect(struct wpa_supplicant * wpa_s,bool enabled,u32 window)808 static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
809 bool enabled, u32 window)
810 {
811 if (!wpa_s->driver->set_replay_protect)
812 return -1;
813 return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
814 window);
815 }
816
wpa_drv_set_offload(struct wpa_supplicant * wpa_s,u8 offload)817 static inline int wpa_drv_set_offload(struct wpa_supplicant *wpa_s, u8 offload)
818 {
819 if (!wpa_s->driver->set_offload)
820 return -1;
821 return wpa_s->driver->set_offload(wpa_s->drv_priv, offload);
822
823 }
824
wpa_drv_set_current_cipher_suite(struct wpa_supplicant * wpa_s,u64 cs)825 static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
826 u64 cs)
827 {
828 if (!wpa_s->driver->set_current_cipher_suite)
829 return -1;
830 return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs);
831 }
832
wpa_drv_enable_controlled_port(struct wpa_supplicant * wpa_s,bool enabled)833 static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
834 bool enabled)
835 {
836 if (!wpa_s->driver->enable_controlled_port)
837 return -1;
838 return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
839 }
840
wpa_drv_get_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)841 static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
842 struct receive_sa *sa)
843 {
844 if (!wpa_s->driver->get_receive_lowest_pn)
845 return -1;
846 return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa);
847 }
848
wpa_drv_get_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)849 static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
850 struct transmit_sa *sa)
851 {
852 if (!wpa_s->driver->get_transmit_next_pn)
853 return -1;
854 return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa);
855 }
856
wpa_drv_set_transmit_next_pn(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)857 static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
858 struct transmit_sa *sa)
859 {
860 if (!wpa_s->driver->set_transmit_next_pn)
861 return -1;
862 return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa);
863 }
864
wpa_drv_set_receive_lowest_pn(struct wpa_supplicant * wpa_s,struct receive_sa * sa)865 static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s,
866 struct receive_sa *sa)
867 {
868 if (!wpa_s->driver->set_receive_lowest_pn)
869 return -1;
870 return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa);
871 }
872
873 static inline int
wpa_drv_create_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc,unsigned int conf_offset,int validation)874 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc,
875 unsigned int conf_offset, int validation)
876 {
877 if (!wpa_s->driver->create_receive_sc)
878 return -1;
879 return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc,
880 conf_offset, validation);
881 }
882
wpa_drv_delete_receive_sc(struct wpa_supplicant * wpa_s,struct receive_sc * sc)883 static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
884 struct receive_sc *sc)
885 {
886 if (!wpa_s->driver->delete_receive_sc)
887 return -1;
888 return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc);
889 }
890
wpa_drv_create_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)891 static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
892 struct receive_sa *sa)
893 {
894 if (!wpa_s->driver->create_receive_sa)
895 return -1;
896 return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa);
897 }
898
wpa_drv_delete_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)899 static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s,
900 struct receive_sa *sa)
901 {
902 if (!wpa_s->driver->delete_receive_sa)
903 return -1;
904 return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa);
905 }
906
wpa_drv_enable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)907 static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
908 struct receive_sa *sa)
909 {
910 if (!wpa_s->driver->enable_receive_sa)
911 return -1;
912 return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa);
913 }
914
wpa_drv_disable_receive_sa(struct wpa_supplicant * wpa_s,struct receive_sa * sa)915 static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
916 struct receive_sa *sa)
917 {
918 if (!wpa_s->driver->disable_receive_sa)
919 return -1;
920 return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa);
921 }
922
923 static inline int
wpa_drv_create_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc,unsigned int conf_offset)924 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc,
925 unsigned int conf_offset)
926 {
927 if (!wpa_s->driver->create_transmit_sc)
928 return -1;
929 return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc,
930 conf_offset);
931 }
932
wpa_drv_delete_transmit_sc(struct wpa_supplicant * wpa_s,struct transmit_sc * sc)933 static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
934 struct transmit_sc *sc)
935 {
936 if (!wpa_s->driver->delete_transmit_sc)
937 return -1;
938 return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc);
939 }
940
wpa_drv_create_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)941 static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
942 struct transmit_sa *sa)
943 {
944 if (!wpa_s->driver->create_transmit_sa)
945 return -1;
946 return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa);
947 }
948
wpa_drv_delete_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)949 static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s,
950 struct transmit_sa *sa)
951 {
952 if (!wpa_s->driver->delete_transmit_sa)
953 return -1;
954 return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa);
955 }
956
wpa_drv_enable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)957 static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
958 struct transmit_sa *sa)
959 {
960 if (!wpa_s->driver->enable_transmit_sa)
961 return -1;
962 return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa);
963 }
964
wpa_drv_disable_transmit_sa(struct wpa_supplicant * wpa_s,struct transmit_sa * sa)965 static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
966 struct transmit_sa *sa)
967 {
968 if (!wpa_s->driver->disable_transmit_sa)
969 return -1;
970 return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa);
971 }
972 #endif /* CONFIG_MACSEC */
973
wpa_drv_setband(struct wpa_supplicant * wpa_s,u32 band_mask)974 static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
975 u32 band_mask)
976 {
977 if (!wpa_s->driver->set_band)
978 return -1;
979 return wpa_s->driver->set_band(wpa_s->drv_priv, band_mask);
980 }
981
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)982 static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s,
983 enum wpa_driver_if_type if_type,
984 unsigned int *num,
985 struct weighted_pcl *freq_list)
986 {
987 #ifdef CONFIG_TESTING_OPTIONS
988 if (wpa_s->get_pref_freq_list_override)
989 return wpas_ctrl_iface_get_pref_freq_list_override(
990 wpa_s, if_type, num, freq_list);
991 #endif /* CONFIG_TESTING_OPTIONS */
992 if (!wpa_s->driver->get_pref_freq_list)
993 return -1;
994 return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type,
995 num, freq_list);
996 }
997
wpa_drv_set_prob_oper_freq(struct wpa_supplicant * wpa_s,unsigned int freq)998 static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s,
999 unsigned int freq)
1000 {
1001 if (!wpa_s->driver->set_prob_oper_freq)
1002 return 0;
1003 return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq);
1004 }
1005
wpa_drv_abort_scan(struct wpa_supplicant * wpa_s,u64 scan_cookie)1006 static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s,
1007 u64 scan_cookie)
1008 {
1009 if (!wpa_s->driver->abort_scan)
1010 return -1;
1011 return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie);
1012 }
1013
wpa_drv_configure_frame_filters(struct wpa_supplicant * wpa_s,u32 filters)1014 static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s,
1015 u32 filters)
1016 {
1017 if (!wpa_s->driver->configure_data_frame_filters)
1018 return -1;
1019 return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv,
1020 filters);
1021 }
1022
wpa_drv_get_ext_capa(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type)1023 static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s,
1024 enum wpa_driver_if_type type)
1025 {
1026 if (!wpa_s->driver->get_ext_capab)
1027 return -1;
1028 return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type,
1029 &wpa_s->extended_capa,
1030 &wpa_s->extended_capa_mask,
1031 &wpa_s->extended_capa_len);
1032 }
1033
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)1034 static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s,
1035 unsigned int channel,
1036 unsigned int period,
1037 unsigned int interval,
1038 unsigned int count,
1039 const u8 *device_types,
1040 size_t dev_types_len,
1041 const u8 *ies, size_t ies_len)
1042 {
1043 if (!wpa_s->driver->p2p_lo_start)
1044 return -1;
1045 return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period,
1046 interval, count, device_types,
1047 dev_types_len, ies, ies_len);
1048 }
1049
wpa_drv_p2p_lo_stop(struct wpa_supplicant * wpa_s)1050 static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s)
1051 {
1052 if (!wpa_s->driver->p2p_lo_stop)
1053 return -1;
1054 return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv);
1055 }
1056
wpa_drv_set_default_scan_ies(struct wpa_supplicant * wpa_s,const u8 * ies,size_t len)1057 static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s,
1058 const u8 *ies, size_t len)
1059 {
1060 if (!wpa_s->driver->set_default_scan_ies)
1061 return -1;
1062 return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len);
1063 }
1064
wpa_drv_set_tdls_mode(struct wpa_supplicant * wpa_s,int tdls_external_control)1065 static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s,
1066 int tdls_external_control)
1067 {
1068 if (!wpa_s->driver->set_tdls_mode)
1069 return -1;
1070 return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv,
1071 tdls_external_control);
1072 }
1073
1074 static inline struct wpa_bss_candidate_info *
wpa_drv_get_bss_trans_status(struct wpa_supplicant * wpa_s,struct wpa_bss_trans_info * params)1075 wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s,
1076 struct wpa_bss_trans_info *params)
1077 {
1078 if (!wpa_s->driver->get_bss_transition_status)
1079 return NULL;
1080 return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv,
1081 params);
1082 }
1083
wpa_drv_ignore_assoc_disallow(struct wpa_supplicant * wpa_s,int val)1084 static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s,
1085 int val)
1086 {
1087 if (!wpa_s->driver->ignore_assoc_disallow)
1088 return -1;
1089 return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val);
1090 }
1091
wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant * wpa_s,unsigned int num_bssid,const u8 * bssids)1092 static inline int wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant *wpa_s,
1093 unsigned int num_bssid,
1094 const u8 *bssids)
1095 {
1096 if (!wpa_s->driver->set_bssid_tmp_disallow)
1097 return -1;
1098 return wpa_s->driver->set_bssid_tmp_disallow(wpa_s->drv_priv, num_bssid,
1099 bssids);
1100 }
1101
wpa_drv_update_connect_params(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params,enum wpa_drv_update_connect_params_mask mask)1102 static inline int wpa_drv_update_connect_params(
1103 struct wpa_supplicant *wpa_s,
1104 struct wpa_driver_associate_params *params,
1105 enum wpa_drv_update_connect_params_mask mask)
1106 {
1107 if (!wpa_s->driver->update_connect_params)
1108 return -1;
1109
1110 if (params)
1111 params->freq.link_id = -1;
1112
1113 return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params,
1114 mask);
1115 }
1116
1117 static inline int
wpa_drv_send_external_auth_status(struct wpa_supplicant * wpa_s,struct external_auth * params)1118 wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s,
1119 struct external_auth *params)
1120 {
1121 if (!wpa_s->driver->send_external_auth_status)
1122 return -1;
1123 return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv,
1124 params);
1125 }
1126
wpa_drv_set_4addr_mode(struct wpa_supplicant * wpa_s,int val)1127 static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val)
1128 {
1129 if (!wpa_s->driver->set_4addr_mode)
1130 return -1;
1131 return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv,
1132 wpa_s->bridge_ifname, val);
1133 }
1134
wpa_drv_dpp_listen(struct wpa_supplicant * wpa_s,bool enable)1135 static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable)
1136 {
1137 if (!wpa_s->driver->dpp_listen)
1138 return 0;
1139 return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable);
1140 }
1141
wpa_drv_send_pasn_resp(struct wpa_supplicant * wpa_s,struct pasn_auth * params)1142 static inline int wpa_drv_send_pasn_resp(struct wpa_supplicant *wpa_s,
1143 struct pasn_auth *params)
1144 {
1145 if (!wpa_s->driver->send_pasn_resp)
1146 return -1;
1147 return wpa_s->driver->send_pasn_resp(wpa_s->drv_priv, params);
1148 }
1149
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)1150 static inline int wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant *wpa_s,
1151 const u8 *own_addr,
1152 const u8 *peer_addr,
1153 u32 cipher, u8 tk_len,
1154 const u8 *tk,
1155 u8 ltf_keyseed_len,
1156 const u8 *ltf_keyseed,
1157 u32 action)
1158 {
1159 struct secure_ranging_params params;
1160
1161 /* Configure secure ranging context only to the drivers that support it.
1162 */
1163 if (!wpa_s->driver->set_secure_ranging_ctx)
1164 return 0;
1165
1166 os_memset(¶ms, 0, sizeof(params));
1167 params.action = action;
1168 params.own_addr = own_addr;
1169 params.peer_addr = peer_addr;
1170 params.cipher = cipher;
1171 params.tk_len = tk_len;
1172 params.tk = tk;
1173 params.ltf_keyseed_len = ltf_keyseed_len;
1174 params.ltf_keyseed = ltf_keyseed;
1175
1176 return wpa_s->driver->set_secure_ranging_ctx(wpa_s->drv_priv, ¶ms);
1177 }
1178
1179 static inline int
wpas_drv_get_sta_mlo_info(struct wpa_supplicant * wpa_s,struct driver_sta_mlo_info * mlo_info)1180 wpas_drv_get_sta_mlo_info(struct wpa_supplicant *wpa_s,
1181 struct driver_sta_mlo_info *mlo_info)
1182 {
1183 if (!wpa_s->driver->get_sta_mlo_info)
1184 return 0;
1185
1186 return wpa_s->driver->get_sta_mlo_info(wpa_s->drv_priv, mlo_info);
1187 }
1188
1189 static inline int
wpas_drv_nan_flush(struct wpa_supplicant * wpa_s)1190 wpas_drv_nan_flush(struct wpa_supplicant *wpa_s)
1191 {
1192 if (!wpa_s->driver->nan_flush)
1193 return 0;
1194
1195 return wpa_s->driver->nan_flush(wpa_s->drv_priv);
1196 }
1197
1198 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)1199 wpas_drv_nan_publish(struct wpa_supplicant *wpa_s, const u8 *addr,
1200 int publish_id, const char *service_name,
1201 const u8 *service_id,
1202 enum nan_service_protocol_type srv_proto_type,
1203 const struct wpabuf *ssi, const struct wpabuf *elems,
1204 struct nan_publish_params *params)
1205 {
1206 if (!wpa_s->driver->nan_publish)
1207 return 0;
1208
1209 return wpa_s->driver->nan_publish(wpa_s->drv_priv, addr, publish_id,
1210 service_name, service_id,
1211 srv_proto_type, ssi, elems, params);
1212 }
1213
1214 static inline int
wpas_drv_nan_cancel_publish(struct wpa_supplicant * wpa_s,int publish_id)1215 wpas_drv_nan_cancel_publish(struct wpa_supplicant *wpa_s, int publish_id)
1216 {
1217 if (!wpa_s->driver->nan_cancel_publish)
1218 return 0;
1219
1220 return wpa_s->driver->nan_cancel_publish(wpa_s->drv_priv, publish_id);
1221 }
1222
1223 static inline int
wpas_drv_nan_update_publish(struct wpa_supplicant * wpa_s,int publish_id,const struct wpabuf * ssi)1224 wpas_drv_nan_update_publish(struct wpa_supplicant *wpa_s, int publish_id,
1225 const struct wpabuf *ssi)
1226 {
1227 if (!wpa_s->driver->nan_update_publish)
1228 return 0;
1229
1230 return wpa_s->driver->nan_update_publish(wpa_s->drv_priv, publish_id,
1231 ssi);
1232 }
1233
1234 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)1235 wpas_drv_nan_subscribe(struct wpa_supplicant *wpa_s, const u8 *addr,
1236 int subscribe_id, const char *service_name,
1237 const u8 *service_id,
1238 enum nan_service_protocol_type srv_proto_type,
1239 const struct wpabuf *ssi, const struct wpabuf *elems,
1240 struct nan_subscribe_params *params)
1241 {
1242 if (!wpa_s->driver->nan_subscribe)
1243 return 0;
1244
1245 return wpa_s->driver->nan_subscribe(wpa_s->drv_priv, addr, subscribe_id,
1246 service_name, service_id,
1247 srv_proto_type, ssi, elems, params);
1248 }
1249
1250 static inline int
wpas_drv_nan_cancel_subscribe(struct wpa_supplicant * wpa_s,int subscribe_id)1251 wpas_drv_nan_cancel_subscribe(struct wpa_supplicant *wpa_s, int subscribe_id)
1252 {
1253 if (!wpa_s->driver->nan_cancel_subscribe)
1254 return 0;
1255
1256 return wpa_s->driver->nan_cancel_subscribe(wpa_s->drv_priv,
1257 subscribe_id);
1258 }
1259
1260 #endif /* DRIVER_I_H */
1261