Preparations for variable length KCK and KEK
[mech_eap.git] / wpa_supplicant / driver_i.h
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 */
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 *
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
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
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
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 *
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
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
288 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
289                                     const u8 *data, size_t data_len, int noack)
290 {
291         if (wpa_s->driver->send_mlme)
292                 return wpa_s->driver->send_mlme(wpa_s->drv_priv,
293                                                 data, data_len, noack);
294         return -1;
295 }
296
297 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
298                                         const u8 *md,
299                                         const u8 *ies, size_t ies_len)
300 {
301         if (wpa_s->driver->update_ft_ies)
302                 return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
303                                                     ies, ies_len);
304         return -1;
305 }
306
307 static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s,
308                                  struct wpa_driver_ap_params *params)
309 {
310         if (wpa_s->driver->set_ap)
311                 return wpa_s->driver->set_ap(wpa_s->drv_priv, params);
312         return -1;
313 }
314
315 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
316                                   struct hostapd_sta_add_params *params)
317 {
318         if (wpa_s->driver->sta_add)
319                 return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
320         return -1;
321 }
322
323 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
324                                      const u8 *addr)
325 {
326         if (wpa_s->driver->sta_remove)
327                 return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
328         return -1;
329 }
330
331 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
332                                           const u8 *addr, const u8 *data,
333                                           size_t data_len, int encrypt,
334                                           const u8 *own_addr, u32 flags)
335 {
336         if (wpa_s->driver->hapd_send_eapol)
337                 return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
338                                                       data, data_len, encrypt,
339                                                       own_addr, flags);
340         return -1;
341 }
342
343 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
344                                         const u8 *addr, int total_flags,
345                                         int flags_or, int flags_and)
346 {
347         if (wpa_s->driver->sta_set_flags)
348                 return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
349                                                     total_flags, flags_or,
350                                                     flags_and);
351         return -1;
352 }
353
354 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
355                                         int authorized)
356 {
357         if (wpa_s->driver->set_supp_port) {
358                 return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
359                                                     authorized);
360         }
361         return 0;
362 }
363
364 static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s,
365                                       unsigned int freq,
366                                       unsigned int wait,
367                                       const u8 *dst, const u8 *src,
368                                       const u8 *bssid,
369                                       const u8 *data, size_t data_len,
370                                       int no_cck)
371 {
372         if (wpa_s->driver->send_action)
373                 return wpa_s->driver->send_action(wpa_s->drv_priv, freq,
374                                                   wait, dst, src, bssid,
375                                                   data, data_len, no_cck);
376         return -1;
377 }
378
379 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
380 {
381         if (wpa_s->driver->send_action_cancel_wait)
382                 wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
383 }
384
385 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
386                                    struct hostapd_freq_params *freq)
387 {
388         if (wpa_s->driver->set_freq)
389                 return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
390         return -1;
391 }
392
393 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
394                                  enum wpa_driver_if_type type,
395                                  const char *ifname, const u8 *addr,
396                                  void *bss_ctx, char *force_ifname,
397                                  u8 *if_addr, const char *bridge)
398 {
399         if (wpa_s->driver->if_add)
400                 return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
401                                              addr, bss_ctx, NULL, force_ifname,
402                                              if_addr, bridge, 0);
403         return -1;
404 }
405
406 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
407                                     enum wpa_driver_if_type type,
408                                     const char *ifname)
409 {
410         if (wpa_s->driver->if_remove)
411                 return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
412         return -1;
413 }
414
415 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
416                                             unsigned int freq,
417                                             unsigned int duration)
418 {
419         if (wpa_s->driver->remain_on_channel)
420                 return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
421                                                         duration);
422         return -1;
423 }
424
425 static inline int wpa_drv_cancel_remain_on_channel(
426         struct wpa_supplicant *wpa_s)
427 {
428         if (wpa_s->driver->cancel_remain_on_channel)
429                 return wpa_s->driver->cancel_remain_on_channel(
430                         wpa_s->drv_priv);
431         return -1;
432 }
433
434 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
435                                            int report)
436 {
437         if (wpa_s->driver->probe_req_report)
438                 return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
439                                                        report);
440         return -1;
441 }
442
443 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
444 {
445         if (wpa_s->driver->deinit_ap)
446                 return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
447         return 0;
448 }
449
450 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
451 {
452         if (wpa_s->driver->deinit_p2p_cli)
453                 return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
454         return 0;
455 }
456
457 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
458 {
459         if (wpa_s->driver->suspend)
460                 wpa_s->driver->suspend(wpa_s->drv_priv);
461 }
462
463 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
464 {
465         if (wpa_s->driver->resume)
466                 wpa_s->driver->resume(wpa_s->drv_priv);
467 }
468
469 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
470                                          int threshold, int hysteresis)
471 {
472         if (wpa_s->driver->signal_monitor)
473                 return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
474                                                      threshold, hysteresis);
475         return -1;
476 }
477
478 static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
479                                       struct wpa_signal_info *si)
480 {
481         if (wpa_s->driver->signal_poll)
482                 return wpa_s->driver->signal_poll(wpa_s->drv_priv, si);
483         return -1;
484 }
485
486 static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s,
487                                       struct hostap_sta_driver_data *sta)
488 {
489         if (wpa_s->driver->read_sta_data)
490                 return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta,
491                                                     wpa_s->bssid);
492         return -1;
493 }
494
495 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
496                                         const struct wpabuf *beacon,
497                                         const struct wpabuf *proberesp,
498                                         const struct wpabuf *assocresp)
499 {
500         if (!wpa_s->driver->set_ap_wps_ie)
501                 return -1;
502         return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
503                                             proberesp, assocresp);
504 }
505
506 static inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s)
507 {
508         if (!wpa_s->driver->shared_freq)
509                 return -1;
510         return wpa_s->driver->shared_freq(wpa_s->drv_priv);
511 }
512
513 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
514                                   u8 *buf, size_t buf_len)
515 {
516         if (!wpa_s->driver->get_noa)
517                 return -1;
518         return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
519 }
520
521 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
522                                             int legacy_ps, int opp_ps,
523                                             int ctwindow)
524 {
525         if (!wpa_s->driver->set_p2p_powersave)
526                 return -1;
527         return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
528                                                 opp_ps, ctwindow);
529 }
530
531 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
532 {
533         if (!wpa_s->driver->ampdu)
534                 return -1;
535         return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
536 }
537
538 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
539                                          const u8 *dst, u8 action_code,
540                                          u8 dialog_token, u16 status_code,
541                                          u32 peer_capab, int initiator,
542                                          const u8 *buf, size_t len)
543 {
544         if (wpa_s->driver->send_tdls_mgmt) {
545                 return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
546                                                      action_code, dialog_token,
547                                                      status_code, peer_capab,
548                                                      initiator, buf, len);
549         }
550         return -1;
551 }
552
553 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
554                                     enum tdls_oper oper, const u8 *peer)
555 {
556         if (!wpa_s->driver->tdls_oper)
557                 return -1;
558         return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
559 }
560
561 #ifdef ANDROID
562 static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s,
563                                      char *cmd, char *buf, size_t buf_len)
564 {
565         if (!wpa_s->driver->driver_cmd)
566                 return -1;
567         return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len);
568 }
569 #endif /* ANDROID */
570
571 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
572                                           const u8 *kek, size_t kek_len,
573                                           const u8 *kck, size_t kck_len,
574                                           const u8 *replay_ctr)
575 {
576         if (!wpa_s->driver->set_rekey_info)
577                 return;
578         wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len,
579                                       kck, kck_len, replay_ctr);
580 }
581
582 static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s,
583                                         int disabled)
584 {
585         if (!wpa_s->driver->radio_disable)
586                 return -1;
587         return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled);
588 }
589
590 static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s,
591                                          struct csa_settings *settings)
592 {
593         if (!wpa_s->driver->switch_channel)
594                 return -1;
595         return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings);
596 }
597
598 static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid,
599                                  const u8 *address, u8 user_priority,
600                                  u16 admitted_time)
601 {
602         if (!wpa_s->driver->add_tx_ts)
603                 return -1;
604         return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address,
605                                         user_priority, admitted_time);
606 }
607
608 static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid,
609                                  const u8 *address)
610 {
611         if (!wpa_s->driver->del_tx_ts)
612                 return -1;
613         return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address);
614 }
615
616 static inline int wpa_drv_tdls_enable_channel_switch(
617         struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class,
618         const struct hostapd_freq_params *freq_params)
619 {
620         if (!wpa_s->driver->tdls_enable_channel_switch)
621                 return -1;
622         return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr,
623                                                          oper_class,
624                                                          freq_params);
625 }
626
627 static inline int
628 wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s,
629                                     const u8 *addr)
630 {
631         if (!wpa_s->driver->tdls_disable_channel_switch)
632                 return -1;
633         return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv,
634                                                           addr);
635 }
636
637 static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s,
638                                    enum wnm_oper oper, const u8 *peer,
639                                    u8 *buf, u16 *buf_len)
640 {
641         if (!wpa_s->driver->wnm_oper)
642                 return -1;
643         return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf,
644                                        buf_len);
645 }
646
647 static inline int wpa_drv_status(struct wpa_supplicant *wpa_s,
648                                  char *buf, size_t buflen)
649 {
650         if (!wpa_s->driver->status)
651                 return -1;
652         return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen);
653 }
654
655 static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s,
656                                       const u8 *qos_map_set, u8 qos_map_set_len)
657 {
658         if (!wpa_s->driver->set_qos_map)
659                 return -1;
660         return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set,
661                                           qos_map_set_len);
662 }
663
664 static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s,
665                                  const struct wowlan_triggers *triggers)
666 {
667         if (!wpa_s->driver->set_wowlan)
668                 return -1;
669         return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers);
670 }
671
672 static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s,
673                                      int vendor_id, int subcmd, const u8 *data,
674                                      size_t data_len, struct wpabuf *buf)
675 {
676         if (!wpa_s->driver->vendor_cmd)
677                 return -1;
678         return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd,
679                                          data, data_len, buf);
680 }
681
682 static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed,
683                                   const u8 *bssid)
684 {
685         if (!wpa_s->driver->roaming)
686                 return -1;
687         return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid);
688 }
689
690 static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s,
691                                        const u8 *addr)
692 {
693         if (!wpa_s->driver->set_mac_addr)
694                 return -1;
695         return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr);
696 }
697
698
699 #ifdef CONFIG_MACSEC
700
701 static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s,
702                                       struct macsec_init_params *params)
703 {
704         if (!wpa_s->driver->macsec_init)
705                 return -1;
706         return wpa_s->driver->macsec_init(wpa_s->drv_priv, params);
707 }
708
709 static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s)
710 {
711         if (!wpa_s->driver->macsec_deinit)
712                 return -1;
713         return wpa_s->driver->macsec_deinit(wpa_s->drv_priv);
714 }
715
716 static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s,
717                                                 Boolean enabled)
718 {
719         if (!wpa_s->driver->enable_protect_frames)
720                 return -1;
721         return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled);
722 }
723
724 static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s,
725                                              Boolean enabled, u32 window)
726 {
727         if (!wpa_s->driver->set_replay_protect)
728                 return -1;
729         return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled,
730                                                  window);
731 }
732
733 static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s,
734                                                    const u8 *cs, size_t cs_len)
735 {
736         if (!wpa_s->driver->set_current_cipher_suite)
737                 return -1;
738         return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs,
739                                                        cs_len);
740 }
741
742 static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s,
743                                                  Boolean enabled)
744 {
745         if (!wpa_s->driver->enable_controlled_port)
746                 return -1;
747         return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled);
748 }
749
750 static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s,
751                                                 u32 channel, u8 an,
752                                                 u32 *lowest_pn)
753 {
754         if (!wpa_s->driver->get_receive_lowest_pn)
755                 return -1;
756         return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, channel,
757                                                     an, lowest_pn);
758 }
759
760 static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s,
761                                                 u32 channel, u8 an,
762                                                 u32 *next_pn)
763 {
764         if (!wpa_s->driver->get_transmit_next_pn)
765                 return -1;
766         return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, channel,
767                                                     an, next_pn);
768 }
769
770 static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s,
771                                                 u32 channel, u8 an,
772                                                 u32 next_pn)
773 {
774         if (!wpa_s->driver->set_transmit_next_pn)
775                 return -1;
776         return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, channel,
777                                                     an, next_pn);
778 }
779
780 static inline int wpa_drv_get_available_receive_sc(struct wpa_supplicant *wpa_s,
781                                                    u32 *channel)
782 {
783         if (!wpa_s->driver->get_available_receive_sc)
784                 return -1;
785         return wpa_s->driver->get_available_receive_sc(wpa_s->drv_priv,
786                                                        channel);
787 }
788
789 static inline int
790 wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, u32 channel,
791                           const u8 *sci_addr, u16 sci_port,
792                           unsigned int conf_offset, int validation)
793 {
794         if (!wpa_s->driver->create_receive_sc)
795                 return -1;
796         return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, channel,
797                                                 sci_addr, sci_port, conf_offset,
798                                                 validation);
799 }
800
801 static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s,
802                                             u32 channel)
803 {
804         if (!wpa_s->driver->delete_receive_sc)
805                 return -1;
806         return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, channel);
807 }
808
809 static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s,
810                                             u32 channel, u8 an,
811                                             u32 lowest_pn, const u8 *sak)
812 {
813         if (!wpa_s->driver->create_receive_sa)
814                 return -1;
815         return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, channel, an,
816                                                 lowest_pn, sak);
817 }
818
819 static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s,
820                                             u32 channel, u8 an)
821 {
822         if (!wpa_s->driver->enable_receive_sa)
823                 return -1;
824         return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, channel, an);
825 }
826
827 static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s,
828                                              u32 channel, u8 an)
829 {
830         if (!wpa_s->driver->disable_receive_sa)
831                 return -1;
832         return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, channel, an);
833 }
834
835 static inline int
836 wpa_drv_get_available_transmit_sc(struct wpa_supplicant *wpa_s, u32 *channel)
837 {
838         if (!wpa_s->driver->get_available_transmit_sc)
839                 return -1;
840         return wpa_s->driver->get_available_transmit_sc(wpa_s->drv_priv,
841                                                         channel);
842 }
843
844 static inline int
845 wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, u32 channel,
846                            const u8 *sci_addr, u16 sci_port,
847                            unsigned int conf_offset)
848 {
849         if (!wpa_s->driver->create_transmit_sc)
850                 return -1;
851         return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, channel,
852                                                  sci_addr, sci_port,
853                                                  conf_offset);
854 }
855
856 static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s,
857                                              u32 channel)
858 {
859         if (!wpa_s->driver->delete_transmit_sc)
860                 return -1;
861         return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, channel);
862 }
863
864 static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s,
865                                              u32 channel, u8 an,
866                                              u32 next_pn,
867                                              Boolean confidentiality,
868                                              const u8 *sak)
869 {
870         if (!wpa_s->driver->create_transmit_sa)
871                 return -1;
872         return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, channel, an,
873                                                  next_pn, confidentiality, sak);
874 }
875
876 static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s,
877                                              u32 channel, u8 an)
878 {
879         if (!wpa_s->driver->enable_transmit_sa)
880                 return -1;
881         return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, channel, an);
882 }
883
884 static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s,
885                                               u32 channel, u8 an)
886 {
887         if (!wpa_s->driver->disable_transmit_sa)
888                 return -1;
889         return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, channel, an);
890 }
891 #endif /* CONFIG_MACSEC */
892
893 #endif /* DRIVER_I_H */