blob: 9d057c32b613edf13d77a7ec09ed0aea1972da55 [file] [log] [blame]
/*
* Copyright (C) 2003-2005 Pontus Fuchs, Giridhar Pemmasani
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef _IW_NDIS_H_
#define _IW_NDIS_H_
#include "ndis.h"
#define WL_NOISE -96 /* typical noise level in dBm */
#define WL_SIGMAX -32 /* typical maximum signal level in dBm */
struct ndis_encr_key {
ULONG struct_size;
ULONG index;
ULONG length;
UCHAR key[NDIS_ENCODING_TOKEN_MAX];
};
struct ndis_add_key {
ULONG struct_size;
ndis_key_index index;
ULONG length;
mac_address bssid;
UCHAR pad[6];
ndis_key_rsc rsc;
UCHAR key[NDIS_ENCODING_TOKEN_MAX];
};
struct ndis_remove_key {
ULONG struct_size;
ndis_key_index index;
mac_address bssid;
};
struct ndis_fixed_ies {
UCHAR time_stamp[8];
USHORT beacon_interval;
USHORT capa;
};
struct ndis_variable_ies {
ULONG elem_id;
UCHAR length;
UCHAR data[1];
};
enum ndis_reload_defaults { Ndis802_11ReloadWEPKeys };
struct ndis_assoc_info {
ULONG length;
USHORT req_ies;
struct req_ie {
USHORT capa;
USHORT listen_interval;
mac_address cur_ap_address;
} req_ie;
ULONG req_ie_length;
ULONG offset_req_ies;
USHORT resp_ies;
struct resp_ie {
USHORT capa;
USHORT status_code;
USHORT assoc_id;
} resp_ie;
ULONG resp_ie_length;
ULONG offset_resp_ies;
};
struct ndis_configuration_fh {
ULONG length;
ULONG hop_pattern;
ULONG hop_set;
ULONG dwell_time;
};
struct ndis_configuration {
ULONG length;
ULONG beacon_period;
ULONG atim_window;
ULONG ds_config;
struct ndis_configuration_fh fh_config;
};
struct ndis_wlan_bssid {
ULONG length;
mac_address mac;
UCHAR reserved[2];
struct ndis_essid ssid;
ULONG privacy;
ndis_rssi rssi;
UINT net_type;
struct ndis_configuration config;
UINT mode;
ndis_rates rates;
};
struct ndis_wlan_bssid_ex {
ULONG length;
mac_address mac;
UCHAR reserved[2];
struct ndis_essid ssid;
ULONG privacy;
ndis_rssi rssi;
UINT net_type;
struct ndis_configuration config;
UINT mode;
ndis_rates_ex rates_ex;
ULONG ie_length;
UCHAR ies[1];
};
/* we use bssid_list as bssid_list_ex also */
struct ndis_bssid_list {
ULONG num_items;
struct ndis_wlan_bssid bssid[1];
};
enum ndis_priv_filter {
Ndis802_11PrivFilterAcceptAll, Ndis802_11PrivFilter8021xWEP
};
enum network_type {
Ndis802_11FH, Ndis802_11DS, Ndis802_11OFDM5, Ndis802_11OFDM24,
/* MSDN site uses Ndis802_11Automode, which is not mentioned
* in DDK, so add one and assign it to
* Ndis802_11NetworkTypeMax */
Ndis802_11Automode, Ndis802_11NetworkTypeMax = Ndis802_11Automode
};
struct network_type_list {
ULONG num;
enum network_type types[1];
};
enum ndis_power {
NDIS_POWER_OFF = 0, NDIS_POWER_MAX, NDIS_POWER_MIN,
};
struct ndis_auth_req {
ULONG length;
mac_address bssid;
ULONG flags;
};
struct ndis_bssid_info {
mac_address bssid;
ndis_pmkid_vavlue pmkid;
};
struct ndis_pmkid {
ULONG length;
ULONG bssid_info_count;
struct ndis_bssid_info bssid_info[1];
};
int add_wep_key(struct ndis_device *wnd, char *key, int key_len,
int index);
int set_essid(struct ndis_device *wnd, const char *ssid, int ssid_len);
int set_infra_mode(struct ndis_device *wnd,
enum ndis_infrastructure_mode mode);
int get_ap_address(struct ndis_device *wnd, mac_address mac);
int set_ndis_auth_mode(struct ndis_device *wnd, ULONG auth_mode);
int set_iw_auth_mode(struct ndis_device *wnd, int wpa_version,
int auth_80211_alg);
int set_auth_mode(struct ndis_device *wnd);
int set_ndis_encr_mode(struct ndis_device *wnd, int cipher_pairwise,
int cipher_groupwise);
int get_ndis_encr_mode(struct ndis_device *wnd);
int set_encr_mode(struct ndis_device *wnd);
int set_iw_encr_mode(struct ndis_device *wnd, int cipher_pairwise,
int cipher_groupwise);
int get_ndis_auth_mode(struct ndis_device *wnd);
int set_priv_filter(struct ndis_device *wnd);
int set_scan(struct ndis_device *wnd);
NDIS_STATUS disassociate(struct ndis_device *wnd, int reset_ssid);
void set_default_iw_params(struct ndis_device *wnd);
extern const struct iw_handler_def ndis_handler_def;
#define PRIV_RESET SIOCIWFIRSTPRIV+16
#define PRIV_POWER_PROFILE SIOCIWFIRSTPRIV+17
#define PRIV_NETWORK_TYPE SIOCIWFIRSTPRIV+18
#define PRIV_DEAUTHENTICATE SIOCIWFIRSTPRIV+19
#define PRIV_MEDIA_STREAM_MODE SIOCIWFIRSTPRIV+20
#define PRIV_RELOAD_DEFAULTS SIOCIWFIRSTPRIV+23
#define RSN_INFO_ELEM 0x30
/* these have to match what is in wpa_supplicant */
typedef enum { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP } wpa_alg;
typedef enum { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP,
CIPHER_WEP104 } wpa_cipher;
typedef enum { KEY_MGMT_802_1X, KEY_MGMT_PSK, KEY_MGMT_NONE,
KEY_MGMT_802_1X_NO_WPA, KEY_MGMT_WPA_NONE } wpa_key_mgmt;
#endif // IW_NDIS_H