#ifndef __WPA_H
#define __WPA_H
#include <inet/wifi_ioctl.h>
#include <sys/net80211_crypto.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SERVICE_NAME "network/wpa"
#define WPA_DOOR "/var/run/wpa_door"
#define SVC_METHOD "/usr/lib/inet/wpad"
#define WL_WPA_BASE (WL_PARAMETERS_BASE + 0x500)
#define WL_SETOPTIE (WL_WPA_BASE + 0x0)
#define WL_WPA (WL_WPA_BASE + 0x2)
#define WL_KEY (WL_WPA_BASE + 0x3)
#define WL_DELKEY (WL_WPA_BASE + 0x4)
#define WL_SCANRESULTS (WL_WPA_BASE + 0x7)
#define WL_MLME (WL_WPA_BASE + 0x8)
#define WL_CAPABILITY (WL_WPA_BASE + 0x9)
typedef struct wl_wpa_ie {
uint32_t wpa_ie_len;
char wpa_ie[1];
} wl_wpa_ie_t;
typedef struct wl_wpa {
uint32_t wpa_flag;
} wl_wpa_t;
typedef struct wl_capability {
uint32_t caps;
} wl_capability_t;
#pragma pack(1)
typedef struct wl_key {
uint8_t ik_type;
uint8_t ik_pad;
uint16_t ik_keyix;
uint8_t ik_keylen;
uint8_t ik_flags;
uint8_t ik_macaddr[IEEE80211_ADDR_LEN];
uint64_t ik_keyrsc;
uint64_t ik_keytsc;
uint8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
} wl_key_t;
#pragma pack()
typedef struct wl_del_key {
uint8_t idk_keyix;
uint8_t idk_macaddr[IEEE80211_ADDR_LEN];
} wl_del_key_t;
struct wpa_ess {
uint8_t bssid[IEEE80211_ADDR_LEN];
uint8_t ssid[MAX_ESSID_LENGTH];
uint32_t ssid_len;
uint8_t wpa_ie[IEEE80211_MAX_WPA_IE];
uint32_t wpa_ie_len;
int freq;
};
typedef struct wl_wpa_ess {
uint32_t count;
struct wpa_ess ess[1];
} wl_wpa_ess_t;
typedef struct wl_mlme {
uint8_t im_op;
uint16_t im_reason;
uint8_t im_macaddr[IEEE80211_ADDR_LEN];
} wl_mlme_t;
typedef enum {
EVENT_ASSOC,
EVENT_DISASSOC,
EVENT_SCAN_RESULTS
} wpa_event_type;
typedef struct wl_events {
wpa_event_type event;
} wl_events_t;
#ifdef __cplusplus
}
#endif
#endif