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