driver_i.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  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. #ifndef DRIVER_I_H
  15. #define DRIVER_I_H
  16. #include "drivers/driver.h"
  17. /* driver_ops */
  18. static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s,
  19. const char *ifname)
  20. {
  21. if (wpa_s->driver->init2)
  22. return wpa_s->driver->init2(wpa_s, ifname, wpa_s->global);
  23. if (wpa_s->driver->init) {
  24. return wpa_s->driver->init(wpa_s, ifname);
  25. }
  26. return NULL;
  27. }
  28. static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s)
  29. {
  30. if (wpa_s->driver->deinit)
  31. wpa_s->driver->deinit(wpa_s->drv_priv);
  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. static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s,
  41. int enabled)
  42. {
  43. if (wpa_s->driver->set_countermeasures) {
  44. return wpa_s->driver->set_countermeasures(wpa_s->drv_priv,
  45. enabled);
  46. }
  47. return -1;
  48. }
  49. static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s,
  50. struct wpa_driver_auth_params *params)
  51. {
  52. if (wpa_s->driver->authenticate)
  53. return wpa_s->driver->authenticate(wpa_s->drv_priv, params);
  54. return -1;
  55. }
  56. static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s,
  57. struct wpa_driver_associate_params *params)
  58. {
  59. if (wpa_s->driver->associate) {
  60. return wpa_s->driver->associate(wpa_s->drv_priv, params);
  61. }
  62. return -1;
  63. }
  64. static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s,
  65. struct wpa_driver_scan_params *params)
  66. {
  67. if (wpa_s->driver->scan2)
  68. return wpa_s->driver->scan2(wpa_s->drv_priv, params);
  69. return -1;
  70. }
  71. static inline struct wpa_scan_results * wpa_drv_get_scan_results2(
  72. struct wpa_supplicant *wpa_s)
  73. {
  74. if (wpa_s->driver->get_scan_results2)
  75. return wpa_s->driver->get_scan_results2(wpa_s->drv_priv);
  76. return NULL;
  77. }
  78. static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid)
  79. {
  80. if (wpa_s->driver->get_bssid) {
  81. return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid);
  82. }
  83. return -1;
  84. }
  85. static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid)
  86. {
  87. if (wpa_s->driver->get_ssid) {
  88. return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid);
  89. }
  90. return -1;
  91. }
  92. static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, wpa_alg alg,
  93. const u8 *addr, int key_idx, int set_tx,
  94. const u8 *seq, size_t seq_len,
  95. const u8 *key, size_t key_len)
  96. {
  97. if (wpa_s->driver->set_key) {
  98. wpa_s->keys_cleared = 0;
  99. return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv,
  100. alg, addr, key_idx, set_tx,
  101. seq, seq_len, key, key_len);
  102. }
  103. return -1;
  104. }
  105. static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s,
  106. const u8 *addr, int reason_code)
  107. {
  108. if (wpa_s->driver->deauthenticate) {
  109. return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr,
  110. reason_code);
  111. }
  112. return -1;
  113. }
  114. static inline int wpa_drv_disassociate(struct wpa_supplicant *wpa_s,
  115. const u8 *addr, int reason_code)
  116. {
  117. if (wpa_s->driver->disassociate) {
  118. return wpa_s->driver->disassociate(wpa_s->drv_priv, addr,
  119. reason_code);
  120. }
  121. return -1;
  122. }
  123. static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s,
  124. const u8 *bssid, const u8 *pmkid)
  125. {
  126. if (wpa_s->driver->add_pmkid) {
  127. return wpa_s->driver->add_pmkid(wpa_s->drv_priv, bssid, pmkid);
  128. }
  129. return -1;
  130. }
  131. static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s,
  132. const u8 *bssid, const u8 *pmkid)
  133. {
  134. if (wpa_s->driver->remove_pmkid) {
  135. return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, bssid,
  136. pmkid);
  137. }
  138. return -1;
  139. }
  140. static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s)
  141. {
  142. if (wpa_s->driver->flush_pmkid) {
  143. return wpa_s->driver->flush_pmkid(wpa_s->drv_priv);
  144. }
  145. return -1;
  146. }
  147. static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s,
  148. struct wpa_driver_capa *capa)
  149. {
  150. if (wpa_s->driver->get_capa) {
  151. return wpa_s->driver->get_capa(wpa_s->drv_priv, capa);
  152. }
  153. return -1;
  154. }
  155. static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s)
  156. {
  157. if (wpa_s->driver->poll) {
  158. wpa_s->driver->poll(wpa_s->drv_priv);
  159. }
  160. }
  161. static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s)
  162. {
  163. if (wpa_s->driver->get_ifname) {
  164. return wpa_s->driver->get_ifname(wpa_s->drv_priv);
  165. }
  166. return NULL;
  167. }
  168. static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s)
  169. {
  170. if (wpa_s->driver->get_mac_addr) {
  171. return wpa_s->driver->get_mac_addr(wpa_s->drv_priv);
  172. }
  173. return NULL;
  174. }
  175. static inline int wpa_drv_send_eapol(struct wpa_supplicant *wpa_s,
  176. const u8 *dst, u16 proto,
  177. const u8 *data, size_t data_len)
  178. {
  179. if (wpa_s->driver->send_eapol)
  180. return wpa_s->driver->send_eapol(wpa_s->drv_priv, dst, proto,
  181. data, data_len);
  182. return -1;
  183. }
  184. static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s,
  185. int state)
  186. {
  187. if (wpa_s->driver->set_operstate)
  188. return wpa_s->driver->set_operstate(wpa_s->drv_priv, state);
  189. return 0;
  190. }
  191. static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s,
  192. const u8 *addr, int protect_type,
  193. int key_type)
  194. {
  195. if (wpa_s->driver->mlme_setprotection)
  196. return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr,
  197. protect_type,
  198. key_type);
  199. return 0;
  200. }
  201. static inline struct hostapd_hw_modes *
  202. wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes,
  203. u16 *flags)
  204. {
  205. if (wpa_s->driver->get_hw_feature_data)
  206. return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv,
  207. num_modes, flags);
  208. return NULL;
  209. }
  210. static inline int wpa_drv_set_channel(struct wpa_supplicant *wpa_s,
  211. hostapd_hw_mode phymode, int chan,
  212. int freq)
  213. {
  214. if (wpa_s->driver->set_channel)
  215. return wpa_s->driver->set_channel(wpa_s->drv_priv, phymode,
  216. chan, freq);
  217. return -1;
  218. }
  219. static inline int wpa_drv_set_ssid(struct wpa_supplicant *wpa_s,
  220. const u8 *ssid, size_t ssid_len)
  221. {
  222. if (wpa_s->driver->set_ssid) {
  223. return wpa_s->driver->set_ssid(wpa_s->drv_priv, ssid,
  224. ssid_len);
  225. }
  226. return -1;
  227. }
  228. static inline int wpa_drv_set_bssid(struct wpa_supplicant *wpa_s,
  229. const u8 *bssid)
  230. {
  231. if (wpa_s->driver->set_bssid) {
  232. return wpa_s->driver->set_bssid(wpa_s->drv_priv, bssid);
  233. }
  234. return -1;
  235. }
  236. static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s,
  237. const char *alpha2)
  238. {
  239. if (wpa_s->driver->set_country)
  240. return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2);
  241. return 0;
  242. }
  243. static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s,
  244. const u8 *data, size_t data_len)
  245. {
  246. if (wpa_s->driver->send_mlme)
  247. return wpa_s->driver->send_mlme(wpa_s->drv_priv,
  248. data, data_len);
  249. return -1;
  250. }
  251. static inline int wpa_drv_mlme_add_sta(struct wpa_supplicant *wpa_s,
  252. const u8 *addr, const u8 *supp_rates,
  253. size_t supp_rates_len)
  254. {
  255. if (wpa_s->driver->mlme_add_sta)
  256. return wpa_s->driver->mlme_add_sta(wpa_s->drv_priv, addr,
  257. supp_rates, supp_rates_len);
  258. return -1;
  259. }
  260. static inline int wpa_drv_mlme_remove_sta(struct wpa_supplicant *wpa_s,
  261. const u8 *addr)
  262. {
  263. if (wpa_s->driver->mlme_remove_sta)
  264. return wpa_s->driver->mlme_remove_sta(wpa_s->drv_priv, addr);
  265. return -1;
  266. }
  267. static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s,
  268. const u8 *md,
  269. const u8 *ies, size_t ies_len)
  270. {
  271. if (wpa_s->driver->update_ft_ies)
  272. return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md,
  273. ies, ies_len);
  274. return -1;
  275. }
  276. static inline int wpa_drv_send_ft_action(struct wpa_supplicant *wpa_s,
  277. u8 action, const u8 *target_ap,
  278. const u8 *ies, size_t ies_len)
  279. {
  280. if (wpa_s->driver->send_ft_action)
  281. return wpa_s->driver->send_ft_action(wpa_s->drv_priv, action,
  282. target_ap, ies, ies_len);
  283. return -1;
  284. }
  285. static inline int wpa_drv_set_beacon(struct wpa_supplicant *wpa_s,
  286. const u8 *head, size_t head_len,
  287. const u8 *tail, size_t tail_len,
  288. int dtim_period, int beacon_int)
  289. {
  290. if (wpa_s->driver->set_beacon)
  291. return wpa_s->driver->set_beacon(wpa_s->ifname,
  292. wpa_s->drv_priv, head,
  293. head_len, tail, tail_len,
  294. dtim_period, beacon_int);
  295. return -1;
  296. }
  297. static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s,
  298. struct hostapd_sta_add_params *params)
  299. {
  300. if (wpa_s->driver->sta_add)
  301. return wpa_s->driver->sta_add(wpa_s->ifname, wpa_s->drv_priv,
  302. params);
  303. return -1;
  304. }
  305. static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s,
  306. const u8 *addr)
  307. {
  308. if (wpa_s->driver->sta_remove)
  309. return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr);
  310. return -1;
  311. }
  312. static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s,
  313. const u8 *addr, const u8 *data,
  314. size_t data_len, int encrypt,
  315. const u8 *own_addr)
  316. {
  317. if (wpa_s->driver->hapd_send_eapol)
  318. return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr,
  319. data, data_len, encrypt,
  320. own_addr);
  321. return -1;
  322. }
  323. static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s,
  324. const u8 *addr, int total_flags,
  325. int flags_or, int flags_and)
  326. {
  327. if (wpa_s->driver->sta_set_flags)
  328. return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr,
  329. total_flags, flags_or,
  330. flags_and);
  331. return -1;
  332. }
  333. static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s,
  334. int authorized)
  335. {
  336. if (wpa_s->driver->set_supp_port) {
  337. return wpa_s->driver->set_supp_port(wpa_s->drv_priv,
  338. authorized);
  339. }
  340. return 0;
  341. }
  342. #endif /* DRIVER_I_H */