18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/* 28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Internal WPA/RSN supplicant state machine definitions 3d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt * Copyright (c) 2004-2017, Jouni Malinen <j@w1.fi> 48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details. 78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifndef WPA_I_H 108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#define WPA_I_H 118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "utils/list.h" 138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_tdls_peer; 158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_eapol_key; 168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/** 188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * struct wpa_sm - Internal WPA state machine data 198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */ 208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstruct wpa_sm { 21d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt u8 pmk[PMK_LEN_MAX]; 228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t pmk_len; 238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk ptk, tptk; 248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ptk_set, tptk_set; 254dd28dc25895165566a1c8a9cac7bcd755ff8fe3Dmitry Shmidt unsigned int msg_3_of_4_ok:1; 268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 snonce[WPA_NONCE_LEN]; 278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 anonce[WPA_NONCE_LEN]; /* ANonce from the last 1/4 msg */ 288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int renew_snonce; 298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 rx_replay_counter[WPA_REPLAY_COUNTER_LEN]; 308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int rx_replay_counter_set; 318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 request_counter[WPA_REPLAY_COUNTER_LEN]; 3210bfd644d0adaf334c036f8cda91a73984dbb7b9Mathy Vanhoef struct wpa_gtk gtk; 3358c0e963554ac0be5628f3d2e5058e5c686c128aJouni Malinen struct wpa_gtk gtk_wnm_sleep; 3410bfd644d0adaf334c036f8cda91a73984dbb7b9Mathy Vanhoef#ifdef CONFIG_IEEE80211W 3510bfd644d0adaf334c036f8cda91a73984dbb7b9Mathy Vanhoef struct wpa_igtk igtk; 3658c0e963554ac0be5628f3d2e5058e5c686c128aJouni Malinen struct wpa_igtk igtk_wnm_sleep; 3710bfd644d0adaf334c036f8cda91a73984dbb7b9Mathy Vanhoef#endif /* CONFIG_IEEE80211W */ 388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_sm *eapol; /* EAPOL state machine from upper level code */ 408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache *pmksa; /* PMKSA cache */ 428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct rsn_pmksa_cache_entry *cur_pmksa; /* current PMKSA entry */ 438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct dl_list pmksa_candidates; 448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct l2_packet_data *l2_preauth; 468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct l2_packet_data *l2_preauth_br; 478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct l2_packet_data *l2_tdls; 488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 preauth_bssid[ETH_ALEN]; /* current RSN pre-auth peer or 498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * 00:00:00:00:00:00 if no pre-auth is 508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * in progress */ 518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct eapol_sm *preauth_eapol; 528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_sm_ctx *ctx; 548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *scard_ctx; /* context for smartcard callbacks */ 568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int fast_reauth; /* whether EAP fast re-authentication is enabled */ 578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *network_ctx; 598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int allowed_pairwise_cipher; /* bitfield of WPA_CIPHER_* */ 608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int proactive_key_caching; 618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int eap_workaround; 628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt void *eap_conf_ctx; 638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 ssid[32]; 648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ssid_len; 658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int wpa_ptk_rekey; 66cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt int p2p; 67d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int wpa_rsc_relaxation; 688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 own_addr[ETH_ALEN]; 708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *ifname; 718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const char *bridge_ifname; 728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 bssid[ETH_ALEN]; 738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNAConfigPMKLifetime; 758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNAConfigPMKReauthThreshold; 768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNAConfigSATimeout; 778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int dot11RSNA4WayHandshakeFailures; 798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt /* Selected configuration (based on Beacon/ProbeResp WPA IE) */ 818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int proto; 828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int pairwise_cipher; 838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int group_cipher; 848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int key_mgmt; 858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt unsigned int mgmt_group_cipher; 868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int rsn_enabled; /* Whether RSN is enabled in configuration */ 888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int mfp; /* 0 = disabled, 1 = optional, 2 = mandatory */ 898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *assoc_wpa_ie; /* Own WPA/RSN IE from (Re)AssocReq */ 918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t assoc_wpa_ie_len; 928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *ap_wpa_ie, *ap_rsn_ie; 938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t ap_wpa_ie_len, ap_rsn_ie_len; 948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_TDLS 968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_tdls_peer *tdls; 978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int tdls_prohibited; 986c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt int tdls_chan_switch_prohibited; 998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int tdls_disabled; 1001f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 1011f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt /* The driver supports TDLS */ 1021f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt int tdls_supported; 1031f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 1041f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt /* 1051f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * The driver requires explicit discovery/setup/teardown frames sent 1061f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt * to it via tdls_mgmt. 1071f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt */ 1081f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt int tdls_external_setup; 1096c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt 1106c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt /* The driver supports TDLS channel switching */ 1116c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt int tdls_chan_switch; 1128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_TDLS */ 1138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_IEEE80211R 1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */ 1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t xxkey_len; 1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk_r0[PMK_LEN]; 1188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk_r0_name[WPA_PMK_NAME_LEN]; 1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk_r1[PMK_LEN]; 1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 pmk_r1_name[WPA_PMK_NAME_LEN]; 1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mobility_domain[MOBILITY_DOMAIN_ID_LEN]; 1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; 1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t r0kh_id_len; 1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 r1kh_id[FT_R1KH_ID_LEN]; 1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ft_completed; 1264283f9e410efee9a51c3cf849ddece34b876f65fJouni Malinen int ft_reassoc_completed; 1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int over_the_ds_in_progress; 1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 target_ap[ETH_ALEN]; /* over-the-DS target AP */ 1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int set_ptk_after_assoc; 1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 mdie_ft_capab; /* FT Capability and Policy from target AP MDIE */ 1318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 *assoc_resp_ies; /* MDIE and FTIE from (Re)Association Response */ 1328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t assoc_resp_ies_len; 1338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_IEEE80211R */ 134cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt 135cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#ifdef CONFIG_P2P 136cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt u8 p2p_ip_addr[3 * 4]; 137cf32e60fa7e0d33fe1551a6dba8dcbbec47ea50eDmitry Shmidt#endif /* CONFIG_P2P */ 1381b46775bb44f06b3cc285481ff5f7a673559ed7dDmitry Shmidt 1391b46775bb44f06b3cc285481ff5f7a673559ed7dDmitry Shmidt#ifdef CONFIG_TESTING_OPTIONS 1401b46775bb44f06b3cc285481ff5f7a673559ed7dDmitry Shmidt struct wpabuf *test_assoc_ie; 1411b46775bb44f06b3cc285481ff5f7a673559ed7dDmitry Shmidt#endif /* CONFIG_TESTING_OPTIONS */ 1429839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt 1439839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt#ifdef CONFIG_FILS 1449839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 fils_nonce[FILS_NONCE_LEN]; 1459839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 fils_session[FILS_SESSION_LEN]; 1469839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 fils_anonce[FILS_NONCE_LEN]; 1479839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 fils_key_auth_ap[FILS_MAX_KEY_AUTH_LEN]; 1489839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt u8 fils_key_auth_sta[FILS_MAX_KEY_AUTH_LEN]; 1499839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt size_t fils_key_auth_len; 1509839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt unsigned int fils_completed:1; 151092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart unsigned int fils_erp_pmkid_set:1; 152d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt unsigned int fils_cache_id_set:1; 153092955c7394ee96d6c8c9724ff46a3c038b36143Paul Stewart u8 fils_erp_pmkid[PMKID_LEN]; 154d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt u8 fils_cache_id[FILS_CACHE_ID_LEN]; 155d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt struct crypto_ecdh *fils_ecdh; 156d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt int fils_dh_group; 157d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt size_t fils_dh_elem_len; 158d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt struct wpabuf *fils_ft_ies; 159d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt u8 fils_ft[FILS_FT_MAX_LEN]; 160d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt size_t fils_ft_len; 1619839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidt#endif /* CONFIG_FILS */ 162d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt 163d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt#ifdef CONFIG_OWE 164d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt struct crypto_ecdh *owe_ecdh; 165d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt u16 owe_group; 166d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt#endif /* CONFIG_OWE */ 1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}; 1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_sm_set_state(struct wpa_sm *sm, enum wpa_states state) 1718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->set_state); 1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sm->ctx->set_state(sm->ctx->ctx, state); 1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline enum wpa_states wpa_sm_get_state(struct wpa_sm *sm) 1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->get_state); 1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->get_state(sm->ctx->ctx); 1808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_sm_deauthenticate(struct wpa_sm *sm, int reason_code) 1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->deauthenticate); 1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sm->ctx->deauthenticate(sm->ctx->ctx, reason_code); 1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_set_key(struct wpa_sm *sm, enum wpa_alg alg, 1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *addr, int key_idx, int set_tx, 1908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *seq, size_t seq_len, 1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *key, size_t key_len) 1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->set_key); 1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->set_key(sm->ctx->ctx, alg, addr, key_idx, set_tx, 1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt seq, seq_len, key, key_len); 1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void * wpa_sm_get_network_ctx(struct wpa_sm *sm) 1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->get_network_ctx); 2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->get_network_ctx(sm->ctx->ctx); 2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_get_bssid(struct wpa_sm *sm, u8 *bssid) 2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->get_bssid); 2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->get_bssid(sm->ctx->ctx, bssid); 2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_ether_send(struct wpa_sm *sm, const u8 *dest, 2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 proto, const u8 *buf, size_t len) 2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->ether_send); 2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->ether_send(sm->ctx->ctx, dest, proto, buf, len); 2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_get_beacon_ie(struct wpa_sm *sm) 2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->get_beacon_ie); 2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->get_beacon_ie(sm->ctx->ctx); 2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline void wpa_sm_cancel_auth_timeout(struct wpa_sm *sm) 2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->cancel_auth_timeout); 2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt sm->ctx->cancel_auth_timeout(sm->ctx->ctx); 2278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline u8 * wpa_sm_alloc_eapol(struct wpa_sm *sm, u8 type, 2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const void *data, u16 data_len, 2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt size_t *msg_len, void **data_pos) 2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->alloc_eapol); 2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->alloc_eapol(sm->ctx->ctx, type, data, data_len, 2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt msg_len, data_pos); 2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 238293335998d38c497293b1c41f7ad8342b507d458Dmitry Shmidtstatic inline int wpa_sm_add_pmkid(struct wpa_sm *sm, void *network_ctx, 239d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt const u8 *bssid, const u8 *pmkid, 240d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt const u8 *cache_id, const u8 *pmk, 241d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt size_t pmk_len) 2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->add_pmkid); 244d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt return sm->ctx->add_pmkid(sm->ctx->ctx, network_ctx, bssid, pmkid, 245d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt cache_id, pmk, pmk_len); 2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 248293335998d38c497293b1c41f7ad8342b507d458Dmitry Shmidtstatic inline int wpa_sm_remove_pmkid(struct wpa_sm *sm, void *network_ctx, 249d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt const u8 *bssid, const u8 *pmkid, 250d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt const u8 *cache_id) 2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->remove_pmkid); 253d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt return sm->ctx->remove_pmkid(sm->ctx->ctx, network_ctx, bssid, pmkid, 254d2986c2e737a8441ff5a791b6b56c1c8322ef3c9Dmitry Shmidt cache_id); 2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_mlme_setprotection(struct wpa_sm *sm, const u8 *addr, 2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int protect_type, int key_type) 2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt WPA_ASSERT(sm->ctx->mlme_setprotection); 2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->mlme_setprotection(sm->ctx->ctx, addr, protect_type, 2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt key_type); 2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_update_ft_ies(struct wpa_sm *sm, const u8 *md, 2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sm->ctx->update_ft_ies) 2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->update_ft_ies(sm->ctx->ctx, md, ies, ies_len); 2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_send_ft_action(struct wpa_sm *sm, u8 action, 2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *target_ap, 2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *ies, size_t ies_len) 2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sm->ctx->send_ft_action) 2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->send_ft_action(sm->ctx->ctx, action, target_ap, 2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt ies, ies_len); 2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_mark_authenticated(struct wpa_sm *sm, 2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *target_ap) 2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sm->ctx->mark_authenticated) 2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->mark_authenticated(sm->ctx->ctx, target_ap); 2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 2911f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline void wpa_sm_set_rekey_offload(struct wpa_sm *sm) 2921f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 2931f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (!sm->ctx->set_rekey_offload) 2941f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return; 295807291d85bf857320aff6a8ade38c5f622ab9df8Dmitry Shmidt sm->ctx->set_rekey_offload(sm->ctx->ctx, sm->ptk.kek, sm->ptk.kek_len, 296807291d85bf857320aff6a8ade38c5f622ab9df8Dmitry Shmidt sm->ptk.kck, sm->ptk.kck_len, 297807291d85bf857320aff6a8ade38c5f622ab9df8Dmitry Shmidt sm->rx_replay_counter); 2981f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 2991f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_TDLS 3011f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline int wpa_sm_tdls_get_capa(struct wpa_sm *sm, 3021f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt int *tdls_supported, 3036c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt int *tdls_ext_setup, 3046c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt int *tdls_chan_switch) 3051f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 3061f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (sm->ctx->tdls_get_capa) 3071f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return sm->ctx->tdls_get_capa(sm->ctx->ctx, tdls_supported, 3086c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt tdls_ext_setup, tdls_chan_switch); 3091f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return -1; 3101f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 3111f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 3128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_send_tdls_mgmt(struct wpa_sm *sm, const u8 *dst, 3138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u8 action_code, u8 dialog_token, 314df5a7e4c5c64890c2425bb47d665bbce4992b676Dmitry Shmidt u16 status_code, u32 peer_capab, 3159ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt int initiator, const u8 *buf, 3169ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt size_t len) 3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sm->ctx->send_tdls_mgmt) 3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->send_tdls_mgmt(sm->ctx->ctx, dst, action_code, 3208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt dialog_token, status_code, 3219ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt peer_capab, initiator, buf, 3229ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt len); 3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic inline int wpa_sm_tdls_oper(struct wpa_sm *sm, int oper, 3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *peer) 3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{ 3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt if (sm->ctx->tdls_oper) 3308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return sm->ctx->tdls_oper(sm->ctx->ctx, oper, peer); 3318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt return -1; 3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt} 3331f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt 3341f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtstatic inline int 3351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtwpa_sm_tdls_peer_addset(struct wpa_sm *sm, const u8 *addr, int add, 33651b6ea882f234c14cd1fe1332a3840cf61fafccaDmitry Shmidt u16 aid, u16 capability, const u8 *supp_rates, 337f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidt size_t supp_rates_len, 338f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidt const struct ieee80211_ht_capabilities *ht_capab, 33933e38bfa7159cef089d6ee0d904778e184c72c47Dmitry Shmidt const struct ieee80211_vht_capabilities *vht_capab, 3409ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt u8 qosinfo, int wmm, const u8 *ext_capab, 3419ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt size_t ext_capab_len, const u8 *supp_channels, 3429ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt size_t supp_channels_len, const u8 *supp_oper_classes, 343344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt size_t supp_oper_classes_len) 3441f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{ 3451f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt if (sm->ctx->tdls_peer_addset) 3461f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return sm->ctx->tdls_peer_addset(sm->ctx->ctx, addr, add, 34751b6ea882f234c14cd1fe1332a3840cf61fafccaDmitry Shmidt aid, capability, supp_rates, 348f86232838cf712377867cb42417c1613ab5dc425Dmitry Shmidt supp_rates_len, ht_capab, 3499ead16e203b81d44a2d84eadc2901ceeb7daf805Dmitry Shmidt vht_capab, qosinfo, wmm, 350344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt ext_capab, ext_capab_len, 351344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt supp_channels, 352344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt supp_channels_len, 353344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt supp_oper_classes, 354344abd362cfe2d03ed956666527352826b67bde5Dmitry Shmidt supp_oper_classes_len); 3551f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt return -1; 3561f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt} 3576c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt 3586c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtstatic inline int 3596c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtwpa_sm_tdls_enable_channel_switch(struct wpa_sm *sm, const u8 *addr, 3606c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt u8 oper_class, 3616c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt const struct hostapd_freq_params *freq_params) 3626c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt{ 3636c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt if (sm->ctx->tdls_enable_channel_switch) 3646c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt return sm->ctx->tdls_enable_channel_switch(sm->ctx->ctx, addr, 3656c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt oper_class, 3666c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt freq_params); 3676c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt return -1; 3686c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt} 3696c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt 3706c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtstatic inline int 3716c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtwpa_sm_tdls_disable_channel_switch(struct wpa_sm *sm, const u8 *addr) 3726c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt{ 3736c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt if (sm->ctx->tdls_disable_channel_switch) 3746c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt return sm->ctx->tdls_disable_channel_switch(sm->ctx->ctx, addr); 3756c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt return -1; 3766c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt} 3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_TDLS */ 3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 3796c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidtstatic inline int wpa_sm_key_mgmt_set_pmk(struct wpa_sm *sm, 3806c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt const u8 *pmk, size_t pmk_len) 3816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt{ 3826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt if (!sm->ctx->key_mgmt_set_pmk) 3836c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt return -1; 3846c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt return sm->ctx->key_mgmt_set_pmk(sm->ctx->ctx, pmk, pmk_len); 3856c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt} 3866c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt 387ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidtstatic inline void wpa_sm_fils_hlp_rx(struct wpa_sm *sm, 388ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt const u8 *dst, const u8 *src, 389ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt const u8 *pkt, size_t pkt_len) 390ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt{ 391ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt if (sm->ctx->fils_hlp_rx) 392ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt sm->ctx->fils_hlp_rx(sm->ctx->ctx, dst, src, pkt, pkt_len); 393ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt} 394ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt 395ebd93af924f6e54fb4982b3312ff875a4896b62bDmitry Shmidt 3969839ecd75c832023d4d13fd2917a8c28261ff668Dmitry Shmidtint wpa_eapol_key_send(struct wpa_sm *sm, struct wpa_ptk *ptk, 397d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt int ver, const u8 *dest, u16 proto, 398d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt u8 *msg, size_t msg_len, u8 *key_mic); 3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_supplicant_send_2_of_4(struct wpa_sm *sm, const unsigned char *dst, 4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_eapol_key *key, 4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt int ver, const u8 *nonce, 4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const u8 *wpa_ie, size_t wpa_ie_len, 4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk *ptk); 4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_supplicant_send_4_of_4(struct wpa_sm *sm, const unsigned char *dst, 4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt const struct wpa_eapol_key *key, 4068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt u16 ver, u16 key_info, 4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt struct wpa_ptk *ptk); 4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpa_derive_ptk_ft(struct wpa_sm *sm, const unsigned char *src_addr, 410807291d85bf857320aff6a8ade38c5f622ab9df8Dmitry Shmidt const struct wpa_eapol_key *key, struct wpa_ptk *ptk); 4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_tdls_assoc(struct wpa_sm *sm); 4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpa_tdls_disassoc(struct wpa_sm *sm); 4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt 4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* WPA_I_H */ 416