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 "drivers/driver.h"
13
14 /* driver_ops */
wpa_drv_init(struct wpa_supplicant * wpa_s,const char * ifname)15 static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
16 const char *ifname)
17 {
18 if (wpa_s->driver->init2)
19 return wpa_s->driver->init2(wpa_s, ifname,
20 wpa_s->global_drv_priv);
21 if (wpa_s->driver->init) {
22 return wpa_s->driver->init(wpa_s, ifname);
23 }
24 return NULL;
25 }
26
wpa_drv_deinit(struct wpa_supplicant * wpa_s)27 static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
28 {
29 if (wpa_s->driver->deinit)
30 wpa_s->driver->deinit(wpa_s->drv_priv);
31 }
32
wpa_drv_set_param(struct wpa_supplicant * wpa_s,const char * param)33 static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
34 const char *param)
35 {
36 if (wpa_s->driver->set_param)
37 return wpa_s->driver->set_param(wpa_s->drv_priv, param);
38 return 0;
39 }
40
wpa_drv_set_countermeasures(struct wpa_supplicant * wpa_s,int enabled)41 static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
42 int enabled)
43 {
44 if (wpa_s->driver->set_countermeasures) {
45 return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
46 enabled);
47 }
48 return -1;
49 }
50
wpa_drv_authenticate(struct wpa_supplicant * wpa_s,struct wpa_driver_auth_params * params)51 static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
52 struct wpa_driver_auth_params *params)
53 {
54 if (wpa_s->driver->authenticate)
55 return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
56 return -1;
57 }
58
wpa_drv_associate(struct wpa_supplicant * wpa_s,struct wpa_driver_associate_params * params)59 static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
60 struct wpa_driver_associate_params *params)
61 {
62 if (wpa_s->driver->associate) {
63 return wpa_s->driver->associate(wpa_s->drv_priv, params);
64 }
65 return -1;
66 }
67
wpa_drv_init_mesh(struct wpa_supplicant * wpa_s)68 static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s)
69 {
70 if (wpa_s->driver->init_mesh)
71 return wpa_s->driver->init_mesh(wpa_s->drv_priv);
72 return -1;
73 }
74
wpa_drv_join_mesh(struct wpa_supplicant * wpa_s,struct wpa_driver_mesh_join_params * params)75 static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s,
76 struct wpa_driver_mesh_join_params *params)
77 {
78 if (wpa_s->driver->join_mesh)
79 return wpa_s->driver->join_mesh(wpa_s->drv_priv, params);
80 return -1;
81 }
82
wpa_drv_leave_mesh(struct wpa_supplicant * wpa_s)83 static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s)
84 {
85 if (wpa_s->driver->leave_mesh)
86 return wpa_s->driver->leave_mesh(wpa_s->drv_priv);
87 return -1;
88 }
89
wpa_drv_scan(struct wpa_supplicant * wpa_s,struct wpa_driver_scan_params * params)90 static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
91 struct wpa_driver_scan_params *params)
92 {
93 #ifdef CONFIG_TESTING_OPTIONS
94 if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER)
95 return -EBUSY;
96 #endif /* CONFIG_TESTING_OPTIONS */
97 if (wpa_s->driver->scan2)
98 return wpa_s->driver->scan2(wpa_s->drv_priv, params);
99 return -1;
100 }
101
wpa_drv_sched_scan(struct wpa_supplicant * wpa_s,struct wpa_driver_scan_params * params,u32 interval)102 static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
103 struct wpa_driver_scan_params *params,
104 u32 interval)
105 {
106 if (wpa_s->driver->sched_scan)
107 return wpa_s->driver->sched_scan(wpa_s->drv_priv,
108 params, interval);
109 return -1;
110 }
111
wpa_drv_stop_sched_scan(struct wpa_supplicant * wpa_s)112 static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s)
113 {
114 if (wpa_s->driver->stop_sched_scan)
115 return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv);
116 return -1;
117 }
118
wpa_drv_get_scan_results2(struct wpa_supplicant * wpa_s)119 static inline struct wpa_scan_results * wpa_drv_get_scan_results2(
120 struct wpa_supplicant *wpa_s)
121 {
122 if (wpa_s->driver->get_scan_results2)
123 return wpa_s->driver->get_scan_results2(wpa_s->drv_priv);
124 return NULL;
125 }
126
wpa_drv_get_bssid(struct wpa_supplicant * wpa_s,u8 * bssid)127 static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
128 {
129 if (wpa_s->driver->get_bssid) {
130 return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
131 }
132 return -1;
133 }
134
wpa_drv_get_ssid(struct wpa_supplicant * wpa_s,u8 * ssid)135 static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
136 {
137 if (wpa_s->driver->get_ssid) {
138 return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
139 }
140 return -1;
141 }
142
wpa_drv_set_key(struct wpa_supplicant * wpa_s,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)143 static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s,
144 enum wpa_alg alg, const u8 *addr,
145 int key_idx, int set_tx,
146 const u8 *seq, size_t seq_len,
147 const u8 *key, size_t key_len)
148 {
149 if (alg != WPA_ALG_NONE) {
150 if (key_idx >= 0 && key_idx <= 6)
151 wpa_s->keys_cleared &= ~BIT(key_idx);
152 else
153 wpa_s->keys_cleared = 0;
154 }
155 if (wpa_s->driver->set_key) {
156 return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv,
157 alg, addr, key_idx, set_tx,
158 seq, seq_len, key, key_len);
159 }
160 return -1;
161 }
162
wpa_drv_sta_deauth(struct wpa_supplicant * wpa_s,const u8 * addr,int reason_code)163 static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s,
164 const u8 *addr, int reason_code)
165 {
166 if (wpa_s->driver->sta_deauth) {
167 return wpa_s->driver->sta_deauth(wpa_s->drv_priv,
168 wpa_s->own_addr, addr,
169 reason_code);
170 }
171 return -1;
172 }
173
wpa_drv_deauthenticate(struct wpa_supplicant * wpa_s,const u8 * addr,int reason_code)174 static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
175 const u8 *addr, int reason_code)
176 {
177 if (wpa_s->driver->deauthenticate) {
178 return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
179 reason_code);
180 }
181 return -1;
182 }
183
wpa_drv_add_pmkid(struct wpa_supplicant * wpa_s,const u8 * bssid,const u8 * pmkid)184 static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
185 const u8 *bssid, const u8 *pmkid)
186 {
187 if (wpa_s->driver->add_pmkid) {
188 return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid);
189 }
190 return -1;
191 }
192
wpa_drv_remove_pmkid(struct wpa_supplicant * wpa_s,const u8 * bssid,const u8 * pmkid)193 static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
194 const u8 *bssid, const u8 *pmkid)
195 {
196 if (wpa_s->driver->remove_pmkid) {
197 return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid,
198 pmkid);
199 }
200 return -1;
201 }
202
wpa_drv_flush_pmkid(struct wpa_supplicant * wpa_s)203 static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
204 {
205 if (wpa_s->driver->flush_pmkid) {
206 return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
207 }
208 return -1;
209 }
210
wpa_drv_get_capa(struct wpa_supplicant * wpa_s,struct wpa_driver_capa * capa)211 static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
212 struct wpa_driver_capa *capa)
213 {
214 if (wpa_s->driver->get_capa) {
215 return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
216 }
217 return -1;
218 }
219
wpa_drv_poll(struct wpa_supplicant * wpa_s)220 static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
221 {
222 if (wpa_s->driver->poll) {
223 wpa_s->driver->poll(wpa_s->drv_priv);
224 }
225 }
226
wpa_drv_get_ifname(struct wpa_supplicant * wpa_s)227 static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
228 {
229 if (wpa_s->driver->get_ifname) {
230 return wpa_s->driver->get_ifname(wpa_s->drv_priv);
231 }
232 return NULL;
233 }
234
235 static inline const char *
wpa_driver_get_radio_name(struct wpa_supplicant * wpa_s)236 wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s)
237 {
238 if (wpa_s->driver->get_radio_name)
239 return wpa_s->driver->get_radio_name(wpa_s->drv_priv);
240 return NULL;
241 }
242
wpa_drv_get_mac_addr(struct wpa_supplicant * wpa_s)243 static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
244 {
245 if (wpa_s->driver->get_mac_addr) {
246 return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
247 }
248 return NULL;
249 }
250
wpa_drv_set_operstate(struct wpa_supplicant * wpa_s,int state)251 static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
252 int state)
253 {
254 if (wpa_s->driver->set_operstate)
255 return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
256 return 0;
257 }
258
wpa_drv_mlme_setprotection(struct wpa_supplicant * wpa_s,const u8 * addr,int protect_type,int key_type)259 static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
260 const u8 *addr, int protect_type,
261 int key_type)
262 {
263 if (wpa_s->driver->mlme_setprotection)
264 return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
265 protect_type,
266 key_type);
267 return 0;
268 }
269
270 static inline struct hostapd_hw_modes *
wpa_drv_get_hw_feature_data(struct wpa_supplicant * wpa_s,u16 * num_modes,u16 * flags)271 wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
272 u16 *flags)
273 {
274 if (wpa_s->driver->get_hw_feature_data)
275 return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
276 num_modes, flags);
277 return NULL;
278 }
279
wpa_drv_set_country(struct wpa_supplicant * wpa_s,const char * alpha2)280 static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
281 const char *alpha2)
282 {
283 if (wpa_s->driver->set_country)
284 return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
285 return 0;
286 }
287
wpa_drv_send_mlme(struct wpa_supplicant * wpa_s,const u8 * data,size_t data_len,int noack,unsigned int freq)288 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
289 const u8 *data, size_t data_len, int noack,
290 unsigned int freq)
291 {
292 if (wpa_s->driver->send_mlme)
293 return wpa_s->driver->send_mlme(wpa_s->drv_priv,
294 data, data_len, noack,
295 freq);
296 return -1;
297 }
298
wpa_drv_update_ft_ies(struct wpa_supplicant * wpa_s,const u8 * md,const u8 * ies,size_t ies_len)299 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
300 const u8 *md,
301 const u8 *ies, size_t ies_len)
302 {
303 if (wpa_s->driver->update_ft_ies)
304 return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
305 ies, ies_len);
306 return -1;
307 }
308
wpa_drv_set_ap(struct wpa_supplicant * wpa_s,struct wpa_driver_ap_params * params)309 static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s,
310 struct wpa_driver_ap_params *params)
311 {
312 if (wpa_s->driver->set_ap)
313 return wpa_s->driver->set_ap(wpa_s->drv_priv, params);
314 return -1;
315 }
316
wpa_drv_sta_add(struct wpa_supplicant * wpa_s,struct hostapd_sta_add_params * params)317 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
318 struct hostapd_sta_add_params *params)
319 {
320 if (wpa_s->driver->sta_add)
321 return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
322 return -1;
323 }
324
wpa_drv_sta_remove(struct wpa_supplicant * wpa_s,const u8 * addr)325 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
326 const u8 *addr)
327 {
328 if (wpa_s->driver->sta_remove)
329 return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
330 return -1;
331 }
332
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)333 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
334 const u8 *addr, const u8 *data,
335 size_t data_len, int encrypt,
336 const u8 *own_addr, u32 flags)
337 {
338 if (wpa_s->driver->hapd_send_eapol)
339 return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
340 data, data_len, encrypt,
341 own_addr, flags);
342 return -1;
343 }
344
wpa_drv_sta_set_flags(struct wpa_supplicant * wpa_s,const u8 * addr,int total_flags,int flags_or,int flags_and)345 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
346 const u8 *addr, int total_flags,
347 int flags_or, int flags_and)
348 {
349 if (wpa_s->driver->sta_set_flags)
350 return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
351 total_flags, flags_or,
352 flags_and);
353 return -1;
354 }
355
wpa_drv_set_supp_port(struct wpa_supplicant * wpa_s,int authorized)356 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
357 int authorized)
358 {
359 if (wpa_s->driver->set_supp_port) {
360 return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
361 authorized);
362 }
363 return 0;
364 }
365
wpa_drv_send_action(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int wait,const u8 * dst,const u8 * src,const u8 * bssid,const u8 * data,size_t data_len,int no_cck)366 static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s,
367 unsigned int freq,
368 unsigned int wait,
369 const u8 *dst, const u8 *src,
370 const u8 *bssid,
371 const u8 *data, size_t data_len,
372 int no_cck)
373 {
374 if (wpa_s->driver->send_action)
375 return wpa_s->driver->send_action(wpa_s->drv_priv, freq,
376 wait, dst, src, bssid,
377 data, data_len, no_cck);
378 return -1;
379 }
380
wpa_drv_send_action_cancel_wait(struct wpa_supplicant * wpa_s)381 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
382 {
383 if (wpa_s->driver->send_action_cancel_wait)
384 wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
385 }
386
wpa_drv_set_freq(struct wpa_supplicant * wpa_s,struct hostapd_freq_params * freq)387 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
388 struct hostapd_freq_params *freq)
389 {
390 if (wpa_s->driver->set_freq)
391 return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
392 return -1;
393 }
394
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)395 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
396 enum wpa_driver_if_type type,
397 const char *ifname, const u8 *addr,
398 void *bss_ctx, char *force_ifname,
399 u8 *if_addr, const char *bridge)
400 {
401 if (wpa_s->driver->if_add)
402 return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
403 addr, bss_ctx, NULL, force_ifname,
404 if_addr, bridge, 0);
405 return -1;
406 }
407
wpa_drv_if_remove(struct wpa_supplicant * wpa_s,enum wpa_driver_if_type type,const char * ifname)408 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
409 enum wpa_driver_if_type type,
410 const char *ifname)
411 {
412 if (wpa_s->driver->if_remove)
413 return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
414 return -1;
415 }
416
wpa_drv_remain_on_channel(struct wpa_supplicant * wpa_s,unsigned int freq,unsigned int duration)417 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
418 unsigned int freq,
419 unsigned int duration)
420 {
421 if (wpa_s->driver->remain_on_channel)
422 return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
423 duration);
424 return -1;
425 }
426
wpa_drv_cancel_remain_on_channel(struct wpa_supplicant * wpa_s)427 static inline int wpa_drv_cancel_remain_on_channel(
428 struct wpa_supplicant *wpa_s)
429 {
430 if (wpa_s->driver->cancel_remain_on_channel)
431 return wpa_s->driver->cancel_remain_on_channel(
432 wpa_s->drv_priv);
433 return -1;
434 }
435
wpa_drv_probe_req_report(struct wpa_supplicant * wpa_s,int report)436 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
437 int report)
438 {
439 if (wpa_s->driver->probe_req_report)
440 return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
441 report);
442 return -1;
443 }
444
wpa_drv_deinit_ap(struct wpa_supplicant * wpa_s)445 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
446 {
447 if (wpa_s->driver->deinit_ap)
448 return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
449 return 0;
450 }
451
wpa_drv_deinit_p2p_cli(struct wpa_supplicant * wpa_s)452 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
453 {
454 if (wpa_s->driver->deinit_p2p_cli)
455 return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
456 return 0;
457 }
458
wpa_drv_suspend(struct wpa_supplicant * wpa_s)459 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
460 {
461 if (wpa_s->driver->suspend)
462 wpa_s->driver->suspend(wpa_s->drv_priv);
463 }
464
wpa_drv_resume(struct wpa_supplicant * wpa_s)465 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
466 {
467 if (wpa_s->driver->resume)
468 wpa_s->driver->resume(wpa_s->drv_priv);
469 }
470
wpa_drv_signal_monitor(struct wpa_supplicant * wpa_s,int threshold,int hysteresis)471 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
472 int threshold, int hysteresis)
473 {
474 if (wpa_s->driver->signal_monitor)
475 return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
476 threshold, hysteresis);
477 return -1;
478 }
479
wpa_drv_signal_poll(struct wpa_supplicant * wpa_s,struct wpa_signal_info * si)480 static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
481 struct wpa_signal_info *si)
482 {
483 if (wpa_s->driver->signal_poll)
484 return wpa_s->driver->signal_poll(wpa_s->drv_priv, si);
485 return -1;
486 }
487
wpa_drv_pktcnt_poll(struct wpa_supplicant * wpa_s,struct hostap_sta_driver_data * sta)488 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
489 struct hostap_sta_driver_data *sta)
490 {
491 if (wpa_s->driver->read_sta_data)
492 return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
493 wpa_s->bssid);
494 return -1;
495 }
496
wpa_drv_set_ap_wps_ie(struct wpa_supplicant * wpa_s,const struct wpabuf * beacon,const struct wpabuf * proberesp,const struct wpabuf * assocresp)497 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
498 const struct wpabuf *beacon,
499 const struct wpabuf *proberesp,
500 const struct wpabuf *assocresp)
501 {
502 if (!wpa_s->driver->set_ap_wps_ie)
503 return -1;
504 return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
505 proberesp, assocresp);
506 }
507
wpa_drv_get_noa(struct wpa_supplicant * wpa_s,u8 * buf,size_t buf_len)508 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
509 u8 *buf, size_t buf_len)
510 {
511 if (!wpa_s->driver->get_noa)
512 return -1;
513 return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
514 }
515
wpa_drv_set_p2p_powersave(struct wpa_supplicant * wpa_s,int legacy_ps,int opp_ps,int ctwindow)516 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
517 int legacy_ps, int opp_ps,
518 int ctwindow)
519 {
520 if (!wpa_s->driver->set_p2p_powersave)
521 return -1;
522 return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
523 opp_ps, ctwindow);
524 }
525
wpa_drv_ampdu(struct wpa_supplicant * wpa_s,int ampdu)526 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
527 {
528 if (!wpa_s->driver->ampdu)
529 return -1;
530 return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
531 }
532
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)533 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
534 const u8 *dst, u8 action_code,
535 u8 dialog_token, u16 status_code,
536 u32 peer_capab, int initiator,
537 const u8 *buf, size_t len)
538 {
539 if (wpa_s->driver->send_tdls_mgmt) {
540 return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
541 action_code, dialog_token,
542 status_code, peer_capab,
543 initiator, buf, len);
544 }
545 return -1;
546 }
547
wpa_drv_tdls_oper(struct wpa_supplicant * wpa_s,enum tdls_oper oper,const u8 * peer)548 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
549 enum tdls_oper oper, const u8 *peer)
550 {
551 if (!wpa_s->driver->tdls_oper)
552 return -1;
553 return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
554 }
555
556 #ifdef ANDROID
wpa_drv_driver_cmd(struct wpa_supplicant * wpa_s,char * cmd,char * buf,size_t buf_len)557 static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
558 char *cmd, char *buf, size_t buf_len)
559 {
560 if (!wpa_s->driver->driver_cmd)
561 return -1;
562 return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
563 }
564 #endif /* ANDROID */
565
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)566 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
567 const u8 *kek, size_t kek_len,
568 const u8 *kck, size_t kck_len,
569 const u8 *replay_ctr)
570 {
571 if (!wpa_s->driver->set_rekey_info)
572 return;
573 wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
574 kck, kck_len, replay_ctr);
575 }
576
wpa_drv_radio_disable(struct wpa_supplicant * wpa_s,int disabled)577 static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
578 int disabled)
579 {
580 if (!wpa_s->driver->radio_disable)
581 return -1;
582 return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
583 }
584
wpa_drv_switch_channel(struct wpa_supplicant * wpa_s,struct csa_settings * settings)585 static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
586 struct csa_settings *settings)
587 {
588 if (!wpa_s->driver->switch_channel)
589 return -1;
590 return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
591 }
592
wpa_drv_add_ts(struct wpa_supplicant * wpa_s,u8 tsid,const u8 * address,u8 user_priority,u16 admitted_time)593 static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
594 const u8 *address, u8 user_priority,
595 u16 admitted_time)
596 {
597 if (!wpa_s->driver->add_tx_ts)
598 return -1;
599 return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
600 user_priority, admitted_time);
601 }
602
wpa_drv_del_ts(struct wpa_supplicant * wpa_s,u8 tid,const u8 * address)603 static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
604 const u8 *address)
605 {
606 if (!wpa_s->driver->del_tx_ts)
607 return -1;
608 return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
609 }
610
wpa_drv_tdls_enable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr,u8 oper_class,const struct hostapd_freq_params * freq_params)611 static inline int wpa_drv_tdls_enable_channel_switch(
612 struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
613 const struct hostapd_freq_params *freq_params)
614 {
615 if (!wpa_s->driver->tdls_enable_channel_switch)
616 return -1;
617 return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
618 oper_class,
619 freq_params);
620 }
621
622 static inline int
wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant * wpa_s,const u8 * addr)623 wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
624 const u8 *addr)
625 {
626 if (!wpa_s->driver->tdls_disable_channel_switch)
627 return -1;
628 return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
629 addr);
630 }
631
wpa_drv_wnm_oper(struct wpa_supplicant * wpa_s,enum wnm_oper oper,const u8 * peer,u8 * buf,u16 * buf_len)632 static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
633 enum wnm_oper oper, const u8 *peer,
634 u8 *buf, u16 *buf_len)
635 {
636 if (!wpa_s->driver->wnm_oper)
637 return -1;
638 return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
639 buf_len);
640 }
641
wpa_drv_status(struct wpa_supplicant * wpa_s,char * buf,size_t buflen)642 static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
643 char *buf, size_t buflen)
644 {
645 if (!wpa_s->driver->status)
646 return -1;
647 return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
648 }
649
wpa_drv_set_qos_map(struct wpa_supplicant * wpa_s,const u8 * qos_map_set,u8 qos_map_set_len)650 static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
651 const u8 *qos_map_set, u8 qos_map_set_len)
652 {
653 if (!wpa_s->driver->set_qos_map)
654 return -1;
655 return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
656 qos_map_set_len);
657 }
658
wpa_drv_wowlan(struct wpa_supplicant * wpa_s,const struct wowlan_triggers * triggers)659 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
660 const struct wowlan_triggers *triggers)
661 {
662 if (!wpa_s->driver->set_wowlan)
663 return -1;
664 return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
665 }
666
wpa_drv_vendor_cmd(struct wpa_supplicant * wpa_s,int vendor_id,int subcmd,const u8 * data,size_t data_len,struct wpabuf * buf)667 static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
668 int vendor_id, int subcmd, const u8 *data,
669 size_t data_len, struct wpabuf *buf)
670 {
671 if (!wpa_s->driver->vendor_cmd)
672 return -1;
673 return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
674 data, data_len, buf);
675 }
676
wpa_drv_roaming(struct wpa_supplicant * wpa_s,int allowed,const u8 * bssid)677 static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
678 const u8 *bssid)
679 {
680 if (!wpa_s->driver->roaming)
681 return -1;
682 return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
683 }
684
wpa_drv_set_mac_addr(struct wpa_supplicant * wpa_s,const u8 * addr)685 static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
686 const u8 *addr)
687 {
688 if (!wpa_s->driver->set_mac_addr)
689 return -1;
690 return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
691 }
692
693
694 #ifdef CONFIG_MACSEC
695
wpa_drv_macsec_init(struct wpa_supplicant * wpa_s,struct macsec_init_params * params)696 static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
697 struct macsec_init_params *params)
698 {
699 if (!wpa_s->driver->macsec_init)
700 return -1;
701 return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
702 }
703
wpa_drv_macsec_deinit(struct wpa_supplicant * wpa_s)704 static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
705 {
706 if (!wpa_s->driver->macsec_deinit)
707 return -1;
708 return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
709 }
710
wpa_drv_enable_protect_frames(struct wpa_supplicant * wpa_s,Boolean enabled)711 static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
712 Boolean enabled)
713 {
714 if (!wpa_s->driver->enable_protect_frames)
715 return -1;
716 return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
717 }
718
wpa_drv_set_replay_protect(struct wpa_supplicant * wpa_s,Boolean enabled,u32 window)719 static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
720 Boolean enabled, u32 window)
721 {
722 if (!wpa_s->driver->set_replay_protect)
723 return -1;
724 return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
725 window);
726 }
727
wpa_drv_set_current_cipher_suite(struct wpa_supplicant * wpa_s,const u8 * cs,size_t cs_len)728 static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
729 const u8 *cs, size_t cs_len)
730 {
731 if (!wpa_s->driver->set_current_cipher_suite)
732 return -1;
733 return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs,
734 cs_len);
735 }
736
wpa_drv_enable_controlled_port(struct wpa_supplicant * wpa_s,Boolean enabled)737 static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
738 Boolean enabled)
739 {
740 if (!wpa_s->driver->enable_controlled_port)
741 return -1;
742 return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
743 }
744
wpa_drv_get_receive_lowest_pn(struct wpa_supplicant * wpa_s,u32 channel,u8 an,u32 * lowest_pn)745 static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
746 u32 channel, u8 an,
747 u32 *lowest_pn)
748 {
749 if (!wpa_s->driver->get_receive_lowest_pn)
750 return -1;
751 return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, channel,
752 an, lowest_pn);
753 }
754
wpa_drv_get_transmit_next_pn(struct wpa_supplicant * wpa_s,u32 channel,u8 an,u32 * next_pn)755 static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
756 u32 channel, u8 an,
757 u32 *next_pn)
758 {
759 if (!wpa_s->driver->get_transmit_next_pn)
760 return -1;
761 return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, channel,
762 an, next_pn);
763 }
764
wpa_drv_set_transmit_next_pn(struct wpa_supplicant * wpa_s,u32 channel,u8 an,u32 next_pn)765 static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
766 u32 channel, u8 an,
767 u32 next_pn)
768 {
769 if (!wpa_s->driver->set_transmit_next_pn)
770 return -1;
771 return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, channel,
772 an, next_pn);
773 }
774
wpa_drv_get_available_receive_sc(struct wpa_supplicant * wpa_s,u32 * channel)775 static inline int wpa_drv_get_available_receive_sc(struct wpa_supplicant *wpa_s,
776 u32 *channel)
777 {
778 if (!wpa_s->driver->get_available_receive_sc)
779 return -1;
780 return wpa_s->driver->get_available_receive_sc(wpa_s->drv_priv,
781 channel);
782 }
783
784 static inline int
wpa_drv_create_receive_sc(struct wpa_supplicant * wpa_s,u32 channel,const u8 * sci_addr,u16 sci_port,unsigned int conf_offset,int validation)785 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, u32 channel,
786 const u8 *sci_addr, u16 sci_port,
787 unsigned int conf_offset, int validation)
788 {
789 if (!wpa_s->driver->create_receive_sc)
790 return -1;
791 return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, channel,
792 sci_addr, sci_port, conf_offset,
793 validation);
794 }
795
wpa_drv_delete_receive_sc(struct wpa_supplicant * wpa_s,u32 channel)796 static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
797 u32 channel)
798 {
799 if (!wpa_s->driver->delete_receive_sc)
800 return -1;
801 return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, channel);
802 }
803
wpa_drv_create_receive_sa(struct wpa_supplicant * wpa_s,u32 channel,u8 an,u32 lowest_pn,const u8 * sak)804 static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
805 u32 channel, u8 an,
806 u32 lowest_pn, const u8 *sak)
807 {
808 if (!wpa_s->driver->create_receive_sa)
809 return -1;
810 return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, channel, an,
811 lowest_pn, sak);
812 }
813
wpa_drv_enable_receive_sa(struct wpa_supplicant * wpa_s,u32 channel,u8 an)814 static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
815 u32 channel, u8 an)
816 {
817 if (!wpa_s->driver->enable_receive_sa)
818 return -1;
819 return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, channel, an);
820 }
821
wpa_drv_disable_receive_sa(struct wpa_supplicant * wpa_s,u32 channel,u8 an)822 static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
823 u32 channel, u8 an)
824 {
825 if (!wpa_s->driver->disable_receive_sa)
826 return -1;
827 return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, channel, an);
828 }
829
830 static inline int
wpa_drv_get_available_transmit_sc(struct wpa_supplicant * wpa_s,u32 * channel)831 wpa_drv_get_available_transmit_sc(struct wpa_supplicant *wpa_s, u32 *channel)
832 {
833 if (!wpa_s->driver->get_available_transmit_sc)
834 return -1;
835 return wpa_s->driver->get_available_transmit_sc(wpa_s->drv_priv,
836 channel);
837 }
838
839 static inline int
wpa_drv_create_transmit_sc(struct wpa_supplicant * wpa_s,u32 channel,const u8 * sci_addr,u16 sci_port,unsigned int conf_offset)840 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, u32 channel,
841 const u8 *sci_addr, u16 sci_port,
842 unsigned int conf_offset)
843 {
844 if (!wpa_s->driver->create_transmit_sc)
845 return -1;
846 return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, channel,
847 sci_addr, sci_port,
848 conf_offset);
849 }
850
wpa_drv_delete_transmit_sc(struct wpa_supplicant * wpa_s,u32 channel)851 static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
852 u32 channel)
853 {
854 if (!wpa_s->driver->delete_transmit_sc)
855 return -1;
856 return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, channel);
857 }
858
wpa_drv_create_transmit_sa(struct wpa_supplicant * wpa_s,u32 channel,u8 an,u32 next_pn,Boolean confidentiality,const u8 * sak)859 static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
860 u32 channel, u8 an,
861 u32 next_pn,
862 Boolean confidentiality,
863 const u8 *sak)
864 {
865 if (!wpa_s->driver->create_transmit_sa)
866 return -1;
867 return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, channel, an,
868 next_pn, confidentiality, sak);
869 }
870
wpa_drv_enable_transmit_sa(struct wpa_supplicant * wpa_s,u32 channel,u8 an)871 static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
872 u32 channel, u8 an)
873 {
874 if (!wpa_s->driver->enable_transmit_sa)
875 return -1;
876 return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, channel, an);
877 }
878
wpa_drv_disable_transmit_sa(struct wpa_supplicant * wpa_s,u32 channel,u8 an)879 static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
880 u32 channel, u8 an)
881 {
882 if (!wpa_s->driver->disable_transmit_sa)
883 return -1;
884 return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, channel, an);
885 }
886 #endif /* CONFIG_MACSEC */
887
wpa_drv_setband(struct wpa_supplicant * wpa_s,enum set_band band)888 static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s,
889 enum set_band band)
890 {
891 if (!wpa_s->driver->set_band)
892 return -1;
893 return wpa_s->driver->set_band(wpa_s->drv_priv, band);
894 }
895
896 #endif /* DRIVER_I_H */
897