1 /* 2 * wpa_supplicant - WPA definitions 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 WPA_H 10 #define WPA_H 11 12 #include "common/defs.h" 13 #include "common/eapol_common.h" 14 #include "common/wpa_common.h" 15 #include "common/ieee802_11_defs.h" 16 17 struct wpa_sm; 18 struct eapol_sm; 19 struct wpa_config_blob; 20 struct hostapd_freq_params; 21 struct wpa_channel_info; 22 struct rsn_pmksa_cache_entry; 23 enum frame_encryption; 24 25 struct wpa_sm_ctx { 26 void *ctx; /* pointer to arbitrary upper level context */ 27 void *msg_ctx; /* upper level context for wpa_msg() calls */ 28 29 void (*set_state)(void *ctx, enum wpa_states state); 30 enum wpa_states (*get_state)(void *ctx); 31 void (*deauthenticate)(void * ctx, u16 reason_code); 32 void (*reconnect)(void *ctx); 33 int (*set_key)(void *ctx, int link_id, enum wpa_alg alg, 34 const u8 *addr, int key_idx, int set_tx, 35 const u8 *seq, size_t seq_len, 36 const u8 *key, size_t key_len, enum key_flag key_flag); 37 void * (*get_network_ctx)(void *ctx); 38 int (*get_bssid)(void *ctx, u8 *bssid); 39 int (*ether_send)(void *ctx, const u8 *dest, u16 proto, const u8 *buf, 40 size_t len); 41 int (*get_beacon_ie)(void *ctx); 42 void (*cancel_auth_timeout)(void *ctx); 43 u8 * (*alloc_eapol)(void *ctx, u8 type, const void *data, u16 data_len, 44 size_t *msg_len, void **data_pos); 45 int (*add_pmkid)(void *ctx, void *network_ctx, const u8 *bssid, 46 const u8 *pmkid, const u8 *fils_cache_id, 47 const u8 *pmk, size_t pmk_len, u32 pmk_lifetime, 48 u8 pmk_reauth_threshold, int akmp); 49 int (*remove_pmkid)(void *ctx, void *network_ctx, const u8 *bssid, 50 const u8 *pmkid, const u8 *fils_cache_id); 51 void (*set_config_blob)(void *ctx, struct wpa_config_blob *blob); 52 const struct wpa_config_blob * (*get_config_blob)(void *ctx, 53 const char *name); 54 int (*mlme_setprotection)(void *ctx, const u8 *addr, 55 int protection_type, int key_type); 56 int (*update_ft_ies)(void *ctx, const u8 *md, const u8 *ies, 57 size_t ies_len); 58 int (*send_ft_action)(void *ctx, u8 action, const u8 *target_ap, 59 const u8 *ies, size_t ies_len); 60 int (*mark_authenticated)(void *ctx, const u8 *target_ap); 61 #ifdef CONFIG_TDLS 62 int (*tdls_get_capa)(void *ctx, int *tdls_supported, 63 int *tdls_ext_setup, int *tdls_chan_switch); 64 int (*send_tdls_mgmt)(void *ctx, const u8 *dst, 65 u8 action_code, u8 dialog_token, 66 u16 status_code, u32 peer_capab, 67 int initiator, const u8 *buf, size_t len, 68 int link_id); 69 int (*tdls_oper)(void *ctx, int oper, const u8 *peer); 70 int (*tdls_peer_addset)(void *ctx, const u8 *addr, int add, u16 aid, 71 u16 capability, const u8 *supp_rates, 72 size_t supp_rates_len, 73 const struct ieee80211_ht_capabilities *ht_capab, 74 const struct ieee80211_vht_capabilities *vht_capab, 75 const struct ieee80211_he_capabilities *he_capab, 76 size_t he_capab_len, 77 const struct ieee80211_he_6ghz_band_cap *he_6ghz_capab, 78 u8 qosinfo, int wmm, const u8 *ext_capab, 79 size_t ext_capab_len, const u8 *supp_channels, 80 size_t supp_channels_len, 81 const u8 *supp_oper_classes, 82 size_t supp_oper_classes_len, 83 const struct ieee80211_eht_capabilities *eht_capab, 84 size_t eht_capab_len, int mld_link_id); 85 int (*tdls_enable_channel_switch)( 86 void *ctx, const u8 *addr, u8 oper_class, 87 const struct hostapd_freq_params *params); 88 int (*tdls_disable_channel_switch)(void *ctx, const u8 *addr); 89 #endif /* CONFIG_TDLS */ 90 void (*set_rekey_offload)(void *ctx, const u8 *kek, size_t kek_len, 91 const u8 *kck, size_t kck_len, 92 const u8 *replay_ctr); 93 int (*key_mgmt_set_pmk)(void *ctx, const u8 *pmk, size_t pmk_len); 94 void (*fils_hlp_rx)(void *ctx, const u8 *dst, const u8 *src, 95 const u8 *pkt, size_t pkt_len); 96 int (*channel_info)(void *ctx, struct wpa_channel_info *ci); 97 void (*transition_disable)(void *ctx, u8 bitmap); 98 void (*store_ptk)(void *ctx, const u8 *addr, int cipher, 99 u32 life_time, const struct wpa_ptk *ptk); 100 #ifdef CONFIG_PASN 101 int (*set_ltf_keyseed)(void *ctx, const u8 *own_addr, 102 const u8 *peer_addr, size_t ltf_keyseed_len, 103 const u8 *ltf_keyseed); 104 #endif /* CONFIG_PASN */ 105 void (*notify_pmksa_cache_entry)(void *ctx, 106 struct rsn_pmksa_cache_entry *entry); 107 void (*ssid_verified)(void *ctx); 108 }; 109 110 111 enum wpa_sm_conf_params { 112 RSNA_PMK_LIFETIME /* dot11RSNAConfigPMKLifetime */, 113 RSNA_PMK_REAUTH_THRESHOLD /* dot11RSNAConfigPMKReauthThreshold */, 114 RSNA_SA_TIMEOUT /* dot11RSNAConfigSATimeout */, 115 WPA_PARAM_PROTO, 116 WPA_PARAM_PAIRWISE, 117 WPA_PARAM_GROUP, 118 WPA_PARAM_KEY_MGMT, 119 WPA_PARAM_MGMT_GROUP, 120 WPA_PARAM_RSN_ENABLED, 121 WPA_PARAM_MFP, 122 WPA_PARAM_OCV, 123 WPA_PARAM_SAE_PWE, 124 WPA_PARAM_SAE_PK, 125 WPA_PARAM_DENY_PTK0_REKEY, 126 WPA_PARAM_EXT_KEY_ID, 127 WPA_PARAM_USE_EXT_KEY_ID, 128 WPA_PARAM_FT_RSNXE_USED, 129 WPA_PARAM_DPP_PFS, 130 WPA_PARAM_WMM_ENABLED, 131 WPA_PARAM_OCI_FREQ_EAPOL, 132 WPA_PARAM_OCI_FREQ_EAPOL_G2, 133 WPA_PARAM_OCI_FREQ_FT_ASSOC, 134 WPA_PARAM_OCI_FREQ_FILS_ASSOC, 135 WPA_PARAM_DISABLE_EAPOL_G2_TX, 136 WPA_PARAM_ENCRYPT_EAPOL_M2, 137 WPA_PARAM_ENCRYPT_EAPOL_M4, 138 WPA_PARAM_FT_PREPEND_PMKID, 139 WPA_PARAM_SSID_PROTECTION, 140 }; 141 142 struct rsn_supp_config { 143 void *network_ctx; 144 int allowed_pairwise_cipher; /* bitfield of WPA_CIPHER_* */ 145 int proactive_key_caching; 146 int eap_workaround; 147 void *eap_conf_ctx; 148 const u8 *ssid; 149 size_t ssid_len; 150 int wpa_ptk_rekey; 151 int wpa_deny_ptk0_rekey; 152 int p2p; 153 int wpa_rsc_relaxation; 154 int owe_ptk_workaround; 155 const u8 *fils_cache_id; 156 int beacon_prot; 157 bool force_kdk_derivation; 158 }; 159 160 struct wpa_sm_link { 161 u8 addr[ETH_ALEN]; 162 u8 bssid[ETH_ALEN]; 163 u8 *ap_rsne, *ap_rsnxe; 164 size_t ap_rsne_len, ap_rsnxe_len; 165 struct wpa_gtk gtk; 166 struct wpa_gtk gtk_wnm_sleep; 167 struct wpa_igtk igtk; 168 struct wpa_igtk igtk_wnm_sleep; 169 struct wpa_bigtk bigtk; 170 struct wpa_bigtk bigtk_wnm_sleep; 171 }; 172 173 struct wpa_sm_mlo { 174 u8 ap_mld_addr[ETH_ALEN]; 175 u8 assoc_link_id; 176 u16 valid_links; /* bitmap of accepted links */ 177 u16 req_links; /* bitmap of requested links */ 178 struct wpa_sm_link links[MAX_NUM_MLD_LINKS]; 179 }; 180 181 #ifndef CONFIG_NO_WPA 182 183 struct wpa_sm * wpa_sm_init(struct wpa_sm_ctx *ctx); 184 void wpa_sm_deinit(struct wpa_sm *sm); 185 void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid); 186 void wpa_sm_notify_disassoc(struct wpa_sm *sm); 187 void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len, 188 const u8 *pmkid, const u8 *bssid); 189 void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm); 190 void wpa_sm_set_fast_reauth(struct wpa_sm *sm, int fast_reauth); 191 void wpa_sm_set_scard_ctx(struct wpa_sm *sm, void *scard_ctx); 192 void wpa_sm_set_config(struct wpa_sm *sm, struct rsn_supp_config *config); 193 void wpa_sm_set_ssid(struct wpa_sm *sm, const u8 *ssid, size_t ssid_len); 194 void wpa_sm_set_own_addr(struct wpa_sm *sm, const u8 *addr); 195 void wpa_sm_set_ifname(struct wpa_sm *sm, const char *ifname, 196 const char *bridge_ifname); 197 void wpa_sm_set_eapol(struct wpa_sm *sm, struct eapol_sm *eapol); 198 int wpa_sm_set_assoc_wpa_ie(struct wpa_sm *sm, const u8 *ie, size_t len); 199 int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm, u8 *wpa_ie, 200 size_t *wpa_ie_len); 201 int wpa_sm_set_assoc_rsnxe_default(struct wpa_sm *sm, u8 *rsnxe, 202 size_t *rsnxe_len); 203 int wpa_sm_set_assoc_rsnxe(struct wpa_sm *sm, const u8 *ie, size_t len); 204 int wpa_sm_set_ap_wpa_ie(struct wpa_sm *sm, const u8 *ie, size_t len); 205 int wpa_sm_set_ap_rsn_ie(struct wpa_sm *sm, const u8 *ie, size_t len); 206 int wpa_sm_set_ap_rsnxe(struct wpa_sm *sm, const u8 *ie, size_t len); 207 int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen); 208 209 int wpa_sm_set_param(struct wpa_sm *sm, enum wpa_sm_conf_params param, 210 unsigned int value); 211 212 int wpa_sm_get_status(struct wpa_sm *sm, char *buf, size_t buflen, 213 int verbose); 214 int wpa_sm_pmf_enabled(struct wpa_sm *sm); 215 int wpa_sm_ext_key_id(struct wpa_sm *sm); 216 int wpa_sm_ext_key_id_active(struct wpa_sm *sm); 217 int wpa_sm_ocv_enabled(struct wpa_sm *sm); 218 219 void wpa_sm_key_request(struct wpa_sm *sm, int error, int pairwise); 220 221 int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len, 222 struct wpa_ie_data *data); 223 224 void wpa_sm_aborted_cached(struct wpa_sm *sm); 225 void wpa_sm_aborted_external_cached(struct wpa_sm *sm); 226 int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr, 227 const u8 *buf, size_t len, enum frame_encryption encrypted); 228 int wpa_sm_parse_own_wpa_ie(struct wpa_sm *sm, struct wpa_ie_data *data); 229 int wpa_sm_pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len); 230 struct rsn_pmksa_cache_entry * wpa_sm_pmksa_cache_head(struct wpa_sm *sm); 231 struct rsn_pmksa_cache_entry * 232 wpa_sm_pmksa_cache_add_entry(struct wpa_sm *sm, 233 struct rsn_pmksa_cache_entry * entry); 234 void wpa_sm_pmksa_cache_add(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len, 235 const u8 *pmkid, const u8 *bssid, 236 const u8 *fils_cache_id); 237 int wpa_sm_pmksa_exists(struct wpa_sm *sm, const u8 *bssid, const u8 *own_addr, 238 const void *network_ctx); 239 void wpa_sm_drop_sa(struct wpa_sm *sm); 240 struct rsn_pmksa_cache_entry * wpa_sm_pmksa_cache_get(struct wpa_sm *sm, 241 const u8 *aa, 242 const u8 *pmkid, 243 const void *network_ctx, 244 int akmp); 245 void wpa_sm_pmksa_cache_remove(struct wpa_sm *sm, 246 struct rsn_pmksa_cache_entry *entry); 247 bool wpa_sm_has_ft_keys(struct wpa_sm *sm, const u8 *md); 248 int wpa_sm_has_ptk_installed(struct wpa_sm *sm); 249 250 void wpa_sm_update_replay_ctr(struct wpa_sm *sm, const u8 *replay_ctr); 251 252 void wpa_sm_pmksa_cache_flush(struct wpa_sm *sm, void *network_ctx); 253 void wpa_sm_external_pmksa_cache_flush(struct wpa_sm *sm, void *network_ctx); 254 255 int wpa_sm_get_p2p_ip_addr(struct wpa_sm *sm, u8 *buf); 256 257 void wpa_sm_set_rx_replay_ctr(struct wpa_sm *sm, const u8 *rx_replay_counter); 258 void wpa_sm_set_ptk_kck_kek(struct wpa_sm *sm, 259 const u8 *ptk_kck, size_t ptk_kck_len, 260 const u8 *ptk_kek, size_t ptk_kek_len); 261 int wpa_fils_is_completed(struct wpa_sm *sm); 262 void wpa_sm_pmksa_cache_reconfig(struct wpa_sm *sm); 263 int wpa_sm_set_mlo_params(struct wpa_sm *sm, const struct wpa_sm_mlo *mlo); 264 265 #else /* CONFIG_NO_WPA */ 266 267 static inline struct wpa_sm * wpa_sm_init(struct wpa_sm_ctx *ctx) 268 { 269 return (struct wpa_sm *) 1; 270 } 271 272 static inline void wpa_sm_deinit(struct wpa_sm *sm) 273 { 274 } 275 276 static inline void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid) 277 { 278 } 279 280 static inline void wpa_sm_notify_disassoc(struct wpa_sm *sm) 281 { 282 } 283 284 static inline void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, 285 size_t pmk_len, const u8 *pmkid, 286 const u8 *bssid) 287 { 288 } 289 290 static inline void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm) 291 { 292 } 293 294 static inline void wpa_sm_set_fast_reauth(struct wpa_sm *sm, int fast_reauth) 295 { 296 } 297 298 static inline void wpa_sm_set_scard_ctx(struct wpa_sm *sm, void *scard_ctx) 299 { 300 } 301 302 static inline void wpa_sm_set_config(struct wpa_sm *sm, 303 struct rsn_supp_config *config) 304 { 305 } 306 307 static inline void wpa_sm_set_own_addr(struct wpa_sm *sm, const u8 *addr) 308 { 309 } 310 311 static inline void wpa_sm_set_ifname(struct wpa_sm *sm, const char *ifname, 312 const char *bridge_ifname) 313 { 314 } 315 316 static inline void wpa_sm_set_eapol(struct wpa_sm *sm, struct eapol_sm *eapol) 317 { 318 } 319 320 static inline int wpa_sm_set_assoc_wpa_ie(struct wpa_sm *sm, const u8 *ie, 321 size_t len) 322 { 323 return -1; 324 } 325 326 static inline int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm, 327 u8 *wpa_ie, 328 size_t *wpa_ie_len) 329 { 330 return -1; 331 } 332 333 static inline int wpa_sm_set_ap_wpa_ie(struct wpa_sm *sm, const u8 *ie, 334 size_t len) 335 { 336 return -1; 337 } 338 339 static inline int wpa_sm_set_ap_rsn_ie(struct wpa_sm *sm, const u8 *ie, 340 size_t len) 341 { 342 return -1; 343 } 344 345 static inline int wpa_sm_set_ap_rsnxe(struct wpa_sm *sm, const u8 *ie, 346 size_t len) 347 { 348 return -1; 349 } 350 351 static inline int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen) 352 { 353 return 0; 354 } 355 356 static inline int wpa_sm_set_param(struct wpa_sm *sm, 357 enum wpa_sm_conf_params param, 358 unsigned int value) 359 { 360 return -1; 361 } 362 363 static inline int wpa_sm_get_status(struct wpa_sm *sm, char *buf, 364 size_t buflen, int verbose) 365 { 366 return 0; 367 } 368 369 static inline int wpa_sm_pmf_enabled(struct wpa_sm *sm) 370 { 371 return 0; 372 } 373 374 static inline int wpa_sm_ext_key_id(struct wpa_sm *sm) 375 { 376 return 0; 377 } 378 379 static inline int wpa_sm_ext_key_id_active(struct wpa_sm *sm) 380 { 381 return 0; 382 } 383 384 static inline int wpa_sm_ocv_enabled(struct wpa_sm *sm) 385 { 386 return 0; 387 } 388 389 static inline void wpa_sm_key_request(struct wpa_sm *sm, int error, 390 int pairwise) 391 { 392 } 393 394 static inline int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len, 395 struct wpa_ie_data *data) 396 { 397 return -1; 398 } 399 400 static inline void wpa_sm_aborted_cached(struct wpa_sm *sm) 401 { 402 } 403 404 static inline void wpa_sm_aborted_external_cached(struct wpa_sm *sm) 405 { 406 } 407 408 static inline int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr, 409 const u8 *buf, size_t len, 410 enum frame_encryption encrypted) 411 { 412 return -1; 413 } 414 415 static inline int wpa_sm_parse_own_wpa_ie(struct wpa_sm *sm, 416 struct wpa_ie_data *data) 417 { 418 return -1; 419 } 420 421 static inline int wpa_sm_pmksa_cache_list(struct wpa_sm *sm, char *buf, 422 size_t len) 423 { 424 return -1; 425 } 426 427 static inline void wpa_sm_drop_sa(struct wpa_sm *sm) 428 { 429 } 430 431 static inline struct rsn_pmksa_cache_entry * 432 wpa_sm_pmksa_cache_get(struct wpa_sm *sm, const u8 *aa, const u8 *pmkid, 433 const void *network_ctx, int akmp) 434 { 435 return NULL; 436 } 437 438 static inline int wpa_sm_has_ptk(struct wpa_sm *sm) 439 { 440 return 0; 441 } 442 443 static inline void wpa_sm_update_replay_ctr(struct wpa_sm *sm, 444 const u8 *replay_ctr) 445 { 446 } 447 448 static inline void wpa_sm_external_pmksa_cache_flush(struct wpa_sm *sm, 449 void *network_ctx) 450 { 451 } 452 453 static inline void wpa_sm_pmksa_cache_flush(struct wpa_sm *sm, 454 void *network_ctx) 455 { 456 } 457 458 static inline void wpa_sm_set_rx_replay_ctr(struct wpa_sm *sm, 459 const u8 *rx_replay_counter) 460 { 461 } 462 463 static inline void wpa_sm_set_ptk_kck_kek(struct wpa_sm *sm, const u8 *ptk_kck, 464 size_t ptk_kck_len, 465 const u8 *ptk_kek, size_t ptk_kek_len) 466 { 467 } 468 469 static inline int wpa_fils_is_completed(struct wpa_sm *sm) 470 { 471 return 0; 472 } 473 474 static inline void wpa_sm_pmksa_cache_reconfig(struct wpa_sm *sm) 475 { 476 } 477 478 static inline int wpa_sm_set_mlo_params(struct wpa_sm *sm, 479 const struct wpa_sm_mlo *mlo) 480 { 481 return 0; 482 } 483 484 #endif /* CONFIG_NO_WPA */ 485 486 #ifdef CONFIG_IEEE80211R 487 488 int wpa_sm_set_ft_params(struct wpa_sm *sm, const u8 *ies, size_t ies_len); 489 int wpa_ft_prepare_auth_request(struct wpa_sm *sm, const u8 *mdie); 490 int wpa_ft_add_mdie(struct wpa_sm *sm, u8 *ies, size_t ies_len, 491 const u8 *mdie); 492 const u8 * wpa_sm_get_ft_md(struct wpa_sm *sm); 493 int wpa_ft_process_response(struct wpa_sm *sm, const u8 *ies, size_t ies_len, 494 int ft_action, const u8 *target_ap, 495 const u8 *ric_ies, size_t ric_ies_len); 496 int wpa_ft_is_completed(struct wpa_sm *sm); 497 void wpa_reset_ft_completed(struct wpa_sm *sm); 498 int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies, 499 size_t ies_len, const u8 *src_addr); 500 int wpa_ft_start_over_ds(struct wpa_sm *sm, const u8 *target_ap, 501 const u8 *mdie, bool force); 502 503 #ifdef CONFIG_PASN 504 505 int wpa_pasn_ft_derive_pmk_r1(struct wpa_sm *sm, int akmp, const u8 *r1kh_id, 506 u8 *pmk_r1, size_t *pmk_r1_len, u8 *pmk_r1_name); 507 508 #endif /* CONFIG_PASN */ 509 510 #else /* CONFIG_IEEE80211R */ 511 512 static inline int 513 wpa_sm_set_ft_params(struct wpa_sm *sm, const u8 *ies, size_t ies_len) 514 { 515 return 0; 516 } 517 518 static inline int wpa_ft_prepare_auth_request(struct wpa_sm *sm, 519 const u8 *mdie) 520 { 521 return 0; 522 } 523 524 static inline int wpa_ft_add_mdie(struct wpa_sm *sm, u8 *ies, size_t ies_len, 525 const u8 *mdie) 526 { 527 return 0; 528 } 529 530 static inline int 531 wpa_ft_process_response(struct wpa_sm *sm, const u8 *ies, size_t ies_len, 532 int ft_action, const u8 *target_ap) 533 { 534 return 0; 535 } 536 537 static inline int wpa_ft_is_completed(struct wpa_sm *sm) 538 { 539 return 0; 540 } 541 542 static inline void wpa_reset_ft_completed(struct wpa_sm *sm) 543 { 544 } 545 546 static inline int 547 wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies, size_t ies_len, 548 const u8 *src_addr) 549 { 550 return -1; 551 } 552 553 #ifdef CONFIG_PASN 554 555 static inline int 556 wpa_pasn_ft_derive_pmk_r1(struct wpa_sm *sm, int akmp, const u8 *r1kh_id, 557 u8 *pmk_r1, size_t *pmk_r1_len, u8 *pmk_r1_name) 558 { 559 return -1; 560 } 561 562 #endif /* CONFIG_PASN */ 563 564 #endif /* CONFIG_IEEE80211R */ 565 566 567 /* tdls.c */ 568 void wpa_tdls_ap_ies(struct wpa_sm *sm, const u8 *ies, size_t len); 569 void wpa_tdls_assoc_resp_ies(struct wpa_sm *sm, const u8 *ies, size_t len); 570 int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr); 571 void wpa_tdls_remove(struct wpa_sm *sm, const u8 *addr); 572 int wpa_tdls_teardown_link(struct wpa_sm *sm, const u8 *addr, u16 reason_code); 573 int wpa_tdls_send_discovery_request(struct wpa_sm *sm, const u8 *addr); 574 int wpa_tdls_init(struct wpa_sm *sm); 575 void wpa_tdls_teardown_peers(struct wpa_sm *sm); 576 void wpa_tdls_deinit(struct wpa_sm *sm); 577 void wpa_tdls_enable(struct wpa_sm *sm, int enabled); 578 void wpa_tdls_disable_unreachable_link(struct wpa_sm *sm, const u8 *addr); 579 const char * wpa_tdls_get_link_status(struct wpa_sm *sm, const u8 *addr); 580 int wpa_tdls_is_external_setup(struct wpa_sm *sm); 581 int wpa_tdls_enable_chan_switch(struct wpa_sm *sm, const u8 *addr, 582 u8 oper_class, 583 struct hostapd_freq_params *freq_params); 584 int wpa_tdls_disable_chan_switch(struct wpa_sm *sm, const u8 *addr); 585 int wpa_tdls_process_discovery_response(struct wpa_sm *sm, const u8 *addr, 586 const u8 *buf, size_t len); 587 #ifdef CONFIG_TDLS_TESTING 588 extern unsigned int tdls_testing; 589 #endif /* CONFIG_TDLS_TESTING */ 590 591 592 int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf); 593 void wpa_sm_set_test_assoc_ie(struct wpa_sm *sm, struct wpabuf *buf); 594 void wpa_sm_set_test_eapol_m2_elems(struct wpa_sm *sm, struct wpabuf *buf); 595 void wpa_sm_set_test_eapol_m4_elems(struct wpa_sm *sm, struct wpabuf *buf); 596 const u8 * wpa_sm_get_anonce(struct wpa_sm *sm); 597 unsigned int wpa_sm_get_key_mgmt(struct wpa_sm *sm); 598 599 struct wpabuf * fils_build_auth(struct wpa_sm *sm, int dh_group, const u8 *md); 600 int fils_process_auth(struct wpa_sm *sm, const u8 *bssid, const u8 *data, 601 size_t len); 602 struct wpabuf * fils_build_assoc_req(struct wpa_sm *sm, const u8 **kek, 603 size_t *kek_len, const u8 **snonce, 604 const u8 **anonce, 605 const struct wpabuf **hlp, 606 unsigned int num_hlp); 607 int fils_process_assoc_resp(struct wpa_sm *sm, const u8 *resp, size_t len); 608 609 struct wpabuf * owe_build_assoc_req(struct wpa_sm *sm, u16 group); 610 int owe_process_assoc_resp(struct wpa_sm *sm, const u8 *bssid, 611 const u8 *resp_ies, size_t resp_ies_len); 612 613 void wpa_sm_set_reset_fils_completed(struct wpa_sm *sm, int set); 614 void wpa_sm_set_fils_cache_id(struct wpa_sm *sm, const u8 *fils_cache_id); 615 void wpa_sm_set_dpp_z(struct wpa_sm *sm, const struct wpabuf *z); 616 void wpa_pasn_sm_set_caps(struct wpa_sm *sm, unsigned int flags2); 617 struct rsn_pmksa_cache * wpa_sm_get_pmksa_cache(struct wpa_sm *sm); 618 619 void wpa_sm_set_cur_pmksa(struct wpa_sm *sm, 620 struct rsn_pmksa_cache_entry *entry); 621 const u8 * wpa_sm_get_auth_addr(struct wpa_sm *sm); 622 void wpa_sm_set_driver_bss_selection(struct wpa_sm *sm, 623 bool driver_bss_selection); 624 625 #endif /* WPA_H */ 626