driver_i.h revision bd567ad93e03f285fdad93464100148cd5ae7941
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant - Internal driver interface wrappers 38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2003-2009, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 58d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * This program is free software; you can redistribute it and/or modify 68d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * it under the terms of the GNU General Public License version 2 as 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * published by the Free Software Foundation. 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * license. 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * See README and COPYING for more details. 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef DRIVER_I_H 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define DRIVER_I_H 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "drivers/driver.h" 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* driver_ops */ 218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname) 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->init2) 258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->init2(wpa_s, ifname, 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->global_drv_priv); 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->init) { 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->init(wpa_s, ifname); 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deinit) 368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->deinit(wpa_s->drv_priv); 378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *param) 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_param) 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_param(wpa_s->drv_priv, param); 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int enabled) 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_countermeasures) { 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enabled); 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_auth_params *params) 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->authenticate) 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_associate_params *params) 678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->associate) { 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->associate(wpa_s->drv_priv, params); 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_scan_params *params) 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->scan2) 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->scan2(wpa_s->drv_priv, params); 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct wpa_scan_results * wpa_drv_get_scan_results2( 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_supplicant *wpa_s) 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_scan_results2) 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_bssid) { 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_ssid) { 1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_alg alg, const u8 *addr, 1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_idx, int set_tx, 1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *seq, size_t seq_len, 1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *key, size_t key_len) 1118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_key) { 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->keys_cleared = 0; 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt alg, addr, key_idx, set_tx, 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt seq, seq_len, key, key_len); 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int reason_code) 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deauthenticate) { 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reason_code); 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_disassociate(struct wpa_supplicant *wpa_s, 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int reason_code) 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->disassociate) { 1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->disassociate(wpa_s->drv_priv, addr, 1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt reason_code); 1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 1428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, const u8 *pmkid) 1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->add_pmkid) { 1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid); 1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 1518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, const u8 *pmkid) 1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->remove_pmkid) { 1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid, 1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt pmkid); 1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 1618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->flush_pmkid) { 1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_driver_capa *capa) 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_capa) { 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->poll) { 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->poll(wpa_s->drv_priv); 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_ifname) { 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_ifname(wpa_s->drv_priv); 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_mac_addr) { 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s, 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, u16 proto, 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *data, size_t data_len) 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_eapol) 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto, 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len); 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int state) 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_operstate) 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int protect_type, 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int key_type) 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->mlme_setprotection) 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt protect_type, 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_type); 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline struct hostapd_hw_modes * 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 *flags) 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->get_hw_feature_data) 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt num_modes, flags); 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return NULL; 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_channel(struct wpa_supplicant *wpa_s, 2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum hostapd_hw_mode phymode, int chan, 2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int freq) 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_channel) 2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_channel(wpa_s->drv_priv, phymode, 2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt chan, freq); 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_ssid(struct wpa_supplicant *wpa_s, 2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ssid, size_t ssid_len) 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_ssid) { 2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_ssid(wpa_s->drv_priv, ssid, 2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ssid_len); 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_bssid(struct wpa_supplicant *wpa_s, 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid) 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_bssid) { 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_bssid(wpa_s->drv_priv, bssid); 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *alpha2) 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_country) 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *data, size_t data_len) 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_mlme) 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_mlme(wpa_s->drv_priv, 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len); 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_mlme_add_sta(struct wpa_supplicant *wpa_s, 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, const u8 *supp_rates, 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t supp_rates_len) 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->mlme_add_sta) 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->mlme_add_sta(wpa_s->drv_priv, addr, 2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt supp_rates, supp_rates_len); 2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_mlme_remove_sta(struct wpa_supplicant *wpa_s, 2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->mlme_remove_sta) 2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->mlme_remove_sta(wpa_s->drv_priv, addr); 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *md, 3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->update_ft_ies) 3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ies, ies_len); 3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s, 3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 action, const u8 *target_ap, 3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_ft_action) 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action, 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt target_ap, ies, ies_len); 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_beacon(struct wpa_supplicant *wpa_s, 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *head, size_t head_len, 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *tail, size_t tail_len, 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int dtim_period, int beacon_int) 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_beacon) 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_beacon(wpa_s->drv_priv, head, 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt head_len, tail, tail_len, 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dtim_period, beacon_int); 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct hostapd_sta_add_params *params) 3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_add) 3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_remove) 3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, const u8 *data, 3538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t data_len, int encrypt, 3548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *own_addr, u32 flags) 3558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->hapd_send_eapol) 3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len, encrypt, 3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt own_addr, flags); 3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 3648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int total_flags, 3658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int flags_or, int flags_and) 3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->sta_set_flags) 3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt total_flags, flags_or, 3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt flags_and); 3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 3758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int authorized) 3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_supp_port) { 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt authorized); 3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int freq, 3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int wait, 3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, const u8 *src, 3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *bssid, 3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *data, size_t data_len) 3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_action) 3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wait, dst, src, bssid, 3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt data, data_len); 3958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_action_cancel_wait) 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct hostapd_freq_params *freq) 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_freq) 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_driver_if_type type, 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname, const u8 *addr, 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *bss_ctx, char *force_ifname, 4168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *if_addr, const char *bridge) 4178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->if_add) 4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt addr, bss_ctx, NULL, force_ifname, 4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if_addr, bridge); 4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum wpa_driver_if_type type, 4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname) 4288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->if_remove) 4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_intra_bss(struct wpa_supplicant *wpa_s, 4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int enabled) 4368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->set_intra_bss) 4388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_intra_bss(wpa_s->drv_priv, enabled); 4398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int freq, 4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int duration) 4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->remain_on_channel) 4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt duration); 4498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_cancel_remain_on_channel( 4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_supplicant *wpa_s) 4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->cancel_remain_on_channel) 4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->cancel_remain_on_channel( 4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->drv_priv); 4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int report) 4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->probe_req_report) 4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt report); 4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_disable_11b_rates(struct wpa_supplicant *wpa_s, 4718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int disabled) 4728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->disable_11b_rates) 4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->disable_11b_rates(wpa_s->drv_priv, 4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt disabled); 4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->deinit_ap) 4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->suspend) 4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->suspend(wpa_s->drv_priv); 4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->resume) 4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wpa_s->driver->resume(wpa_s->drv_priv); 4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int threshold, int hysteresis) 5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->signal_monitor) 5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt threshold, hysteresis); 5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_signal_info *si) 5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->signal_poll) 5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *beacon, 5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *proberesp, 5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *assocresp) 5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->set_ap_wps_ie) 5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt proberesp, assocresp); 5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_shared_freq(struct wpa_supplicant *wpa_s) 5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->shared_freq) 5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->shared_freq(wpa_s->drv_priv); 5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *buf, size_t buf_len) 5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->get_noa) 5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int legacy_ps, int opp_ps, 5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ctwindow) 5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->set_p2p_powersave) 5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt opp_ps, ctwindow); 5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->ampdu) 5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_find(struct wpa_supplicant *wpa_s, 5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int timeout, int type) 5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_find) 5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_find(wpa_s->drv_priv, timeout, type); 5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_stop_find(struct wpa_supplicant *wpa_s) 5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_stop_find) 5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_stop_find(wpa_s->drv_priv); 5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_listen(struct wpa_supplicant *wpa_s, 5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int timeout) 5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_listen) 5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_listen(wpa_s->drv_priv, timeout); 5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_connect(struct wpa_supplicant *wpa_s, 5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr, int wps_method, 5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int go_intent, 5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *own_interface_addr, 5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int force_freq, 5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int persistent_group) 5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_connect) 5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_connect(wpa_s->drv_priv, peer_addr, 5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt wps_method, go_intent, 5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt own_interface_addr, force_freq, 5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt persistent_group); 5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_wps_success_cb(struct wpa_supplicant *wpa_s, 5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr) 5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->wps_success_cb) 6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->wps_success_cb(wpa_s->drv_priv, peer_addr); 6028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int 6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtwpa_drv_p2p_group_formation_failed(struct wpa_supplicant *wpa_s) 6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_group_formation_failed) 6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_group_formation_failed(wpa_s->drv_priv); 6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_set_params(struct wpa_supplicant *wpa_s, 6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct p2p_params *params) 6148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_set_params) 6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_set_params(wpa_s->drv_priv, params); 6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_prov_disc_req(struct wpa_supplicant *wpa_s, 6218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer_addr, 6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 config_methods) 6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_prov_disc_req) 6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_prov_disc_req(wpa_s->drv_priv, peer_addr, 6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt config_methods); 6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline u64 wpa_drv_p2p_sd_request(struct wpa_supplicant *wpa_s, 6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, 6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *tlvs) 6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_request) 6358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return 0; 6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_request(wpa_s->drv_priv, dst, tlvs); 6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_sd_cancel_request(struct wpa_supplicant *wpa_s, 6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u64 req) 6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_cancel_request) 6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_cancel_request(wpa_s->drv_priv, req); 6458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_sd_response(struct wpa_supplicant *wpa_s, 6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int freq, const u8 *dst, 6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dialog_token, 6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpabuf *resp_tlvs) 6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_sd_response) 6538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_sd_response(wpa_s->drv_priv, freq, dst, 6558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dialog_token, resp_tlvs); 6568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_service_update(struct wpa_supplicant *wpa_s) 6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_service_update) 6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_service_update(wpa_s->drv_priv); 6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_reject(struct wpa_supplicant *wpa_s, 6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr) 6678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_reject) 6698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_reject(wpa_s->drv_priv, addr); 6718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_p2p_invite(struct wpa_supplicant *wpa_s, 6748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer, int role, const u8 *bssid, 6758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ssid, size_t ssid_len, 6768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *go_dev_addr, 6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int persistent_group) 6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->p2p_invite) 6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->p2p_invite(wpa_s->drv_priv, peer, role, bssid, 6828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ssid, ssid_len, go_dev_addr, 6838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt persistent_group); 6848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *dst, u8 action_code, 6888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 dialog_token, u16 status_code, 6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *buf, size_t len) 6908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 6918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (wpa_s->driver->send_tdls_mgmt) { 6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 6938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt action_code, dialog_token, 6948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt status_code, buf, len); 6958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt } 6968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 6978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 6988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 6998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 7008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt enum tdls_oper oper, const u8 *peer) 7018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 7028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (!wpa_s->driver->tdls_oper) 7038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 7048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 7058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 707bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidtstatic inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 708bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt char *cmd, char *buf, size_t buf_len) 709bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt{ 710bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt if (!wpa_s->driver->driver_cmd) 711bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt return -1; 712bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 713bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt} 714bd567ad93e03f285fdad93464100148cd5ae7941Dmitry Shmidt 7158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* DRIVER_I_H */ 716