xref: /netbsd-src/external/bsd/wpa/dist/wpa_supplicant/driver_i.h (revision 4391d5e9d4f291db41e3b3ba26a01b5e51364aae)
1 /*
2  * wpa_supplicant - Internal driver interface wrappers
3  * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * Alternatively, this software may be distributed under the terms of BSD
10  * license.
11  *
12  * See README and COPYING for more details.
13  */
14 
15 #ifndef DRIVER_I_H
16 #define DRIVER_I_H
17 
18 #include "drivers/driver.h"
19 
20 /* driver_ops */
21 static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
22 				  const char *ifname)
23 {
24 	if (wpa_s->driver->init2)
25 		return wpa_s->driver->init2(wpa_s, ifname,
26 					    wpa_s->global_drv_priv);
27 	if (wpa_s->driver->init) {
28 		return wpa_s->driver->init(wpa_s, ifname);
29 	}
30 	return NULL;
31 }
32 
33 static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
34 {
35 	if (wpa_s->driver->deinit)
36 		wpa_s->driver->deinit(wpa_s->drv_priv);
37 }
38 
39 static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s,
40 				    const char *param)
41 {
42 	if (wpa_s->driver->set_param)
43 		return wpa_s->driver->set_param(wpa_s->drv_priv, param);
44 	return 0;
45 }
46 
47 static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
48 					      int enabled)
49 {
50 	if (wpa_s->driver->set_countermeasures) {
51 		return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
52 							  enabled);
53 	}
54 	return -1;
55 }
56 
57 static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
58 				       struct wpa_driver_auth_params *params)
59 {
60 	if (wpa_s->driver->authenticate)
61 		return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
62 	return -1;
63 }
64 
65 static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
66 				    struct wpa_driver_associate_params *params)
67 {
68 	if (wpa_s->driver->associate) {
69 		return wpa_s->driver->associate(wpa_s->drv_priv, params);
70 	}
71 	return -1;
72 }
73 
74 static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
75 			       struct wpa_driver_scan_params *params)
76 {
77 	if (wpa_s->driver->scan2)
78 		return wpa_s->driver->scan2(wpa_s->drv_priv, params);
79 	return -1;
80 }
81 
82 static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s,
83 				     struct wpa_driver_scan_params *params,
84 				     u32 interval)
85 {
86 	if (wpa_s->driver->sched_scan)
87 		return wpa_s->driver->sched_scan(wpa_s->drv_priv,
88 						 params, interval);
89 	return -1;
90 }
91 
92 static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s)
93 {
94 	if (wpa_s->driver->stop_sched_scan)
95 		return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv);
96 	return -1;
97 }
98 
99 static inline struct wpa_scan_results * wpa_drv_get_scan_results2(
100 	struct wpa_supplicant *wpa_s)
101 {
102 	if (wpa_s->driver->get_scan_results2)
103 		return wpa_s->driver->get_scan_results2(wpa_s->drv_priv);
104 	return NULL;
105 }
106 
107 static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
108 {
109 	if (wpa_s->driver->get_bssid) {
110 		return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
111 	}
112 	return -1;
113 }
114 
115 static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
116 {
117 	if (wpa_s->driver->get_ssid) {
118 		return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
119 	}
120 	return -1;
121 }
122 
123 static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s,
124 				  enum wpa_alg alg, const u8 *addr,
125 				  int key_idx, int set_tx,
126 				   const u8 *seq, size_t seq_len,
127 				   const u8 *key, size_t key_len)
128 {
129 	if (wpa_s->driver->set_key) {
130 		wpa_s->keys_cleared = 0;
131 		return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv,
132 					      alg, addr, key_idx, set_tx,
133 					      seq, seq_len, key, key_len);
134 	}
135 	return -1;
136 }
137 
138 static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
139 					 const u8 *addr, int reason_code)
140 {
141 	if (wpa_s->driver->deauthenticate) {
142 		return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
143 						     reason_code);
144 	}
145 	return -1;
146 }
147 
148 static inline int wpa_drv_disassociate(struct wpa_supplicant *wpa_s,
149 				       const u8 *addr, int reason_code)
150 {
151 	if (wpa_s->driver->disassociate) {
152 		return wpa_s->driver->disassociate(wpa_s->drv_priv, addr,
153 						   reason_code);
154 	}
155 	return -1;
156 }
157 
158 static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
159 				    const u8 *bssid, const u8 *pmkid)
160 {
161 	if (wpa_s->driver->add_pmkid) {
162 		return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid);
163 	}
164 	return -1;
165 }
166 
167 static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
168 				       const u8 *bssid, const u8 *pmkid)
169 {
170 	if (wpa_s->driver->remove_pmkid) {
171 		return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid,
172 						   pmkid);
173 	}
174 	return -1;
175 }
176 
177 static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
178 {
179 	if (wpa_s->driver->flush_pmkid) {
180 		return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
181 	}
182 	return -1;
183 }
184 
185 static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
186 				   struct wpa_driver_capa *capa)
187 {
188 	if (wpa_s->driver->get_capa) {
189 		return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
190 	}
191 	return -1;
192 }
193 
194 static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
195 {
196 	if (wpa_s->driver->poll) {
197 		wpa_s->driver->poll(wpa_s->drv_priv);
198 	}
199 }
200 
201 static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
202 {
203 	if (wpa_s->driver->get_ifname) {
204 		return wpa_s->driver->get_ifname(wpa_s->drv_priv);
205 	}
206 	return NULL;
207 }
208 
209 static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
210 {
211 	if (wpa_s->driver->get_mac_addr) {
212 		return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
213 	}
214 	return NULL;
215 }
216 
217 static inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s,
218 				     const u8 *dst, u16 proto,
219 				     const u8 *data, size_t data_len)
220 {
221 	if (wpa_s->driver->send_eapol)
222 		return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto,
223 						 data, data_len);
224 	return -1;
225 }
226 
227 static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
228 					int state)
229 {
230 	if (wpa_s->driver->set_operstate)
231 		return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
232 	return 0;
233 }
234 
235 static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
236 					     const u8 *addr, int protect_type,
237 					     int key_type)
238 {
239 	if (wpa_s->driver->mlme_setprotection)
240 		return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
241 							 protect_type,
242 							 key_type);
243 	return 0;
244 }
245 
246 static inline struct hostapd_hw_modes *
247 wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
248 			    u16 *flags)
249 {
250 	if (wpa_s->driver->get_hw_feature_data)
251 		return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
252 							  num_modes, flags);
253 	return NULL;
254 }
255 
256 static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
257 				      const char *alpha2)
258 {
259 	if (wpa_s->driver->set_country)
260 		return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
261 	return 0;
262 }
263 
264 static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
265 				    const u8 *data, size_t data_len)
266 {
267 	if (wpa_s->driver->send_mlme)
268 		return wpa_s->driver->send_mlme(wpa_s->drv_priv,
269 						data, data_len);
270 	return -1;
271 }
272 
273 static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
274 					const u8 *md,
275 					const u8 *ies, size_t ies_len)
276 {
277 	if (wpa_s->driver->update_ft_ies)
278 		return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
279 						    ies, ies_len);
280 	return -1;
281 }
282 
283 static inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s,
284 					 u8 action, const u8 *target_ap,
285 					 const u8 *ies, size_t ies_len)
286 {
287 	if (wpa_s->driver->send_ft_action)
288 		return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action,
289 						     target_ap, ies, ies_len);
290 	return -1;
291 }
292 
293 static inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s,
294 				 struct wpa_driver_ap_params *params)
295 {
296 	if (wpa_s->driver->set_ap)
297 		return wpa_s->driver->set_ap(wpa_s->drv_priv, params);
298 	return -1;
299 }
300 
301 static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
302 				  struct hostapd_sta_add_params *params)
303 {
304 	if (wpa_s->driver->sta_add)
305 		return wpa_s->driver->sta_add(wpa_s->drv_priv, params);
306 	return -1;
307 }
308 
309 static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
310 				     const u8 *addr)
311 {
312 	if (wpa_s->driver->sta_remove)
313 		return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
314 	return -1;
315 }
316 
317 static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
318 					  const u8 *addr, const u8 *data,
319 					  size_t data_len, int encrypt,
320 					  const u8 *own_addr, u32 flags)
321 {
322 	if (wpa_s->driver->hapd_send_eapol)
323 		return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
324 						      data, data_len, encrypt,
325 						      own_addr, flags);
326 	return -1;
327 }
328 
329 static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
330 					const u8 *addr, int total_flags,
331 					int flags_or, int flags_and)
332 {
333 	if (wpa_s->driver->sta_set_flags)
334 		return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
335 						    total_flags, flags_or,
336 						    flags_and);
337 	return -1;
338 }
339 
340 static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
341 					int authorized)
342 {
343 	if (wpa_s->driver->set_supp_port) {
344 		return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
345 						    authorized);
346 	}
347 	return 0;
348 }
349 
350 static inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s,
351 				      unsigned int freq,
352 				      unsigned int wait,
353 				      const u8 *dst, const u8 *src,
354 				      const u8 *bssid,
355 				      const u8 *data, size_t data_len,
356 				      int no_cck)
357 {
358 	if (wpa_s->driver->send_action)
359 		return wpa_s->driver->send_action(wpa_s->drv_priv, freq,
360 						  wait, dst, src, bssid,
361 						  data, data_len, no_cck);
362 	return -1;
363 }
364 
365 static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s)
366 {
367 	if (wpa_s->driver->send_action_cancel_wait)
368 		wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv);
369 }
370 
371 static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s,
372 				   struct hostapd_freq_params *freq)
373 {
374 	if (wpa_s->driver->set_freq)
375 		return wpa_s->driver->set_freq(wpa_s->drv_priv, freq);
376 	return -1;
377 }
378 
379 static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s,
380 				 enum wpa_driver_if_type type,
381 				 const char *ifname, const u8 *addr,
382 				 void *bss_ctx, char *force_ifname,
383 				 u8 *if_addr, const char *bridge)
384 {
385 	if (wpa_s->driver->if_add)
386 		return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname,
387 					     addr, bss_ctx, NULL, force_ifname,
388 					     if_addr, bridge);
389 	return -1;
390 }
391 
392 static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s,
393 				    enum wpa_driver_if_type type,
394 				    const char *ifname)
395 {
396 	if (wpa_s->driver->if_remove)
397 		return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname);
398 	return -1;
399 }
400 
401 static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s,
402 					    unsigned int freq,
403 					    unsigned int duration)
404 {
405 	if (wpa_s->driver->remain_on_channel)
406 		return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq,
407 							duration);
408 	return -1;
409 }
410 
411 static inline int wpa_drv_cancel_remain_on_channel(
412 	struct wpa_supplicant *wpa_s)
413 {
414 	if (wpa_s->driver->cancel_remain_on_channel)
415 		return wpa_s->driver->cancel_remain_on_channel(
416 			wpa_s->drv_priv);
417 	return -1;
418 }
419 
420 static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s,
421 					   int report)
422 {
423 	if (wpa_s->driver->probe_req_report)
424 		return wpa_s->driver->probe_req_report(wpa_s->drv_priv,
425 						       report);
426 	return -1;
427 }
428 
429 static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s)
430 {
431 	if (wpa_s->driver->deinit_ap)
432 		return wpa_s->driver->deinit_ap(wpa_s->drv_priv);
433 	return 0;
434 }
435 
436 static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s)
437 {
438 	if (wpa_s->driver->deinit_p2p_cli)
439 		return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv);
440 	return 0;
441 }
442 
443 static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s)
444 {
445 	if (wpa_s->driver->suspend)
446 		wpa_s->driver->suspend(wpa_s->drv_priv);
447 }
448 
449 static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s)
450 {
451 	if (wpa_s->driver->resume)
452 		wpa_s->driver->resume(wpa_s->drv_priv);
453 }
454 
455 static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s,
456 					 int threshold, int hysteresis)
457 {
458 	if (wpa_s->driver->signal_monitor)
459 		return wpa_s->driver->signal_monitor(wpa_s->drv_priv,
460 						     threshold, hysteresis);
461 	return -1;
462 }
463 
464 static inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s,
465 				      struct wpa_signal_info *si)
466 {
467 	if (wpa_s->driver->signal_poll)
468 		return wpa_s->driver->signal_poll(wpa_s->drv_priv, si);
469 	return -1;
470 }
471 
472 static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s,
473 					const struct wpabuf *beacon,
474 					const struct wpabuf *proberesp,
475 					const struct wpabuf *assocresp)
476 {
477 	if (!wpa_s->driver->set_ap_wps_ie)
478 		return -1;
479 	return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon,
480 					    proberesp, assocresp);
481 }
482 
483 static inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s)
484 {
485 	if (!wpa_s->driver->shared_freq)
486 		return -1;
487 	return wpa_s->driver->shared_freq(wpa_s->drv_priv);
488 }
489 
490 static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s,
491 				  u8 *buf, size_t buf_len)
492 {
493 	if (!wpa_s->driver->get_noa)
494 		return -1;
495 	return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len);
496 }
497 
498 static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
499 					    int legacy_ps, int opp_ps,
500 					    int ctwindow)
501 {
502 	if (!wpa_s->driver->set_p2p_powersave)
503 		return -1;
504 	return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps,
505 						opp_ps, ctwindow);
506 }
507 
508 static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
509 {
510 	if (!wpa_s->driver->ampdu)
511 		return -1;
512 	return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
513 }
514 
515 static inline int wpa_drv_p2p_find(struct wpa_supplicant *wpa_s,
516 				   unsigned int timeout, int type)
517 {
518 	if (!wpa_s->driver->p2p_find)
519 		return -1;
520 	return wpa_s->driver->p2p_find(wpa_s->drv_priv, timeout, type);
521 }
522 
523 static inline int wpa_drv_p2p_stop_find(struct wpa_supplicant *wpa_s)
524 {
525 	if (!wpa_s->driver->p2p_stop_find)
526 		return -1;
527 	return wpa_s->driver->p2p_stop_find(wpa_s->drv_priv);
528 }
529 
530 static inline int wpa_drv_p2p_listen(struct wpa_supplicant *wpa_s,
531 				     unsigned int timeout)
532 {
533 	if (!wpa_s->driver->p2p_listen)
534 		return -1;
535 	return wpa_s->driver->p2p_listen(wpa_s->drv_priv, timeout);
536 }
537 
538 static inline int wpa_drv_p2p_connect(struct wpa_supplicant *wpa_s,
539 				      const u8 *peer_addr, int wps_method,
540 				      int go_intent,
541 				      const u8 *own_interface_addr,
542 				      unsigned int force_freq,
543 				      int persistent_group)
544 {
545 	if (!wpa_s->driver->p2p_connect)
546 		return -1;
547 	return wpa_s->driver->p2p_connect(wpa_s->drv_priv, peer_addr,
548 					  wps_method, go_intent,
549 					  own_interface_addr, force_freq,
550 					  persistent_group);
551 }
552 
553 static inline int wpa_drv_wps_success_cb(struct wpa_supplicant *wpa_s,
554 					 const u8 *peer_addr)
555 {
556 	if (!wpa_s->driver->wps_success_cb)
557 		return -1;
558 	return wpa_s->driver->wps_success_cb(wpa_s->drv_priv, peer_addr);
559 }
560 
561 static inline int
562 wpa_drv_p2p_group_formation_failed(struct wpa_supplicant *wpa_s)
563 {
564 	if (!wpa_s->driver->p2p_group_formation_failed)
565 		return -1;
566 	return wpa_s->driver->p2p_group_formation_failed(wpa_s->drv_priv);
567 }
568 
569 static inline int wpa_drv_p2p_set_params(struct wpa_supplicant *wpa_s,
570 					 const struct p2p_params *params)
571 {
572 	if (!wpa_s->driver->p2p_set_params)
573 		return -1;
574 	return wpa_s->driver->p2p_set_params(wpa_s->drv_priv, params);
575 }
576 
577 static inline int wpa_drv_p2p_prov_disc_req(struct wpa_supplicant *wpa_s,
578 					    const u8 *peer_addr,
579 					    u16 config_methods, int join)
580 {
581 	if (!wpa_s->driver->p2p_prov_disc_req)
582 		return -1;
583 	return wpa_s->driver->p2p_prov_disc_req(wpa_s->drv_priv, peer_addr,
584 						config_methods, join);
585 }
586 
587 static inline u64 wpa_drv_p2p_sd_request(struct wpa_supplicant *wpa_s,
588 					 const u8 *dst,
589 					 const struct wpabuf *tlvs)
590 {
591 	if (!wpa_s->driver->p2p_sd_request)
592 		return 0;
593 	return wpa_s->driver->p2p_sd_request(wpa_s->drv_priv, dst, tlvs);
594 }
595 
596 static inline int wpa_drv_p2p_sd_cancel_request(struct wpa_supplicant *wpa_s,
597 						u64 req)
598 {
599 	if (!wpa_s->driver->p2p_sd_cancel_request)
600 		return -1;
601 	return wpa_s->driver->p2p_sd_cancel_request(wpa_s->drv_priv, req);
602 }
603 
604 static inline int wpa_drv_p2p_sd_response(struct wpa_supplicant *wpa_s,
605 					  int freq, const u8 *dst,
606 					  u8 dialog_token,
607 					  const struct wpabuf *resp_tlvs)
608 {
609 	if (!wpa_s->driver->p2p_sd_response)
610 		return -1;
611 	return wpa_s->driver->p2p_sd_response(wpa_s->drv_priv, freq, dst,
612 					      dialog_token, resp_tlvs);
613 }
614 
615 static inline int wpa_drv_p2p_service_update(struct wpa_supplicant *wpa_s)
616 {
617 	if (!wpa_s->driver->p2p_service_update)
618 		return -1;
619 	return wpa_s->driver->p2p_service_update(wpa_s->drv_priv);
620 }
621 
622 static inline int wpa_drv_p2p_reject(struct wpa_supplicant *wpa_s,
623 				     const u8 *addr)
624 {
625 	if (!wpa_s->driver->p2p_reject)
626 		return -1;
627 	return wpa_s->driver->p2p_reject(wpa_s->drv_priv, addr);
628 }
629 
630 static inline int wpa_drv_p2p_invite(struct wpa_supplicant *wpa_s,
631 				     const u8 *peer, int role, const u8 *bssid,
632 				     const u8 *ssid, size_t ssid_len,
633 				     const u8 *go_dev_addr,
634 				     int persistent_group)
635 {
636 	if (!wpa_s->driver->p2p_invite)
637 		return -1;
638 	return wpa_s->driver->p2p_invite(wpa_s->drv_priv, peer, role, bssid,
639 					 ssid, ssid_len, go_dev_addr,
640 					 persistent_group);
641 }
642 
643 static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s,
644 					 const u8 *dst, u8 action_code,
645 					 u8 dialog_token, u16 status_code,
646 					 const u8 *buf, size_t len)
647 {
648 	if (wpa_s->driver->send_tdls_mgmt) {
649 		return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst,
650 						     action_code, dialog_token,
651 						     status_code, buf, len);
652 	}
653 	return -1;
654 }
655 
656 static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s,
657 				    enum tdls_oper oper, const u8 *peer)
658 {
659 	if (!wpa_s->driver->tdls_oper)
660 		return -1;
661 	return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer);
662 }
663 
664 static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s,
665 					  const u8 *kek, const u8 *kck,
666 					  const u8 *replay_ctr)
667 {
668 	if (!wpa_s->driver->set_rekey_info)
669 		return;
670 	wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kck, replay_ctr);
671 }
672 
673 #endif /* DRIVER_I_H */
674