00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef WPA_SUPPLICANT_I_H
00016 #define WPA_SUPPLICANT_I_H
00017
00018 #include "utils/list.h"
00019 #include "common/defs.h"
00020
00021 extern const char *wpa_supplicant_version;
00022 extern const char *wpa_supplicant_license;
00023 #ifndef CONFIG_NO_STDOUT_DEBUG
00024 extern const char *wpa_supplicant_full_license1;
00025 extern const char *wpa_supplicant_full_license2;
00026 extern const char *wpa_supplicant_full_license3;
00027 extern const char *wpa_supplicant_full_license4;
00028 extern const char *wpa_supplicant_full_license5;
00029 #endif
00030
00031 struct wpa_sm;
00032 struct wpa_supplicant;
00033 struct ibss_rsn;
00034 struct scan_info;
00035 struct wpa_bss;
00036 struct wpa_scan_results;
00037 struct ros_interface;
00038
00039
00040
00041
00042
00043
00044 struct ctrl_iface_priv;
00045 struct ctrl_iface_global_priv;
00046 struct wpas_dbus_priv;
00047
00051 struct wpa_interface {
00059 const char *confname;
00060
00070 const char *ctrl_interface;
00071
00075 const char *driver;
00076
00086 const char *driver_param;
00087
00091 const char *ifname;
00092
00101 const char *bridge_ifname;
00102 };
00103
00107 struct wpa_params {
00111 int daemonize;
00112
00116 int wait_for_monitor;
00117
00124 char *pid_file;
00125
00129 int wpa_debug_level;
00130
00140 int wpa_debug_show_keys;
00141
00145 int wpa_debug_timestamp;
00146
00150 char *ctrl_interface;
00151
00155 int dbus_ctrl_interface;
00156
00160 const char *wpa_debug_file_path;
00161
00165 int wpa_debug_syslog;
00166
00174 char *override_driver;
00175
00183 char *override_ctrl_interface;
00184 };
00185
00192 struct wpa_global {
00193 struct wpa_supplicant *ifaces;
00194 struct wpa_params params;
00195 struct ctrl_iface_global_priv *ctrl_iface;
00196 struct wpas_dbus_priv *dbus;
00197 void **drv_priv;
00198 size_t drv_count;
00199 struct os_time suspend_time;
00200 };
00201
00202
00203 struct wpa_client_mlme {
00204 #ifdef CONFIG_CLIENT_MLME
00205 enum {
00206 IEEE80211_DISABLED, IEEE80211_AUTHENTICATE,
00207 IEEE80211_ASSOCIATE, IEEE80211_ASSOCIATED,
00208 IEEE80211_IBSS_SEARCH, IEEE80211_IBSS_JOINED
00209 } state;
00210 u8 prev_bssid[ETH_ALEN];
00211 u8 ssid[32];
00212 size_t ssid_len;
00213 u16 aid;
00214 u16 ap_capab, capab;
00215 u8 *extra_ie;
00216 size_t extra_ie_len;
00217 u8 *extra_probe_ie;
00218 size_t extra_probe_ie_len;
00219 enum wpa_key_mgmt key_mgmt;
00220
00221
00222 u8 *assocreq_ies, *assocresp_ies;
00223 size_t assocreq_ies_len, assocresp_ies_len;
00224
00225 int auth_tries, assoc_tries;
00226
00227 unsigned int ssid_set:1;
00228 unsigned int bssid_set:1;
00229 unsigned int prev_bssid_set:1;
00230 unsigned int authenticated:1;
00231 unsigned int associated:1;
00232 unsigned int probereq_poll:1;
00233 unsigned int use_protection:1;
00234 unsigned int create_ibss:1;
00235 unsigned int mixed_cell:1;
00236 unsigned int wmm_enabled:1;
00237
00238 struct os_time last_probe;
00239
00240 unsigned int auth_algs;
00241
00242 int auth_alg;
00243 int auth_transaction;
00244
00245 struct os_time ibss_join_req;
00246 u8 *probe_resp;
00247 size_t probe_resp_len;
00248 u32 supp_rates_bits;
00249
00250 int wmm_last_param_set;
00251
00252 int sta_scanning;
00253 int scan_hw_mode_idx;
00254 int scan_channel_idx;
00255 enum { SCAN_SET_CHANNEL, SCAN_SEND_PROBE } scan_state;
00256 struct os_time last_scan_completed;
00257 int scan_oper_channel;
00258 int scan_oper_freq;
00259 int scan_oper_phymode;
00260 u8 scan_ssid[32];
00261 size_t scan_ssid_len;
00262 int scan_skip_11b;
00263 int *scan_freqs;
00264
00265 struct ieee80211_sta_bss *sta_bss_list;
00266 #define STA_HASH_SIZE 256
00267 #define STA_HASH(sta) (sta[5])
00268 struct ieee80211_sta_bss *sta_bss_hash[STA_HASH_SIZE];
00269
00270 int cts_protect_erp_frames;
00271
00272 enum hostapd_hw_mode phymode;
00273 struct hostapd_hw_modes *modes;
00274 size_t num_modes;
00275 unsigned int hw_modes;
00276
00277 int num_curr_rates;
00278 int *curr_rates;
00279 int freq;
00280 int channel;
00281
00282 #ifdef CONFIG_IEEE80211R
00283 u8 current_md[6];
00284 u8 *ft_ies;
00285 size_t ft_ies_len;
00286 #endif
00287
00288 void (*public_action_cb)(void *ctx, const u8 *buf, size_t len,
00289 int freq);
00290 void *public_action_cb_ctx;
00291
00292 #else
00293 int dummy;
00294 #endif
00295 };
00296
00305 struct wpa_supplicant {
00306 struct wpa_global *global;
00307 struct wpa_supplicant *next;
00308 struct l2_packet_data *l2;
00309 struct l2_packet_data *l2_br;
00310 unsigned char own_addr[ETH_ALEN];
00311 char ifname[100];
00312 #ifdef CONFIG_CTRL_IFACE_DBUS
00313 char *dbus_path;
00314 #endif
00315 #ifdef CONFIG_CTRL_IFACE_DBUS_NEW
00316 char *dbus_new_path;
00317 #endif
00318 char bridge_ifname[16];
00319
00320 char *confname;
00321 struct wpa_config *conf;
00322 int countermeasures;
00323 os_time_t last_michael_mic_error;
00324 u8 bssid[ETH_ALEN];
00325 u8 pending_bssid[ETH_ALEN];
00326
00327 int reassociate;
00328 int disconnected;
00329
00330 struct wpa_ssid *current_ssid;
00331 struct wpa_bss *current_bss;
00332 int ap_ies_from_associnfo;
00333 unsigned int assoc_freq;
00334
00335
00336 int pairwise_cipher;
00337 int group_cipher;
00338 int key_mgmt;
00339 int mgmt_group_cipher;
00340
00341 void *drv_priv;
00342 void *global_drv_priv;
00343
00344 struct wpa_ssid *prev_scan_ssid;
00345
00346
00347
00348
00349
00350 #define WILDCARD_SSID_SCAN ((struct wpa_ssid *) 1)
00351
00352 void (*scan_res_handler)(struct wpa_supplicant *wpa_s,
00353 struct wpa_scan_results *scan_res);
00354 struct dl_list bss;
00355 struct dl_list bss_id;
00356 size_t num_bss;
00357 unsigned int bss_update_idx;
00358 unsigned int bss_next_id;
00359
00360 struct wpa_driver_ops *driver;
00361 int interface_removed;
00362
00363 struct wpa_sm *wpa;
00364 struct eapol_sm *eapol;
00365
00366 struct ctrl_iface_priv *ctrl_iface;
00367
00368 enum wpa_states wpa_state;
00369 int scanning;
00370 int new_connection;
00371 int reassociated_connection;
00372 int more_bss_to_try;
00373
00374 int eapol_received;
00375
00376
00377 struct scard_data *scard;
00378
00379 unsigned char last_eapol_src[ETH_ALEN];
00380
00381 int keys_cleared;
00382
00383 struct wpa_blacklist *blacklist;
00384
00385 int scan_req;
00386
00387 int scan_res_tried;
00388
00389
00390
00391 int scan_runs;
00392
00393 struct wpa_client_mlme mlme;
00394 unsigned int drv_flags;
00395 int max_scan_ssids;
00396 unsigned int max_remain_on_chan;
00397
00398 int pending_mic_error_report;
00399 int pending_mic_error_pairwise;
00400 int mic_errors_seen;
00401
00402 struct wps_context *wps;
00403 int wps_success;
00404 struct wps_er *wps_er;
00405 int blacklist_cleared;
00406
00407 struct wpabuf *pending_eapol_rx;
00408 struct os_time pending_eapol_rx_time;
00409 u8 pending_eapol_rx_src[ETH_ALEN];
00410
00411 struct ibss_rsn *ibss_rsn;
00412
00413 #ifdef CONFIG_SME
00414 struct {
00415 u8 ssid[32];
00416 size_t ssid_len;
00417 int freq;
00418 u8 assoc_req_ie[80];
00419 size_t assoc_req_ie_len;
00420 int mfp;
00421 int ft_used;
00422 u8 mobility_domain[2];
00423 u8 *ft_ies;
00424 size_t ft_ies_len;
00425 u8 prev_bssid[ETH_ALEN];
00426 int prev_bssid_set;
00427 int auth_alg;
00428 } sme;
00429 #endif
00430
00431 #ifdef CONFIG_AP
00432 struct hostapd_iface *ap_iface;
00433 void (*ap_configured_cb)(void *ctx, void *data);
00434 void *ap_configured_cb_ctx;
00435 void *ap_configured_cb_data;
00436 #endif
00437
00438 struct wpa_ssid *bgscan_ssid;
00439 const struct bgscan_ops *bgscan;
00440 void *bgscan_priv;
00441
00442 int connect_without_scan;
00443
00444 int after_wps;
00445 unsigned int wps_freq;
00446
00447 struct ros_interface *ros_api;
00448 };
00449
00450
00451
00452 int wpa_set_wep_keys(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid);
00453
00454 int wpa_supplicant_reload_configuration(struct wpa_supplicant *wpa_s);
00455
00456 const char * wpa_supplicant_state_txt(enum wpa_states state);
00457 int wpa_supplicant_driver_init(struct wpa_supplicant *wpa_s);
00458 int wpa_supplicant_set_suites(struct wpa_supplicant *wpa_s,
00459 struct wpa_bss *bss, struct wpa_ssid *ssid,
00460 u8 *wpa_ie, size_t *wpa_ie_len);
00461 void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
00462 struct wpa_bss *bss,
00463 struct wpa_ssid *ssid);
00464 void wpa_supplicant_set_non_wpa_policy(struct wpa_supplicant *wpa_s,
00465 struct wpa_ssid *ssid);
00466 void wpa_supplicant_initiate_eapol(struct wpa_supplicant *wpa_s);
00467 void wpa_clear_keys(struct wpa_supplicant *wpa_s, const u8 *addr);
00468 void wpa_supplicant_req_auth_timeout(struct wpa_supplicant *wpa_s,
00469 int sec, int usec);
00470 void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
00471 enum wpa_states state);
00472 struct wpa_ssid * wpa_supplicant_get_ssid(struct wpa_supplicant *wpa_s);
00473 void wpa_supplicant_cancel_auth_timeout(struct wpa_supplicant *wpa_s);
00474 void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s,
00475 int reason_code);
00476 void wpa_supplicant_disassociate(struct wpa_supplicant *wpa_s,
00477 int reason_code);
00478
00479 void wpa_supplicant_enable_network(struct wpa_supplicant *wpa_s,
00480 struct wpa_ssid *ssid);
00481 void wpa_supplicant_disable_network(struct wpa_supplicant *wpa_s,
00482 struct wpa_ssid *ssid);
00483 void wpa_supplicant_select_network(struct wpa_supplicant *wpa_s,
00484 struct wpa_ssid *ssid);
00485 int wpa_supplicant_set_ap_scan(struct wpa_supplicant *wpa_s,
00486 int ap_scan);
00487 int wpa_supplicant_set_debug_params(struct wpa_global *global,
00488 int debug_level, int debug_timestamp,
00489 int debug_show_keys);
00490
00491 void wpa_show_license(void);
00492
00493 struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global,
00494 struct wpa_interface *iface);
00495 int wpa_supplicant_remove_iface(struct wpa_global *global,
00496 struct wpa_supplicant *wpa_s);
00497 struct wpa_supplicant * wpa_supplicant_get_iface(struct wpa_global *global,
00498 const char *ifname);
00499 struct wpa_global * wpa_supplicant_init(struct wpa_params *params);
00500 int wpa_supplicant_run(struct wpa_global *global);
00501 void wpa_supplicant_deinit(struct wpa_global *global);
00502
00503 int wpa_supplicant_scard_init(struct wpa_supplicant *wpa_s,
00504 struct wpa_ssid *ssid);
00505 void wpa_supplicant_terminate_proc(struct wpa_global *global);
00506 void wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr,
00507 const u8 *buf, size_t len);
00508 enum wpa_key_mgmt key_mgmt2driver(int key_mgmt);
00509 enum wpa_cipher cipher_suite2driver(int cipher);
00510
00511
00512 void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);
00513 void wpa_supplicant_connect(struct wpa_supplicant *wpa_s,
00514 struct wpa_bss *selected,
00515 struct wpa_ssid *ssid);
00516
00517
00518 int eap_register_methods(void);
00519
00520 #endif