1  /*
2   * wpa_supplicant / WPS integration
3   * Copyright (c) 2008-2012, 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 WPS_SUPPLICANT_H
10  #define WPS_SUPPLICANT_H
11  
12  struct wpa_scan_results;
13  
14  #ifdef CONFIG_WPS
15  
16  #include "wps/wps.h"
17  #include "wps/wps_defs.h"
18  
19  struct wpa_bss;
20  
21  struct wps_new_ap_settings {
22  	const char *ssid_hex;
23  	const char *auth;
24  	const char *encr;
25  	const char *key_hex;
26  };
27  
28  int wpas_wps_init(struct wpa_supplicant *wpa_s);
29  void wpas_wps_deinit(struct wpa_supplicant *wpa_s);
30  int wpas_wps_eapol_cb(struct wpa_supplicant *wpa_s);
31  enum wps_request_type wpas_wps_get_req_type(struct wpa_ssid *ssid);
32  int wpas_wps_start_pbc(struct wpa_supplicant *wpa_s, const u8 *bssid,
33  		       int p2p_group, int multi_ap_backhaul_sta);
34  int wpas_wps_start_pin(struct wpa_supplicant *wpa_s, const u8 *bssid,
35  		       const char *pin, int p2p_group, u16 dev_pw_id);
36  void wpas_wps_pbc_overlap(struct wpa_supplicant *wpa_s);
37  int wpas_wps_cancel(struct wpa_supplicant *wpa_s);
38  int wpas_wps_start_reg(struct wpa_supplicant *wpa_s, const u8 *bssid,
39  		       const char *pin, struct wps_new_ap_settings *settings);
40  int wpas_wps_ssid_bss_match(struct wpa_supplicant *wpa_s,
41  			    struct wpa_ssid *ssid, struct wpa_bss *bss);
42  int wpas_wps_ssid_wildcard_ok(struct wpa_supplicant *wpa_s,
43  			      struct wpa_ssid *ssid, struct wpa_bss *bss);
44  int wpas_wps_scan_pbc_overlap(struct wpa_supplicant *wpa_s,
45  			      struct wpa_bss *selected, struct wpa_ssid *ssid);
46  void wpas_wps_notify_scan_results(struct wpa_supplicant *wpa_s);
47  int wpas_wps_searching(struct wpa_supplicant *wpa_s);
48  int wpas_wps_scan_result_text(const u8 *ies, size_t ies_len, char *pos,
49  			      char *end);
50  int wpas_wps_er_start(struct wpa_supplicant *wpa_s, const char *filter);
51  void wpas_wps_er_stop(struct wpa_supplicant *wpa_s);
52  int wpas_wps_er_add_pin(struct wpa_supplicant *wpa_s, const u8 *addr,
53  			const char *uuid, const char *pin);
54  int wpas_wps_er_pbc(struct wpa_supplicant *wpa_s, const char *uuid);
55  int wpas_wps_er_learn(struct wpa_supplicant *wpa_s, const char *uuid,
56  		      const char *pin);
57  int wpas_wps_er_set_config(struct wpa_supplicant *wpa_s, const char *uuid,
58  			   int id);
59  int wpas_wps_er_config(struct wpa_supplicant *wpa_s, const char *uuid,
60  		       const char *pin, struct wps_new_ap_settings *settings);
61  struct wpabuf * wpas_wps_er_nfc_config_token(struct wpa_supplicant *wpa_s,
62  					     int ndef, const char *uuid);
63  int wpas_wps_terminate_pending(struct wpa_supplicant *wpa_s);
64  void wpas_wps_update_config(struct wpa_supplicant *wpa_s);
65  void wpas_wps_update_mac_addr(struct wpa_supplicant *wpa_s);
66  struct wpabuf * wpas_wps_nfc_config_token(struct wpa_supplicant *wpa_s,
67  					  int ndef, const char *id_str);
68  struct wpabuf * wpas_wps_nfc_token(struct wpa_supplicant *wpa_s, int ndef);
69  int wpas_wps_start_nfc(struct wpa_supplicant *wpa_s, const u8 *dev_addr,
70  		       const u8 *bssid,
71  		       const struct wpabuf *dev_pw, u16 dev_pw_id,
72  		       int p2p_group, const u8 *peer_pubkey_hash,
73  		       const u8 *ssid, size_t ssid_len, int freq);
74  int wpas_wps_nfc_tag_read(struct wpa_supplicant *wpa_s,
75  			  const struct wpabuf *data, int forced_freq);
76  struct wpabuf * wpas_wps_nfc_handover_req(struct wpa_supplicant *wpa_s,
77  					  int ndef);
78  struct wpabuf * wpas_wps_nfc_handover_sel(struct wpa_supplicant *wpa_s,
79  					  int ndef, int cr, const char *uuid);
80  int wpas_wps_nfc_report_handover(struct wpa_supplicant *wpa_s,
81  				 const struct wpabuf *req,
82  				 const struct wpabuf *sel);
83  int wpas_er_wps_nfc_report_handover(struct wpa_supplicant *wpa_s,
84  				    const struct wpabuf *req,
85  				    const struct wpabuf *sel);
86  void wpas_wps_update_ap_info(struct wpa_supplicant *wpa_s,
87  			     struct wpa_scan_results *scan_res);
88  bool wpas_wps_partner_link_scan_done(struct wpa_supplicant *wpa_s);
89  bool wpas_wps_partner_link_overlap_detect(struct wpa_supplicant *wpa_s);
90  void wpas_wps_notify_assoc(struct wpa_supplicant *wpa_s, const u8 *bssid);
91  int wpas_wps_reenable_networks_pending(struct wpa_supplicant *wpa_s);
92  
93  #else /* CONFIG_WPS */
94  
wpas_wps_init(struct wpa_supplicant * wpa_s)95  static inline int wpas_wps_init(struct wpa_supplicant *wpa_s)
96  {
97  	return 0;
98  }
99  
wpas_wps_deinit(struct wpa_supplicant * wpa_s)100  static inline void wpas_wps_deinit(struct wpa_supplicant *wpa_s)
101  {
102  }
103  
wpas_wps_eapol_cb(struct wpa_supplicant * wpa_s)104  static inline int wpas_wps_eapol_cb(struct wpa_supplicant *wpa_s)
105  {
106  	return 0;
107  }
108  
wpas_wps_get_req_type(struct wpa_ssid * ssid)109  static inline u8 wpas_wps_get_req_type(struct wpa_ssid *ssid)
110  {
111  	return 0;
112  }
113  
wpas_wps_ssid_bss_match(struct wpa_supplicant * wpa_s,struct wpa_ssid * ssid,struct wpa_bss * bss)114  static inline int wpas_wps_ssid_bss_match(struct wpa_supplicant *wpa_s,
115  					  struct wpa_ssid *ssid,
116  					  struct wpa_bss *bss)
117  {
118  	return -1;
119  }
120  
wpas_wps_ssid_wildcard_ok(struct wpa_supplicant * wpa_s,struct wpa_ssid * ssid,struct wpa_bss * bss)121  static inline int wpas_wps_ssid_wildcard_ok(struct wpa_supplicant *wpa_s,
122  					    struct wpa_ssid *ssid,
123  					    struct wpa_bss *bss)
124  {
125  	return 0;
126  }
127  
wpas_wps_scan_pbc_overlap(struct wpa_supplicant * wpa_s,struct wpa_bss * selected,struct wpa_ssid * ssid)128  static inline int wpas_wps_scan_pbc_overlap(struct wpa_supplicant *wpa_s,
129  					    struct wpa_bss *selected,
130  					    struct wpa_ssid *ssid)
131  {
132  	return 0;
133  }
134  
wpas_wps_notify_scan_results(struct wpa_supplicant * wpa_s)135  static inline void wpas_wps_notify_scan_results(struct wpa_supplicant *wpa_s)
136  {
137  }
138  
wpas_wps_searching(struct wpa_supplicant * wpa_s)139  static inline int wpas_wps_searching(struct wpa_supplicant *wpa_s)
140  {
141  	return 0;
142  }
143  
wpas_wps_update_ap_info(struct wpa_supplicant * wpa_s,struct wpa_scan_results * scan_res)144  static inline void wpas_wps_update_ap_info(struct wpa_supplicant *wpa_s,
145  					   struct wpa_scan_results *scan_res)
146  {
147  }
148  
wpas_wps_partner_link_scan_done(struct wpa_supplicant * wpa_s)149  static inline bool wpas_wps_partner_link_scan_done(struct wpa_supplicant *wpa_s)
150  {
151  	return true;
152  }
153  
154  static inline bool
wpas_wps_partner_link_overlap_detect(struct wpa_supplicant * wpa_s)155  wpas_wps_partner_link_overlap_detect(struct wpa_supplicant *wpa_s)
156  {
157  	return false;
158  }
159  
wpas_wps_notify_assoc(struct wpa_supplicant * wpa_s,const u8 * bssid)160  static inline void wpas_wps_notify_assoc(struct wpa_supplicant *wpa_s,
161  					 const u8 *bssid)
162  {
163  }
164  
165  static inline int
wpas_wps_reenable_networks_pending(struct wpa_supplicant * wpa_s)166  wpas_wps_reenable_networks_pending(struct wpa_supplicant *wpa_s)
167  {
168  	return 0;
169  }
170  
wpas_wps_update_mac_addr(struct wpa_supplicant * wpa_s)171  static inline void wpas_wps_update_mac_addr(struct wpa_supplicant *wpa_s)
172  {
173  }
174  
175  #endif /* CONFIG_WPS */
176  
177  #endif /* WPS_SUPPLICANT_H */
178