driver_i.h revision 351611
1139749Simp/* 2139749Simp * wpa_supplicant - Internal driver interface wrappers 3139749Simp * Copyright (c) 2003-2015, Jouni Malinen <j@w1.fi> 4127827Swes * 5127827Swes * This software may be distributed under the terms of the BSD license. 6127827Swes * See README for more details. 7127827Swes */ 8127827Swes 9127827Swes#ifndef DRIVER_I_H 10127827Swes#define DRIVER_I_H 11127827Swes 12127827Swes#include "drivers/driver.h" 13127827Swes 14127827Swes/* driver_ops */ 15127827Swesstatic inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 16127827Swes const char *ifname) 17127827Swes{ 18127827Swes if (wpa_s->driver->init2) 19127827Swes return wpa_s->driver->init2(wpa_s, ifname, 20127827Swes wpa_s->global_drv_priv); 21127827Swes if (wpa_s->driver->init) { 22127827Swes return wpa_s->driver->init(wpa_s, ifname); 23127827Swes } 24127827Swes return NULL; 25119917Swpaul} 26119917Swpaul 27119917Swpaulstatic inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 28119917Swpaul{ 29119917Swpaul if (wpa_s->driver->deinit) 30119917Swpaul wpa_s->driver->deinit(wpa_s->drv_priv); 31119917Swpaul} 32119917Swpaul 33119917Swpaulstatic inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 34119917Swpaul const char *param) 35119917Swpaul{ 36119917Swpaul if (wpa_s->driver->set_param) 37119917Swpaul return wpa_s->driver->set_param(wpa_s->drv_priv, param); 38119917Swpaul return 0; 39119917Swpaul} 40119917Swpaul 41119917Swpaulstatic inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 42119917Swpaul int enabled) 43119917Swpaul{ 44119917Swpaul if (wpa_s->driver->set_countermeasures) { 45119917Swpaul return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 46119917Swpaul enabled); 47119917Swpaul } 48119917Swpaul return -1; 49119917Swpaul} 50119917Swpaul 51119917Swpaulstatic inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 52119917Swpaul struct wpa_driver_auth_params *params) 53119917Swpaul{ 54119917Swpaul if (wpa_s->driver->authenticate) 55119917Swpaul return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 56119917Swpaul return -1; 57119917Swpaul} 58119917Swpaul 59119917Swpaulstatic inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 60119917Swpaul struct wpa_driver_associate_params *params) 61119917Swpaul{ 62119917Swpaul if (wpa_s->driver->associate) { 63133282Sdes return wpa_s->driver->associate(wpa_s->drv_priv, params); 64119917Swpaul } 65119917Swpaul return -1; 66119917Swpaul} 67133282Sdes 68119917Swpaulstatic inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s) 69119917Swpaul{ 70119917Swpaul if (wpa_s->driver->init_mesh) 71119917Swpaul return wpa_s->driver->init_mesh(wpa_s->drv_priv); 72119917Swpaul return -1; 73119917Swpaul} 74119917Swpaul 75119917Swpaulstatic inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s, 76175787Syongari struct wpa_driver_mesh_join_params *params) 77175787Syongari{ 78175787Syongari if (wpa_s->driver->join_mesh) 79175787Syongari return wpa_s->driver->join_mesh(wpa_s->drv_priv, params); 80119917Swpaul return -1; 81119917Swpaul} 82119917Swpaul 83119917Swpaulstatic inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s) 84119917Swpaul{ 85119917Swpaul if (wpa_s->driver->leave_mesh) 86119917Swpaul return wpa_s->driver->leave_mesh(wpa_s->drv_priv); 87119917Swpaul return -1; 88119917Swpaul} 89119917Swpaul 90119917Swpaulstatic inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s, 91119917Swpaul const u8 *addr, 92119917Swpaul const u8 *eth, size_t len) 93119917Swpaul{ 94119917Swpaul if (wpa_s->driver->probe_mesh_link) 95119917Swpaul return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr, 96119917Swpaul eth, len); 97119917Swpaul return -1; 98119917Swpaul} 99119917Swpaul 100119917Swpaulstatic inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 101119917Swpaul struct wpa_driver_scan_params *params) 102119917Swpaul{ 103119917Swpaul#ifdef CONFIG_TESTING_OPTIONS 104119917Swpaul if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER) 105119917Swpaul return -EBUSY; 106119917Swpaul#endif /* CONFIG_TESTING_OPTIONS */ 107119917Swpaul if (wpa_s->driver->scan2) 108119917Swpaul return wpa_s->driver->scan2(wpa_s->drv_priv, params); 109119917Swpaul return -1; 110119917Swpaul} 111119917Swpaul 112119917Swpaulstatic inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 113119917Swpaul struct wpa_driver_scan_params *params) 114119917Swpaul{ 115119917Swpaul if (wpa_s->driver->sched_scan) 116119917Swpaul return wpa_s->driver->sched_scan(wpa_s->drv_priv, params); 117119917Swpaul return -1; 118119917Swpaul} 119119917Swpaul 120119917Swpaulstatic inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 121119917Swpaul{ 122119917Swpaul if (wpa_s->driver->stop_sched_scan) 123119917Swpaul return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 124119917Swpaul return -1; 125119917Swpaul} 126119917Swpaul 127119917Swpaulstatic inline struct wpa_scan_results * wpa_drv_get_scan_results2( 128119917Swpaul struct wpa_supplicant *wpa_s) 129119917Swpaul{ 130119917Swpaul if (wpa_s->driver->get_scan_results2) 131119917Swpaul return wpa_s->driver->get_scan_results2(wpa_s->drv_priv); 132119917Swpaul return NULL; 133119917Swpaul} 134119917Swpaul 135119917Swpaulstatic inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 136119917Swpaul{ 137119917Swpaul if (wpa_s->driver->get_bssid) { 138119917Swpaul return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 139119917Swpaul } 140119917Swpaul return -1; 141119917Swpaul} 142119917Swpaul 143119917Swpaulstatic inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 144119917Swpaul{ 145119917Swpaul if (wpa_s->driver->get_ssid) { 146119917Swpaul return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 147119917Swpaul } 148119917Swpaul return -1; 149119917Swpaul} 150119917Swpaul 151119917Swpaulstatic inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, 152119917Swpaul enum wpa_alg alg, const u8 *addr, 153119917Swpaul int key_idx, int set_tx, 154119917Swpaul const u8 *seq, size_t seq_len, 155119917Swpaul const u8 *key, size_t key_len) 156119917Swpaul{ 157119917Swpaul if (alg != WPA_ALG_NONE) { 158119917Swpaul if (key_idx >= 0 && key_idx <= 6) 159119917Swpaul wpa_s->keys_cleared &= ~BIT(key_idx); 160119917Swpaul else 161119917Swpaul wpa_s->keys_cleared = 0; 162119917Swpaul } 163119917Swpaul if (wpa_s->driver->set_key) { 164119917Swpaul return wpa_s->driver->set_key(wpa_s->ifname, wpa_s->drv_priv, 165119917Swpaul alg, addr, key_idx, set_tx, 166119917Swpaul seq, seq_len, key, key_len); 167119917Swpaul } 168119917Swpaul return -1; 169119917Swpaul} 170119917Swpaul 171119917Swpaulstatic inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s, 172119917Swpaul const u8 *addr, int idx, u8 *seq) 173119917Swpaul{ 174119917Swpaul if (wpa_s->driver->get_seqnum) 175119917Swpaul return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv, 176119917Swpaul addr, idx, seq); 177119917Swpaul return -1; 178119917Swpaul} 179119917Swpaul 180119917Swpaulstatic inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s, 181119917Swpaul const u8 *addr, u16 reason_code) 182119917Swpaul{ 183119917Swpaul if (wpa_s->driver->sta_deauth) { 184119917Swpaul return wpa_s->driver->sta_deauth(wpa_s->drv_priv, 185119917Swpaul wpa_s->own_addr, addr, 186119917Swpaul reason_code); 187119917Swpaul } 188119917Swpaul return -1; 189119917Swpaul} 190119917Swpaul 191119917Swpaulstatic inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 192119917Swpaul const u8 *addr, u16 reason_code) 193119917Swpaul{ 194119917Swpaul if (wpa_s->driver->deauthenticate) { 195119917Swpaul return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 196119917Swpaul reason_code); 197119917Swpaul } 198119917Swpaul return -1; 199119917Swpaul} 200119917Swpaul 201119917Swpaulstatic inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 202119917Swpaul struct wpa_pmkid_params *params) 203119917Swpaul{ 204119917Swpaul if (wpa_s->driver->add_pmkid) { 205119917Swpaul return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params); 206119917Swpaul } 207119917Swpaul return -1; 208119917Swpaul} 209119917Swpaul 210119917Swpaulstatic inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 211119917Swpaul struct wpa_pmkid_params *params) 212119917Swpaul{ 213119917Swpaul if (wpa_s->driver->remove_pmkid) { 214119917Swpaul return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params); 215119917Swpaul } 216119917Swpaul return -1; 217119917Swpaul} 218119917Swpaul 219119917Swpaulstatic inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 220119917Swpaul{ 221119917Swpaul if (wpa_s->driver->flush_pmkid) { 222119917Swpaul return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 223119917Swpaul } 224119917Swpaul return -1; 225119917Swpaul} 226119917Swpaul 227119917Swpaulstatic inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 228119917Swpaul struct wpa_driver_capa *capa) 229119917Swpaul{ 230119917Swpaul if (wpa_s->driver->get_capa) { 231119917Swpaul return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 232119917Swpaul } 233119917Swpaul return -1; 234119917Swpaul} 235119917Swpaul 236119917Swpaulstatic inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 237119917Swpaul{ 238119917Swpaul if (wpa_s->driver->poll) { 239119917Swpaul wpa_s->driver->poll(wpa_s->drv_priv); 240119917Swpaul } 241119917Swpaul} 242119917Swpaul 243119917Swpaulstatic inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 244119917Swpaul{ 245119917Swpaul if (wpa_s->driver->get_ifname) { 246119917Swpaul return wpa_s->driver->get_ifname(wpa_s->drv_priv); 247119917Swpaul } 248119917Swpaul return NULL; 249119917Swpaul} 250119917Swpaul 251119917Swpaulstatic inline const char * 252119917Swpaulwpa_driver_get_radio_name(struct wpa_supplicant *wpa_s) 253119917Swpaul{ 254119917Swpaul if (wpa_s->driver->get_radio_name) 255119917Swpaul return wpa_s->driver->get_radio_name(wpa_s->drv_priv); 256119917Swpaul return NULL; 257119917Swpaul} 258119917Swpaul 259119917Swpaulstatic inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 260119917Swpaul{ 261119917Swpaul if (wpa_s->driver->get_mac_addr) { 262119917Swpaul return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 263119917Swpaul } 264119917Swpaul return NULL; 265119917Swpaul} 266119917Swpaul 267119917Swpaulstatic inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 268119917Swpaul int state) 269119917Swpaul{ 270119917Swpaul if (wpa_s->driver->set_operstate) 271119917Swpaul return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 272119917Swpaul return 0; 273119917Swpaul} 274119917Swpaul 275119917Swpaulstatic inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 276119917Swpaul const u8 *addr, int protect_type, 277119917Swpaul int key_type) 278119917Swpaul{ 279119917Swpaul if (wpa_s->driver->mlme_setprotection) 280119917Swpaul return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 281119917Swpaul protect_type, 282119917Swpaul key_type); 283119917Swpaul return 0; 284119917Swpaul} 285119917Swpaul 286119917Swpaulstatic inline struct hostapd_hw_modes * 287119917Swpaulwpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 288119917Swpaul u16 *flags, u8 *dfs_domain) 289119917Swpaul{ 290119917Swpaul if (wpa_s->driver->get_hw_feature_data) 291119917Swpaul return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 292119917Swpaul num_modes, flags, 293119917Swpaul dfs_domain); 294119917Swpaul return NULL; 295119917Swpaul} 296119917Swpaul 297119917Swpaulstatic inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 298119917Swpaul const char *alpha2) 299119917Swpaul{ 300119917Swpaul if (wpa_s->driver->set_country) 301119917Swpaul return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 302119917Swpaul return 0; 303119917Swpaul} 304119917Swpaul 305119917Swpaulstatic inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 306119917Swpaul const u8 *data, size_t data_len, int noack, 307119917Swpaul unsigned int freq) 308119917Swpaul{ 309119917Swpaul if (wpa_s->driver->send_mlme) 310119917Swpaul return wpa_s->driver->send_mlme(wpa_s->drv_priv, 311119917Swpaul data, data_len, noack, 312119917Swpaul freq, NULL, 0); 313119917Swpaul return -1; 314119917Swpaul} 315119917Swpaul 316119917Swpaulstatic inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 317119917Swpaul const u8 *md, 318119917Swpaul const u8 *ies, size_t ies_len) 319119917Swpaul{ 320119917Swpaul if (wpa_s->driver->update_ft_ies) 321119917Swpaul return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 322119917Swpaul ies, ies_len); 323119917Swpaul return -1; 324119917Swpaul} 325119917Swpaul 326119917Swpaulstatic inline int wpa_drv_set_ap(struct wpa_supplicant *wpa_s, 327119917Swpaul struct wpa_driver_ap_params *params) 328119917Swpaul{ 329119917Swpaul if (wpa_s->driver->set_ap) 330119917Swpaul return wpa_s->driver->set_ap(wpa_s->drv_priv, params); 331119917Swpaul return -1; 332119917Swpaul} 333119917Swpaul 334119917Swpaulstatic inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 335119917Swpaul struct hostapd_sta_add_params *params) 336119917Swpaul{ 337119917Swpaul if (wpa_s->driver->sta_add) 338119917Swpaul return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 339119917Swpaul return -1; 340119917Swpaul} 341119917Swpaul 342119917Swpaulstatic inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 343119917Swpaul const u8 *addr) 344119917Swpaul{ 345119917Swpaul if (wpa_s->driver->sta_remove) 346119917Swpaul return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 347119917Swpaul return -1; 348119917Swpaul} 349119917Swpaul 350119917Swpaulstatic inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 351119917Swpaul const u8 *addr, const u8 *data, 352119917Swpaul size_t data_len, int encrypt, 353119917Swpaul const u8 *own_addr, u32 flags) 354119917Swpaul{ 355119917Swpaul if (wpa_s->driver->hapd_send_eapol) 356119917Swpaul return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 357119917Swpaul data, data_len, encrypt, 358119917Swpaul own_addr, flags); 359119917Swpaul return -1; 360119917Swpaul} 361119917Swpaul 362119917Swpaulstatic inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 363119917Swpaul const u8 *addr, int total_flags, 364119917Swpaul int flags_or, int flags_and) 365119917Swpaul{ 366119917Swpaul if (wpa_s->driver->sta_set_flags) 367119917Swpaul return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 368119917Swpaul total_flags, flags_or, 369119917Swpaul flags_and); 370119917Swpaul return -1; 371119917Swpaul} 372119917Swpaul 373119917Swpaulstatic inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 374119917Swpaul int authorized) 375119917Swpaul{ 376119917Swpaul if (wpa_s->driver->set_supp_port) { 377119917Swpaul return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 378119917Swpaul authorized); 379119917Swpaul } 380119917Swpaul return 0; 381119917Swpaul} 382119917Swpaul 383119917Swpaulstatic inline int wpa_drv_send_action(struct wpa_supplicant *wpa_s, 384119917Swpaul unsigned int freq, 385119917Swpaul unsigned int wait, 386119917Swpaul const u8 *dst, const u8 *src, 387119917Swpaul const u8 *bssid, 388119917Swpaul const u8 *data, size_t data_len, 389119917Swpaul int no_cck) 390119917Swpaul{ 391119917Swpaul if (wpa_s->driver->send_action) 392119917Swpaul return wpa_s->driver->send_action(wpa_s->drv_priv, freq, 393119917Swpaul wait, dst, src, bssid, 394119917Swpaul data, data_len, no_cck); 395119917Swpaul return -1; 396119917Swpaul} 397119917Swpaul 398119917Swpaulstatic inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 399119917Swpaul{ 400119917Swpaul if (wpa_s->driver->send_action_cancel_wait) 401119917Swpaul wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 402119917Swpaul} 403119917Swpaul 404119917Swpaulstatic inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 405119917Swpaul struct hostapd_freq_params *freq) 406119917Swpaul{ 407119917Swpaul if (wpa_s->driver->set_freq) 408119917Swpaul return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 409119917Swpaul return -1; 410119917Swpaul} 411119917Swpaul 412119917Swpaulstatic inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 413119917Swpaul enum wpa_driver_if_type type, 414119917Swpaul const char *ifname, const u8 *addr, 415119917Swpaul void *bss_ctx, char *force_ifname, 416133282Sdes u8 *if_addr, const char *bridge) 417119917Swpaul{ 418119917Swpaul if (wpa_s->driver->if_add) 419119917Swpaul return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 420119917Swpaul addr, bss_ctx, NULL, force_ifname, 421119917Swpaul if_addr, bridge, 0, 0); 422119917Swpaul return -1; 423119917Swpaul} 424134590Sdes 425119917Swpaulstatic inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 426119917Swpaul enum wpa_driver_if_type type, 427119917Swpaul const char *ifname) 428119917Swpaul{ 429119917Swpaul if (wpa_s->driver->if_remove) 430119917Swpaul return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 431159015Ssilby return -1; 432159015Ssilby} 433119917Swpaul 434119917Swpaulstatic inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 435119917Swpaul unsigned int freq, 436119917Swpaul unsigned int duration) 437119917Swpaul{ 438181953Syongari if (wpa_s->driver->remain_on_channel) 439181953Syongari return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 440181953Syongari duration); 441181953Syongari return -1; 442181953Syongari} 443119917Swpaul 444181953Syongaristatic inline int wpa_drv_cancel_remain_on_channel( 445119917Swpaul struct wpa_supplicant *wpa_s) 446181953Syongari{ 447181953Syongari if (wpa_s->driver->cancel_remain_on_channel) 448119917Swpaul return wpa_s->driver->cancel_remain_on_channel( 449133282Sdes wpa_s->drv_priv); 450119917Swpaul return -1; 451119917Swpaul} 452133282Sdes 453119917Swpaulstatic inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 454136804Smtm int report) 455136804Smtm{ 456136804Smtm if (wpa_s->driver->probe_req_report) 457119917Swpaul return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 458119917Swpaul report); 459119917Swpaul return -1; 460181953Syongari} 461119917Swpaul 462119917Swpaulstatic inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 463119917Swpaul{ 464119917Swpaul if (wpa_s->driver->deinit_ap) 465181953Syongari return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 466181953Syongari return 0; 467181953Syongari} 468181953Syongari 469181953Syongaristatic inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 470181953Syongari{ 471119917Swpaul if (wpa_s->driver->deinit_p2p_cli) 472119917Swpaul return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 473119917Swpaul return 0; 474119917Swpaul} 475119917Swpaul 476119917Swpaulstatic inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 477119917Swpaul{ 478119917Swpaul if (wpa_s->driver->suspend) 479119917Swpaul wpa_s->driver->suspend(wpa_s->drv_priv); 480119917Swpaul} 481119917Swpaul 482181994Syongaristatic inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 483181994Syongari{ 484181994Syongari if (wpa_s->driver->resume) 485181994Syongari wpa_s->driver->resume(wpa_s->drv_priv); 486181994Syongari} 487181994Syongari 488181994Syongaristatic inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 489181994Syongari int threshold, int hysteresis) 490181994Syongari{ 491181994Syongari if (wpa_s->driver->signal_monitor) 492181994Syongari return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 493181994Syongari threshold, hysteresis); 494181994Syongari return -1; 495181994Syongari} 496181994Syongari 497181994Syongaristatic inline int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 498181994Syongari struct wpa_signal_info *si) 499181994Syongari{ 500181994Syongari if (wpa_s->driver->signal_poll) 501181994Syongari return wpa_s->driver->signal_poll(wpa_s->drv_priv, si); 502181994Syongari return -1; 503181994Syongari} 504181994Syongari 505181994Syongaristatic inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s, 506181994Syongari struct wpa_channel_info *ci) 507181994Syongari{ 508181994Syongari if (wpa_s->driver->channel_info) 509181994Syongari return wpa_s->driver->channel_info(wpa_s->drv_priv, ci); 510181994Syongari return -1; 511181994Syongari} 512181994Syongari 513181994Syongaristatic inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 514181994Syongari struct hostap_sta_driver_data *sta) 515181994Syongari{ 516181994Syongari if (wpa_s->driver->read_sta_data) 517181994Syongari return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 518181994Syongari wpa_s->bssid); 519181994Syongari return -1; 520181994Syongari} 521181994Syongari 522181994Syongaristatic inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 523181994Syongari const struct wpabuf *beacon, 524181994Syongari const struct wpabuf *proberesp, 525181994Syongari const struct wpabuf *assocresp) 526181994Syongari{ 527181994Syongari if (!wpa_s->driver->set_ap_wps_ie) 528181994Syongari return -1; 529181994Syongari return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 530181994Syongari proberesp, assocresp); 531181994Syongari} 532119917Swpaul 533181994Syongaristatic inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 534181994Syongari u8 *buf, size_t buf_len) 535181994Syongari{ 536181994Syongari if (!wpa_s->driver->get_noa) 537181994Syongari return -1; 538181994Syongari return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 539181994Syongari} 540181994Syongari 541181994Syongaristatic inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 542181994Syongari int legacy_ps, int opp_ps, 543181994Syongari int ctwindow) 544181994Syongari{ 545181994Syongari if (!wpa_s->driver->set_p2p_powersave) 546181994Syongari return -1; 547181994Syongari return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 548181994Syongari opp_ps, ctwindow); 549181994Syongari} 550181994Syongari 551181994Syongaristatic inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 552181994Syongari{ 553181994Syongari if (!wpa_s->driver->ampdu) 554181994Syongari return -1; 555181994Syongari return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 556181994Syongari} 557119917Swpaul 558181994Syongaristatic inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 559181994Syongari const u8 *dst, u8 action_code, 560181994Syongari u8 dialog_token, u16 status_code, 561181994Syongari u32 peer_capab, int initiator, 562181994Syongari const u8 *buf, size_t len) 563181994Syongari{ 564181994Syongari if (wpa_s->driver->send_tdls_mgmt) { 565181994Syongari return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 566181994Syongari action_code, dialog_token, 567181994Syongari status_code, peer_capab, 568181994Syongari initiator, buf, len); 569181994Syongari } 570181994Syongari return -1; 571181994Syongari} 572181994Syongari 573181994Syongaristatic inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 574181994Syongari enum tdls_oper oper, const u8 *peer) 575181994Syongari{ 576181994Syongari if (!wpa_s->driver->tdls_oper) 577181994Syongari return -1; 578181994Syongari return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 579181994Syongari} 580181994Syongari 581119917Swpaul#ifdef ANDROID 582119917Swpaulstatic inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 583133282Sdes char *cmd, char *buf, size_t buf_len) 584119917Swpaul{ 585147256Sbrooks if (!wpa_s->driver->driver_cmd) 586119917Swpaul return -1; 587119917Swpaul return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 588119917Swpaul} 589119917Swpaul#endif /* ANDROID */ 590119917Swpaul 591119917Swpaulstatic inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 592181953Syongari const u8 *kek, size_t kek_len, 593181953Syongari const u8 *kck, size_t kck_len, 594119917Swpaul const u8 *replay_ctr) 595119917Swpaul{ 596119917Swpaul if (!wpa_s->driver->set_rekey_info) 597175787Syongari return; 598181994Syongari wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len, 599119917Swpaul kck, kck_len, replay_ctr); 600181953Syongari} 601181953Syongari 602119917Swpaulstatic inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 603119917Swpaul int disabled) 604181976Syongari{ 605181976Syongari if (!wpa_s->driver->radio_disable) 606119917Swpaul return -1; 607119917Swpaul return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 608119917Swpaul} 609181953Syongari 610119917Swpaulstatic inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 611175787Syongari struct csa_settings *settings) 612119917Swpaul{ 613119917Swpaul if (!wpa_s->driver->switch_channel) 614119917Swpaul return -1; 615147256Sbrooks return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings); 616119917Swpaul} 617119917Swpaul 618119917Swpaulstatic inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid, 619133282Sdes const u8 *address, u8 user_priority, 620119917Swpaul u16 admitted_time) 621119917Swpaul{ 622119917Swpaul if (!wpa_s->driver->add_tx_ts) 623119917Swpaul return -1; 624119917Swpaul return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address, 625119917Swpaul user_priority, admitted_time); 626119917Swpaul} 627 628static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid, 629 const u8 *address) 630{ 631 if (!wpa_s->driver->del_tx_ts) 632 return -1; 633 return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address); 634} 635 636static inline int wpa_drv_tdls_enable_channel_switch( 637 struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class, 638 const struct hostapd_freq_params *freq_params) 639{ 640 if (!wpa_s->driver->tdls_enable_channel_switch) 641 return -1; 642 return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr, 643 oper_class, 644 freq_params); 645} 646 647static inline int 648wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s, 649 const u8 *addr) 650{ 651 if (!wpa_s->driver->tdls_disable_channel_switch) 652 return -1; 653 return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv, 654 addr); 655} 656 657static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 658 enum wnm_oper oper, const u8 *peer, 659 u8 *buf, u16 *buf_len) 660{ 661 if (!wpa_s->driver->wnm_oper) 662 return -1; 663 return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 664 buf_len); 665} 666 667static inline int wpa_drv_status(struct wpa_supplicant *wpa_s, 668 char *buf, size_t buflen) 669{ 670 if (!wpa_s->driver->status) 671 return -1; 672 return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen); 673} 674 675static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s, 676 const u8 *qos_map_set, u8 qos_map_set_len) 677{ 678 if (!wpa_s->driver->set_qos_map) 679 return -1; 680 return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set, 681 qos_map_set_len); 682} 683 684static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s, 685 const struct wowlan_triggers *triggers) 686{ 687 if (!wpa_s->driver->set_wowlan) 688 return -1; 689 return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers); 690} 691 692static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s, 693 int vendor_id, int subcmd, const u8 *data, 694 size_t data_len, struct wpabuf *buf) 695{ 696 if (!wpa_s->driver->vendor_cmd) 697 return -1; 698 return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd, 699 data, data_len, buf); 700} 701 702static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed, 703 const u8 *bssid) 704{ 705 if (!wpa_s->driver->roaming) 706 return -1; 707 return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid); 708} 709 710static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s, 711 int disable) 712{ 713 if (!wpa_s->driver->disable_fils) 714 return -1; 715 return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable); 716} 717 718static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s, 719 const u8 *addr) 720{ 721 if (!wpa_s->driver->set_mac_addr) 722 return -1; 723 return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr); 724} 725 726 727#ifdef CONFIG_MACSEC 728 729static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s, 730 struct macsec_init_params *params) 731{ 732 if (!wpa_s->driver->macsec_init) 733 return -1; 734 return wpa_s->driver->macsec_init(wpa_s->drv_priv, params); 735} 736 737static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s) 738{ 739 if (!wpa_s->driver->macsec_deinit) 740 return -1; 741 return wpa_s->driver->macsec_deinit(wpa_s->drv_priv); 742} 743 744static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s, 745 enum macsec_cap *cap) 746{ 747 if (!wpa_s->driver->macsec_get_capability) 748 return -1; 749 return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap); 750} 751 752static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s, 753 Boolean enabled) 754{ 755 if (!wpa_s->driver->enable_protect_frames) 756 return -1; 757 return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled); 758} 759 760static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s, 761 Boolean enabled) 762{ 763 if (!wpa_s->driver->enable_encrypt) 764 return -1; 765 return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled); 766} 767 768static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s, 769 Boolean enabled, u32 window) 770{ 771 if (!wpa_s->driver->set_replay_protect) 772 return -1; 773 return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled, 774 window); 775} 776 777static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s, 778 u64 cs) 779{ 780 if (!wpa_s->driver->set_current_cipher_suite) 781 return -1; 782 return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs); 783} 784 785static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s, 786 Boolean enabled) 787{ 788 if (!wpa_s->driver->enable_controlled_port) 789 return -1; 790 return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled); 791} 792 793static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s, 794 struct receive_sa *sa) 795{ 796 if (!wpa_s->driver->get_receive_lowest_pn) 797 return -1; 798 return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa); 799} 800 801static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s, 802 struct transmit_sa *sa) 803{ 804 if (!wpa_s->driver->get_transmit_next_pn) 805 return -1; 806 return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa); 807} 808 809static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s, 810 struct transmit_sa *sa) 811{ 812 if (!wpa_s->driver->set_transmit_next_pn) 813 return -1; 814 return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa); 815} 816 817static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s, 818 struct receive_sa *sa) 819{ 820 if (!wpa_s->driver->set_receive_lowest_pn) 821 return -1; 822 return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa); 823} 824 825static inline int 826wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc, 827 unsigned int conf_offset, int validation) 828{ 829 if (!wpa_s->driver->create_receive_sc) 830 return -1; 831 return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc, 832 conf_offset, validation); 833} 834 835static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s, 836 struct receive_sc *sc) 837{ 838 if (!wpa_s->driver->delete_receive_sc) 839 return -1; 840 return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc); 841} 842 843static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s, 844 struct receive_sa *sa) 845{ 846 if (!wpa_s->driver->create_receive_sa) 847 return -1; 848 return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa); 849} 850 851static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s, 852 struct receive_sa *sa) 853{ 854 if (!wpa_s->driver->delete_receive_sa) 855 return -1; 856 return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa); 857} 858 859static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s, 860 struct receive_sa *sa) 861{ 862 if (!wpa_s->driver->enable_receive_sa) 863 return -1; 864 return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa); 865} 866 867static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s, 868 struct receive_sa *sa) 869{ 870 if (!wpa_s->driver->disable_receive_sa) 871 return -1; 872 return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa); 873} 874 875static inline int 876wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc, 877 unsigned int conf_offset) 878{ 879 if (!wpa_s->driver->create_transmit_sc) 880 return -1; 881 return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc, 882 conf_offset); 883} 884 885static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s, 886 struct transmit_sc *sc) 887{ 888 if (!wpa_s->driver->delete_transmit_sc) 889 return -1; 890 return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc); 891} 892 893static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s, 894 struct transmit_sa *sa) 895{ 896 if (!wpa_s->driver->create_transmit_sa) 897 return -1; 898 return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa); 899} 900 901static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s, 902 struct transmit_sa *sa) 903{ 904 if (!wpa_s->driver->delete_transmit_sa) 905 return -1; 906 return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa); 907} 908 909static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s, 910 struct transmit_sa *sa) 911{ 912 if (!wpa_s->driver->enable_transmit_sa) 913 return -1; 914 return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa); 915} 916 917static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s, 918 struct transmit_sa *sa) 919{ 920 if (!wpa_s->driver->disable_transmit_sa) 921 return -1; 922 return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa); 923} 924#endif /* CONFIG_MACSEC */ 925 926static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s, 927 enum set_band band) 928{ 929 if (!wpa_s->driver->set_band) 930 return -1; 931 return wpa_s->driver->set_band(wpa_s->drv_priv, band); 932} 933 934static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s, 935 enum wpa_driver_if_type if_type, 936 unsigned int *num, 937 unsigned int *freq_list) 938{ 939#ifdef CONFIG_TESTING_OPTIONS 940 if (wpa_s->get_pref_freq_list_override) 941 return wpas_ctrl_iface_get_pref_freq_list_override( 942 wpa_s, if_type, num, freq_list); 943#endif /* CONFIG_TESTING_OPTIONS */ 944 if (!wpa_s->driver->get_pref_freq_list) 945 return -1; 946 return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, if_type, 947 num, freq_list); 948} 949 950static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s, 951 unsigned int freq) 952{ 953 if (!wpa_s->driver->set_prob_oper_freq) 954 return 0; 955 return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq); 956} 957 958static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s, 959 u64 scan_cookie) 960{ 961 if (!wpa_s->driver->abort_scan) 962 return -1; 963 return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie); 964} 965 966static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s, 967 u32 filters) 968{ 969 if (!wpa_s->driver->configure_data_frame_filters) 970 return -1; 971 return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv, 972 filters); 973} 974 975static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s, 976 enum wpa_driver_if_type type) 977{ 978 if (!wpa_s->driver->get_ext_capab) 979 return -1; 980 return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type, 981 &wpa_s->extended_capa, 982 &wpa_s->extended_capa_mask, 983 &wpa_s->extended_capa_len); 984} 985 986static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s, 987 unsigned int channel, 988 unsigned int period, 989 unsigned int interval, 990 unsigned int count, 991 const u8 *device_types, 992 size_t dev_types_len, 993 const u8 *ies, size_t ies_len) 994{ 995 if (!wpa_s->driver->p2p_lo_start) 996 return -1; 997 return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period, 998 interval, count, device_types, 999 dev_types_len, ies, ies_len); 1000} 1001 1002static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s) 1003{ 1004 if (!wpa_s->driver->p2p_lo_stop) 1005 return -1; 1006 return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv); 1007} 1008 1009static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s, 1010 const u8 *ies, size_t len) 1011{ 1012 if (!wpa_s->driver->set_default_scan_ies) 1013 return -1; 1014 return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len); 1015} 1016 1017static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s, 1018 int tdls_external_control) 1019{ 1020 if (!wpa_s->driver->set_tdls_mode) 1021 return -1; 1022 return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv, 1023 tdls_external_control); 1024} 1025 1026static inline struct wpa_bss_candidate_info * 1027wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s, 1028 struct wpa_bss_trans_info *params) 1029{ 1030 if (!wpa_s->driver->get_bss_transition_status) 1031 return NULL; 1032 return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv, 1033 params); 1034} 1035 1036static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s, 1037 int val) 1038{ 1039 if (!wpa_s->driver->ignore_assoc_disallow) 1040 return -1; 1041 return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val); 1042} 1043 1044static inline int wpa_drv_set_bssid_blacklist(struct wpa_supplicant *wpa_s, 1045 unsigned int num_bssid, 1046 const u8 *bssids) 1047{ 1048 if (!wpa_s->driver->set_bssid_blacklist) 1049 return -1; 1050 return wpa_s->driver->set_bssid_blacklist(wpa_s->drv_priv, num_bssid, 1051 bssids); 1052} 1053 1054static inline int wpa_drv_update_connect_params( 1055 struct wpa_supplicant *wpa_s, 1056 struct wpa_driver_associate_params *params, 1057 enum wpa_drv_update_connect_params_mask mask) 1058{ 1059 if (!wpa_s->driver->update_connect_params) 1060 return -1; 1061 return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params, 1062 mask); 1063} 1064 1065static inline int 1066wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s, 1067 struct external_auth *params) 1068{ 1069 if (!wpa_s->driver->send_external_auth_status) 1070 return -1; 1071 return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv, 1072 params); 1073} 1074 1075static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val) 1076{ 1077 if (!wpa_s->driver->set_4addr_mode) 1078 return -1; 1079 return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv, 1080 wpa_s->bridge_ifname, val); 1081} 1082 1083#endif /* DRIVER_I_H */ 1084