/src/hostap/src/rsn_supp/wpa.h
Line | Count | Source |
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 | | void (*sae_pw_id_change)(void *ctx, struct wpabuf_array *wa); |
109 | | }; |
110 | | |
111 | | |
112 | | enum wpa_sm_conf_params { |
113 | | RSNA_PMK_LIFETIME /* dot11RSNAConfigPMKLifetime */, |
114 | | RSNA_PMK_REAUTH_THRESHOLD /* dot11RSNAConfigPMKReauthThreshold */, |
115 | | RSNA_SA_TIMEOUT /* dot11RSNAConfigSATimeout */, |
116 | | WPA_PARAM_PROTO, |
117 | | WPA_PARAM_PAIRWISE, |
118 | | WPA_PARAM_GROUP, |
119 | | WPA_PARAM_KEY_MGMT, |
120 | | WPA_PARAM_MGMT_GROUP, |
121 | | WPA_PARAM_RSN_ENABLED, |
122 | | WPA_PARAM_MFP, |
123 | | WPA_PARAM_OCV, |
124 | | WPA_PARAM_SAE_PWE, |
125 | | WPA_PARAM_SAE_PK, |
126 | | WPA_PARAM_DENY_PTK0_REKEY, |
127 | | WPA_PARAM_EXT_KEY_ID, |
128 | | WPA_PARAM_USE_EXT_KEY_ID, |
129 | | WPA_PARAM_FT_RSNXE_USED, |
130 | | WPA_PARAM_DPP_PFS, |
131 | | WPA_PARAM_WMM_ENABLED, |
132 | | WPA_PARAM_OCI_FREQ_EAPOL, |
133 | | WPA_PARAM_OCI_FREQ_EAPOL_G2, |
134 | | WPA_PARAM_OCI_FREQ_FT_ASSOC, |
135 | | WPA_PARAM_OCI_FREQ_FILS_ASSOC, |
136 | | WPA_PARAM_DISABLE_EAPOL_G2_TX, |
137 | | WPA_PARAM_ENCRYPT_EAPOL_M2, |
138 | | WPA_PARAM_ENCRYPT_EAPOL_M4, |
139 | | WPA_PARAM_FT_PREPEND_PMKID, |
140 | | WPA_PARAM_SSID_PROTECTION, |
141 | | WPA_PARAM_RSN_OVERRIDE, |
142 | | WPA_PARAM_RSN_OVERRIDE_SUPPORT, |
143 | | WPA_PARAM_EAPOL_2_KEY_INFO_SET_MASK, |
144 | | WPA_PARAM_SPP_AMSDU, |
145 | | WPA_PARAM_URNM_MFPR, |
146 | | WPA_PARAM_URNM_MFPR_X20, |
147 | | WPA_PARAM_SAE_PW_ID_CHANGE, |
148 | | }; |
149 | | |
150 | | enum wpa_rsn_override { |
151 | | RSN_OVERRIDE_NOT_USED, |
152 | | RSN_OVERRIDE_RSNE, |
153 | | RSN_OVERRIDE_RSNE_OVERRIDE, |
154 | | RSN_OVERRIDE_RSNE_OVERRIDE_2, |
155 | | }; |
156 | | |
157 | | struct rsn_supp_config { |
158 | | void *network_ctx; |
159 | | int allowed_pairwise_cipher; /* bitfield of WPA_CIPHER_* */ |
160 | | int proactive_key_caching; |
161 | | int eap_workaround; |
162 | | void *eap_conf_ctx; |
163 | | const u8 *ssid; |
164 | | size_t ssid_len; |
165 | | int wpa_ptk_rekey; |
166 | | int wpa_deny_ptk0_rekey; |
167 | | int p2p; |
168 | | int wpa_rsc_relaxation; |
169 | | int owe_ptk_workaround; |
170 | | const u8 *fils_cache_id; |
171 | | int beacon_prot; |
172 | | bool force_kdk_derivation; |
173 | | }; |
174 | | |
175 | | struct wpa_sm_link { |
176 | | u8 addr[ETH_ALEN]; |
177 | | u8 bssid[ETH_ALEN]; |
178 | | u8 *ap_rsne, *ap_rsnxe, *ap_rsnoe, *ap_rsno2e, *ap_rsnxoe; |
179 | | size_t ap_rsne_len, ap_rsnxe_len, ap_rsnoe_len, ap_rsno2e_len, |
180 | | ap_rsnxoe_len;; |
181 | | struct wpa_gtk gtk; |
182 | | struct wpa_gtk gtk_wnm_sleep; |
183 | | struct wpa_igtk igtk; |
184 | | struct wpa_igtk igtk_wnm_sleep; |
185 | | struct wpa_bigtk bigtk; |
186 | | struct wpa_bigtk bigtk_wnm_sleep; |
187 | | }; |
188 | | |
189 | | struct wpa_sm_mlo { |
190 | | u8 ap_mld_addr[ETH_ALEN]; |
191 | | u8 assoc_link_id; |
192 | | u16 valid_links; /* bitmap of accepted links */ |
193 | | u16 req_links; /* bitmap of requested links */ |
194 | | struct wpa_sm_link links[MAX_NUM_MLD_LINKS]; |
195 | | }; |
196 | | |
197 | | #ifndef CONFIG_NO_WPA |
198 | | |
199 | | struct wpa_sm * wpa_sm_init(struct wpa_sm_ctx *ctx); |
200 | | void wpa_sm_deinit(struct wpa_sm *sm); |
201 | | void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid); |
202 | | void wpa_sm_notify_disassoc(struct wpa_sm *sm); |
203 | | void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len, |
204 | | const u8 *pmkid, const u8 *bssid); |
205 | | void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm); |
206 | | void wpa_sm_set_fast_reauth(struct wpa_sm *sm, int fast_reauth); |
207 | | void wpa_sm_set_scard_ctx(struct wpa_sm *sm, void *scard_ctx); |
208 | | void wpa_sm_set_config(struct wpa_sm *sm, struct rsn_supp_config *config); |
209 | | void wpa_sm_set_ssid(struct wpa_sm *sm, const u8 *ssid, size_t ssid_len); |
210 | | void wpa_sm_set_own_addr(struct wpa_sm *sm, const u8 *addr); |
211 | | void wpa_sm_set_ifname(struct wpa_sm *sm, const char *ifname, |
212 | | const char *bridge_ifname); |
213 | | void wpa_sm_set_eapol(struct wpa_sm *sm, struct eapol_sm *eapol); |
214 | | int wpa_sm_set_assoc_wpa_ie(struct wpa_sm *sm, const u8 *ie, size_t len); |
215 | | int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm, u8 *wpa_ie, |
216 | | size_t *wpa_ie_len); |
217 | | int wpa_sm_set_assoc_rsnxe_default(struct wpa_sm *sm, u8 *rsnxe, |
218 | | size_t *rsnxe_len); |
219 | | int wpa_sm_set_assoc_rsnxe(struct wpa_sm *sm, const u8 *ie, size_t len); |
220 | | int wpa_sm_set_ap_wpa_ie(struct wpa_sm *sm, const u8 *ie, size_t len); |
221 | | int wpa_sm_set_ap_rsn_ie(struct wpa_sm *sm, const u8 *ie, size_t len); |
222 | | int wpa_sm_set_ap_rsnxe(struct wpa_sm *sm, const u8 *ie, size_t len); |
223 | | int wpa_sm_set_ap_rsne_override(struct wpa_sm *sm, const u8 *ie, size_t len); |
224 | | int wpa_sm_set_ap_rsne_override_2(struct wpa_sm *sm, const u8 *ie, size_t len); |
225 | | int wpa_sm_set_ap_rsnxe_override(struct wpa_sm *sm, const u8 *ie, size_t len); |
226 | | int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen); |
227 | | |
228 | | int wpa_sm_set_param(struct wpa_sm *sm, enum wpa_sm_conf_params param, |
229 | | unsigned int value); |
230 | | |
231 | | int wpa_sm_get_status(struct wpa_sm *sm, char *buf, size_t buflen, |
232 | | int verbose); |
233 | | int wpa_sm_pmf_enabled(struct wpa_sm *sm); |
234 | | int wpa_sm_ext_key_id(struct wpa_sm *sm); |
235 | | int wpa_sm_ext_key_id_active(struct wpa_sm *sm); |
236 | | int wpa_sm_ocv_enabled(struct wpa_sm *sm); |
237 | | |
238 | | void wpa_sm_key_request(struct wpa_sm *sm, int error, int pairwise); |
239 | | |
240 | | int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len, |
241 | | struct wpa_ie_data *data); |
242 | | |
243 | | void wpa_sm_aborted_cached(struct wpa_sm *sm); |
244 | | void wpa_sm_aborted_external_cached(struct wpa_sm *sm); |
245 | | int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr, |
246 | | const u8 *buf, size_t len, enum frame_encryption encrypted); |
247 | | int wpa_sm_parse_own_wpa_ie(struct wpa_sm *sm, struct wpa_ie_data *data); |
248 | | int wpa_sm_pmksa_cache_list(struct wpa_sm *sm, char *buf, size_t len); |
249 | | struct rsn_pmksa_cache_entry * wpa_sm_pmksa_cache_head(struct wpa_sm *sm); |
250 | | struct rsn_pmksa_cache_entry * |
251 | | wpa_sm_pmksa_cache_add_entry(struct wpa_sm *sm, |
252 | | struct rsn_pmksa_cache_entry * entry); |
253 | | void wpa_sm_pmksa_cache_add(struct wpa_sm *sm, const u8 *pmk, size_t pmk_len, |
254 | | const u8 *pmkid, const u8 *bssid, |
255 | | const u8 *fils_cache_id); |
256 | | int wpa_sm_pmksa_exists(struct wpa_sm *sm, const u8 *bssid, const u8 *own_addr, |
257 | | const void *network_ctx); |
258 | | void wpa_sm_drop_sa(struct wpa_sm *sm); |
259 | | struct rsn_pmksa_cache_entry * wpa_sm_pmksa_cache_get(struct wpa_sm *sm, |
260 | | const u8 *aa, |
261 | | const u8 *pmkid, |
262 | | const void *network_ctx, |
263 | | int akmp); |
264 | | int wpa_sm_pmksa_get_pmk(struct wpa_sm *sm, const u8 *aa, const u8 **pmk, |
265 | | size_t *pmk_len, const u8 **pmkid); |
266 | | void wpa_sm_pmksa_cache_remove(struct wpa_sm *sm, |
267 | | struct rsn_pmksa_cache_entry *entry); |
268 | | bool wpa_sm_has_ft_keys(struct wpa_sm *sm, const u8 *md); |
269 | | int wpa_sm_has_ptk_installed(struct wpa_sm *sm); |
270 | | |
271 | | void wpa_sm_update_replay_ctr(struct wpa_sm *sm, const u8 *replay_ctr); |
272 | | |
273 | | void wpa_sm_pmksa_cache_flush(struct wpa_sm *sm, void *network_ctx); |
274 | | void wpa_sm_external_pmksa_cache_flush(struct wpa_sm *sm, void *network_ctx); |
275 | | |
276 | | int wpa_sm_get_p2p_ip_addr(struct wpa_sm *sm, u8 *buf); |
277 | | |
278 | | void wpa_sm_set_rx_replay_ctr(struct wpa_sm *sm, const u8 *rx_replay_counter); |
279 | | void wpa_sm_set_ptk_kck_kek(struct wpa_sm *sm, |
280 | | const u8 *ptk_kck, size_t ptk_kck_len, |
281 | | const u8 *ptk_kek, size_t ptk_kek_len); |
282 | | int wpa_fils_is_completed(struct wpa_sm *sm); |
283 | | void wpa_sm_pmksa_cache_reconfig(struct wpa_sm *sm); |
284 | | int wpa_sm_set_mlo_params(struct wpa_sm *sm, const struct wpa_sm_mlo *mlo); |
285 | | void wpa_sm_set_driver_bss_selection(struct wpa_sm *sm, |
286 | | bool driver_bss_selection); |
287 | | bool wpa_sm_uses_spp_amsdu(struct wpa_sm *sm); |
288 | | |
289 | | #else /* CONFIG_NO_WPA */ |
290 | | |
291 | | static inline struct wpa_sm * wpa_sm_init(struct wpa_sm_ctx *ctx) |
292 | | { |
293 | | return (struct wpa_sm *) 1; |
294 | | } |
295 | | |
296 | | static inline void wpa_sm_deinit(struct wpa_sm *sm) |
297 | | { |
298 | | } |
299 | | |
300 | | static inline void wpa_sm_notify_assoc(struct wpa_sm *sm, const u8 *bssid) |
301 | | { |
302 | | } |
303 | | |
304 | | static inline void wpa_sm_notify_disassoc(struct wpa_sm *sm) |
305 | | { |
306 | | } |
307 | | |
308 | | static inline void wpa_sm_set_pmk(struct wpa_sm *sm, const u8 *pmk, |
309 | | size_t pmk_len, const u8 *pmkid, |
310 | | const u8 *bssid) |
311 | | { |
312 | | } |
313 | | |
314 | | static inline void wpa_sm_set_pmk_from_pmksa(struct wpa_sm *sm) |
315 | | { |
316 | | } |
317 | | |
318 | | static inline void wpa_sm_set_fast_reauth(struct wpa_sm *sm, int fast_reauth) |
319 | | { |
320 | | } |
321 | | |
322 | | static inline void wpa_sm_set_scard_ctx(struct wpa_sm *sm, void *scard_ctx) |
323 | | { |
324 | | } |
325 | | |
326 | | static inline void wpa_sm_set_config(struct wpa_sm *sm, |
327 | | struct rsn_supp_config *config) |
328 | | { |
329 | | } |
330 | | |
331 | | static inline void wpa_sm_set_ssid(struct wpa_sm *sm, const u8 *ssid, |
332 | | size_t ssid_len) |
333 | | { |
334 | | } |
335 | | |
336 | | static inline void wpa_sm_set_own_addr(struct wpa_sm *sm, const u8 *addr) |
337 | | { |
338 | | } |
339 | | |
340 | | static inline void wpa_sm_set_ifname(struct wpa_sm *sm, const char *ifname, |
341 | | const char *bridge_ifname) |
342 | | { |
343 | | } |
344 | | |
345 | | static inline void wpa_sm_set_eapol(struct wpa_sm *sm, struct eapol_sm *eapol) |
346 | | { |
347 | | } |
348 | | |
349 | | static inline int wpa_sm_set_assoc_wpa_ie(struct wpa_sm *sm, const u8 *ie, |
350 | | size_t len) |
351 | | { |
352 | | return -1; |
353 | | } |
354 | | |
355 | | static inline int wpa_sm_set_assoc_wpa_ie_default(struct wpa_sm *sm, |
356 | | u8 *wpa_ie, |
357 | | size_t *wpa_ie_len) |
358 | | { |
359 | | return -1; |
360 | | } |
361 | | |
362 | | static inline int wpa_sm_set_ap_wpa_ie(struct wpa_sm *sm, const u8 *ie, |
363 | | size_t len) |
364 | | { |
365 | | return -1; |
366 | | } |
367 | | |
368 | | static inline int wpa_sm_set_ap_rsn_ie(struct wpa_sm *sm, const u8 *ie, |
369 | | size_t len) |
370 | | { |
371 | | return -1; |
372 | | } |
373 | | |
374 | | static inline int wpa_sm_set_ap_rsnxe(struct wpa_sm *sm, const u8 *ie, |
375 | | size_t len) |
376 | | { |
377 | | return -1; |
378 | | } |
379 | | |
380 | | static inline int wpa_sm_set_ap_rsne_override(struct wpa_sm *sm, const u8 *ie, |
381 | | size_t len) |
382 | | { |
383 | | return -1; |
384 | | } |
385 | | |
386 | | static inline int wpa_sm_set_ap_rsne_override_2(struct wpa_sm *sm, const u8 *ie, |
387 | | size_t len) |
388 | | { |
389 | | return -1; |
390 | | } |
391 | | |
392 | | static inline int wpa_sm_set_ap_rsnxe_override(struct wpa_sm *sm, const u8 *ie, |
393 | | size_t len) |
394 | | { |
395 | | return -1; |
396 | | } |
397 | | |
398 | | static inline int wpa_sm_get_mib(struct wpa_sm *sm, char *buf, size_t buflen) |
399 | | { |
400 | | return 0; |
401 | | } |
402 | | |
403 | | static inline int wpa_sm_set_param(struct wpa_sm *sm, |
404 | | enum wpa_sm_conf_params param, |
405 | | unsigned int value) |
406 | | { |
407 | | return -1; |
408 | | } |
409 | | |
410 | | static inline int wpa_sm_get_status(struct wpa_sm *sm, char *buf, |
411 | | size_t buflen, int verbose) |
412 | | { |
413 | | return 0; |
414 | | } |
415 | | |
416 | | static inline int wpa_sm_pmf_enabled(struct wpa_sm *sm) |
417 | | { |
418 | | return 0; |
419 | | } |
420 | | |
421 | | static inline int wpa_sm_ext_key_id(struct wpa_sm *sm) |
422 | | { |
423 | | return 0; |
424 | | } |
425 | | |
426 | | static inline int wpa_sm_ext_key_id_active(struct wpa_sm *sm) |
427 | | { |
428 | | return 0; |
429 | | } |
430 | | |
431 | | static inline int wpa_sm_ocv_enabled(struct wpa_sm *sm) |
432 | | { |
433 | | return 0; |
434 | | } |
435 | | |
436 | | static inline void wpa_sm_key_request(struct wpa_sm *sm, int error, |
437 | | int pairwise) |
438 | | { |
439 | | } |
440 | | |
441 | | static inline int wpa_parse_wpa_ie(const u8 *wpa_ie, size_t wpa_ie_len, |
442 | | struct wpa_ie_data *data) |
443 | | { |
444 | | return -1; |
445 | | } |
446 | | |
447 | | static inline void wpa_sm_aborted_cached(struct wpa_sm *sm) |
448 | | { |
449 | | } |
450 | | |
451 | | static inline void wpa_sm_aborted_external_cached(struct wpa_sm *sm) |
452 | | { |
453 | | } |
454 | | |
455 | | static inline int wpa_sm_rx_eapol(struct wpa_sm *sm, const u8 *src_addr, |
456 | | const u8 *buf, size_t len, |
457 | | enum frame_encryption encrypted) |
458 | | { |
459 | | return -1; |
460 | | } |
461 | | |
462 | | static inline int wpa_sm_parse_own_wpa_ie(struct wpa_sm *sm, |
463 | | struct wpa_ie_data *data) |
464 | | { |
465 | | return -1; |
466 | | } |
467 | | |
468 | | static inline int wpa_sm_pmksa_cache_list(struct wpa_sm *sm, char *buf, |
469 | | size_t len) |
470 | | { |
471 | | return -1; |
472 | | } |
473 | | |
474 | | static inline void wpa_sm_drop_sa(struct wpa_sm *sm) |
475 | | { |
476 | | } |
477 | | |
478 | | static inline struct rsn_pmksa_cache_entry * |
479 | | wpa_sm_pmksa_cache_get(struct wpa_sm *sm, const u8 *aa, const u8 *pmkid, |
480 | | const void *network_ctx, int akmp) |
481 | | { |
482 | | return NULL; |
483 | | } |
484 | | |
485 | | static inline int wpa_sm_has_ptk_installed(struct wpa_sm *sm) |
486 | | { |
487 | | return 0; |
488 | | } |
489 | | |
490 | | static inline void wpa_sm_update_replay_ctr(struct wpa_sm *sm, |
491 | | const u8 *replay_ctr) |
492 | | { |
493 | | } |
494 | | |
495 | | static inline void wpa_sm_external_pmksa_cache_flush(struct wpa_sm *sm, |
496 | | void *network_ctx) |
497 | | { |
498 | | } |
499 | | |
500 | | static inline void wpa_sm_pmksa_cache_flush(struct wpa_sm *sm, |
501 | | void *network_ctx) |
502 | | { |
503 | | } |
504 | | |
505 | | static inline void wpa_sm_set_rx_replay_ctr(struct wpa_sm *sm, |
506 | | const u8 *rx_replay_counter) |
507 | | { |
508 | | } |
509 | | |
510 | | static inline void wpa_sm_set_ptk_kck_kek(struct wpa_sm *sm, const u8 *ptk_kck, |
511 | | size_t ptk_kck_len, |
512 | | const u8 *ptk_kek, size_t ptk_kek_len) |
513 | | { |
514 | | } |
515 | | |
516 | | static inline int wpa_fils_is_completed(struct wpa_sm *sm) |
517 | | { |
518 | | return 0; |
519 | | } |
520 | | |
521 | | static inline void wpa_sm_pmksa_cache_reconfig(struct wpa_sm *sm) |
522 | | { |
523 | | } |
524 | | |
525 | | static inline int wpa_sm_set_mlo_params(struct wpa_sm *sm, |
526 | | const struct wpa_sm_mlo *mlo) |
527 | | { |
528 | | return 0; |
529 | | } |
530 | | |
531 | | static inline void wpa_sm_set_driver_bss_selection(struct wpa_sm *sm, |
532 | | bool driver_bss_selection) |
533 | | { |
534 | | } |
535 | | |
536 | | static inline bool wpa_sm_uses_spp_amsdu(struct wpa_sm *sm) |
537 | | { |
538 | | return false; |
539 | | } |
540 | | |
541 | | #endif /* CONFIG_NO_WPA */ |
542 | | |
543 | | #ifdef CONFIG_IEEE80211R |
544 | | |
545 | | int wpa_sm_set_ft_params(struct wpa_sm *sm, const u8 *ies, size_t ies_len); |
546 | | int wpa_ft_prepare_auth_request(struct wpa_sm *sm, const u8 *mdie); |
547 | | int wpa_ft_add_mdie(struct wpa_sm *sm, u8 *ies, size_t ies_len, |
548 | | const u8 *mdie); |
549 | | const u8 * wpa_sm_get_ft_md(struct wpa_sm *sm); |
550 | | int wpa_ft_process_response(struct wpa_sm *sm, const u8 *ies, size_t ies_len, |
551 | | int ft_action, const u8 *target_ap, |
552 | | const u8 *ric_ies, size_t ric_ies_len); |
553 | | int wpa_ft_is_completed(struct wpa_sm *sm); |
554 | | void wpa_reset_ft_completed(struct wpa_sm *sm); |
555 | | int wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies, |
556 | | size_t ies_len, const u8 *src_addr); |
557 | | int wpa_ft_start_over_ds(struct wpa_sm *sm, const u8 *target_ap, |
558 | | const u8 *mdie, bool force); |
559 | | |
560 | | #ifdef CONFIG_PASN |
561 | | |
562 | | int wpa_pasn_ft_derive_pmk_r1(struct wpa_sm *sm, int akmp, const u8 *r1kh_id, |
563 | | u8 *pmk_r1, size_t *pmk_r1_len, u8 *pmk_r1_name); |
564 | | |
565 | | #endif /* CONFIG_PASN */ |
566 | | |
567 | | #else /* CONFIG_IEEE80211R */ |
568 | | |
569 | | static inline int |
570 | | wpa_sm_set_ft_params(struct wpa_sm *sm, const u8 *ies, size_t ies_len) |
571 | 0 | { |
572 | 0 | return 0; |
573 | 0 | } |
574 | | |
575 | | static inline int wpa_ft_prepare_auth_request(struct wpa_sm *sm, |
576 | | const u8 *mdie) |
577 | 0 | { |
578 | 0 | return 0; |
579 | 0 | } |
580 | | |
581 | | static inline int wpa_ft_add_mdie(struct wpa_sm *sm, u8 *ies, size_t ies_len, |
582 | | const u8 *mdie) |
583 | 0 | { |
584 | 0 | return 0; |
585 | 0 | } |
586 | | |
587 | | static inline int |
588 | | wpa_ft_process_response(struct wpa_sm *sm, const u8 *ies, size_t ies_len, |
589 | | int ft_action, const u8 *target_ap) |
590 | 0 | { |
591 | 0 | return 0; |
592 | 0 | } |
593 | | |
594 | | static inline int wpa_ft_is_completed(struct wpa_sm *sm) |
595 | 0 | { |
596 | 0 | return 0; |
597 | 0 | } |
598 | | |
599 | | static inline void wpa_reset_ft_completed(struct wpa_sm *sm) |
600 | 0 | { |
601 | 0 | } |
602 | | |
603 | | static inline int |
604 | | wpa_ft_validate_reassoc_resp(struct wpa_sm *sm, const u8 *ies, size_t ies_len, |
605 | | const u8 *src_addr) |
606 | 0 | { |
607 | 0 | return -1; |
608 | 0 | } |
609 | | |
610 | | #ifdef CONFIG_PASN |
611 | | |
612 | | static inline int |
613 | | wpa_pasn_ft_derive_pmk_r1(struct wpa_sm *sm, int akmp, const u8 *r1kh_id, |
614 | | u8 *pmk_r1, size_t *pmk_r1_len, u8 *pmk_r1_name) |
615 | | { |
616 | | return -1; |
617 | | } |
618 | | |
619 | | #endif /* CONFIG_PASN */ |
620 | | |
621 | | #endif /* CONFIG_IEEE80211R */ |
622 | | |
623 | | |
624 | | /* tdls.c */ |
625 | | void wpa_tdls_ap_ies(struct wpa_sm *sm, const u8 *ies, size_t len); |
626 | | void wpa_tdls_assoc_resp_ies(struct wpa_sm *sm, const u8 *ies, size_t len); |
627 | | int wpa_tdls_start(struct wpa_sm *sm, const u8 *addr); |
628 | | void wpa_tdls_remove(struct wpa_sm *sm, const u8 *addr); |
629 | | int wpa_tdls_teardown_link(struct wpa_sm *sm, const u8 *addr, u16 reason_code); |
630 | | int wpa_tdls_send_discovery_request(struct wpa_sm *sm, const u8 *addr); |
631 | | int wpa_tdls_init(struct wpa_sm *sm); |
632 | | void wpa_tdls_teardown_peers(struct wpa_sm *sm); |
633 | | void wpa_tdls_deinit(struct wpa_sm *sm); |
634 | | void wpa_tdls_enable(struct wpa_sm *sm, int enabled); |
635 | | void wpa_tdls_disable_unreachable_link(struct wpa_sm *sm, const u8 *addr); |
636 | | const char * wpa_tdls_get_link_status(struct wpa_sm *sm, const u8 *addr); |
637 | | int wpa_tdls_is_external_setup(struct wpa_sm *sm); |
638 | | int wpa_tdls_enable_chan_switch(struct wpa_sm *sm, const u8 *addr, |
639 | | u8 oper_class, |
640 | | struct hostapd_freq_params *freq_params); |
641 | | int wpa_tdls_disable_chan_switch(struct wpa_sm *sm, const u8 *addr); |
642 | | int wpa_tdls_process_discovery_response(struct wpa_sm *sm, const u8 *addr, |
643 | | const u8 *buf, size_t len); |
644 | | #ifdef CONFIG_TDLS_TESTING |
645 | | extern unsigned int tdls_testing; |
646 | | #endif /* CONFIG_TDLS_TESTING */ |
647 | | |
648 | | |
649 | | int wpa_wnmsleep_install_key(struct wpa_sm *sm, u8 subelem_id, u8 *buf); |
650 | | void wpa_sm_set_test_assoc_ie(struct wpa_sm *sm, struct wpabuf *buf); |
651 | | void wpa_sm_set_test_eapol_m2_elems(struct wpa_sm *sm, struct wpabuf *buf); |
652 | | void wpa_sm_set_test_eapol_m4_elems(struct wpa_sm *sm, struct wpabuf *buf); |
653 | | const u8 * wpa_sm_get_anonce(struct wpa_sm *sm); |
654 | | int wpa_sm_set_test_rsnxe_data(struct wpa_sm *sm, struct wpabuf *data, |
655 | | struct wpabuf *mask); |
656 | | unsigned int wpa_sm_get_key_mgmt(struct wpa_sm *sm); |
657 | | |
658 | | struct wpabuf * fils_build_auth(struct wpa_sm *sm, int dh_group, const u8 *md); |
659 | | int fils_process_auth(struct wpa_sm *sm, const u8 *bssid, const u8 *data, |
660 | | size_t len); |
661 | | struct wpabuf * fils_build_assoc_req(struct wpa_sm *sm, const u8 **kek, |
662 | | size_t *kek_len, const u8 **snonce, |
663 | | const u8 **anonce, |
664 | | const struct wpabuf **hlp, |
665 | | unsigned int num_hlp); |
666 | | int fils_process_assoc_resp(struct wpa_sm *sm, const u8 *resp, size_t len); |
667 | | |
668 | | struct wpabuf * owe_build_assoc_req(struct wpa_sm *sm, u16 group); |
669 | | int owe_process_assoc_resp(struct wpa_sm *sm, const u8 *bssid, |
670 | | const u8 *resp_ies, size_t resp_ies_len); |
671 | | |
672 | | void wpa_sm_set_reset_fils_completed(struct wpa_sm *sm, int set); |
673 | | void wpa_sm_set_fils_cache_id(struct wpa_sm *sm, const u8 *fils_cache_id); |
674 | | void wpa_sm_set_dpp_z(struct wpa_sm *sm, const struct wpabuf *z); |
675 | | void wpa_pasn_sm_set_caps(struct wpa_sm *sm, unsigned int flags2); |
676 | | struct rsn_pmksa_cache * wpa_sm_get_pmksa_cache(struct wpa_sm *sm); |
677 | | |
678 | | void wpa_sm_set_cur_pmksa(struct wpa_sm *sm, |
679 | | struct rsn_pmksa_cache_entry *entry); |
680 | | const u8 * wpa_sm_get_auth_addr(struct wpa_sm *sm); |
681 | | struct wpabuf * wpa_sm_known_sta_identification(struct wpa_sm *sm, const u8 *aa, |
682 | | u64 timestamp); |
683 | | int wpa_sm_install_mlo_group_keys(struct wpa_sm *sm, const u8 *key_data, |
684 | | size_t key_data_len, u16 added_links_bitmap); |
685 | | |
686 | | #endif /* WPA_H */ |