1 1.1 christos /* 2 1.1 christos * wpa_supplicant - Internal driver interface wrappers 3 1.2 christos * Copyright (c) 2003-2015, Jouni Malinen <j (at) w1.fi> 4 1.1 christos * 5 1.2 christos * This software may be distributed under the terms of the BSD license. 6 1.2 christos * See README for more details. 7 1.1 christos */ 8 1.1 christos 9 1.1 christos #ifndef DRIVER_I_H 10 1.1 christos #define DRIVER_I_H 11 1.1 christos 12 1.1 christos #include "drivers/driver.h" 13 1.1 christos 14 1.1 christos /* driver_ops */ 15 1.1 christos static inline void * wpa_drv_init(struct wpa_supplicant *wpa_s, 16 1.1 christos const char *ifname) 17 1.1 christos { 18 1.1 christos if (wpa_s->driver->init2) 19 1.1 christos return wpa_s->driver->init2(wpa_s, ifname, 20 1.1 christos wpa_s->global_drv_priv); 21 1.1 christos if (wpa_s->driver->init) { 22 1.1 christos return wpa_s->driver->init(wpa_s, ifname); 23 1.1 christos } 24 1.1 christos return NULL; 25 1.1 christos } 26 1.1 christos 27 1.1 christos static inline void wpa_drv_deinit(struct wpa_supplicant *wpa_s) 28 1.1 christos { 29 1.1 christos if (wpa_s->driver->deinit) 30 1.1 christos wpa_s->driver->deinit(wpa_s->drv_priv); 31 1.1 christos } 32 1.1 christos 33 1.1 christos static inline int wpa_drv_set_param(struct wpa_supplicant *wpa_s, 34 1.1 christos const char *param) 35 1.1 christos { 36 1.1 christos if (wpa_s->driver->set_param) 37 1.1 christos return wpa_s->driver->set_param(wpa_s->drv_priv, param); 38 1.1 christos return 0; 39 1.1 christos } 40 1.1 christos 41 1.1 christos static inline int wpa_drv_set_countermeasures(struct wpa_supplicant *wpa_s, 42 1.1 christos int enabled) 43 1.1 christos { 44 1.1 christos if (wpa_s->driver->set_countermeasures) { 45 1.1 christos return wpa_s->driver->set_countermeasures(wpa_s->drv_priv, 46 1.1 christos enabled); 47 1.1 christos } 48 1.1 christos return -1; 49 1.1 christos } 50 1.1 christos 51 1.1 christos static inline int wpa_drv_authenticate(struct wpa_supplicant *wpa_s, 52 1.1 christos struct wpa_driver_auth_params *params) 53 1.1 christos { 54 1.1 christos if (wpa_s->driver->authenticate) 55 1.1 christos return wpa_s->driver->authenticate(wpa_s->drv_priv, params); 56 1.1 christos return -1; 57 1.1 christos } 58 1.1 christos 59 1.1 christos static inline int wpa_drv_associate(struct wpa_supplicant *wpa_s, 60 1.1 christos struct wpa_driver_associate_params *params) 61 1.1 christos { 62 1.1 christos if (wpa_s->driver->associate) { 63 1.5 christos if (params) 64 1.5 christos params->freq.link_id = -1; 65 1.5 christos 66 1.1 christos return wpa_s->driver->associate(wpa_s->drv_priv, params); 67 1.1 christos } 68 1.1 christos return -1; 69 1.1 christos } 70 1.1 christos 71 1.2 christos static inline int wpa_drv_init_mesh(struct wpa_supplicant *wpa_s) 72 1.2 christos { 73 1.2 christos if (wpa_s->driver->init_mesh) 74 1.2 christos return wpa_s->driver->init_mesh(wpa_s->drv_priv); 75 1.2 christos return -1; 76 1.2 christos } 77 1.2 christos 78 1.2 christos static inline int wpa_drv_join_mesh(struct wpa_supplicant *wpa_s, 79 1.2 christos struct wpa_driver_mesh_join_params *params) 80 1.2 christos { 81 1.2 christos if (wpa_s->driver->join_mesh) 82 1.2 christos return wpa_s->driver->join_mesh(wpa_s->drv_priv, params); 83 1.2 christos return -1; 84 1.2 christos } 85 1.2 christos 86 1.2 christos static inline int wpa_drv_leave_mesh(struct wpa_supplicant *wpa_s) 87 1.2 christos { 88 1.2 christos if (wpa_s->driver->leave_mesh) 89 1.2 christos return wpa_s->driver->leave_mesh(wpa_s->drv_priv); 90 1.2 christos return -1; 91 1.2 christos } 92 1.2 christos 93 1.4 christos static inline int wpa_drv_mesh_link_probe(struct wpa_supplicant *wpa_s, 94 1.4 christos const u8 *addr, 95 1.4 christos const u8 *eth, size_t len) 96 1.4 christos { 97 1.4 christos if (wpa_s->driver->probe_mesh_link) 98 1.4 christos return wpa_s->driver->probe_mesh_link(wpa_s->drv_priv, addr, 99 1.4 christos eth, len); 100 1.4 christos return -1; 101 1.4 christos } 102 1.4 christos 103 1.1 christos static inline int wpa_drv_scan(struct wpa_supplicant *wpa_s, 104 1.1 christos struct wpa_driver_scan_params *params) 105 1.1 christos { 106 1.2 christos #ifdef CONFIG_TESTING_OPTIONS 107 1.2 christos if (wpa_s->test_failure == WPAS_TEST_FAILURE_SCAN_TRIGGER) 108 1.2 christos return -EBUSY; 109 1.2 christos #endif /* CONFIG_TESTING_OPTIONS */ 110 1.1 christos if (wpa_s->driver->scan2) 111 1.1 christos return wpa_s->driver->scan2(wpa_s->drv_priv, params); 112 1.1 christos return -1; 113 1.1 christos } 114 1.1 christos 115 1.2 christos static inline int wpa_drv_sched_scan(struct wpa_supplicant *wpa_s, 116 1.2 christos struct wpa_driver_scan_params *params) 117 1.2 christos { 118 1.2 christos if (wpa_s->driver->sched_scan) 119 1.2 christos return wpa_s->driver->sched_scan(wpa_s->drv_priv, params); 120 1.2 christos return -1; 121 1.2 christos } 122 1.2 christos 123 1.2 christos static inline int wpa_drv_stop_sched_scan(struct wpa_supplicant *wpa_s) 124 1.2 christos { 125 1.2 christos if (wpa_s->driver->stop_sched_scan) 126 1.2 christos return wpa_s->driver->stop_sched_scan(wpa_s->drv_priv); 127 1.2 christos return -1; 128 1.2 christos } 129 1.2 christos 130 1.5 christos struct wpa_scan_results * 131 1.5 christos wpa_drv_get_scan_results(struct wpa_supplicant *wpa_s, const u8 *bssid); 132 1.1 christos 133 1.1 christos static inline int wpa_drv_get_bssid(struct wpa_supplicant *wpa_s, u8 *bssid) 134 1.1 christos { 135 1.1 christos if (wpa_s->driver->get_bssid) { 136 1.1 christos return wpa_s->driver->get_bssid(wpa_s->drv_priv, bssid); 137 1.1 christos } 138 1.1 christos return -1; 139 1.1 christos } 140 1.1 christos 141 1.1 christos static inline int wpa_drv_get_ssid(struct wpa_supplicant *wpa_s, u8 *ssid) 142 1.1 christos { 143 1.1 christos if (wpa_s->driver->get_ssid) { 144 1.1 christos return wpa_s->driver->get_ssid(wpa_s->drv_priv, ssid); 145 1.1 christos } 146 1.1 christos return -1; 147 1.1 christos } 148 1.1 christos 149 1.5 christos static inline int wpa_drv_set_key(struct wpa_supplicant *wpa_s, int link_id, 150 1.1 christos enum wpa_alg alg, const u8 *addr, 151 1.1 christos int key_idx, int set_tx, 152 1.2 christos const u8 *seq, size_t seq_len, 153 1.5 christos const u8 *key, size_t key_len, 154 1.5 christos enum key_flag key_flag) 155 1.1 christos { 156 1.5 christos struct wpa_driver_set_key_params params; 157 1.5 christos 158 1.5 christos os_memset(¶ms, 0, sizeof(params)); 159 1.5 christos params.ifname = wpa_s->ifname; 160 1.5 christos params.alg = alg; 161 1.5 christos params.addr = addr; 162 1.5 christos params.key_idx = key_idx; 163 1.5 christos params.set_tx = set_tx; 164 1.5 christos params.seq = seq; 165 1.5 christos params.seq_len = seq_len; 166 1.5 christos params.key = key; 167 1.5 christos params.key_len = key_len; 168 1.5 christos params.key_flag = key_flag; 169 1.5 christos params.link_id = link_id; 170 1.5 christos 171 1.2 christos if (alg != WPA_ALG_NONE) { 172 1.5 christos /* keyidx = 1 can be either a broadcast or--with 173 1.5 christos * Extended Key ID--a unicast key. Use bit 15 for 174 1.5 christos * the pairwise keyidx 1 which is hopefully high enough 175 1.5 christos * to not clash with future extensions. 176 1.5 christos */ 177 1.5 christos if (key_idx == 1 && (key_flag & KEY_FLAG_PAIRWISE)) 178 1.5 christos wpa_s->keys_cleared &= ~BIT(15); 179 1.5 christos else if (key_idx >= 0 && key_idx <= 5) 180 1.2 christos wpa_s->keys_cleared &= ~BIT(key_idx); 181 1.2 christos else 182 1.2 christos wpa_s->keys_cleared = 0; 183 1.2 christos } 184 1.1 christos if (wpa_s->driver->set_key) { 185 1.5 christos return wpa_s->driver->set_key(wpa_s->drv_priv, ¶ms); 186 1.1 christos } 187 1.1 christos return -1; 188 1.1 christos } 189 1.1 christos 190 1.2 christos static inline int wpa_drv_get_seqnum(struct wpa_supplicant *wpa_s, 191 1.2 christos const u8 *addr, int idx, u8 *seq) 192 1.2 christos { 193 1.2 christos if (wpa_s->driver->get_seqnum) 194 1.2 christos return wpa_s->driver->get_seqnum(wpa_s->ifname, wpa_s->drv_priv, 195 1.5 christos addr, idx, -1, seq); 196 1.2 christos return -1; 197 1.2 christos } 198 1.2 christos 199 1.2 christos static inline int wpa_drv_sta_deauth(struct wpa_supplicant *wpa_s, 200 1.4 christos const u8 *addr, u16 reason_code) 201 1.2 christos { 202 1.2 christos if (wpa_s->driver->sta_deauth) { 203 1.2 christos return wpa_s->driver->sta_deauth(wpa_s->drv_priv, 204 1.2 christos wpa_s->own_addr, addr, 205 1.5 christos reason_code, -1); 206 1.2 christos } 207 1.2 christos return -1; 208 1.2 christos } 209 1.2 christos 210 1.1 christos static inline int wpa_drv_deauthenticate(struct wpa_supplicant *wpa_s, 211 1.4 christos const u8 *addr, u16 reason_code) 212 1.1 christos { 213 1.1 christos if (wpa_s->driver->deauthenticate) { 214 1.1 christos return wpa_s->driver->deauthenticate(wpa_s->drv_priv, addr, 215 1.1 christos reason_code); 216 1.1 christos } 217 1.1 christos return -1; 218 1.1 christos } 219 1.1 christos 220 1.1 christos static inline int wpa_drv_add_pmkid(struct wpa_supplicant *wpa_s, 221 1.3 christos struct wpa_pmkid_params *params) 222 1.1 christos { 223 1.1 christos if (wpa_s->driver->add_pmkid) { 224 1.3 christos return wpa_s->driver->add_pmkid(wpa_s->drv_priv, params); 225 1.1 christos } 226 1.1 christos return -1; 227 1.1 christos } 228 1.1 christos 229 1.1 christos static inline int wpa_drv_remove_pmkid(struct wpa_supplicant *wpa_s, 230 1.3 christos struct wpa_pmkid_params *params) 231 1.1 christos { 232 1.1 christos if (wpa_s->driver->remove_pmkid) { 233 1.3 christos return wpa_s->driver->remove_pmkid(wpa_s->drv_priv, params); 234 1.1 christos } 235 1.1 christos return -1; 236 1.1 christos } 237 1.1 christos 238 1.1 christos static inline int wpa_drv_flush_pmkid(struct wpa_supplicant *wpa_s) 239 1.1 christos { 240 1.1 christos if (wpa_s->driver->flush_pmkid) { 241 1.1 christos return wpa_s->driver->flush_pmkid(wpa_s->drv_priv); 242 1.1 christos } 243 1.1 christos return -1; 244 1.1 christos } 245 1.1 christos 246 1.1 christos static inline int wpa_drv_get_capa(struct wpa_supplicant *wpa_s, 247 1.1 christos struct wpa_driver_capa *capa) 248 1.1 christos { 249 1.1 christos if (wpa_s->driver->get_capa) { 250 1.1 christos return wpa_s->driver->get_capa(wpa_s->drv_priv, capa); 251 1.1 christos } 252 1.1 christos return -1; 253 1.1 christos } 254 1.1 christos 255 1.1 christos static inline void wpa_drv_poll(struct wpa_supplicant *wpa_s) 256 1.1 christos { 257 1.1 christos if (wpa_s->driver->poll) { 258 1.1 christos wpa_s->driver->poll(wpa_s->drv_priv); 259 1.1 christos } 260 1.1 christos } 261 1.1 christos 262 1.1 christos static inline const char * wpa_drv_get_ifname(struct wpa_supplicant *wpa_s) 263 1.1 christos { 264 1.1 christos if (wpa_s->driver->get_ifname) { 265 1.1 christos return wpa_s->driver->get_ifname(wpa_s->drv_priv); 266 1.1 christos } 267 1.1 christos return NULL; 268 1.1 christos } 269 1.1 christos 270 1.2 christos static inline const char * 271 1.2 christos wpa_driver_get_radio_name(struct wpa_supplicant *wpa_s) 272 1.2 christos { 273 1.2 christos if (wpa_s->driver->get_radio_name) 274 1.2 christos return wpa_s->driver->get_radio_name(wpa_s->drv_priv); 275 1.2 christos return NULL; 276 1.2 christos } 277 1.2 christos 278 1.1 christos static inline const u8 * wpa_drv_get_mac_addr(struct wpa_supplicant *wpa_s) 279 1.1 christos { 280 1.1 christos if (wpa_s->driver->get_mac_addr) { 281 1.1 christos return wpa_s->driver->get_mac_addr(wpa_s->drv_priv); 282 1.1 christos } 283 1.1 christos return NULL; 284 1.1 christos } 285 1.1 christos 286 1.1 christos static inline int wpa_drv_set_operstate(struct wpa_supplicant *wpa_s, 287 1.1 christos int state) 288 1.1 christos { 289 1.1 christos if (wpa_s->driver->set_operstate) 290 1.1 christos return wpa_s->driver->set_operstate(wpa_s->drv_priv, state); 291 1.1 christos return 0; 292 1.1 christos } 293 1.1 christos 294 1.1 christos static inline int wpa_drv_mlme_setprotection(struct wpa_supplicant *wpa_s, 295 1.1 christos const u8 *addr, int protect_type, 296 1.1 christos int key_type) 297 1.1 christos { 298 1.1 christos if (wpa_s->driver->mlme_setprotection) 299 1.1 christos return wpa_s->driver->mlme_setprotection(wpa_s->drv_priv, addr, 300 1.1 christos protect_type, 301 1.1 christos key_type); 302 1.1 christos return 0; 303 1.1 christos } 304 1.1 christos 305 1.1 christos static inline struct hostapd_hw_modes * 306 1.1 christos wpa_drv_get_hw_feature_data(struct wpa_supplicant *wpa_s, u16 *num_modes, 307 1.3 christos u16 *flags, u8 *dfs_domain) 308 1.1 christos { 309 1.1 christos if (wpa_s->driver->get_hw_feature_data) 310 1.1 christos return wpa_s->driver->get_hw_feature_data(wpa_s->drv_priv, 311 1.3 christos num_modes, flags, 312 1.3 christos dfs_domain); 313 1.1 christos return NULL; 314 1.1 christos } 315 1.1 christos 316 1.1 christos static inline int wpa_drv_set_country(struct wpa_supplicant *wpa_s, 317 1.1 christos const char *alpha2) 318 1.1 christos { 319 1.1 christos if (wpa_s->driver->set_country) 320 1.1 christos return wpa_s->driver->set_country(wpa_s->drv_priv, alpha2); 321 1.1 christos return 0; 322 1.1 christos } 323 1.1 christos 324 1.1 christos static inline int wpa_drv_send_mlme(struct wpa_supplicant *wpa_s, 325 1.2 christos const u8 *data, size_t data_len, int noack, 326 1.5 christos unsigned int freq, unsigned int wait) 327 1.1 christos { 328 1.1 christos if (wpa_s->driver->send_mlme) 329 1.1 christos return wpa_s->driver->send_mlme(wpa_s->drv_priv, 330 1.2 christos data, data_len, noack, 331 1.5 christos freq, NULL, 0, 0, wait, -1); 332 1.1 christos return -1; 333 1.1 christos } 334 1.1 christos 335 1.1 christos static inline int wpa_drv_update_ft_ies(struct wpa_supplicant *wpa_s, 336 1.1 christos const u8 *md, 337 1.1 christos const u8 *ies, size_t ies_len) 338 1.1 christos { 339 1.1 christos if (wpa_s->driver->update_ft_ies) 340 1.1 christos return wpa_s->driver->update_ft_ies(wpa_s->drv_priv, md, 341 1.1 christos ies, ies_len); 342 1.1 christos return -1; 343 1.1 christos } 344 1.1 christos 345 1.1 christos static inline int wpa_drv_sta_add(struct wpa_supplicant *wpa_s, 346 1.1 christos struct hostapd_sta_add_params *params) 347 1.1 christos { 348 1.5 christos if (wpa_s->driver->sta_add) { 349 1.5 christos /* Set link_id to -1 for non-TDLS peers */ 350 1.5 christos if (!(params->flags & WPA_STA_TDLS_PEER)) 351 1.5 christos params->mld_link_id = -1; 352 1.1 christos return wpa_s->driver->sta_add(wpa_s->drv_priv, params); 353 1.5 christos } 354 1.1 christos return -1; 355 1.1 christos } 356 1.1 christos 357 1.1 christos static inline int wpa_drv_sta_remove(struct wpa_supplicant *wpa_s, 358 1.1 christos const u8 *addr) 359 1.1 christos { 360 1.1 christos if (wpa_s->driver->sta_remove) 361 1.1 christos return wpa_s->driver->sta_remove(wpa_s->drv_priv, addr); 362 1.1 christos return -1; 363 1.1 christos } 364 1.1 christos 365 1.5 christos static inline int wpa_drv_tx_control_port(struct wpa_supplicant *wpa_s, 366 1.5 christos const u8 *dest, u16 proto, 367 1.5 christos const u8 *buf, size_t len, 368 1.5 christos int no_encrypt) 369 1.5 christos { 370 1.5 christos if (!wpa_s->driver->tx_control_port) 371 1.5 christos return -1; 372 1.5 christos return wpa_s->driver->tx_control_port(wpa_s->drv_priv, dest, proto, 373 1.5 christos buf, len, no_encrypt, -1); 374 1.5 christos } 375 1.5 christos 376 1.1 christos static inline int wpa_drv_hapd_send_eapol(struct wpa_supplicant *wpa_s, 377 1.1 christos const u8 *addr, const u8 *data, 378 1.1 christos size_t data_len, int encrypt, 379 1.2 christos const u8 *own_addr, u32 flags) 380 1.1 christos { 381 1.1 christos if (wpa_s->driver->hapd_send_eapol) 382 1.1 christos return wpa_s->driver->hapd_send_eapol(wpa_s->drv_priv, addr, 383 1.1 christos data, data_len, encrypt, 384 1.5 christos own_addr, flags, -1); 385 1.1 christos return -1; 386 1.1 christos } 387 1.1 christos 388 1.1 christos static inline int wpa_drv_sta_set_flags(struct wpa_supplicant *wpa_s, 389 1.1 christos const u8 *addr, int total_flags, 390 1.1 christos int flags_or, int flags_and) 391 1.1 christos { 392 1.1 christos if (wpa_s->driver->sta_set_flags) 393 1.1 christos return wpa_s->driver->sta_set_flags(wpa_s->drv_priv, addr, 394 1.1 christos total_flags, flags_or, 395 1.1 christos flags_and); 396 1.1 christos return -1; 397 1.1 christos } 398 1.1 christos 399 1.1 christos static inline int wpa_drv_set_supp_port(struct wpa_supplicant *wpa_s, 400 1.1 christos int authorized) 401 1.1 christos { 402 1.1 christos if (wpa_s->driver->set_supp_port) { 403 1.1 christos return wpa_s->driver->set_supp_port(wpa_s->drv_priv, 404 1.1 christos authorized); 405 1.1 christos } 406 1.1 christos return 0; 407 1.1 christos } 408 1.1 christos 409 1.5 christos int wpa_drv_send_action(struct wpa_supplicant *wpa_s, unsigned int freq, 410 1.5 christos unsigned int wait, const u8 *dst, const u8 *src, 411 1.5 christos const u8 *bssid, const u8 *data, size_t data_len, 412 1.5 christos int no_cck); 413 1.2 christos 414 1.2 christos static inline void wpa_drv_send_action_cancel_wait(struct wpa_supplicant *wpa_s) 415 1.2 christos { 416 1.2 christos if (wpa_s->driver->send_action_cancel_wait) 417 1.2 christos wpa_s->driver->send_action_cancel_wait(wpa_s->drv_priv); 418 1.2 christos } 419 1.2 christos 420 1.2 christos static inline int wpa_drv_set_freq(struct wpa_supplicant *wpa_s, 421 1.2 christos struct hostapd_freq_params *freq) 422 1.2 christos { 423 1.2 christos if (wpa_s->driver->set_freq) 424 1.2 christos return wpa_s->driver->set_freq(wpa_s->drv_priv, freq); 425 1.1 christos return -1; 426 1.1 christos } 427 1.1 christos 428 1.1 christos static inline int wpa_drv_if_add(struct wpa_supplicant *wpa_s, 429 1.1 christos enum wpa_driver_if_type type, 430 1.1 christos const char *ifname, const u8 *addr, 431 1.1 christos void *bss_ctx, char *force_ifname, 432 1.2 christos u8 *if_addr, const char *bridge) 433 1.1 christos { 434 1.1 christos if (wpa_s->driver->if_add) 435 1.1 christos return wpa_s->driver->if_add(wpa_s->drv_priv, type, ifname, 436 1.1 christos addr, bss_ctx, NULL, force_ifname, 437 1.2 christos if_addr, bridge, 0, 0); 438 1.1 christos return -1; 439 1.1 christos } 440 1.1 christos 441 1.1 christos static inline int wpa_drv_if_remove(struct wpa_supplicant *wpa_s, 442 1.1 christos enum wpa_driver_if_type type, 443 1.1 christos const char *ifname) 444 1.1 christos { 445 1.1 christos if (wpa_s->driver->if_remove) 446 1.1 christos return wpa_s->driver->if_remove(wpa_s->drv_priv, type, ifname); 447 1.1 christos return -1; 448 1.1 christos } 449 1.1 christos 450 1.1 christos static inline int wpa_drv_remain_on_channel(struct wpa_supplicant *wpa_s, 451 1.1 christos unsigned int freq, 452 1.1 christos unsigned int duration) 453 1.1 christos { 454 1.1 christos if (wpa_s->driver->remain_on_channel) 455 1.1 christos return wpa_s->driver->remain_on_channel(wpa_s->drv_priv, freq, 456 1.1 christos duration); 457 1.1 christos return -1; 458 1.1 christos } 459 1.1 christos 460 1.1 christos static inline int wpa_drv_cancel_remain_on_channel( 461 1.1 christos struct wpa_supplicant *wpa_s) 462 1.1 christos { 463 1.1 christos if (wpa_s->driver->cancel_remain_on_channel) 464 1.1 christos return wpa_s->driver->cancel_remain_on_channel( 465 1.1 christos wpa_s->drv_priv); 466 1.1 christos return -1; 467 1.1 christos } 468 1.1 christos 469 1.1 christos static inline int wpa_drv_probe_req_report(struct wpa_supplicant *wpa_s, 470 1.1 christos int report) 471 1.1 christos { 472 1.1 christos if (wpa_s->driver->probe_req_report) 473 1.1 christos return wpa_s->driver->probe_req_report(wpa_s->drv_priv, 474 1.1 christos report); 475 1.1 christos return -1; 476 1.1 christos } 477 1.1 christos 478 1.2 christos static inline int wpa_drv_deinit_ap(struct wpa_supplicant *wpa_s) 479 1.1 christos { 480 1.2 christos if (wpa_s->driver->deinit_ap) 481 1.2 christos return wpa_s->driver->deinit_ap(wpa_s->drv_priv); 482 1.2 christos return 0; 483 1.1 christos } 484 1.1 christos 485 1.2 christos static inline int wpa_drv_deinit_p2p_cli(struct wpa_supplicant *wpa_s) 486 1.1 christos { 487 1.2 christos if (wpa_s->driver->deinit_p2p_cli) 488 1.2 christos return wpa_s->driver->deinit_p2p_cli(wpa_s->drv_priv); 489 1.1 christos return 0; 490 1.1 christos } 491 1.1 christos 492 1.1 christos static inline void wpa_drv_suspend(struct wpa_supplicant *wpa_s) 493 1.1 christos { 494 1.1 christos if (wpa_s->driver->suspend) 495 1.1 christos wpa_s->driver->suspend(wpa_s->drv_priv); 496 1.1 christos } 497 1.1 christos 498 1.1 christos static inline void wpa_drv_resume(struct wpa_supplicant *wpa_s) 499 1.1 christos { 500 1.1 christos if (wpa_s->driver->resume) 501 1.1 christos wpa_s->driver->resume(wpa_s->drv_priv); 502 1.1 christos } 503 1.1 christos 504 1.1 christos static inline int wpa_drv_signal_monitor(struct wpa_supplicant *wpa_s, 505 1.1 christos int threshold, int hysteresis) 506 1.1 christos { 507 1.1 christos if (wpa_s->driver->signal_monitor) 508 1.1 christos return wpa_s->driver->signal_monitor(wpa_s->drv_priv, 509 1.1 christos threshold, hysteresis); 510 1.1 christos return -1; 511 1.1 christos } 512 1.1 christos 513 1.5 christos int wpa_drv_signal_poll(struct wpa_supplicant *wpa_s, 514 1.5 christos struct wpa_signal_info *si); 515 1.5 christos 516 1.5 christos static inline int wpa_drv_mlo_signal_poll(struct wpa_supplicant *wpa_s, 517 1.5 christos struct wpa_mlo_signal_info *mlo_si) 518 1.2 christos { 519 1.5 christos if (wpa_s->driver->mlo_signal_poll) 520 1.5 christos return wpa_s->driver->mlo_signal_poll(wpa_s->drv_priv, mlo_si); 521 1.2 christos return -1; 522 1.2 christos } 523 1.2 christos 524 1.4 christos static inline int wpa_drv_channel_info(struct wpa_supplicant *wpa_s, 525 1.4 christos struct wpa_channel_info *ci) 526 1.4 christos { 527 1.4 christos if (wpa_s->driver->channel_info) 528 1.4 christos return wpa_s->driver->channel_info(wpa_s->drv_priv, ci); 529 1.4 christos return -1; 530 1.4 christos } 531 1.4 christos 532 1.2 christos static inline int wpa_drv_pktcnt_poll(struct wpa_supplicant *wpa_s, 533 1.2 christos struct hostap_sta_driver_data *sta) 534 1.2 christos { 535 1.2 christos if (wpa_s->driver->read_sta_data) 536 1.2 christos return wpa_s->driver->read_sta_data(wpa_s->drv_priv, sta, 537 1.2 christos wpa_s->bssid); 538 1.2 christos return -1; 539 1.2 christos } 540 1.2 christos 541 1.1 christos static inline int wpa_drv_set_ap_wps_ie(struct wpa_supplicant *wpa_s, 542 1.1 christos const struct wpabuf *beacon, 543 1.2 christos const struct wpabuf *proberesp, 544 1.2 christos const struct wpabuf *assocresp) 545 1.1 christos { 546 1.1 christos if (!wpa_s->driver->set_ap_wps_ie) 547 1.1 christos return -1; 548 1.1 christos return wpa_s->driver->set_ap_wps_ie(wpa_s->drv_priv, beacon, 549 1.2 christos proberesp, assocresp); 550 1.2 christos } 551 1.2 christos 552 1.2 christos static inline int wpa_drv_get_noa(struct wpa_supplicant *wpa_s, 553 1.2 christos u8 *buf, size_t buf_len) 554 1.2 christos { 555 1.2 christos if (!wpa_s->driver->get_noa) 556 1.2 christos return -1; 557 1.2 christos return wpa_s->driver->get_noa(wpa_s->drv_priv, buf, buf_len); 558 1.2 christos } 559 1.2 christos 560 1.2 christos static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s, 561 1.2 christos int legacy_ps, int opp_ps, 562 1.2 christos int ctwindow) 563 1.2 christos { 564 1.2 christos if (!wpa_s->driver->set_p2p_powersave) 565 1.2 christos return -1; 566 1.2 christos return wpa_s->driver->set_p2p_powersave(wpa_s->drv_priv, legacy_ps, 567 1.2 christos opp_ps, ctwindow); 568 1.2 christos } 569 1.2 christos 570 1.2 christos static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu) 571 1.2 christos { 572 1.2 christos if (!wpa_s->driver->ampdu) 573 1.2 christos return -1; 574 1.2 christos return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu); 575 1.2 christos } 576 1.2 christos 577 1.2 christos static inline int wpa_drv_send_tdls_mgmt(struct wpa_supplicant *wpa_s, 578 1.2 christos const u8 *dst, u8 action_code, 579 1.2 christos u8 dialog_token, u16 status_code, 580 1.2 christos u32 peer_capab, int initiator, 581 1.5 christos const u8 *buf, size_t len, int link_id) 582 1.2 christos { 583 1.2 christos if (wpa_s->driver->send_tdls_mgmt) { 584 1.2 christos return wpa_s->driver->send_tdls_mgmt(wpa_s->drv_priv, dst, 585 1.2 christos action_code, dialog_token, 586 1.2 christos status_code, peer_capab, 587 1.5 christos initiator, buf, len, 588 1.5 christos link_id); 589 1.2 christos } 590 1.2 christos return -1; 591 1.2 christos } 592 1.2 christos 593 1.2 christos static inline int wpa_drv_tdls_oper(struct wpa_supplicant *wpa_s, 594 1.2 christos enum tdls_oper oper, const u8 *peer) 595 1.2 christos { 596 1.2 christos if (!wpa_s->driver->tdls_oper) 597 1.2 christos return -1; 598 1.2 christos return wpa_s->driver->tdls_oper(wpa_s->drv_priv, oper, peer); 599 1.2 christos } 600 1.2 christos 601 1.2 christos #ifdef ANDROID 602 1.2 christos static inline int wpa_drv_driver_cmd(struct wpa_supplicant *wpa_s, 603 1.2 christos char *cmd, char *buf, size_t buf_len) 604 1.2 christos { 605 1.2 christos if (!wpa_s->driver->driver_cmd) 606 1.2 christos return -1; 607 1.2 christos return wpa_s->driver->driver_cmd(wpa_s->drv_priv, cmd, buf, buf_len); 608 1.2 christos } 609 1.2 christos #endif /* ANDROID */ 610 1.2 christos 611 1.2 christos static inline void wpa_drv_set_rekey_info(struct wpa_supplicant *wpa_s, 612 1.2 christos const u8 *kek, size_t kek_len, 613 1.2 christos const u8 *kck, size_t kck_len, 614 1.2 christos const u8 *replay_ctr) 615 1.2 christos { 616 1.2 christos if (!wpa_s->driver->set_rekey_info) 617 1.2 christos return; 618 1.2 christos wpa_s->driver->set_rekey_info(wpa_s->drv_priv, kek, kek_len, 619 1.2 christos kck, kck_len, replay_ctr); 620 1.2 christos } 621 1.2 christos 622 1.2 christos static inline int wpa_drv_radio_disable(struct wpa_supplicant *wpa_s, 623 1.2 christos int disabled) 624 1.2 christos { 625 1.2 christos if (!wpa_s->driver->radio_disable) 626 1.2 christos return -1; 627 1.2 christos return wpa_s->driver->radio_disable(wpa_s->drv_priv, disabled); 628 1.2 christos } 629 1.2 christos 630 1.2 christos static inline int wpa_drv_switch_channel(struct wpa_supplicant *wpa_s, 631 1.2 christos struct csa_settings *settings) 632 1.2 christos { 633 1.2 christos if (!wpa_s->driver->switch_channel) 634 1.2 christos return -1; 635 1.2 christos return wpa_s->driver->switch_channel(wpa_s->drv_priv, settings); 636 1.2 christos } 637 1.2 christos 638 1.2 christos static inline int wpa_drv_add_ts(struct wpa_supplicant *wpa_s, u8 tsid, 639 1.2 christos const u8 *address, u8 user_priority, 640 1.2 christos u16 admitted_time) 641 1.2 christos { 642 1.2 christos if (!wpa_s->driver->add_tx_ts) 643 1.2 christos return -1; 644 1.2 christos return wpa_s->driver->add_tx_ts(wpa_s->drv_priv, tsid, address, 645 1.2 christos user_priority, admitted_time); 646 1.2 christos } 647 1.2 christos 648 1.2 christos static inline int wpa_drv_del_ts(struct wpa_supplicant *wpa_s, u8 tid, 649 1.2 christos const u8 *address) 650 1.2 christos { 651 1.2 christos if (!wpa_s->driver->del_tx_ts) 652 1.2 christos return -1; 653 1.2 christos return wpa_s->driver->del_tx_ts(wpa_s->drv_priv, tid, address); 654 1.2 christos } 655 1.2 christos 656 1.2 christos static inline int wpa_drv_tdls_enable_channel_switch( 657 1.2 christos struct wpa_supplicant *wpa_s, const u8 *addr, u8 oper_class, 658 1.2 christos const struct hostapd_freq_params *freq_params) 659 1.2 christos { 660 1.2 christos if (!wpa_s->driver->tdls_enable_channel_switch) 661 1.2 christos return -1; 662 1.2 christos return wpa_s->driver->tdls_enable_channel_switch(wpa_s->drv_priv, addr, 663 1.2 christos oper_class, 664 1.2 christos freq_params); 665 1.2 christos } 666 1.2 christos 667 1.2 christos static inline int 668 1.2 christos wpa_drv_tdls_disable_channel_switch(struct wpa_supplicant *wpa_s, 669 1.2 christos const u8 *addr) 670 1.2 christos { 671 1.2 christos if (!wpa_s->driver->tdls_disable_channel_switch) 672 1.2 christos return -1; 673 1.2 christos return wpa_s->driver->tdls_disable_channel_switch(wpa_s->drv_priv, 674 1.2 christos addr); 675 1.2 christos } 676 1.2 christos 677 1.2 christos static inline int wpa_drv_wnm_oper(struct wpa_supplicant *wpa_s, 678 1.2 christos enum wnm_oper oper, const u8 *peer, 679 1.2 christos u8 *buf, u16 *buf_len) 680 1.2 christos { 681 1.2 christos if (!wpa_s->driver->wnm_oper) 682 1.2 christos return -1; 683 1.2 christos return wpa_s->driver->wnm_oper(wpa_s->drv_priv, oper, peer, buf, 684 1.2 christos buf_len); 685 1.2 christos } 686 1.2 christos 687 1.2 christos static inline int wpa_drv_status(struct wpa_supplicant *wpa_s, 688 1.2 christos char *buf, size_t buflen) 689 1.2 christos { 690 1.2 christos if (!wpa_s->driver->status) 691 1.2 christos return -1; 692 1.2 christos return wpa_s->driver->status(wpa_s->drv_priv, buf, buflen); 693 1.2 christos } 694 1.2 christos 695 1.2 christos static inline int wpa_drv_set_qos_map(struct wpa_supplicant *wpa_s, 696 1.2 christos const u8 *qos_map_set, u8 qos_map_set_len) 697 1.2 christos { 698 1.2 christos if (!wpa_s->driver->set_qos_map) 699 1.2 christos return -1; 700 1.2 christos return wpa_s->driver->set_qos_map(wpa_s->drv_priv, qos_map_set, 701 1.2 christos qos_map_set_len); 702 1.2 christos } 703 1.2 christos 704 1.5 christos static inline int wpa_drv_get_wowlan(struct wpa_supplicant *wpa_s) 705 1.5 christos { 706 1.5 christos if (!wpa_s->driver->get_wowlan) 707 1.5 christos return 0; 708 1.5 christos return wpa_s->driver->get_wowlan(wpa_s->drv_priv); 709 1.5 christos } 710 1.5 christos 711 1.2 christos static inline int wpa_drv_wowlan(struct wpa_supplicant *wpa_s, 712 1.2 christos const struct wowlan_triggers *triggers) 713 1.2 christos { 714 1.2 christos if (!wpa_s->driver->set_wowlan) 715 1.2 christos return -1; 716 1.2 christos return wpa_s->driver->set_wowlan(wpa_s->drv_priv, triggers); 717 1.2 christos } 718 1.2 christos 719 1.2 christos static inline int wpa_drv_vendor_cmd(struct wpa_supplicant *wpa_s, 720 1.2 christos int vendor_id, int subcmd, const u8 *data, 721 1.5 christos size_t data_len, 722 1.5 christos enum nested_attr nested_attr_flag, 723 1.5 christos struct wpabuf *buf) 724 1.2 christos { 725 1.2 christos if (!wpa_s->driver->vendor_cmd) 726 1.2 christos return -1; 727 1.2 christos return wpa_s->driver->vendor_cmd(wpa_s->drv_priv, vendor_id, subcmd, 728 1.5 christos data, data_len, nested_attr_flag, buf); 729 1.2 christos } 730 1.2 christos 731 1.2 christos static inline int wpa_drv_roaming(struct wpa_supplicant *wpa_s, int allowed, 732 1.2 christos const u8 *bssid) 733 1.2 christos { 734 1.2 christos if (!wpa_s->driver->roaming) 735 1.2 christos return -1; 736 1.2 christos return wpa_s->driver->roaming(wpa_s->drv_priv, allowed, bssid); 737 1.2 christos } 738 1.2 christos 739 1.3 christos static inline int wpa_drv_disable_fils(struct wpa_supplicant *wpa_s, 740 1.3 christos int disable) 741 1.3 christos { 742 1.3 christos if (!wpa_s->driver->disable_fils) 743 1.3 christos return -1; 744 1.3 christos return wpa_s->driver->disable_fils(wpa_s->drv_priv, disable); 745 1.3 christos } 746 1.3 christos 747 1.2 christos static inline int wpa_drv_set_mac_addr(struct wpa_supplicant *wpa_s, 748 1.2 christos const u8 *addr) 749 1.2 christos { 750 1.2 christos if (!wpa_s->driver->set_mac_addr) 751 1.2 christos return -1; 752 1.2 christos return wpa_s->driver->set_mac_addr(wpa_s->drv_priv, addr); 753 1.2 christos } 754 1.2 christos 755 1.2 christos 756 1.2 christos #ifdef CONFIG_MACSEC 757 1.2 christos 758 1.2 christos static inline int wpa_drv_macsec_init(struct wpa_supplicant *wpa_s, 759 1.2 christos struct macsec_init_params *params) 760 1.2 christos { 761 1.2 christos if (!wpa_s->driver->macsec_init) 762 1.2 christos return -1; 763 1.2 christos return wpa_s->driver->macsec_init(wpa_s->drv_priv, params); 764 1.2 christos } 765 1.2 christos 766 1.2 christos static inline int wpa_drv_macsec_deinit(struct wpa_supplicant *wpa_s) 767 1.2 christos { 768 1.2 christos if (!wpa_s->driver->macsec_deinit) 769 1.2 christos return -1; 770 1.2 christos return wpa_s->driver->macsec_deinit(wpa_s->drv_priv); 771 1.2 christos } 772 1.2 christos 773 1.3 christos static inline int wpa_drv_macsec_get_capability(struct wpa_supplicant *wpa_s, 774 1.3 christos enum macsec_cap *cap) 775 1.3 christos { 776 1.3 christos if (!wpa_s->driver->macsec_get_capability) 777 1.3 christos return -1; 778 1.3 christos return wpa_s->driver->macsec_get_capability(wpa_s->drv_priv, cap); 779 1.3 christos } 780 1.3 christos 781 1.2 christos static inline int wpa_drv_enable_protect_frames(struct wpa_supplicant *wpa_s, 782 1.5 christos bool enabled) 783 1.2 christos { 784 1.2 christos if (!wpa_s->driver->enable_protect_frames) 785 1.2 christos return -1; 786 1.2 christos return wpa_s->driver->enable_protect_frames(wpa_s->drv_priv, enabled); 787 1.2 christos } 788 1.2 christos 789 1.3 christos static inline int wpa_drv_enable_encrypt(struct wpa_supplicant *wpa_s, 790 1.5 christos bool enabled) 791 1.3 christos { 792 1.3 christos if (!wpa_s->driver->enable_encrypt) 793 1.3 christos return -1; 794 1.3 christos return wpa_s->driver->enable_encrypt(wpa_s->drv_priv, enabled); 795 1.3 christos } 796 1.3 christos 797 1.2 christos static inline int wpa_drv_set_replay_protect(struct wpa_supplicant *wpa_s, 798 1.5 christos bool enabled, u32 window) 799 1.2 christos { 800 1.2 christos if (!wpa_s->driver->set_replay_protect) 801 1.2 christos return -1; 802 1.2 christos return wpa_s->driver->set_replay_protect(wpa_s->drv_priv, enabled, 803 1.2 christos window); 804 1.2 christos } 805 1.2 christos 806 1.5 christos static inline int wpa_drv_set_offload(struct wpa_supplicant *wpa_s, u8 offload) 807 1.5 christos { 808 1.5 christos if (!wpa_s->driver->set_offload) 809 1.5 christos return -1; 810 1.5 christos return wpa_s->driver->set_offload(wpa_s->drv_priv, offload); 811 1.5 christos 812 1.5 christos } 813 1.5 christos 814 1.2 christos static inline int wpa_drv_set_current_cipher_suite(struct wpa_supplicant *wpa_s, 815 1.2 christos u64 cs) 816 1.2 christos { 817 1.2 christos if (!wpa_s->driver->set_current_cipher_suite) 818 1.2 christos return -1; 819 1.2 christos return wpa_s->driver->set_current_cipher_suite(wpa_s->drv_priv, cs); 820 1.2 christos } 821 1.2 christos 822 1.2 christos static inline int wpa_drv_enable_controlled_port(struct wpa_supplicant *wpa_s, 823 1.5 christos bool enabled) 824 1.2 christos { 825 1.2 christos if (!wpa_s->driver->enable_controlled_port) 826 1.2 christos return -1; 827 1.2 christos return wpa_s->driver->enable_controlled_port(wpa_s->drv_priv, enabled); 828 1.2 christos } 829 1.2 christos 830 1.2 christos static inline int wpa_drv_get_receive_lowest_pn(struct wpa_supplicant *wpa_s, 831 1.3 christos struct receive_sa *sa) 832 1.2 christos { 833 1.2 christos if (!wpa_s->driver->get_receive_lowest_pn) 834 1.2 christos return -1; 835 1.3 christos return wpa_s->driver->get_receive_lowest_pn(wpa_s->drv_priv, sa); 836 1.2 christos } 837 1.2 christos 838 1.2 christos static inline int wpa_drv_get_transmit_next_pn(struct wpa_supplicant *wpa_s, 839 1.3 christos struct transmit_sa *sa) 840 1.2 christos { 841 1.2 christos if (!wpa_s->driver->get_transmit_next_pn) 842 1.2 christos return -1; 843 1.3 christos return wpa_s->driver->get_transmit_next_pn(wpa_s->drv_priv, sa); 844 1.2 christos } 845 1.2 christos 846 1.2 christos static inline int wpa_drv_set_transmit_next_pn(struct wpa_supplicant *wpa_s, 847 1.3 christos struct transmit_sa *sa) 848 1.2 christos { 849 1.2 christos if (!wpa_s->driver->set_transmit_next_pn) 850 1.2 christos return -1; 851 1.3 christos return wpa_s->driver->set_transmit_next_pn(wpa_s->drv_priv, sa); 852 1.2 christos } 853 1.2 christos 854 1.4 christos static inline int wpa_drv_set_receive_lowest_pn(struct wpa_supplicant *wpa_s, 855 1.4 christos struct receive_sa *sa) 856 1.4 christos { 857 1.4 christos if (!wpa_s->driver->set_receive_lowest_pn) 858 1.4 christos return -1; 859 1.4 christos return wpa_s->driver->set_receive_lowest_pn(wpa_s->drv_priv, sa); 860 1.4 christos } 861 1.4 christos 862 1.2 christos static inline int 863 1.3 christos wpa_drv_create_receive_sc(struct wpa_supplicant *wpa_s, struct receive_sc *sc, 864 1.2 christos unsigned int conf_offset, int validation) 865 1.2 christos { 866 1.2 christos if (!wpa_s->driver->create_receive_sc) 867 1.2 christos return -1; 868 1.3 christos return wpa_s->driver->create_receive_sc(wpa_s->drv_priv, sc, 869 1.3 christos conf_offset, validation); 870 1.2 christos } 871 1.2 christos 872 1.2 christos static inline int wpa_drv_delete_receive_sc(struct wpa_supplicant *wpa_s, 873 1.3 christos struct receive_sc *sc) 874 1.2 christos { 875 1.2 christos if (!wpa_s->driver->delete_receive_sc) 876 1.2 christos return -1; 877 1.3 christos return wpa_s->driver->delete_receive_sc(wpa_s->drv_priv, sc); 878 1.2 christos } 879 1.2 christos 880 1.2 christos static inline int wpa_drv_create_receive_sa(struct wpa_supplicant *wpa_s, 881 1.3 christos struct receive_sa *sa) 882 1.2 christos { 883 1.2 christos if (!wpa_s->driver->create_receive_sa) 884 1.2 christos return -1; 885 1.3 christos return wpa_s->driver->create_receive_sa(wpa_s->drv_priv, sa); 886 1.3 christos } 887 1.3 christos 888 1.3 christos static inline int wpa_drv_delete_receive_sa(struct wpa_supplicant *wpa_s, 889 1.3 christos struct receive_sa *sa) 890 1.3 christos { 891 1.3 christos if (!wpa_s->driver->delete_receive_sa) 892 1.3 christos return -1; 893 1.3 christos return wpa_s->driver->delete_receive_sa(wpa_s->drv_priv, sa); 894 1.2 christos } 895 1.2 christos 896 1.2 christos static inline int wpa_drv_enable_receive_sa(struct wpa_supplicant *wpa_s, 897 1.3 christos struct receive_sa *sa) 898 1.2 christos { 899 1.2 christos if (!wpa_s->driver->enable_receive_sa) 900 1.2 christos return -1; 901 1.3 christos return wpa_s->driver->enable_receive_sa(wpa_s->drv_priv, sa); 902 1.2 christos } 903 1.2 christos 904 1.2 christos static inline int wpa_drv_disable_receive_sa(struct wpa_supplicant *wpa_s, 905 1.3 christos struct receive_sa *sa) 906 1.2 christos { 907 1.2 christos if (!wpa_s->driver->disable_receive_sa) 908 1.2 christos return -1; 909 1.3 christos return wpa_s->driver->disable_receive_sa(wpa_s->drv_priv, sa); 910 1.2 christos } 911 1.2 christos 912 1.2 christos static inline int 913 1.3 christos wpa_drv_create_transmit_sc(struct wpa_supplicant *wpa_s, struct transmit_sc *sc, 914 1.2 christos unsigned int conf_offset) 915 1.2 christos { 916 1.2 christos if (!wpa_s->driver->create_transmit_sc) 917 1.2 christos return -1; 918 1.3 christos return wpa_s->driver->create_transmit_sc(wpa_s->drv_priv, sc, 919 1.2 christos conf_offset); 920 1.2 christos } 921 1.2 christos 922 1.2 christos static inline int wpa_drv_delete_transmit_sc(struct wpa_supplicant *wpa_s, 923 1.3 christos struct transmit_sc *sc) 924 1.2 christos { 925 1.2 christos if (!wpa_s->driver->delete_transmit_sc) 926 1.2 christos return -1; 927 1.3 christos return wpa_s->driver->delete_transmit_sc(wpa_s->drv_priv, sc); 928 1.2 christos } 929 1.2 christos 930 1.2 christos static inline int wpa_drv_create_transmit_sa(struct wpa_supplicant *wpa_s, 931 1.3 christos struct transmit_sa *sa) 932 1.2 christos { 933 1.2 christos if (!wpa_s->driver->create_transmit_sa) 934 1.2 christos return -1; 935 1.3 christos return wpa_s->driver->create_transmit_sa(wpa_s->drv_priv, sa); 936 1.3 christos } 937 1.3 christos 938 1.3 christos static inline int wpa_drv_delete_transmit_sa(struct wpa_supplicant *wpa_s, 939 1.3 christos struct transmit_sa *sa) 940 1.3 christos { 941 1.3 christos if (!wpa_s->driver->delete_transmit_sa) 942 1.3 christos return -1; 943 1.3 christos return wpa_s->driver->delete_transmit_sa(wpa_s->drv_priv, sa); 944 1.2 christos } 945 1.2 christos 946 1.2 christos static inline int wpa_drv_enable_transmit_sa(struct wpa_supplicant *wpa_s, 947 1.3 christos struct transmit_sa *sa) 948 1.2 christos { 949 1.2 christos if (!wpa_s->driver->enable_transmit_sa) 950 1.2 christos return -1; 951 1.3 christos return wpa_s->driver->enable_transmit_sa(wpa_s->drv_priv, sa); 952 1.2 christos } 953 1.2 christos 954 1.2 christos static inline int wpa_drv_disable_transmit_sa(struct wpa_supplicant *wpa_s, 955 1.3 christos struct transmit_sa *sa) 956 1.2 christos { 957 1.2 christos if (!wpa_s->driver->disable_transmit_sa) 958 1.2 christos return -1; 959 1.3 christos return wpa_s->driver->disable_transmit_sa(wpa_s->drv_priv, sa); 960 1.2 christos } 961 1.2 christos #endif /* CONFIG_MACSEC */ 962 1.2 christos 963 1.2 christos static inline int wpa_drv_setband(struct wpa_supplicant *wpa_s, 964 1.5 christos u32 band_mask) 965 1.2 christos { 966 1.2 christos if (!wpa_s->driver->set_band) 967 1.2 christos return -1; 968 1.5 christos return wpa_s->driver->set_band(wpa_s->drv_priv, band_mask); 969 1.2 christos } 970 1.2 christos 971 1.2 christos static inline int wpa_drv_get_pref_freq_list(struct wpa_supplicant *wpa_s, 972 1.2 christos enum wpa_driver_if_type type, 973 1.2 christos unsigned int *num, 974 1.5 christos struct weighted_pcl *freq_list) 975 1.2 christos { 976 1.3 christos #ifdef CONFIG_TESTING_OPTIONS 977 1.3 christos if (wpa_s->get_pref_freq_list_override) 978 1.3 christos return wpas_ctrl_iface_get_pref_freq_list_override( 979 1.3 christos wpa_s, if_type, num, freq_list); 980 1.3 christos #endif /* CONFIG_TESTING_OPTIONS */ 981 1.2 christos if (!wpa_s->driver->get_pref_freq_list) 982 1.2 christos return -1; 983 1.2 christos return wpa_s->driver->get_pref_freq_list(wpa_s->drv_priv, type, 984 1.2 christos num, freq_list); 985 1.2 christos } 986 1.2 christos 987 1.2 christos static inline int wpa_drv_set_prob_oper_freq(struct wpa_supplicant *wpa_s, 988 1.2 christos unsigned int freq) 989 1.2 christos { 990 1.2 christos if (!wpa_s->driver->set_prob_oper_freq) 991 1.2 christos return 0; 992 1.2 christos return wpa_s->driver->set_prob_oper_freq(wpa_s->drv_priv, freq); 993 1.2 christos } 994 1.2 christos 995 1.3 christos static inline int wpa_drv_abort_scan(struct wpa_supplicant *wpa_s, 996 1.3 christos u64 scan_cookie) 997 1.2 christos { 998 1.2 christos if (!wpa_s->driver->abort_scan) 999 1.2 christos return -1; 1000 1.3 christos return wpa_s->driver->abort_scan(wpa_s->drv_priv, scan_cookie); 1001 1.2 christos } 1002 1.2 christos 1003 1.2 christos static inline int wpa_drv_configure_frame_filters(struct wpa_supplicant *wpa_s, 1004 1.2 christos u32 filters) 1005 1.2 christos { 1006 1.2 christos if (!wpa_s->driver->configure_data_frame_filters) 1007 1.2 christos return -1; 1008 1.2 christos return wpa_s->driver->configure_data_frame_filters(wpa_s->drv_priv, 1009 1.2 christos filters); 1010 1.2 christos } 1011 1.2 christos 1012 1.2 christos static inline int wpa_drv_get_ext_capa(struct wpa_supplicant *wpa_s, 1013 1.2 christos enum wpa_driver_if_type type) 1014 1.2 christos { 1015 1.2 christos if (!wpa_s->driver->get_ext_capab) 1016 1.2 christos return -1; 1017 1.2 christos return wpa_s->driver->get_ext_capab(wpa_s->drv_priv, type, 1018 1.2 christos &wpa_s->extended_capa, 1019 1.2 christos &wpa_s->extended_capa_mask, 1020 1.2 christos &wpa_s->extended_capa_len); 1021 1.2 christos } 1022 1.2 christos 1023 1.2 christos static inline int wpa_drv_p2p_lo_start(struct wpa_supplicant *wpa_s, 1024 1.2 christos unsigned int channel, 1025 1.2 christos unsigned int period, 1026 1.2 christos unsigned int interval, 1027 1.2 christos unsigned int count, 1028 1.2 christos const u8 *device_types, 1029 1.2 christos size_t dev_types_len, 1030 1.2 christos const u8 *ies, size_t ies_len) 1031 1.2 christos { 1032 1.2 christos if (!wpa_s->driver->p2p_lo_start) 1033 1.2 christos return -1; 1034 1.2 christos return wpa_s->driver->p2p_lo_start(wpa_s->drv_priv, channel, period, 1035 1.2 christos interval, count, device_types, 1036 1.2 christos dev_types_len, ies, ies_len); 1037 1.2 christos } 1038 1.2 christos 1039 1.2 christos static inline int wpa_drv_p2p_lo_stop(struct wpa_supplicant *wpa_s) 1040 1.2 christos { 1041 1.2 christos if (!wpa_s->driver->p2p_lo_stop) 1042 1.2 christos return -1; 1043 1.2 christos return wpa_s->driver->p2p_lo_stop(wpa_s->drv_priv); 1044 1.2 christos } 1045 1.2 christos 1046 1.2 christos static inline int wpa_drv_set_default_scan_ies(struct wpa_supplicant *wpa_s, 1047 1.2 christos const u8 *ies, size_t len) 1048 1.2 christos { 1049 1.2 christos if (!wpa_s->driver->set_default_scan_ies) 1050 1.2 christos return -1; 1051 1.2 christos return wpa_s->driver->set_default_scan_ies(wpa_s->drv_priv, ies, len); 1052 1.1 christos } 1053 1.1 christos 1054 1.3 christos static inline int wpa_drv_set_tdls_mode(struct wpa_supplicant *wpa_s, 1055 1.3 christos int tdls_external_control) 1056 1.3 christos { 1057 1.3 christos if (!wpa_s->driver->set_tdls_mode) 1058 1.3 christos return -1; 1059 1.3 christos return wpa_s->driver->set_tdls_mode(wpa_s->drv_priv, 1060 1.3 christos tdls_external_control); 1061 1.3 christos } 1062 1.3 christos 1063 1.3 christos static inline struct wpa_bss_candidate_info * 1064 1.3 christos wpa_drv_get_bss_trans_status(struct wpa_supplicant *wpa_s, 1065 1.3 christos struct wpa_bss_trans_info *params) 1066 1.3 christos { 1067 1.3 christos if (!wpa_s->driver->get_bss_transition_status) 1068 1.3 christos return NULL; 1069 1.3 christos return wpa_s->driver->get_bss_transition_status(wpa_s->drv_priv, 1070 1.3 christos params); 1071 1.3 christos } 1072 1.3 christos 1073 1.3 christos static inline int wpa_drv_ignore_assoc_disallow(struct wpa_supplicant *wpa_s, 1074 1.3 christos int val) 1075 1.3 christos { 1076 1.3 christos if (!wpa_s->driver->ignore_assoc_disallow) 1077 1.3 christos return -1; 1078 1.3 christos return wpa_s->driver->ignore_assoc_disallow(wpa_s->drv_priv, val); 1079 1.3 christos } 1080 1.3 christos 1081 1.5 christos static inline int wpa_drv_set_bssid_tmp_disallow(struct wpa_supplicant *wpa_s, 1082 1.5 christos unsigned int num_bssid, 1083 1.5 christos const u8 *bssids) 1084 1.3 christos { 1085 1.5 christos if (!wpa_s->driver->set_bssid_tmp_disallow) 1086 1.3 christos return -1; 1087 1.5 christos return wpa_s->driver->set_bssid_tmp_disallow(wpa_s->drv_priv, num_bssid, 1088 1.5 christos bssids); 1089 1.3 christos } 1090 1.3 christos 1091 1.3 christos static inline int wpa_drv_update_connect_params( 1092 1.3 christos struct wpa_supplicant *wpa_s, 1093 1.3 christos struct wpa_driver_associate_params *params, 1094 1.3 christos enum wpa_drv_update_connect_params_mask mask) 1095 1.3 christos { 1096 1.3 christos if (!wpa_s->driver->update_connect_params) 1097 1.3 christos return -1; 1098 1.5 christos 1099 1.5 christos if (params) 1100 1.5 christos params->freq.link_id = -1; 1101 1.5 christos 1102 1.3 christos return wpa_s->driver->update_connect_params(wpa_s->drv_priv, params, 1103 1.3 christos mask); 1104 1.3 christos } 1105 1.3 christos 1106 1.3 christos static inline int 1107 1.3 christos wpa_drv_send_external_auth_status(struct wpa_supplicant *wpa_s, 1108 1.3 christos struct external_auth *params) 1109 1.3 christos { 1110 1.3 christos if (!wpa_s->driver->send_external_auth_status) 1111 1.3 christos return -1; 1112 1.3 christos return wpa_s->driver->send_external_auth_status(wpa_s->drv_priv, 1113 1.3 christos params); 1114 1.3 christos } 1115 1.3 christos 1116 1.4 christos static inline int wpa_drv_set_4addr_mode(struct wpa_supplicant *wpa_s, int val) 1117 1.4 christos { 1118 1.4 christos if (!wpa_s->driver->set_4addr_mode) 1119 1.4 christos return -1; 1120 1.4 christos return wpa_s->driver->set_4addr_mode(wpa_s->drv_priv, 1121 1.4 christos wpa_s->bridge_ifname, val); 1122 1.4 christos } 1123 1.4 christos 1124 1.5 christos static inline int wpa_drv_dpp_listen(struct wpa_supplicant *wpa_s, bool enable) 1125 1.5 christos { 1126 1.5 christos if (!wpa_s->driver->dpp_listen) 1127 1.5 christos return 0; 1128 1.5 christos return wpa_s->driver->dpp_listen(wpa_s->drv_priv, enable); 1129 1.5 christos } 1130 1.5 christos 1131 1.5 christos static inline int wpa_drv_send_pasn_resp(struct wpa_supplicant *wpa_s, 1132 1.5 christos struct pasn_auth *params) 1133 1.5 christos { 1134 1.5 christos if (!wpa_s->driver->send_pasn_resp) 1135 1.5 christos return -1; 1136 1.5 christos return wpa_s->driver->send_pasn_resp(wpa_s->drv_priv, params); 1137 1.5 christos } 1138 1.5 christos 1139 1.5 christos static inline int wpa_drv_set_secure_ranging_ctx(struct wpa_supplicant *wpa_s, 1140 1.5 christos const u8 *own_addr, 1141 1.5 christos const u8 *peer_addr, 1142 1.5 christos u32 cipher, u8 tk_len, 1143 1.5 christos const u8 *tk, 1144 1.5 christos u8 ltf_keyseed_len, 1145 1.5 christos const u8 *ltf_keyseed, 1146 1.5 christos u32 action) 1147 1.5 christos { 1148 1.5 christos struct secure_ranging_params params; 1149 1.5 christos 1150 1.5 christos /* Configure secure ranging context only to the drivers that support it. 1151 1.5 christos */ 1152 1.5 christos if (!wpa_s->driver->set_secure_ranging_ctx) 1153 1.5 christos return 0; 1154 1.5 christos 1155 1.5 christos os_memset(¶ms, 0, sizeof(params)); 1156 1.5 christos params.action = action; 1157 1.5 christos params.own_addr = own_addr; 1158 1.5 christos params.peer_addr = peer_addr; 1159 1.5 christos params.cipher = cipher; 1160 1.5 christos params.tk_len = tk_len; 1161 1.5 christos params.tk = tk; 1162 1.5 christos params.ltf_keyseed_len = ltf_keyseed_len; 1163 1.5 christos params.ltf_keyseed = ltf_keyseed; 1164 1.5 christos 1165 1.5 christos return wpa_s->driver->set_secure_ranging_ctx(wpa_s->drv_priv, ¶ms); 1166 1.5 christos } 1167 1.5 christos 1168 1.5 christos static inline int 1169 1.5 christos wpas_drv_get_sta_mlo_info(struct wpa_supplicant *wpa_s, 1170 1.5 christos struct driver_sta_mlo_info *mlo_info) 1171 1.5 christos { 1172 1.5 christos if (!wpa_s->driver->get_sta_mlo_info) 1173 1.5 christos return 0; 1174 1.5 christos 1175 1.5 christos return wpa_s->driver->get_sta_mlo_info(wpa_s->drv_priv, mlo_info); 1176 1.5 christos } 1177 1.5 christos 1178 1.1 christos #endif /* DRIVER_I_H */ 1179