00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef DRIVER_H
00024 #define DRIVER_H
00025
00026 #define WPA_SUPPLICANT_DRIVER_VERSION 4
00027
00028 #include "common/defs.h"
00029
00030 #define HOSTAPD_CHAN_DISABLED 0x00000001
00031 #define HOSTAPD_CHAN_PASSIVE_SCAN 0x00000002
00032 #define HOSTAPD_CHAN_NO_IBSS 0x00000004
00033 #define HOSTAPD_CHAN_RADAR 0x00000008
00034
00038 struct hostapd_channel_data {
00042 short chan;
00043
00047 short freq;
00048
00052 int flag;
00053
00057 u8 max_tx_power;
00058 };
00059
00063 struct hostapd_hw_modes {
00067 enum hostapd_hw_mode mode;
00068
00072 int num_channels;
00073
00077 struct hostapd_channel_data *channels;
00078
00082 int num_rates;
00083
00087 int *rates;
00088
00092 u16 ht_capab;
00093
00097 u8 mcs_set[16];
00098
00102 u8 a_mpdu_params;
00103 };
00104
00105
00106 #define IEEE80211_MODE_INFRA 0
00107 #define IEEE80211_MODE_IBSS 1
00108 #define IEEE80211_MODE_AP 2
00109
00110 #define IEEE80211_CAP_ESS 0x0001
00111 #define IEEE80211_CAP_IBSS 0x0002
00112 #define IEEE80211_CAP_PRIVACY 0x0010
00113
00114 #define WPA_SCAN_QUAL_INVALID BIT(0)
00115 #define WPA_SCAN_NOISE_INVALID BIT(1)
00116 #define WPA_SCAN_LEVEL_INVALID BIT(2)
00117 #define WPA_SCAN_LEVEL_DBM BIT(3)
00118 #define WPA_SCAN_AUTHENTICATED BIT(4)
00119 #define WPA_SCAN_ASSOCIATED BIT(5)
00120
00146 struct wpa_scan_res {
00147 unsigned int flags;
00148 u8 bssid[ETH_ALEN];
00149 int freq;
00150 u16 beacon_int;
00151 u16 caps;
00152 int qual;
00153 int noise;
00154 int level;
00155 u64 tsf;
00156 unsigned int age;
00157 size_t ie_len;
00158 size_t beacon_ie_len;
00159
00160
00161
00162
00163
00164
00165
00166 };
00167
00173 struct wpa_scan_results {
00174 struct wpa_scan_res **res;
00175 size_t num;
00176 };
00177
00188 struct wpa_interface_info {
00189 struct wpa_interface_info *next;
00190 char *ifname;
00191 char *desc;
00192 const char *drv_name;
00193 };
00194
00195 #define WPAS_MAX_SCAN_SSIDS 4
00196
00201 struct wpa_driver_scan_params {
00205 struct wpa_driver_scan_ssid {
00211 const u8 *ssid;
00215 size_t ssid_len;
00216 } ssids[WPAS_MAX_SCAN_SSIDS];
00217
00222 size_t num_ssids;
00223
00227 const u8 *extra_ies;
00228
00232 size_t extra_ies_len;
00233
00239 int *freqs;
00240
00255 struct wpa_driver_scan_filter {
00256 u8 ssid[32];
00257 size_t ssid_len;
00258 } *filter_ssids;
00259
00263 size_t num_filter_ssids;
00264 };
00265
00270 struct wpa_driver_auth_params {
00271 int freq;
00272 const u8 *bssid;
00273 const u8 *ssid;
00274 size_t ssid_len;
00275 int auth_alg;
00276 const u8 *ie;
00277 size_t ie_len;
00278 const u8 *wep_key[4];
00279 size_t wep_key_len[4];
00280 int wep_tx_keyidx;
00281 int local_state_change;
00282 };
00283
00288 struct wpa_driver_associate_params {
00293 const u8 *bssid;
00294
00298 const u8 *ssid;
00299
00303 size_t ssid_len;
00304
00310 int freq;
00311
00330 const u8 *wpa_ie;
00331
00335 size_t wpa_ie_len;
00336
00342 enum wpa_cipher pairwise_suite;
00343
00349 enum wpa_cipher group_suite;
00350
00356 enum wpa_key_mgmt key_mgmt_suite;
00357
00362 int auth_alg;
00363
00367 int mode;
00368
00372 const u8 *wep_key[4];
00373
00377 size_t wep_key_len[4];
00378
00382 int wep_tx_keyidx;
00383
00387 enum mfp_options mgmt_frame_protection;
00388
00410 const u8 *ft_ies;
00411
00415 size_t ft_ies_len;
00416
00424 const u8 *ft_md;
00425
00435 const char *passphrase;
00436
00445 const u8 *psk;
00446
00454 int drop_unencrypted;
00455
00462 const u8 *prev_bssid;
00463 };
00464
00468 struct wpa_driver_capa {
00469 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA 0x00000001
00470 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2 0x00000002
00471 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_PSK 0x00000004
00472 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA2_PSK 0x00000008
00473 #define WPA_DRIVER_CAPA_KEY_MGMT_WPA_NONE 0x00000010
00474 #define WPA_DRIVER_CAPA_KEY_MGMT_FT 0x00000020
00475 #define WPA_DRIVER_CAPA_KEY_MGMT_FT_PSK 0x00000040
00476 unsigned int key_mgmt;
00477
00478 #define WPA_DRIVER_CAPA_ENC_WEP40 0x00000001
00479 #define WPA_DRIVER_CAPA_ENC_WEP104 0x00000002
00480 #define WPA_DRIVER_CAPA_ENC_TKIP 0x00000004
00481 #define WPA_DRIVER_CAPA_ENC_CCMP 0x00000008
00482 unsigned int enc;
00483
00484 #define WPA_DRIVER_AUTH_OPEN 0x00000001
00485 #define WPA_DRIVER_AUTH_SHARED 0x00000002
00486 #define WPA_DRIVER_AUTH_LEAP 0x00000004
00487 unsigned int auth;
00488
00489
00490 #define WPA_DRIVER_FLAGS_DRIVER_IE 0x00000001
00491
00492 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC 0x00000002
00493 #define WPA_DRIVER_FLAGS_USER_SPACE_MLME 0x00000004
00494
00495
00496 #define WPA_DRIVER_FLAGS_4WAY_HANDSHAKE 0x00000008
00497 #define WPA_DRIVER_FLAGS_WIRED 0x00000010
00498
00499
00500 #define WPA_DRIVER_FLAGS_SME 0x00000020
00501
00502 #define WPA_DRIVER_FLAGS_AP 0x00000040
00503
00504 #define WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE 0x00000080
00505 unsigned int flags;
00506
00507 int max_scan_ssids;
00508
00512 unsigned int max_remain_on_chan;
00513 };
00514
00515
00516 struct hostapd_data;
00517
00518 struct hostap_sta_driver_data {
00519 unsigned long rx_packets, tx_packets, rx_bytes, tx_bytes;
00520 unsigned long current_tx_rate;
00521 unsigned long inactive_msec;
00522 unsigned long flags;
00523 unsigned long num_ps_buf_frames;
00524 unsigned long tx_retry_failed;
00525 unsigned long tx_retry_count;
00526 int last_rssi;
00527 int last_ack_rssi;
00528 };
00529
00530 struct hostapd_sta_add_params {
00531 const u8 *addr;
00532 u16 aid;
00533 u16 capability;
00534 const u8 *supp_rates;
00535 size_t supp_rates_len;
00536 u16 listen_interval;
00537 const struct ieee80211_ht_capabilities *ht_capabilities;
00538 };
00539
00540 struct hostapd_freq_params {
00541 int mode;
00542 int freq;
00543 int channel;
00544 int ht_enabled;
00545 int sec_channel_offset;
00546
00547
00548 };
00549
00550 enum wpa_driver_if_type {
00554 WPA_IF_STATION,
00555
00562 WPA_IF_AP_VLAN,
00563
00569 WPA_IF_AP_BSS,
00570 };
00571
00572 struct wpa_init_params {
00573 const u8 *bssid;
00574 const char *ifname;
00575 const u8 *ssid;
00576 size_t ssid_len;
00577 const char *test_socket;
00578 int use_pae_group_addr;
00579 char **bridge;
00580 size_t num_bridge;
00581
00582 u8 *own_addr;
00583 };
00584
00585
00586 struct wpa_bss_params {
00588 const char *ifname;
00590 int enabled;
00591
00592 int wpa;
00593 int ieee802_1x;
00594 int wpa_group;
00595 int wpa_pairwise;
00596 int wpa_key_mgmt;
00597 int rsn_preauth;
00598 };
00599
00600 #define WPA_STA_AUTHORIZED BIT(0)
00601 #define WPA_STA_WMM BIT(1)
00602 #define WPA_STA_SHORT_PREAMBLE BIT(2)
00603 #define WPA_STA_MFP BIT(3)
00604
00612 struct wpa_driver_ops {
00614 const char *name;
00616 const char *desc;
00617
00629 int (*get_bssid)(void *priv, u8 *bssid);
00630
00646 int (*get_ssid)(void *priv, u8 *ssid);
00647
00692 int (*set_key)(const char *ifname, void *priv, enum wpa_alg alg,
00693 const u8 *addr, int key_idx, int set_tx,
00694 const u8 *seq, size_t seq_len,
00695 const u8 *key, size_t key_len);
00696
00720 void * (*init)(void *ctx, const char *ifname);
00721
00729 void (*deinit)(void *priv);
00730
00741 int (*set_param)(void *priv, const char *param);
00742
00753 int (*set_countermeasures)(void *priv, int enabled);
00754
00764 int (*deauthenticate)(void *priv, const u8 *addr, int reason_code);
00765
00775 int (*disassociate)(void *priv, const u8 *addr, int reason_code);
00776
00784 int (*associate)(void *priv,
00785 struct wpa_driver_associate_params *params);
00786
00804 int (*add_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid);
00805
00824 int (*remove_pmkid)(void *priv, const u8 *bssid, const u8 *pmkid);
00825
00842 int (*flush_pmkid)(void *priv);
00843
00852 int (*get_capa)(void *priv, struct wpa_driver_capa *capa);
00853
00866 void (*poll)(void *priv);
00867
00879 const char * (*get_ifname)(void *priv);
00880
00891 const u8 * (*get_mac_addr)(void *priv);
00892
00911 int (*send_eapol)(void *priv, const u8 *dest, u16 proto,
00912 const u8 *data, size_t data_len);
00913
00926 int (*set_operstate)(void *priv, int state);
00927
00944 int (*mlme_setprotection)(void *priv, const u8 *addr, int protect_type,
00945 int key_type);
00946
00958 struct hostapd_hw_modes * (*get_hw_feature_data)(void *priv,
00959 u16 *num_modes,
00960 u16 *flags);
00961
00973 int (*set_channel)(void *priv, enum hostapd_hw_mode phymode, int chan,
00974 int freq);
00975
00986 int (*set_ssid)(void *priv, const u8 *ssid, size_t ssid_len);
00987
00997 int (*set_bssid)(void *priv, const u8 *bssid);
00998
01009 int (*send_mlme)(void *priv, const u8 *data, size_t data_len);
01010
01026 int (*mlme_add_sta)(void *priv, const u8 *addr, const u8 *supp_rates,
01027 size_t supp_rates_len);
01028
01038 int (*mlme_remove_sta)(void *priv, const u8 *addr);
01039
01055 int (*update_ft_ies)(void *priv, const u8 *md, const u8 *ies,
01056 size_t ies_len);
01057
01071 int (*send_ft_action)(void *priv, u8 action, const u8 *target_ap,
01072 const u8 *ies, size_t ies_len);
01073
01081 struct wpa_scan_results * (*get_scan_results2)(void *priv);
01082
01092 int (*set_country)(void *priv, const char *alpha2);
01093
01105 void * (*global_init)(void);
01106
01114 void (*global_deinit)(void *priv);
01115
01127 void * (*init2)(void *ctx, const char *ifname, void *global_priv);
01128
01136 struct wpa_interface_info * (*get_interfaces)(void *global_priv);
01137
01149 int (*scan2)(void *priv, struct wpa_driver_scan_params *params);
01150
01163 int (*authenticate)(void *priv,
01164 struct wpa_driver_auth_params *params);
01165
01182 int (*set_beacon)(void *priv, const u8 *head, size_t head_len,
01183 const u8 *tail, size_t tail_len, int dtim_period,
01184 int beacon_int);
01185
01195 void * (*hapd_init)(struct hostapd_data *hapd,
01196 struct wpa_init_params *params);
01197
01202 void (*hapd_deinit)(void *priv);
01203
01216 int (*set_ieee8021x)(void *priv, struct wpa_bss_params *params);
01217
01228 int (*set_privacy)(void *priv, int enabled);
01229
01244 int (*get_seqnum)(const char *ifname, void *priv, const u8 *addr,
01245 int idx, u8 *seq);
01246
01256 int (*flush)(void *priv);
01257
01270 int (*set_generic_elem)(void *priv, const u8 *elem, size_t elem_len);
01271
01279 int (*read_sta_data)(void *priv, struct hostap_sta_driver_data *data,
01280 const u8 *addr);
01281
01293 int (*hapd_send_eapol)(void *priv, const u8 *addr, const u8 *data,
01294 size_t data_len, int encrypt,
01295 const u8 *own_addr);
01296
01308 int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr,
01309 int reason);
01310
01322 int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr,
01323 int reason);
01324
01331 int (*sta_remove)(void *priv, const u8 *addr);
01332
01344 int (*hapd_get_ssid)(void *priv, u8 *buf, int len);
01345
01353 int (*hapd_set_ssid)(void *priv, const u8 *buf, int len);
01354
01364 int (*hapd_set_countermeasures)(void *priv, int enabled);
01365
01376 int (*sta_add)(void *priv, struct hostapd_sta_add_params *params);
01377
01384 int (*get_inact_sec)(void *priv, const u8 *addr);
01385
01392 int (*sta_clear_stats)(void *priv, const u8 *addr);
01393
01400 int (*set_freq)(void *priv, struct hostapd_freq_params *freq);
01401
01408 int (*set_rts)(void *priv, int rts);
01409
01416 int (*set_frag)(void *priv, int frag);
01417
01427 int (*sta_set_flags)(void *priv, const u8 *addr,
01428 int total_flags, int flags_or, int flags_and);
01429
01438 int (*set_rate_sets)(void *priv, int *supp_rates, int *basic_rates,
01439 int mode);
01440
01447 int (*set_cts_protect)(void *priv, int value);
01448
01455 int (*set_preamble)(void *priv, int value);
01456
01463 int (*set_short_slot_time)(void *priv, int value);
01464
01474 int (*set_tx_queue_params)(void *priv, int queue, int aifs, int cw_min,
01475 int cw_max, int burst_time);
01476
01486 int (*valid_bss_mask)(void *priv, const u8 *addr, const u8 *mask);
01487
01505 int (*if_add)(void *priv, enum wpa_driver_if_type type,
01506 const char *ifname, const u8 *addr, void *bss_ctx,
01507 void **drv_priv, char *force_ifname, u8 *if_addr);
01508
01516 int (*if_remove)(void *priv, enum wpa_driver_if_type type,
01517 const char *ifname);
01518
01533 int (*set_sta_vlan)(void *priv, const u8 *addr, const char *ifname,
01534 int vlan_id);
01535
01546 int (*commit)(void *priv);
01547
01558 int (*send_ether)(void *priv, const u8 *dst, const u8 *src, u16 proto,
01559 const u8 *data, size_t data_len);
01560
01569 int (*set_radius_acl_auth)(void *priv, const u8 *mac, int accepted,
01570 u32 session_timeout);
01571
01578 int (*set_radius_acl_expire)(void *priv, const u8 *mac);
01579
01589 int (*set_ht_params)(void *priv,
01590 const u8 *ht_capab, size_t ht_capab_len,
01591 const u8 *ht_oper, size_t ht_oper_len);
01592
01606 int (*set_ap_wps_ie)(void *priv, const struct wpabuf *beacon,
01607 const struct wpabuf *proberesp);
01608
01615 int (*set_supp_port)(void *priv, int authorized);
01616
01625 int (*set_wds_sta)(void *priv, const u8 *addr, int aid, int val);
01626
01645 int (*send_action)(void *priv, unsigned int freq,
01646 const u8 *dst, const u8 *src, const u8 *bssid,
01647 const u8 *data, size_t data_len);
01648
01671 int (*remain_on_channel)(void *priv, unsigned int freq,
01672 unsigned int duration);
01673
01685 int (*cancel_remain_on_channel)(void *priv);
01686
01701 int (*probe_req_report)(void *priv, int report);
01702
01714 int (*disable_11b_rates)(void *priv, int disabled);
01715
01725 int (*deinit_ap)(void *priv);
01726
01731 void (*suspend)(void *priv);
01732
01737 void (*resume)(void *priv);
01738
01753 int (*signal_monitor)(void *priv, int threshold, int hysteresis);
01754
01766 int (*send_frame)(void *priv, const u8 *data, size_t data_len,
01767 int encrypt);
01768 };
01769
01770
01774 enum wpa_event_type {
01787 EVENT_ASSOC,
01788
01799 EVENT_DISASSOC,
01800
01810 EVENT_MICHAEL_MIC_FAILURE,
01811
01826 EVENT_SCAN_RESULTS,
01827
01839 EVENT_ASSOCINFO,
01840
01850 EVENT_INTERFACE_STATUS,
01851
01876 EVENT_PMKID_CANDIDATE,
01877
01887 EVENT_STKSTART,
01888
01896 EVENT_FT_RESPONSE,
01897
01906 EVENT_IBSS_RSN_START,
01907
01917 EVENT_AUTH,
01918
01927 EVENT_DEAUTH,
01928
01936 EVENT_ASSOC_REJECT,
01937
01941 EVENT_AUTH_TIMED_OUT,
01942
01946 EVENT_ASSOC_TIMED_OUT,
01947
01951 EVENT_FT_RRB_RX,
01952
01956 EVENT_WPS_BUTTON_PUSHED,
01957
01961 EVENT_TX_STATUS,
01962
01966 EVENT_RX_FROM_UNKNOWN,
01967
01971 EVENT_RX_MGMT,
01972
01980 EVENT_RX_ACTION,
01981
01989 EVENT_REMAIN_ON_CHANNEL,
01990
01999 EVENT_CANCEL_REMAIN_ON_CHANNEL,
02000
02006 EVENT_MLME_RX,
02007
02019 EVENT_RX_PROBE_REQ,
02020
02030 EVENT_NEW_STA,
02031
02040 EVENT_EAPOL_RX,
02041
02049 EVENT_SIGNAL_CHANGE
02050 };
02051
02052
02056 union wpa_event_data {
02065 struct assoc_info {
02077 const u8 *req_ies;
02078
02082 size_t req_ies_len;
02083
02095 const u8 *resp_ies;
02096
02100 size_t resp_ies_len;
02101
02118 const u8 *beacon_ies;
02119
02122 size_t beacon_ies_len;
02123
02127 unsigned int freq;
02128
02132 const u8 *addr;
02133 } assoc_info;
02134
02138 struct disassoc_info {
02142 const u8 *addr;
02143
02148 u16 reason_code;
02149 } disassoc_info;
02150
02154 struct deauth_info {
02158 const u8 *addr;
02159
02164 u16 reason_code;
02165 } deauth_info;
02166
02170 struct michael_mic_failure {
02171 int unicast;
02172 const u8 *src;
02173 } michael_mic_failure;
02174
02178 struct interface_status {
02179 char ifname[100];
02180 enum {
02181 EVENT_INTERFACE_ADDED, EVENT_INTERFACE_REMOVED
02182 } ievent;
02183 } interface_status;
02184
02188 struct pmkid_candidate {
02190 u8 bssid[ETH_ALEN];
02192 int index;
02194 int preauth;
02195 } pmkid_candidate;
02196
02200 struct stkstart {
02201 u8 peer[ETH_ALEN];
02202 } stkstart;
02203
02213 struct ft_ies {
02214 const u8 *ies;
02215 size_t ies_len;
02216 int ft_action;
02217 u8 target_ap[ETH_ALEN];
02219 const u8 *ric_ies;
02221 size_t ric_ies_len;
02222 } ft_ies;
02223
02227 struct ibss_rsn_start {
02228 u8 peer[ETH_ALEN];
02229 } ibss_rsn_start;
02230
02234 struct auth_info {
02235 u8 peer[ETH_ALEN];
02236 u16 auth_type;
02237 u16 status_code;
02238 const u8 *ies;
02239 size_t ies_len;
02240 } auth;
02241
02245 struct assoc_reject {
02257 u8 *resp_ies;
02258
02262 size_t resp_ies_len;
02263
02267 u16 status_code;
02268 } assoc_reject;
02269
02270 struct timeout_event {
02271 u8 addr[ETH_ALEN];
02272 } timeout_event;
02273
02277 struct ft_rrb_rx {
02278 const u8 *src;
02279 const u8 *data;
02280 size_t data_len;
02281 } ft_rrb_rx;
02282
02286 struct tx_status {
02287 u16 type;
02288 u16 stype;
02289 const u8 *dst;
02290 const u8 *data;
02291 size_t data_len;
02292 int ack;
02293 } tx_status;
02294
02298 struct rx_from_unknown {
02299 const u8 *frame;
02300 size_t len;
02301 } rx_from_unknown;
02302
02306 struct rx_mgmt {
02307 const u8 *frame;
02308 size_t frame_len;
02309 u32 datarate;
02310 u32 ssi_signal;
02311 } rx_mgmt;
02312
02316 struct rx_action {
02320 const u8 *da;
02321
02325 const u8 *sa;
02326
02330 const u8 *bssid;
02331
02335 u8 category;
02336
02340 const u8 *data;
02341
02345 size_t len;
02346
02350 int freq;
02351 } rx_action;
02352
02358 struct remain_on_channel {
02362 unsigned int freq;
02363
02367 unsigned int duration;
02368 } remain_on_channel;
02369
02379 struct scan_info {
02380 int aborted;
02381 const int *freqs;
02382 size_t num_freqs;
02383 struct wpa_driver_scan_ssid ssids[WPAS_MAX_SCAN_SSIDS];
02384 size_t num_ssids;
02385 } scan_info;
02386
02390 struct mlme_rx {
02391 const u8 *buf;
02392 size_t len;
02393 int freq;
02394 int channel;
02395 int ssi;
02396 } mlme_rx;
02397
02401 struct rx_probe_req {
02405 const u8 *sa;
02406
02410 const u8 *ie;
02411
02415 size_t ie_len;
02416 } rx_probe_req;
02417
02421 struct new_sta {
02422 const u8 *addr;
02423 } new_sta;
02424
02428 struct eapol_rx {
02429 const u8 *src;
02430 const u8 *data;
02431 size_t data_len;
02432 } eapol_rx;
02433
02437 struct signal_change {
02438 int above_threshold;
02439 } signal_change;
02440 };
02441
02452 void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
02453 union wpa_event_data *data);
02454
02455
02456
02457
02458
02459
02460
02461 static inline void drv_event_assoc(void *ctx, const u8 *addr, const u8 *ie,
02462 size_t ielen)
02463 {
02464 union wpa_event_data event;
02465 os_memset(&event, 0, sizeof(event));
02466 event.assoc_info.req_ies = ie;
02467 event.assoc_info.req_ies_len = ielen;
02468 event.assoc_info.addr = addr;
02469 wpa_supplicant_event(ctx, EVENT_ASSOC, &event);
02470 }
02471
02472 static inline void drv_event_disassoc(void *ctx, const u8 *addr)
02473 {
02474 union wpa_event_data event;
02475 os_memset(&event, 0, sizeof(event));
02476 event.disassoc_info.addr = addr;
02477 wpa_supplicant_event(ctx, EVENT_DISASSOC, &event);
02478 }
02479
02480 static inline void drv_event_eapol_rx(void *ctx, const u8 *src, const u8 *data,
02481 size_t data_len)
02482 {
02483 union wpa_event_data event;
02484 os_memset(&event, 0, sizeof(event));
02485 event.eapol_rx.src = src;
02486 event.eapol_rx.data = data;
02487 event.eapol_rx.data_len = data_len;
02488 wpa_supplicant_event(ctx, EVENT_EAPOL_RX, &event);
02489 }
02490
02491 #endif