]> git.ipfire.org Git - thirdparty/hostap.git/blame - src/rsn_supp/wpa.h
RSN IBSS: Restart IBSS state machines for each new IBSS
[thirdparty/hostap.git] / src / rsn_supp / wpa.h
CommitLineData
6fc6879b
JM
1/*
2 * wpa_supplicant - WPA definitions
3 * Copyright (c) 2003-2007, Jouni Malinen <j@w1.fi>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * Alternatively, this software may be distributed under the terms of BSD
10 * license.
11 *
12 * See README and COPYING for more details.
13 */
14
15#ifndef WPA_H
16#define WPA_H
17
90973fb2
JM
18#include "common/defs.h"
19#include "common/eapol_common.h"
20#include "common/wpa_common.h"
6fc6879b 21
6fc6879b
JM
22struct wpa_sm;
23struct eapol_sm;
24struct wpa_config_blob;
25
26struct wpa_sm_ctx {
27 void *ctx; /* pointer to arbitrary upper level context */
0f057fb2 28 void *msg_ctx; /* upper level context for wpa_msg() calls */
6fc6879b 29
71934751
JM
30 void (*set_state)(void *ctx, enum wpa_states state);
31 enum wpa_states (*get_state)(void *ctx);
6fc6879b
JM
32 void (*deauthenticate)(void * ctx, int reason_code);
33 void (*disassociate)(void *ctx, int reason_code);
71934751 34 int (*set_key)(void *ctx, enum wpa_alg alg,
6fc6879b
JM
35 const u8 *addr, int key_idx, int set_tx,
36 const u8 *seq, size_t seq_len,
37 const u8 *key, size_t key_len);
38 void * (*get_network_ctx)(void *ctx);
39 int (*get_bssid)(void *ctx, u8 *bssid);
40 int (*ether_send)(void *ctx, const u8 *dest, u16 proto, const u8 *buf,
41 size_t len);
42 int (*get_beacon_ie)(void *ctx);
43 void (*cancel_auth_timeout)(void *ctx);
44 u8 * (*alloc_eapol)(void *ctx, u8 type, const void *data, u16 data_len,
45 size_t *msg_len, void **data_pos);
46 int (*add_pmkid)(void *ctx, const u8 *bssid, const u8 *pmkid);
47 int (*remove_pmkid)(void *ctx, const u8 *bssid, const u8 *pmkid);
48 void (*set_config_blob)(void *ctx, struct wpa_config_blob *blob);
49 const struct wpa_config_blob * (*get_config_blob)(void *ctx,
50 const char *name);
51 int (*mlme_setprotection)(void *ctx, const u8 *addr,
52 int protection_type, int key_type);
53 int (*update_ft_ies)(void *ctx, const u8 *md, const u8 *ies,
54 size_t ies_len);
55 int (*send_ft_action)(void *ctx, u8 action, const u8 *target_ap,
56 const u8 *ies, size_t ies_len);
2a7e7f4e 57 int (*mark_authenticated)(void *ctx, const u8 *target_ap);
281ff0aa
GP
58#ifdef CONFIG_TDLS
59 int (*send_tdls_mgmt)(void *ctx, const u8 *dst,
60 u8 action_code, u8 dialog_token,
61 u16 status_code, const u8 *buf, size_t len);
62 int (*tdls_oper)(void *ctx, int oper, const u8 *peer);
63#endif /* CONFIG_TDLS */
6fc6879b
JM
64};
65
66
67enum wpa_sm_conf_params {
68 RSNA_PMK_LIFETIME /* dot11RSNAConfigPMKLifetime */,
69 RSNA_PMK_REAUTH_THRESHOLD /* dot11RSNAConfigPMKReauthThreshold */,
70 RSNA_SA_TIMEOUT /* dot11RSNAConfigSATimeout */,
71 WPA_PARAM_PROTO,
72 WPA_PARAM_PAIRWISE,
73 WPA_PARAM_GROUP,
74 WPA_PARAM_KEY_MGMT,
75 WPA_PARAM_MGMT_GROUP,
e820cf95
JM
76 WPA_PARAM_RSN_ENABLED,
77 WPA_PARAM_MFP
6fc6879b
JM
78};
79
80struct rsn_supp_config {
81 void *network_ctx;
82 int peerkey_enabled;
83 int allowed_pairwise_cipher; /* bitfield of WPA_CIPHER_* */
84 int proactive_key_caching;
85 int eap_workaround;
86 void *eap_conf_ctx;
87 const u8 *ssid;
88 size_t ssid_len;
581a8cde 89 int wpa_ptk_rekey;
6fc6879b
JM
90};
91
92#ifndef CONFIG_NO_WPA
93
94struct wpa_sm * wpa_sm_init(struct wpa_sm_ctx *ctx);
95void wpa_sm_deinit(struct wpa_sm *sm);
96void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid);
97void wpa_sm_notify_disassoc(struct wpa_sm *sm);
98void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len);
99void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm);
100void wpa_sm_set_fast_reauth(struct wpa_sm *sm, int fast_reauth);
101void wpa_sm_set_scard_ctx(struct wpa_sm *sm, void *scard_ctx);
102void wpa_sm_set_config(struct wpa_sm *sm, struct rsn_supp_config *config);
103void wpa_sm_set_own_addr(struct wpa_sm *sm, const u8 *addr);
104void wpa_sm_set_ifname(struct wpa_sm *sm, const char *ifname,
105 const char *bridge_ifname);
106void wpa_sm_set_eapol(struct wpa_sm *sm, struct eapol_sm *eapol);
107int wpa_sm_set_assoc_wpa_ie(struct wpa_sm *sm, const u8 *ie, size_t len);
108int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm, u8 *wpa_ie,
109 size_t *wpa_ie_len);
110int wpa_sm_set_ap_wpa_ie(struct wpa_sm *sm, const u8 *ie, size_t len);
111int wpa_sm_set_ap_rsn_ie(struct wpa_sm *sm, const u8 *ie, size_t len);
112int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen);
113
114int wpa_sm_set_param(struct wpa_sm *sm, enum wpa_sm_conf_params param,
115 unsigned int value);
116unsigned int wpa_sm_get_param(struct wpa_sm *sm,
117 enum wpa_sm_conf_params param);
118
119int wpa_sm_get_status(struct wpa_sm *sm, char *buf, size_t buflen,
120 int verbose);
121
122void wpa_sm_key_request(struct wpa_sm *sm, int error, int pairwise);
123
124int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len,
125 struct wpa_ie_data *data);
126
127void wpa_sm_aborted_cached(struct wpa_sm *sm);
128int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr,
129 const u8 *buf, size_t len);
130int wpa_sm_parse_own_wpa_ie(struct wpa_sm *sm, struct wpa_ie_data *data);
540264a7 131int wpa_sm_pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len);
32d5295f 132void wpa_sm_drop_sa(struct wpa_sm *sm);
0d7b4409 133int wpa_sm_has_ptk(struct wpa_sm *sm);
6fc6879b
JM
134
135#else /* CONFIG_NO_WPA */
136
137static inline struct wpa_sm * wpa_sm_init(struct wpa_sm_ctx *ctx)
138{
139 return (struct wpa_sm *) 1;
140}
141
142static inline void wpa_sm_deinit(struct wpa_sm *sm)
143{
144}
145
146static inline void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid)
147{
148}
149
150static inline void wpa_sm_notify_disassoc(struct wpa_sm *sm)
151{
152}
153
154static inline void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk,
155 size_t pmk_len)
156{
157}
158
159static inline void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm)
160{
161}
162
163static inline void wpa_sm_set_fast_reauth(struct wpa_sm *sm, int fast_reauth)
164{
165}
166
167static inline void wpa_sm_set_scard_ctx(struct wpa_sm *sm, void *scard_ctx)
168{
169}
170
171static inline void wpa_sm_set_config(struct wpa_sm *sm,
172 struct rsn_supp_config *config)
173{
174}
175
176static inline void wpa_sm_set_own_addr(struct wpa_sm *sm, const u8 *addr)
177{
178}
179
180static inline void wpa_sm_set_ifname(struct wpa_sm *sm, const char *ifname,
181 const char *bridge_ifname)
182{
183}
184
185static inline void wpa_sm_set_eapol(struct wpa_sm *sm, struct eapol_sm *eapol)
186{
187}
188
189static inline int wpa_sm_set_assoc_wpa_ie(struct wpa_sm *sm, const u8 *ie,
190 size_t len)
191{
192 return -1;
193}
194
195static inline int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm,
196 u8 *wpa_ie,
197 size_t *wpa_ie_len)
198{
199 return -1;
200}
201
202static inline int wpa_sm_set_ap_wpa_ie(struct wpa_sm *sm, const u8 *ie,
203 size_t len)
204{
205 return -1;
206}
207
208static inline int wpa_sm_set_ap_rsn_ie(struct wpa_sm *sm, const u8 *ie,
209 size_t len)
210{
211 return -1;
212}
213
214static inline int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen)
215{
216 return 0;
217}
218
219static inline int wpa_sm_set_param(struct wpa_sm *sm,
220 enum wpa_sm_conf_params param,
221 unsigned int value)
222{
223 return -1;
224}
225
226static inline unsigned int wpa_sm_get_param(struct wpa_sm *sm,
227 enum wpa_sm_conf_params param)
228{
229 return 0;
230}
231
232static inline int wpa_sm_get_status(struct wpa_sm *sm, char *buf,
233 size_t buflen, int verbose)
234{
235 return 0;
236}
237
238static inline void wpa_sm_key_request(struct wpa_sm *sm, int error,
239 int pairwise)
240{
241}
242
243static inline int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len,
244 struct wpa_ie_data *data)
245{
246 return -1;
247}
248
249static inline void wpa_sm_aborted_cached(struct wpa_sm *sm)
250{
251}
252
253static inline int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr,
254 const u8 *buf, size_t len)
255{
256 return -1;
257}
258
259static inline int wpa_sm_parse_own_wpa_ie(struct wpa_sm *sm,
260 struct wpa_ie_data *data)
261{
262 return -1;
263}
264
540264a7
JM
265static inline int wpa_sm_pmksa_cache_list(struct wpa_sm *sm, char *buf,
266 size_t len)
267{
268 return -1;
269}
270
32d5295f
JM
271static inline void wpa_sm_drop_sa(struct wpa_sm *sm)
272{
273}
274
e6ecca77
JM
275static inline int wpa_sm_has_ptk(struct wpa_sm *sm)
276{
277 return 0;
278}
279
6fc6879b
JM
280#endif /* CONFIG_NO_WPA */
281
282#ifdef CONFIG_PEERKEY
283int wpa_sm_stkstart(struct wpa_sm *sm, const u8 *peer);
284#else /* CONFIG_PEERKEY */
285static inline int wpa_sm_stkstart(struct wpa_sm *sm, const u8 *peer)
286{
287 return -1;
288}
289#endif /* CONFIG_PEERKEY */
290
291#ifdef CONFIG_IEEE80211R
292
e7846b68 293int wpa_sm_set_ft_params(struct wpa_sm *sm, const u8 *ies, size_t ies_len);
76b7981d 294int wpa_ft_prepare_auth_request(struct wpa_sm *sm, const u8 *mdie);
6fc6879b 295int wpa_ft_process_response(struct wpa_sm *sm, const u8 *ies, size_t ies_len,
babfbf15
JM
296 int ft_action, const u8 *target_ap,
297 const u8 *ric_ies, size_t ric_ies_len);
6fc6879b
JM
298int wpa_ft_is_completed(struct wpa_sm *sm);
299int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies,
658d1662 300 size_t ies_len, const u8 *src_addr);
76b7981d
JM
301int wpa_ft_start_over_ds(struct wpa_sm *sm, const u8 *target_ap,
302 const u8 *mdie);
6fc6879b
JM
303
304#else /* CONFIG_IEEE80211R */
305
306static inline int
087f0254 307wpa_sm_set_ft_params(struct wpa_sm *sm, const u8 *ies, size_t ies_len)
6fc6879b
JM
308{
309 return 0;
310}
311
76b7981d
JM
312static inline int wpa_ft_prepare_auth_request(struct wpa_sm *sm,
313 const u8 *mdie)
6fc6879b
JM
314{
315 return 0;
316}
317
318static inline int
319wpa_ft_process_response(struct wpa_sm *sm, const u8 *ies, size_t ies_len,
320 int ft_action, const u8 *target_ap)
321{
322 return 0;
323}
324
325static inline int wpa_ft_is_completed(struct wpa_sm *sm)
326{
327 return 0;
328}
329
330static inline int
658d1662
JM
331wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies, size_t ies_len,
332 const u8 *src_addr)
6fc6879b
JM
333{
334 return -1;
335}
336
337#endif /* CONFIG_IEEE80211R */
338
281ff0aa
GP
339
340/* tdls.c */
52c9e6f3
JM
341void wpa_tdls_ap_ies(struct wpa_sm *sm, const u8 *ies, size_t len);
342void wpa_tdls_assoc_resp_ies(struct wpa_sm *sm, const u8 *ies, size_t len);
281ff0aa 343int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr);
94377fbc 344int wpa_tdls_reneg(struct wpa_sm *sm, const u8 *addr);
281ff0aa
GP
345int wpa_tdls_recv_teardown_notify(struct wpa_sm *sm, const u8 *addr,
346 u16 reason_code);
347int wpa_tdls_init(struct wpa_sm *sm);
348void wpa_tdls_deinit(struct wpa_sm *sm);
349
6fc6879b 350#endif /* WPA_H */