274 lines
9.1 KiB
C
274 lines
9.1 KiB
C
/*
|
|
* wpa_supplicant - Exported functions for wpa_supplicant modules
|
|
* Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* Alternatively, this software may be distributed under the terms of BSD
|
|
* license.
|
|
*
|
|
* See README and COPYING for more details.
|
|
*/
|
|
|
|
#ifndef WPA_SUPPLICANT_H
|
|
#define WPA_SUPPLICANT_H
|
|
|
|
/* Driver wrappers are not supposed to directly touch the internal data
|
|
* structure used in wpa_supplicant, so that definition is not provided here.
|
|
*/
|
|
struct wpa_supplicant;
|
|
|
|
/**
|
|
* enum wpa_event_type - Event type for wpa_supplicant_event() calls
|
|
*/
|
|
typedef enum wpa_event_type {
|
|
/**
|
|
* EVENT_ASSOC - Association completed
|
|
*
|
|
* This event needs to be delivered when the driver completes IEEE
|
|
* 802.11 association or reassociation successfully.
|
|
* wpa_driver_ops::get_bssid() is expected to provide the current BSSID
|
|
* after this even has been generated. In addition, optional
|
|
* EVENT_ASSOCINFO may be generated just before EVENT_ASSOC to provide
|
|
* more information about the association. If the driver interface gets
|
|
* both of these events at the same time, it can also include the
|
|
* assoc_info data in EVENT_ASSOC call.
|
|
*/
|
|
EVENT_ASSOC,
|
|
|
|
/**
|
|
* EVENT_DISASSOC - Association lost
|
|
*
|
|
* This event should be called when association is lost either due to
|
|
* receiving deauthenticate or disassociate frame from the AP or when
|
|
* sending either of these frames to the current AP.
|
|
*/
|
|
EVENT_DISASSOC,
|
|
|
|
/**
|
|
* EVENT_MICHAEL_MIC_FAILURE - Michael MIC (TKIP) detected
|
|
*
|
|
* This event must be delivered when a Michael MIC error is detected by
|
|
* the local driver. Additional data is for event processing is
|
|
* provided with union wpa_event_data::michael_mic_failure. This
|
|
* information is used to request new encyption key and to initiate
|
|
* TKIP countermeasures if needed.
|
|
*/
|
|
EVENT_MICHAEL_MIC_FAILURE,
|
|
|
|
/**
|
|
* EVENT_SCAN_RESULTS - Scan results available
|
|
*
|
|
* This event must be called whenever scan results are available to be
|
|
* fetched with struct wpa_driver_ops::get_scan_results(). This event
|
|
* is expected to be used some time after struct wpa_driver_ops::scan()
|
|
* is called. If the driver provides an unsolicited event when the scan
|
|
* has been completed, this event can be used to trigger
|
|
* EVENT_SCAN_RESULTS call. If such event is not available from the
|
|
* driver, the driver wrapper code is expected to use a registered
|
|
* timeout to generate EVENT_SCAN_RESULTS call after the time that the
|
|
* scan is expected to be completed.
|
|
*/
|
|
EVENT_SCAN_RESULTS,
|
|
|
|
/**
|
|
* EVENT_ASSOCINFO - Report optional extra information for association
|
|
*
|
|
* This event can be used to report extra association information for
|
|
* EVENT_ASSOC processing. This extra information includes IEs from
|
|
* association frames and Beacon/Probe Response frames in union
|
|
* wpa_event_data::assoc_info. EVENT_ASSOCINFO must be send just before
|
|
* EVENT_ASSOC. Alternatively, the driver interface can include
|
|
* assoc_info data in the EVENT_ASSOC call if it has all the
|
|
* information available at the same point.
|
|
*/
|
|
EVENT_ASSOCINFO,
|
|
|
|
/**
|
|
* EVENT_INTERFACE_STATUS - Report interface status changes
|
|
*
|
|
* This optional event can be used to report changes in interface
|
|
* status (interface added/removed) using union
|
|
* wpa_event_data::interface_status. This can be used to trigger
|
|
* wpa_supplicant to stop and re-start processing for the interface,
|
|
* e.g., when a cardbus card is ejected/inserted.
|
|
*/
|
|
EVENT_INTERFACE_STATUS,
|
|
|
|
/**
|
|
* EVENT_PMKID_CANDIDATE - Report a candidate AP for pre-authentication
|
|
*
|
|
* This event can be used to inform wpa_supplicant about candidates for
|
|
* RSN (WPA2) pre-authentication. If wpa_supplicant is not responsible
|
|
* for scan request (ap_scan=2 mode), this event is required for
|
|
* pre-authentication. If wpa_supplicant is performing scan request
|
|
* (ap_scan=1), this event is optional since scan results can be used
|
|
* to add pre-authentication candidates. union
|
|
* wpa_event_data::pmkid_candidate is used to report the BSSID of the
|
|
* candidate and priority of the candidate, e.g., based on the signal
|
|
* strength, in order to try to pre-authenticate first with candidates
|
|
* that are most likely targets for re-association.
|
|
*
|
|
* EVENT_PMKID_CANDIDATE can be called whenever the driver has updates
|
|
* on the candidate list. In addition, it can be called for the current
|
|
* AP and APs that have existing PMKSA cache entries. wpa_supplicant
|
|
* will automatically skip pre-authentication in cases where a valid
|
|
* PMKSA exists. When more than one candidate exists, this event should
|
|
* be generated once for each candidate.
|
|
*
|
|
* Driver will be notified about successful pre-authentication with
|
|
* struct wpa_driver_ops::add_pmkid() calls.
|
|
*/
|
|
EVENT_PMKID_CANDIDATE,
|
|
|
|
/**
|
|
* EVENT_STKSTART - Request STK handshake (MLME-STKSTART.request)
|
|
*
|
|
* This event can be used to inform wpa_supplicant about desire to set
|
|
* up secure direct link connection between two stations as defined in
|
|
* IEEE 802.11e with a new PeerKey mechanism that replaced the original
|
|
* STAKey negotiation. The caller will need to set peer address for the
|
|
* event.
|
|
*/
|
|
EVENT_STKSTART
|
|
} wpa_event_type;
|
|
|
|
|
|
/**
|
|
* union wpa_event_data - Additional data for wpa_supplicant_event() calls
|
|
*/
|
|
union wpa_event_data {
|
|
/**
|
|
* struct assoc_info - Data for EVENT_ASSOC and EVENT_ASSOCINFO events
|
|
*
|
|
* This structure is optional for EVENT_ASSOC calls and required for
|
|
* EVENT_ASSOCINFO calls. By using EVENT_ASSOC with this data, the
|
|
* driver interface does not need to generate separate EVENT_ASSOCINFO
|
|
* calls.
|
|
*/
|
|
struct assoc_info {
|
|
/**
|
|
* req_ies - (Re)Association Request IEs
|
|
*
|
|
* If the driver generates WPA/RSN IE, this event data must be
|
|
* returned for WPA handshake to have needed information. If
|
|
* wpa_supplicant-generated WPA/RSN IE is used, this
|
|
* information event is optional.
|
|
*
|
|
* This should start with the first IE (fixed fields before IEs
|
|
* are not included).
|
|
*/
|
|
u8 *req_ies;
|
|
|
|
/**
|
|
* req_ies_len - Length of req_ies in bytes
|
|
*/
|
|
size_t req_ies_len;
|
|
|
|
/**
|
|
* resp_ies - (Re)Association Response IEs
|
|
*
|
|
* Optional association data from the driver. This data is not
|
|
* required WPA, but may be useful for some protocols and as
|
|
* such, should be reported if this is available to the driver
|
|
* interface.
|
|
*
|
|
* This should start with the first IE (fixed fields before IEs
|
|
* are not included).
|
|
*/
|
|
u8 *resp_ies;
|
|
|
|
/**
|
|
* resp_ies_len - Length of resp_ies in bytes
|
|
*/
|
|
size_t resp_ies_len;
|
|
|
|
/**
|
|
* beacon_ies - Beacon or Probe Response IEs
|
|
*
|
|
* Optional Beacon/ProbeResp data: IEs included in Beacon or
|
|
* Probe Response frames from the current AP (i.e., the one
|
|
* that the client just associated with). This information is
|
|
* used to update WPA/RSN IE for the AP. If this field is not
|
|
* set, the results from previous scan will be used. If no
|
|
* data for the new AP is found, scan results will be requested
|
|
* again (without scan request). At this point, the driver is
|
|
* expected to provide WPA/RSN IE for the AP (if WPA/WPA2 is
|
|
* used).
|
|
*
|
|
* This should start with the first IE (fixed fields before IEs
|
|
* are not included).
|
|
*/
|
|
u8 *beacon_ies;
|
|
|
|
/**
|
|
* beacon_ies_len - Length of beacon_ies */
|
|
size_t beacon_ies_len;
|
|
} assoc_info;
|
|
|
|
/**
|
|
* struct michael_mic_failure - Data for EVENT_MICHAEL_MIC_FAILURE
|
|
*/
|
|
struct michael_mic_failure {
|
|
int unicast;
|
|
} michael_mic_failure;
|
|
|
|
/**
|
|
* struct interface_status - Data for EVENT_INTERFACE_STATUS
|
|
*/
|
|
struct interface_status {
|
|
char ifname[100];
|
|
enum {
|
|
EVENT_INTERFACE_ADDED, EVENT_INTERFACE_REMOVED
|
|
} ievent;
|
|
} interface_status;
|
|
|
|
/**
|
|
* struct pmkid_candidate - Data for EVENT_PMKID_CANDIDATE
|
|
*/
|
|
struct pmkid_candidate {
|
|
/** BSSID of the PMKID candidate */
|
|
u8 bssid[ETH_ALEN];
|
|
/** Smaller the index, higher the priority */
|
|
int index;
|
|
/** Whether RSN IE includes pre-authenticate flag */
|
|
int preauth;
|
|
} pmkid_candidate;
|
|
|
|
/**
|
|
* struct stkstart - Data for EVENT_STKSTART
|
|
*/
|
|
struct stkstart {
|
|
u8 peer[ETH_ALEN];
|
|
} stkstart;
|
|
};
|
|
|
|
/**
|
|
* wpa_supplicant_event - Report a driver event for wpa_supplicant
|
|
* @wpa_s: pointer to wpa_supplicant data; this is the ctx variable registered
|
|
* with struct wpa_driver_ops::init()
|
|
* @event: event type (defined above)
|
|
* @data: possible extra data for the event
|
|
*
|
|
* Driver wrapper code should call this function whenever an event is received
|
|
* from the driver.
|
|
*/
|
|
void wpa_supplicant_event(struct wpa_supplicant *wpa_s, wpa_event_type event,
|
|
union wpa_event_data *data);
|
|
|
|
/**
|
|
* wpa_supplicant_rx_eapol - Deliver a received EAPOL frame to wpa_supplicant
|
|
* @ctx: Context pointer (wpa_s)
|
|
* @src_addr: Source address of the EAPOL frame
|
|
* @buf: EAPOL data starting from the EAPOL header (i.e., no Ethernet header)
|
|
* @len: Length of the EAPOL data
|
|
*
|
|
* This function is called for each received EAPOL frame.
|
|
*/
|
|
void wpa_supplicant_rx_eapol(void *ctx, const u8 *src_addr,
|
|
const u8 *buf, size_t len);
|
|
|
|
#endif /* WPA_SUPPLICANT_H */
|