a399b7655a1d835aa8606c2b29e4e777baac8635zf/*
d62bc4badc1c1f1549c961cfb8b420e650e1272byz * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Use is subject to license terms.
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf/*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Sun elects to license this software under the BSD license.
a399b7655a1d835aa8606c2b29e4e777baac8635zf * See README for more details.
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf#ifndef __WPA_IMPL_H
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define __WPA_IMPL_H
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#include <net/wpa.h>
d62bc4badc1c1f1549c961cfb8b420e650e1272byz#include <libdladm.h>
fb91fd8a302dfb13e250bbefb6a3970c2edc3ae3zf#include <libdllink.h>
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#ifdef __cplusplus
a399b7655a1d835aa8606c2b29e4e777baac8635zfextern "C" {
a399b7655a1d835aa8606c2b29e4e777baac8635zf#endif
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define BIT(n) (1 << (n))
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_CIPHER_NONE BIT(0)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_CIPHER_WEP40 BIT(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_CIPHER_WEP104 BIT(2)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_CIPHER_TKIP BIT(3)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_CIPHER_CCMP BIT(4)
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_MGMT_IEEE8021X BIT(0)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_MGMT_PSK BIT(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_MGMT_NONE BIT(2)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_PROTO_WPA BIT(0)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_PROTO_RSN BIT(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct ieee802_1x_hdr {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t version;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t type;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint16_t length;
a399b7655a1d835aa8606c2b29e4e777baac8635zf /* followed by length octets of data */
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack()
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define EAPOL_VERSION 2
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfenum { IEEE802_1X_TYPE_EAP_PACKET = 0,
a399b7655a1d835aa8606c2b29e4e777baac8635zf IEEE802_1X_TYPE_EAPOL_START = 1,
a399b7655a1d835aa8606c2b29e4e777baac8635zf IEEE802_1X_TYPE_EAPOL_LOGOFF = 2,
a399b7655a1d835aa8606c2b29e4e777baac8635zf IEEE802_1X_TYPE_EAPOL_KEY = 3,
a399b7655a1d835aa8606c2b29e4e777baac8635zf IEEE802_1X_TYPE_EAPOL_ENCAPSULATED_ASF_ALERT = 4
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfenum { EAPOL_KEY_TYPE_RC4 = 1,
a399b7655a1d835aa8606c2b29e4e777baac8635zf EAPOL_KEY_TYPE_RSN = 2,
a399b7655a1d835aa8606c2b29e4e777baac8635zf EAPOL_KEY_TYPE_WPA = 254
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_NONCE_LEN 32
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_REPLAY_COUNTER_LEN 8
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define MAX_PSK_LENGTH 64
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_PMK_LEN 32
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_eapol_key {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t type;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint16_t key_info;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint16_t key_length;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t replay_counter[WPA_REPLAY_COUNTER_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t key_nonce[WPA_NONCE_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t key_iv[16];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t key_rsc[8];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t key_id[8]; /* Reserved in IEEE 802.11i/RSN */
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t key_mic[16];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint16_t key_data_length;
a399b7655a1d835aa8606c2b29e4e777baac8635zf /* followed by key_data_length bytes of key_data */
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack()
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_TYPE_MASK (BIT(0) | BIT(1) | BIT(2))
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_TYPE_HMAC_MD5_RC4 BIT(0)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_TYPE_HMAC_SHA1_AES BIT(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_KEY_TYPE BIT(3) /* 1: Pairwise, 0: Group key */
a399b7655a1d835aa8606c2b29e4e777baac8635zf/* bit4..5 is used in WPA, but is reserved in IEEE 802.11i/RSN */
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_KEY_INDEX_MASK (BIT(4) | BIT(5))
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_KEY_INDEX_SHIFT 4
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_INSTALL BIT(6) /* pairwise */
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_TXRX BIT(6) /* group */
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_ACK BIT(7)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_MIC BIT(8)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_SECURE BIT(9)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_ERROR BIT(10)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_REQUEST BIT(11)
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_KEY_INFO_ENCR_KEY_DATA BIT(12) /* IEEE 802.11i/RSN only */
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define WPA_CAPABILITY_PREAUTH BIT(0)
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define GENERIC_INFO_ELEM 0xdd
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define RSN_INFO_ELEM 0x30
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define MAX_LOGBUF 4096
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define MAX_SCANRESULTS 64
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfenum {
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_UNSPECIFIED = 1,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_DEAUTH_LEAVING = 3,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_INVALID_IE = 13,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_MICHAEL_MIC_FAILURE = 14,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_4WAY_HANDSHAKE_TIMEOUT = 15,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_GROUP_KEY_UPDATE_TIMEOUT = 16,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_IE_IN_4WAY_DIFFERS = 17,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_GROUP_CIPHER_NOT_VALID = 18,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_PAIRWISE_CIPHER_NOT_VALID = 19,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_AKMP_NOT_VALID = 20,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_UNSUPPORTED_RSN_IE_VERSION = 21,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_INVALID_RSN_IE_CAPAB = 22,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_IEEE_802_1X_AUTH_FAILED = 23,
a399b7655a1d835aa8606c2b29e4e777baac8635zf REASON_CIPHER_SUITE_REJECTED = 24
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf/*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * wpa_supplicant
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define PMKID_LEN 16
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define PMK_LEN 32
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
a399b7655a1d835aa8606c2b29e4e777baac8635zf#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct rsn_pmksa_cache {
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct rsn_pmksa_cache *next;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t pmkid[PMKID_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t pmk[PMK_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf time_t expiration;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int akmp; /* WPA_KEY_MGMT_* */
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t aa[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct rsn_pmksa_candidate {
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct rsn_pmksa_candidate *next;
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t bssid[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack(1)
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_ptk {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t mic_key[16]; /* EAPOL-Key MIC Key (MK) */
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t encr_key[16]; /* EAPOL-Key Encryption Key (EK) */
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t tk1[16]; /* Temporal Key 1 (TK1) */
a399b7655a1d835aa8606c2b29e4e777baac8635zf union {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t tk2[16]; /* Temporal Key 2 (TK2) */
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t tx_mic_key[8];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t rx_mic_key[8];
a399b7655a1d835aa8606c2b29e4e777baac8635zf } auth;
a399b7655a1d835aa8606c2b29e4e777baac8635zf } u;
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf#pragma pack()
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_supplicant {
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct l2_packet_data *l2;
a399b7655a1d835aa8606c2b29e4e777baac8635zf unsigned char own_addr[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf
4ac67f0276a8313b5cefec38af347b94b7bfb526Anurag S. Maskey /* The handle required for libdladm calls */
4ac67f0276a8313b5cefec38af347b94b7bfb526Anurag S. Maskey dladm_handle_t handle;
4ac67f0276a8313b5cefec38af347b94b7bfb526Anurag S. Maskey
d62bc4badc1c1f1549c961cfb8b420e650e1272byz datalink_id_t linkid;
fb91fd8a302dfb13e250bbefb6a3970c2edc3ae3zf char kname[DLADM_SECOBJ_NAME_MAX];
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t pmk[PMK_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t snonce[WPA_NONCE_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t anonce[WPA_NONCE_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf /* ANonce from the last 1/4 msg */
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct wpa_ptk ptk, tptk;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int ptk_set, tptk_set;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int renew_snonce;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct wpa_config *conf;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t request_counter[WPA_REPLAY_COUNTER_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t rx_replay_counter[WPA_REPLAY_COUNTER_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf int rx_replay_counter_set;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t bssid[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf int reassociate; /* reassociation requested */
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t *ap_wpa_ie;
a399b7655a1d835aa8606c2b29e4e777baac8635zf size_t ap_wpa_ie_len;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf /*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Selected configuration
a399b7655a1d835aa8606c2b29e4e777baac8635zf * based on Beacon/ProbeResp WPA IE
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf int proto;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int pairwise_cipher;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int group_cipher;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int key_mgmt;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct wpa_driver_ops *driver;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf enum {
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_DISCONNECTED,
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_SCANNING,
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_ASSOCIATING,
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_ASSOCIATED,
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_4WAY_HANDSHAKE,
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_GROUP_HANDSHAKE,
a399b7655a1d835aa8606c2b29e4e777baac8635zf WPA_COMPLETED
a399b7655a1d835aa8606c2b29e4e777baac8635zf } wpa_state;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct rsn_pmksa_cache *pmksa; /* PMKSA cache */
a399b7655a1d835aa8606c2b29e4e777baac8635zf int pmksa_count; /* number of entries in PMKSA cache */
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct rsn_pmksa_cache *cur_pmksa; /* current PMKSA entry */
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct rsn_pmksa_candidate *pmksa_candidates;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf /*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * number of EAPOL packets received after the
a399b7655a1d835aa8606c2b29e4e777baac8635zf * previous association event
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zf int eapol_received;
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_ie_data {
a399b7655a1d835aa8606c2b29e4e777baac8635zf int proto;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int pairwise_cipher;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int group_cipher;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int key_mgmt;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int capabilities;
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf/* WPA configuration */
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_ssid {
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t *ssid;
a399b7655a1d835aa8606c2b29e4e777baac8635zf size_t ssid_len;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t bssid[IEEE80211_ADDR_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf int bssid_set;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t psk[PMK_LEN];
a399b7655a1d835aa8606c2b29e4e777baac8635zf int psk_set;
a399b7655a1d835aa8606c2b29e4e777baac8635zf char *passphrase;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf /* Bitfields of allowed Pairwise/Group Ciphers, WPA_CIPHER_* */
a399b7655a1d835aa8606c2b29e4e777baac8635zf int pairwise_cipher;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int group_cipher;
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf int key_mgmt;
a399b7655a1d835aa8606c2b29e4e777baac8635zf int proto; /* Bitfield of allowed protocols (WPA_PROTO_*) */
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_config {
a399b7655a1d835aa8606c2b29e4e777baac8635zf struct wpa_ssid *ssid; /* global network list */
a399b7655a1d835aa8606c2b29e4e777baac8635zf int eapol_version;
a399b7655a1d835aa8606c2b29e4e777baac8635zf /* int ap_scan; */
a399b7655a1d835aa8606c2b29e4e777baac8635zf};
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct wpa_config *wpa_config_read(void *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_config_free(struct wpa_config *);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf/*
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Debugging function - conditional printf and hex dump.
a399b7655a1d835aa8606c2b29e4e777baac8635zf * Driver wrappers can use these for debugging purposes.
a399b7655a1d835aa8606c2b29e4e777baac8635zf */
a399b7655a1d835aa8606c2b29e4e777baac8635zfenum { MSG_MSGDUMP, MSG_DEBUG, MSG_INFO, MSG_WARNING, MSG_ERROR };
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_printf(int, char *, ...);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_hexdump(int, const char *, const uint8_t *, size_t);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_event_handler(void *, wpa_event_type);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_supplicant_rx_eapol(void *, unsigned char *, unsigned char *, size_t);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_supplicant_scan(void *, void *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_supplicant_req_scan(struct wpa_supplicant *, int, int);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_supplicant_req_auth_timeout(struct wpa_supplicant *, int, int);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_supplicant_cancel_auth_timeout(struct wpa_supplicant *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid wpa_supplicant_disassociate(struct wpa_supplicant *, int);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid pmksa_cache_free(struct wpa_supplicant *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfvoid pmksa_candidate_free(struct wpa_supplicant *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfstruct rsn_pmksa_cache *pmksa_cache_get(struct wpa_supplicant *,
a399b7655a1d835aa8606c2b29e4e777baac8635zf uint8_t *, uint8_t *);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zfint wpa_parse_wpa_ie(struct wpa_supplicant *, uint8_t *,
a399b7655a1d835aa8606c2b29e4e777baac8635zf size_t, struct wpa_ie_data *);
a399b7655a1d835aa8606c2b29e4e777baac8635zfint wpa_gen_wpa_ie(struct wpa_supplicant *, uint8_t *);
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#ifdef __cplusplus
a399b7655a1d835aa8606c2b29e4e777baac8635zf}
a399b7655a1d835aa8606c2b29e4e777baac8635zf#endif
a399b7655a1d835aa8606c2b29e4e777baac8635zf
a399b7655a1d835aa8606c2b29e4e777baac8635zf#endif /* __WPA_IMPL_H */