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