wpa_auth_i.h revision b36ed7cd946148d829f311de8fe53ea3ffaaffe3
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/*
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * hostapd - IEEE 802.11i-2004 / WPA Authenticator: Internal definitions
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer * Copyright (c) 2004-2007, Jouni Malinen <j@w1.fi>
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer *
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * This software may be distributed under the terms of the BSD license.
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner * See README for more details.
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer */
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#ifndef WPA_AUTH_I_H
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define WPA_AUTH_I_H
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer/* max(dot11RSNAConfigGroupUpdateCount,dot11RSNAConfigPairwiseUpdateCount) */
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#define RSNA_MAX_EAPOL_RETRIES 4
14ec55c941f2846db48bce4ed6dd2ce339e1a48962Ted Kremenek
1543b628cd47ecdc3caf640d79b3ad7ecef0f2c285Chris Lattnerstruct wpa_group;
16ec55c941f2846db48bce4ed6dd2ce339e1a48962Ted Kremenek
178fe83e1df954d72c0f4ffc15d20a5222ec151c21Benjamin Kramerstruct wpa_stsl_negotiation {
1823e47c6b6e8ccdd8daa378ab2a879644425c72d8Daniel Dunbar	struct wpa_stsl_negotiation *next;
1903201fbbdeb3eb7f465610b09c281ee6aa84e3caTed Kremenek	u8 initiator[ETH_ALEN];
2003201fbbdeb3eb7f465610b09c281ee6aa84e3caTed Kremenek	u8 peer[ETH_ALEN];
215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer};
225f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
23d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie
243fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattnerstruct wpa_state_machine {
253fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattner	struct wpa_authenticator *wpa_auth;
26d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	struct wpa_group *group;
27b54d8af9a66cc20a6a9a9219c7eaea8df7ee7fd4Chris Lattner
285f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner	u8 addr[ETH_ALEN];
290673cb30340aadaede7b795c763b00f6b64e611cChandler Carruth	u8 p2p_dev_addr[ETH_ALEN];
30341785ec52f87c0803ba52dc88faac4e136f8593Bill Wendling
313fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattner	enum {
3222caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner		WPA_PTK_INITIALIZE, WPA_PTK_DISCONNECT, WPA_PTK_DISCONNECTED,
3322caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner		WPA_PTK_AUTHENTICATION, WPA_PTK_AUTHENTICATION2,
3422caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner		WPA_PTK_INITPMK, WPA_PTK_INITPSK, WPA_PTK_PTKSTART,
3522caddc91d2f6186739c6b20ec58ed38cd68e595Chris Lattner		WPA_PTK_PTKCALCNEGOTIATING, WPA_PTK_PTKCALCNEGOTIATING2,
36d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie		WPA_PTK_PTKINITNEGOTIATING, WPA_PTK_PTKINITDONE
37c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith	} wpa_ptk_state;
3878ad0b98848c17a0a11847fa1d456e2dfec8aa2fDavid Blaikie
3933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis	enum {
4033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis		WPA_PTK_GROUP_IDLE = 0,
413fdf4b071dc79fae778fb5f376485480756c76a3Chris Lattner		WPA_PTK_GROUP_REKEYNEGOTIATING,
4292dd386e3f05d176b45a638199d51f536bd9d1c4Chris Lattner		WPA_PTK_GROUP_REKEYESTABLISHED,
431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump		WPA_PTK_GROUP_KEYERROR
44cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	} wpa_ptk_group_state;
45cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor
46cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean Init;
471e473ccb0e0f6fd1954bef330f7193c1a3fb3ba1Ted Kremenek	Boolean DeauthenticationRequest;
48cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean AuthenticationRequest;
49cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean ReAuthenticationRequest;
50cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean Disconnect;
51246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu	int TimeoutCtr;
52246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu	int GTimeoutCtr;
53246b6aa6763de8c617d564ef33123a8f3293a80eRichard Trieu	Boolean TimeoutEvt;
54cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean EAPOLKeyReceived;
55cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean EAPOLKeyPairwise;
56cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean EAPOLKeyRequest;
57cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean MICVerified;
58cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	Boolean GUpdateStationKeys;
5908d6e032a2a0a8656d12b3b7b93942987bb12eb7Richard Smith	u8 ANonce[WPA_NONCE_LEN];
60cc5888d833caf90ebda37f24da40d2cd06b4d820Douglas Gregor	u8 SNonce[WPA_NONCE_LEN];
61abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor	u8 PMK[PMK_LEN];
62182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner	struct wpa_ptk PTK;
63182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner	Boolean PTK_valid;
64d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	Boolean pairwise_set;
6533e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis	int keycount;
6633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis	Boolean Pair;
67182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner	struct wpa_key_replay_counter {
68182745ae7892bca0842d9c023370ade5f8d1c6e8Chris Lattner		u8 counter[WPA_REPLAY_COUNTER_LEN];
6978ad0b98848c17a0a11847fa1d456e2dfec8aa2fDavid Blaikie		Boolean valid;
70d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	} key_replay[RSNA_MAX_EAPOL_RETRIES],
714f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor		prev_key_replay[RSNA_MAX_EAPOL_RETRIES];
724f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor	Boolean PInitAKeys; /* WPA only, not in IEEE 802.11i */
734f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor	Boolean PTKRequest; /* not in IEEE 802.11i state machine */
744f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor	Boolean has_GTK;
754f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor	Boolean PtkGroupInit; /* init request for PTK Group state machine */
764f5e21e24fb9e6ec473a13f83b5c9a2c41501a70Douglas Gregor
7704ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	u8 *last_rx_eapol_key; /* starting from IEEE 802.1X header */
78d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	size_t last_rx_eapol_key_len;
790827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
8004ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	unsigned int changed:1;
8104ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	unsigned int in_step_loop:1;
82d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	unsigned int pending_deinit:1;
830827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	unsigned int started:1;
8404ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	unsigned int mgmt_frame_prot:1;
8504ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	unsigned int rx_eapol_key_secure:1;
860827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	unsigned int update_snonce:1;
870827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_IEEE80211R
880827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	unsigned int ft_completed:1;
890827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	unsigned int pmk_r1_name_valid:1;
900827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_IEEE80211R */
9104ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	unsigned int is_wnmsleep:1;
9204ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner
9304ae2df026b275aae5dddfc0db5ca55ff4e62179Chris Lattner	u8 req_replay_counter[WPA_REPLAY_COUNTER_LEN];
94d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	int req_replay_counter_used;
95abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor
96abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor	u8 *wpa_ie;
9785bea9777d444ccbcc086d98f075fe666c2e865dDouglas Gregor	size_t wpa_ie_len;
98abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor
99abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor	enum {
100abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor		WPA_VERSION_NO_WPA = 0 /* WPA not used */,
101abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor		WPA_VERSION_WPA = 1 /* WPA / IEEE 802.11i/D3.0 */,
102c0a575f9b791a25c94b1c3c832dd73ec564646bbArgyrios Kyrtzidis		WPA_VERSION_WPA2 = 2 /* WPA2 / IEEE 802.11i */
103c0a575f9b791a25c94b1c3c832dd73ec564646bbArgyrios Kyrtzidis	} wpa;
10485bea9777d444ccbcc086d98f075fe666c2e865dDouglas Gregor	int pairwise; /* Pairwise cipher suite, WPA_CIPHER_* */
105abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor	int wpa_key_mgmt; /* the selected WPA_KEY_MGMT_* */
10633e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis	struct rsn_pmksa_cache_entry *pmksa;
107d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie
108d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	u32 dot11RSNAStatsTKIPLocalMICFailures;
10933e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis	u32 dot11RSNAStatsTKIPRemoteMICFailures;
11033e4e70c8c0a17e0ccb7465d96556b077a68ecb1Argyrios Kyrtzidis
111abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor#ifdef CONFIG_IEEE80211R
112dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	u8 xxkey[PMK_LEN]; /* PSK or the second 256 bits of MSK */
113dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	size_t xxkey_len;
114dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	u8 pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name derived from FT Auth
115dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis					   * Request */
116dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	u8 r0kh_id[FT_R0KH_ID_MAX_LEN]; /* R0KH-ID from FT Auth Request */
117dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	size_t r0kh_id_len;
118dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	u8 sup_pmk_r1_name[WPA_PMK_NAME_LEN]; /* PMKR1Name from EAPOL-Key
119dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis					       * message 2/4 */
120dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis	u8 *assoc_resp_ftie;
121dc0a2da1038cc725ad23d070e6a0d03078b7300dArgyrios Kyrtzidis#endif /* CONFIG_IEEE80211R */
122abc563f554951259bbe0315055cad92ee14d87e4Douglas Gregor
1235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer	int pending_1_of_4_timeout;
124d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie
125dfaee4922b990fbf33808b91b961dc27df585030Chad Rosier#ifdef CONFIG_P2P
12693ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	u8 ip_addr[4];
12793ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor#endif /* CONFIG_P2P */
12893ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor};
12993ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor
1309e2dac9c9b6bc4384c816a447cca6516a03c89f2Douglas Gregor
1319e2dac9c9b6bc4384c816a447cca6516a03c89f2Douglas Gregor/* per group key state machine data */
13293ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregorstruct wpa_group {
13393ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	struct wpa_group *next;
134d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	int vlan_id;
13593ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor
13693ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	Boolean GInit;
13793ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	int GKeyDoneStations;
13893ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	Boolean GTKReKey;
13993ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	int GTK_len;
14093ea5cb0edf8e509c5113e70cb05ee247c9bdf6bDouglas Gregor	int GN, GM;
141d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	Boolean GTKAuthenticator;
142d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie	u8 Counter[WPA_NONCE_LEN];
1430827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1440827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	enum {
1450827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		WPA_GROUP_GTK_INIT = 0,
1460827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		WPA_GROUP_SETKEYS, WPA_GROUP_SETKEYSDONE,
1470827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		WPA_GROUP_FATAL_FAILURE
1480827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	} wpa_group_state;
1490827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1500827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u8 GMK[WPA_GMK_LEN];
1510827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u8 GTK[2][WPA_GTK_MAX_LEN];
1520827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u8 GNonce[WPA_NONCE_LEN];
1530827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	Boolean changed;
1540827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	Boolean first_sta_seen;
1550827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	Boolean reject_4way_hs_for_entropy;
1560827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_IEEE80211W
1570827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u8 IGTK[2][WPA_IGTK_MAX_LEN];
1580827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	int GN_igtk, GM_igtk;
1590827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_IEEE80211W */
1600827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis};
161d6471f7c1921c7802804ce3ff6fe9768310f72b9David Blaikie
162dfaee4922b990fbf33808b91b961dc27df585030Chad Rosier
1630827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisstruct wpa_ft_pmk_cache;
1640827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1650827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis/* per authenticator data */
1660827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisstruct wpa_authenticator {
1670827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	struct wpa_group *group;
1680827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1690827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	unsigned int dot11RSNAStatsTKIPRemoteMICFailures;
1700827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u32 dot11RSNAAuthenticationSuiteSelected;
1710827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u32 dot11RSNAPairwiseCipherSelected;
1727a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	u32 dot11RSNAGroupCipherSelected;
1737a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	u8 dot11RSNAPMKIDUsed[PMKID_LEN];
1747a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	u32 dot11RSNAAuthenticationSuiteRequested; /* FIX: update */
1757a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	u32 dot11RSNAPairwiseCipherRequested; /* FIX: update */
1767a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	u32 dot11RSNAGroupCipherRequested; /* FIX: update */
1777a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	unsigned int dot11RSNATKIPCounterMeasuresInvoked;
1787a0a31ce0cd38147bfe853f71a3f7261444ddf4cChad Rosier	unsigned int dot11RSNA4WayHandshakeFailures;
17987429a05ff66fe6460eaa4855fd0da574e26bf7bArgyrios Kyrtzidis
18053201a86f775c064b62ec25742106c7b43ba8749Daniel Dunbar	struct wpa_stsl_negotiation *stsl_negotiations;
1810827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1820827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	struct wpa_auth_config conf;
18309ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar	struct wpa_auth_callbacks cb;
1840827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1850827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u8 *wpa_ie;
1860827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	size_t wpa_ie_len;
1870827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1880827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	u8 addr[ETH_ALEN];
1890827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1900827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	struct rsn_pmksa_cache *pmksa;
191fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner	struct wpa_ft_pmk_cache *ft_pmk_cache;
1920827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1930827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_P2P
1940827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis	struct bitfield *ip_pool;
1950827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_P2P */
19609ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar};
1970827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1980827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
1990827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_write_rsn_ie(struct wpa_auth_config *conf, u8 *buf, size_t len,
2000827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		     const u8 *pmkid);
2010827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_auth_logger(struct wpa_authenticator *wpa_auth, const u8 *addr,
2020827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		     logger_level level, const char *txt);
2030827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_auth_vlogger(struct wpa_authenticator *wpa_auth, const u8 *addr,
2040827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		      logger_level level, const char *fmt, ...);
2050827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid __wpa_send_eapol(struct wpa_authenticator *wpa_auth,
2060827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		      struct wpa_state_machine *sm, int key_info,
2070827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		      const u8 *key_rsc, const u8 *nonce,
2080827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		      const u8 *kde, size_t kde_len,
20909ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar		      int keyidx, int encr, int force_version);
2100827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_auth_for_each_sta(struct wpa_authenticator *wpa_auth,
2110827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis			  int (*cb)(struct wpa_state_machine *sm, void *ctx),
2120827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis			  void *cb_ctx);
2130827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_auth_for_each_auth(struct wpa_authenticator *wpa_auth,
21409ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar			   int (*cb)(struct wpa_authenticator *a, void *ctx),
2150827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis			   void *cb_ctx);
2160827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
2170827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#ifdef CONFIG_PEERKEY
2180827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisint wpa_stsl_remove(struct wpa_authenticator *wpa_auth,
2190827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		    struct wpa_stsl_negotiation *neg);
2200827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_smk_error(struct wpa_authenticator *wpa_auth,
2210827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		   struct wpa_state_machine *sm, struct wpa_eapol_key *key);
2220827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_smk_m1(struct wpa_authenticator *wpa_auth,
22309ea68d17bc0fc0b16d287ad4d3f61fe7def4f17Daniel Dunbar		struct wpa_state_machine *sm, struct wpa_eapol_key *key);
2240827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidisvoid wpa_smk_m3(struct wpa_authenticator *wpa_auth,
2250827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis		struct wpa_state_machine *sm, struct wpa_eapol_key *key);
2260827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis#endif /* CONFIG_PEERKEY */
2270827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
2283f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar#ifdef CONFIG_IEEE80211R
2293f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarint wpa_write_mdie(struct wpa_auth_config *conf, u8 *buf, size_t len);
2303f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarint wpa_write_ftie(struct wpa_auth_config *conf, const u8 *r0kh_id,
2313f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar		   size_t r0kh_id_len,
2323f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar		   const u8 *anonce, const u8 *snonce,
2333f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar		   u8 *buf, size_t len, const u8 *subelem,
2343f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar		   size_t subelem_len);
2353f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarint wpa_auth_derive_ptk_ft(struct wpa_state_machine *sm, const u8 *pmk,
2363f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar			   struct wpa_ptk *ptk, size_t ptk_len);
2373f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarstruct wpa_ft_pmk_cache * wpa_ft_pmk_cache_init(void);
2383f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarvoid wpa_ft_pmk_cache_deinit(struct wpa_ft_pmk_cache *cache);
2393f8394669673451061f57ced81f0a2cae087f119Daniel Dunbarvoid wpa_ft_install_ptk(struct wpa_state_machine *sm);
2403f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar#endif /* CONFIG_IEEE80211R */
2413f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar
2423f8394669673451061f57ced81f0a2cae087f119Daniel Dunbar#endif /* WPA_AUTH_I_H */
2433f22509ebf91aa96658ca6e5c5c0b926d8d62e34Chad Rosier