Index: linux-2.6.23-rc6/include/linux/ieee80211.h =================================================================== --- linux-2.6.23-rc6.orig/include/linux/ieee80211.h 2007-09-21 16:23:52.000000000 +0800 +++ linux-2.6.23-rc6/include/linux/ieee80211.h 2007-09-21 16:24:07.000000000 +0800 @@ -106,6 +106,75 @@ } __attribute__ ((packed)); +struct ieee80211_ht_capability { + __le16 capabilities_info; + u8 mac_ht_params_info; + u8 supported_mcs_set[16]; + __le16 extended_ht_capability_info; + __le32 tx_BF_capability_info; + u8 antenna_selection_info; +}__attribute__ ((packed)); + +struct ieee80211_ht_additional_info { + u8 control_chan; + u8 ht_param; + __le16 operation_mode; + __le16 stbc_param; + u8 basic_set[16]; +}__attribute__ ((packed)); + + +#define IEEE80211_TSINFO_TYPE(a) ((a.byte1 & 0x01) >> 0) +#define IEEE80211_TSINFO_TSID(a) ((a.byte1 & 0x1E) >> 1) +#define IEEE80211_TSINFO_DIR(a) ((a.byte1 & 0x60) >> 5) +#define IEEE80211_TSINFO_POLICY(a) ((a.byte1 & 0x80) >> 7 + \ + (a.byte2 & 0x01) << 1) +#define IEEE80211_TSINFO_AGG(a) ((a.byte2 & 0x02) >> 1) +#define IEEE80211_TSINFO_APSD(a) ((a.byte2 & 0x04) >> 2) +#define IEEE80211_TSINFO_UP(a) ((a.byte2 & 0x38) >> 3) +#define IEEE80211_TSINFO_ACK(a) ((a.byte2 & 0xC0) >> 6) +#define IEEE80211_TSINFO_SCHEDULE(a) ((a.byte3 & 0x01) >> 0) + +#define IEEE80211_SET_TSINFO_TYPE(i, d) (i.byte1 |= (d << 0) & 0x01) +#define IEEE80211_SET_TSINFO_TSID(i, d) (i.byte1 |= (d << 1) & 0x1E) +#define IEEE80211_SET_TSINFO_DIR(i, d) (i.byte1 |= (d << 5) & 0x60) +#define IEEE80211_SET_TSINFO_POLICY(i, d) \ +do { \ + i.byte1 |= (d & 0x01) << 7; \ + i.byte2 |= (d & 0x02) >> 1; \ +} while(0) +#define IEEE80211_SET_TSINFO_AGG(i, d) (i.byte2 |= (d << 1) & 0x02) +#define IEEE80211_SET_TSINFO_APSD(i, d) (i.byte2 |= (d << 2) & 0x04) +#define IEEE80211_SET_TSINFO_UP(i, d) (i.byte2 |= (d << 3) & 0x38) +#define IEEE80211_SET_TSINFO_ACK(i, d) (i.byte2 |= (d << 6) & 0xC0) +#define IEEE80211_SET_TSINFO_SCHEDULE(i, d) (i.byte3 |= (d << 0) & 0x01) + +struct ieee80211_ts_info { + u8 byte1; + u8 byte2; + u8 byte3; +} __attribute__ ((packed)); + +struct ieee80211_elem_tspec { + struct ieee80211_ts_info ts_info; + __le16 nominal_msdu_size; + __le16 max_msdu_size; + __le32 min_service_interval; + __le32 max_service_interval; + __le32 inactivity_interval; + __le32 suspension_interval; + __le32 service_start_time; + __le32 min_data_rate; + __le32 mean_data_rate; + __le32 peak_data_rate; + __le32 burst_size; + __le32 delay_bound; + __le32 min_phy_rate; + __le16 surplus_band_allow; + __le16 medium_time; +} __attribute__ ((packed)); + + struct ieee80211_mgmt { __le16 frame_control; __le16 duration; @@ -173,9 +242,51 @@ struct { u8 action_code; u8 dialog_token; + u8 variable[0]; + } __attribute__ ((packed)) addts_req; + struct { + u8 action_code; + u8 dialog_token; + __le16 status_code; + u8 variable[0]; + } __attribute__ ((packed)) addts_resp; + struct { + u8 action_code; + struct ieee80211_ts_info ts_info; + __le16 reason_code; + } __attribute__ ((packed)) delts; + struct { + u8 action_code; + u8 dialog_token; u8 status_code; u8 variable[0]; } __attribute__ ((packed)) wme_action; + struct { + u8 action_code; + u8 dest[6]; + u8 src[6]; + __le16 capab_info; + __le16 timeout; + /* Followed by Supported Rates and + * Extended Supported Rates */ + u8 variable[0]; + } __attribute__ ((packed)) dls_req; + struct { + u8 action_code; + __le16 status_code; + u8 dest[6]; + u8 src[6]; + /* Followed by Capability Information, + * Supported Rates and Extended + * Supported Rates */ + u8 variable[0]; + } __attribute__ ((packed)) dls_resp; + struct { + u8 action_code; + u8 dest[6]; + u8 src[6]; + __le16 reason_code; + } __attribute__ ((packed)) dls_teardown; struct{ u8 action_code; u8 element_id; @@ -184,6 +295,25 @@ u8 new_chan; u8 switch_count; } __attribute__((packed)) chan_switch; + struct{ + u8 action_code; + u8 dialog_token; + __le16 capab; + __le16 timeout; + __le16 start_seq_num; + } __attribute__((packed)) addba_req; + struct{ + u8 action_code; + u8 dialog_token; + __le16 status; + __le16 capab; + __le16 timeout; + } __attribute__((packed)) addba_resp; + struct{ + u8 action_code; + __le16 params; + __le16 reason_code; + }__attribute__((packed)) delba; } u; } __attribute__ ((packed)) action; } u; @@ -270,6 +400,18 @@ WLAN_STATUS_UNSUPP_RSN_VERSION = 44, WLAN_STATUS_INVALID_RSN_IE_CAP = 45, WLAN_STATUS_CIPHER_SUITE_REJECTED = 46, + /* 802.11e */ + WLAN_STATUS_UNSPECIFIED_QOS = 32, + WLAN_STATUS_ASSOC_DENIED_NOBANDWIDTH = 33, + WLAN_STATUS_ASSOC_DENIED_LOWACK = 34, + WLAN_STATUS_ASSOC_DENIED_UNSUPP_QOS = 35, + WLAN_STATUS_REQUEST_DECLINED = 37, + WLAN_STATUS_INVALID_QOS_PARAM = 38, + WLAN_STATUS_CHANGE_TSPEC = 39, + WLAN_STATUS_WAIT_TS_DELAY = 47, + WLAN_STATUS_NO_DIRECT_LINK = 48, + WLAN_STATUS_STA_NOT_PRESENT = 49, + WLAN_STATUS_STA_NOT_QSTA = 50, }; @@ -300,9 +442,50 @@ WLAN_REASON_INVALID_RSN_IE_CAP = 22, WLAN_REASON_IEEE8021X_FAILED = 23, WLAN_REASON_CIPHER_SUITE_REJECTED = 24, + /* 802.11e */ + WLAN_REASON_DISASSOC_UNSPECIFIED_QOS = 32, + WLAN_REASON_DISASSOC_QAP_NO_BANDWIDTH = 33, + WLAN_REASON_DISASSOC_LOW_ACK = 34, + WLAN_REASON_DISASSOC_QAP_EXCEED_TXOP = 35, + WLAN_REASON_QSTA_LEAVE_QBSS = 36, + WLAN_REASON_QSTA_NOT_USE = 37, + WLAN_REASON_QSTA_REQUIRE_SETUP = 38, + WLAN_REASON_QSTA_TIMEOUT = 39, + WLAN_REASON_QSTA_CIPHER_NOT_SUPP = 45, }; +/* Category Code */ +enum ieee80211_category { + WLAN_CATEGORY_SPECTRUM_MGMT = 0, + WLAN_CATEGORY_QOS = 1, + WLAN_CATEGORY_DLS = 2, + WLAN_CATEGORY_BACK = 3, + WLAN_CATEGORY_WMM = 17, +}; + +/* QoS Action Code */ +enum ieee80211_qos_actioncode { + WLAN_ACTION_QOS_ADDTS_REQ = 0, + WLAN_ACTION_QOS_ADDTS_RESP = 1, + WLAN_ACTION_QOS_DELTS = 2, + WLAN_ACTION_QOS_SCHEDULE = 3, +}; + +/* DLS Action Code */ +enum ieee80211_dls_actioncode { + WLAN_ACTION_DLS_REQ = 0, + WLAN_ACTION_DLS_RESP = 1, + WLAN_ACTION_DLS_TEARDOWN = 2, +}; + +/* BACK Action Code */ +enum ieee80211_back_actioncode { + WLAN_ACTION_ADDBA_REQ = 0, + WLAN_ACTION_ADDBA_RESP = 1, + WLAN_ACTION_DELBA = 2, +}; + /* Information Element IDs */ enum ieee80211_eid { WLAN_EID_SSID = 0, @@ -318,6 +501,15 @@ WLAN_EID_HP_PARAMS = 8, WLAN_EID_HP_TABLE = 9, WLAN_EID_REQUEST = 10, + /* 802.11e */ + WLAN_EID_QBSS_LOAD = 11, + WLAN_EID_EDCA_PARAM_SET = 12, + WLAN_EID_TSPEC = 13, + WLAN_EID_TCLAS = 14, + WLAN_EID_SCHEDULE = 15, + WLAN_EID_TS_DELAY = 43, + WLAN_EID_TCLAS_PROCESSING = 44, + WLAN_EID_QOS_CAPA = 46, /* 802.11h */ WLAN_EID_PWR_CONSTRAINT = 32, WLAN_EID_PWR_CAPABILITY = 33, @@ -332,6 +524,9 @@ /* 802.11g */ WLAN_EID_ERP_INFO = 42, WLAN_EID_EXT_SUPP_RATES = 50, + /* 802.11n */ + WLAN_EID_HT_CAPABILITY = 45, + WLAN_EID_HT_EXTRA_INFO = 61, /* 802.11i */ WLAN_EID_RSN = 48, WLAN_EID_WPA = 221, @@ -340,6 +535,9 @@ WLAN_EID_QOS_PARAMETER = 222 }; +/* 80211n */ +#define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080 + /* cipher suite selectors */ #define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00 #define WLAN_CIPHER_SUITE_WEP40 0x000FAC01 @@ -350,4 +548,37 @@ #define WLAN_MAX_KEY_LEN 32 +enum ieee80211_tsinfo_direction { + WLAN_TSINFO_UPLINK = 0, + WLAN_TSINFO_DOWNLINK = 1, + WLAN_TSINFO_DIRECTLINK = 2, + WLAN_TSINFO_BIDIRECTIONAL = 3, +}; + +enum ieee80211_tsinfo_access { + WLAN_TSINFO_EDCA = 1, + WLAN_TSINFO_HCCA = 2, + WLAN_TSINFO_HEMM = 3, +}; + +enum ieee80211_tsinfo_psb { + WLAN_TSINFO_PSB_LEGACY = 0, + WLAN_TSINFO_PSB_APSD = 1, +}; + + +/* WI-FI Alliance OUI Type and Subtype */ +enum wifi_oui_type { + WIFI_OUI_TYPE_WPA = 1, + WIFI_OUI_TYPE_WMM = 2, + WIFI_OUI_TYPE_WSC = 4, + WIFI_OUI_TYPE_PSD = 6, +}; + +enum wifi_oui_stype_wmm { + WIFI_OUI_STYPE_WMM_INFO = 0, + WIFI_OUI_STYPE_WMM_PARAM = 1, + WIFI_OUI_STYPE_WMM_TSPEC = 2, +}; + #endif /* IEEE80211_H */ Index: linux-2.6.23-rc6/include/linux/nl80211.h =================================================================== --- linux-2.6.23-rc6.orig/include/linux/nl80211.h 2007-09-21 16:23:52.000000000 +0800 +++ linux-2.6.23-rc6/include/linux/nl80211.h 2007-09-21 16:24:07.000000000 +0800 @@ -7,6 +7,217 @@ */ /** + * enum nl80211_commands - supported nl80211 commands + * @NL80211_CMD_UNSPEC: unspecified command to catch errors + * @NL80211_CMD_RENAME_WIPHY: rename a wiphy, needs + * %NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME + * @NL80211_CMD_WIPHY_NEWNAME: rename notification + * @NL80211_CMD_GET_CMDLIST: TO BE DEFINED PROPERLY. currently the code makes + * it depend on the wiphy only but it really should depend on the + * interface type too.... + * @NL80211_CMD_NEW_CMDLIST: command list result + * @NL80211_CMD_ADD_VIRTUAL_INTERFACE: create a virtual interface for the + * wiphy identified by an %NL80211_ATTR_WIPHY attribute with the given + * %NL80211_ATTR_IFTYPE and %NL80211_ATTR_IFNAME. + * @NL80211_CMD_DEL_VIRTUAL_INTERFACE: destroy a virtual interface identified + * by %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_CHANGE_VIRTUAL_INTERFACE: change type of virtual interface to + * the type given by %NL80211_ATTR_IFTYPE, the interface is identified by + * %NL80211_ATTR_IFINDEX. + * @NL80211_CMD_GET_WIPHYS: request a list of all wiphys present in the system + * @NL80211_CMD_NEW_WIPHYS: returned list of all wiphys + * @NL80211_CMD_GET_INTERFACES: request a list of all interfaces belonging to + * the wiphy identified by %NL80211_ATTR_WIPHY + * @NL80211_CMD_NEW_INTERFACES: result for %NL80211_CMD_GET_INTERFACES + * @NL80211_CMD_INITIATE_SCAN: initiate a scan with the passed parameters. THe + * parameters may contain %NL80211_ATTR_FLAG_SCAN_ACTIVE, + * %NL80211_ATTR_PHYMODE and a list of channels in an + * %NL80211_ATTR_CHANNEL_LIST attribute (an array of nested attributes) + * containing %NL80211_ATTR_CHANNEL, %NL80211_ATTR_PHYMODE, and possibly + * %NL80211_ATTR_FLAG_SCAN_ACTIVE. The outer %NL80211_ATTR_FLAG_SCAN_ACTIVE + * is ignored when a channel list is present. + * @NL80211_CMD_SCAN_RESULT: scan result, contains an array in + * %NL80211_ATTR_BSS_LIST. + * @NL80211_CMD_ASSOCIATE: associate with the given parameters + * (%NL80211_ATTR_SSID is mandatory, %NL80211_ATTR_TIMEOUT_TU, + * %NL80211_ATTR_BSSID, %NL80211_ATTR_CHANNEL, %NL80211_ATTR_PHYMODE, + * and %NL80211_ATTR_IE may be given) + * @NL80211_CMD_ADD_KEY: add a key with given %NL80211_ATTR_KEY_DATA, + * %NL80211_ATTR_KEY_ID, %NL80211_ATTR_KEY_TYPE, %NL80211_ATTR_MAC and + * %NL80211_ATTR_KEY_CIPHER attributes. + * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_ID, + * %NL80211_ATTR_KEY_TYPE and %NL80211_ATTR_MAC or all keys. + * @__NL80211_CMD_AFTER_LAST: internal use + */ +enum nl80211_commands { +/* don't change the order or add anything inbetween, this is ABI! */ + NL80211_CMD_UNSPEC, + /* %input: wiphy, wiphy_name */ + NL80211_CMD_RENAME_WIPHY, + NL80211_CMD_WIPHY_NEWNAME, + /* %input: wiphy|ifindex */ + NL80211_CMD_GET_CMDLIST, + NL80211_CMD_NEW_CMDLIST, + /* %input: wiphy, ifname, {iftype} */ + NL80211_CMD_ADD_VIRTUAL_INTERFACE, + /* %input: wiphy, ifindex */ + NL80211_CMD_DEL_VIRTUAL_INTERFACE, + /* %input: ifindex, iftype */ + NL80211_CMD_CHANGE_VIRTUAL_INTERFACE, + /* %input: */ + NL80211_CMD_GET_WIPHYS, + NL80211_CMD_NEW_WIPHYS, + /* %input: wiphy */ + NL80211_CMD_GET_INTERFACES, + NL80211_CMD_NEW_INTERFACES, + NL80211_CMD_INITIATE_SCAN, + NL80211_CMD_SCAN_RESULT, + NL80211_CMD_GET_ASSOCIATION, + NL80211_CMD_ASSOCIATION_CHANGED, + NL80211_CMD_ASSOCIATE, + NL80211_CMD_DISASSOCIATE, + NL80211_CMD_DEAUTH, + NL80211_CMD_GET_AUTH_LIST, + NL80211_CMD_NEW_AUTH_LIST, + NL80211_CMD_AUTHENTICATION_CHANGED, + NL80211_CMD_AP_SET_BEACON, + NL80211_CMD_AP_ADD_STA, + NL80211_CMD_AP_UPDATE_STA, + NL80211_CMD_AP_GET_STA_INFO, + NL80211_CMD_AP_SET_RATESETS, + NL80211_CMD_ADD_KEY, + NL80211_CMD_DEL_KEY, + + /* add commands here */ + + /* used to define NL80211_CMD_MAX below */ + __NL80211_CMD_AFTER_LAST +}; +#define NL80211_CMD_MAX (__NL80211_CMD_AFTER_LAST - 1) + + +/** + * enum nl80211_attrs - nl80211 netlink attributes + * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors + * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on + * @NL80211_ATTR_IFNAME: network interface name + * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf. + * /sys/class/ieee80211//index + * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming) + * @NL80211_ATTR_CMDS: list of u8's identifying commands a device supports + * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype + * @NL80211_ATTR_INTERFACE_LIST: interface array, nested netlink attribute + * @NL80211_ATTR_WIPHY_LIST: wiphy array, nested netlink attribute + * @NL80211_ATTR_BSSID: BSSID (must be 6 bytes) + * @NL80211_ATTR_SSID: SSID (1-32 bytes) + * @NL80211_ATTR_CHANNEL: channel number + * @NL80211_ATTR_PHYMODE: PHY mode, see &enum nl80211_phymode + * @NL80211_ATTR_CHANNEL_LIST: netlink nested attribute array containing scan + * parameters for channels + * @NL80211_ATTR_BSS_LIST: nested attribute containing an array + * @NL80211_ATTR_BSSTYPE: BSS type, see &enum nl80211_bsstype + * @NL80211_ATTR_BEACON_PERIOD: beacon period + * @NL80211_ATTR_DTIM_PERIOD: DTIM period + * @NL80211_ATTR_TIMESTAMP: 64-bit timestamp of received beacon/probe response + * @NL80211_ATTR_IE: information element(s), maximum length %NL80211_MAX_IE_LEN + * @NL80211_ATTR_AUTH_ALGORITHM: authentication algorithm + * @NL80211_ATTR_TIMEOUT_TU: timeout in TU (TO BE USED) + * @NL80211_ATTR_REASON_CODE: 802.11 reason code + * @NL80211_ATTR_ASSOCIATION_ID: association ID (u16, 1-2007) + * @NL80211_ATTR_DEAUTHENTICATED: TO BE USED + * @NL80211_ATTR_RX_SENSITIVITY: receiver sensitivity in dBm + * @NL80211_ATTR_TRANSMIT_POWER: transmit power in mW + * @NL80211_ATTR_FRAG_THRESHOLD: fragmentation threshold (bytes) + * @NL80211_ATTR_FLAG_SCAN_ACTIVE: netlink flag indiciating active scan + * @NL80211_ATTR_KEY_DATA: temporal key data + * @NL80211_ATTR_KEY_ID: key ID (u8, 0-3) + * @NL80211_ATTR_KEY_TYPE: key type (see &enum nl80211_keytype) + * @NL80211_ATTR_MAC: MAC address + * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32) + * @__NL80211_ATTR_AFTER_LAST: internal use + */ +enum nl80211_attrs { +/* don't change the order or add anything inbetween, this is ABI! */ + NL80211_ATTR_UNSPEC, + /* %type: u32 */ + NL80211_ATTR_IFINDEX, + /* %type: nulstring */ + NL80211_ATTR_IFNAME, + /* %type: u32 */ + NL80211_ATTR_WIPHY, + /* %type: nulstring */ + NL80211_ATTR_WIPHY_NAME, + NL80211_ATTR_CMDS, + /* %type: u32 */ + NL80211_ATTR_IFTYPE, + NL80211_ATTR_INTERFACE_LIST, + NL80211_ATTR_WIPHY_LIST, + NL80211_ATTR_BSSID, + NL80211_ATTR_SSID, + NL80211_ATTR_CHANNEL, + NL80211_ATTR_PHYMODE, + NL80211_ATTR_CHANNEL_LIST, + NL80211_ATTR_BSS_LIST, + NL80211_ATTR_BSSTYPE, + NL80211_ATTR_BEACON_PERIOD, + NL80211_ATTR_DTIM_PERIOD, + NL80211_ATTR_TIMESTAMP, + NL80211_ATTR_IE, + NL80211_ATTR_AUTH_ALGORITHM, + NL80211_ATTR_TIMEOUT_TU, + NL80211_ATTR_REASON_CODE, + NL80211_ATTR_ASSOCIATION_ID, + NL80211_ATTR_DEAUTHENTICATED, + NL80211_ATTR_RX_SENSITIVITY, + NL80211_ATTR_TRANSMIT_POWER, + NL80211_ATTR_FRAG_THRESHOLD, + NL80211_ATTR_FLAG_SCAN_ACTIVE, + + NL80211_ATTR_KEY_DATA, + NL80211_ATTR_KEY_ID, + NL80211_ATTR_KEY_TYPE, + NL80211_ATTR_MAC, + NL80211_ATTR_KEY_CIPHER, + + NL80211_ATTR_BEACON_HEAD, + NL80211_ATTR_BEACON_TAIL, + + /* add attributes here, update the policy in nl80211.c */ + + /* used to define NL80211_ATTR_MAX below */ + __NL80211_ATTR_AFTER_LAST, +}; +#define NL80211_ATTR_MAX (__NL80211_ATTR_AFTER_LAST - 1) + +/** + * enum nl80211_multicast_groups - multicast groups for nl80211 + * @NL80211_GROUP_CONFIG: members of this group are notified of + * configuration changes + */ +enum nl80211_multicast_groups { + /* be notified of configuration changes like wiphy renames */ + NL80211_GROUP_CONFIG, + + /* add groups here */ + + /* keep last */ + __NL80211_GROUP_AFTER_LAST +}; +#define NL80211_GROUP_MAX (__NL80211_GROUP_AFTER_LAST - 1) + +/* + * maximum length of IE(s) passed in an NL80211_ATTR_IE. + * this is an arbitrary limit, 774 means three full-length + * IEs would fit... increase if necessary */ +#define NL80211_MAX_IE_LEN 774 + +/* + * maximum number of items in an ATTR_CHANNEL_LIST, + * just to avoid too large allocations + */ +#define NL80211_MAX_CHANNEL_LIST_ITEM 200 + +/** * enum nl80211_iftype - (virtual) interface types * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides * @NL80211_IFTYPE_ADHOC: independent BSS member @@ -35,4 +246,56 @@ }; #define NL80211_IFTYPE_MAX (__NL80211_IFTYPE_AFTER_LAST - 1) +/** + * enum nl80211_phymode - PHY modes + * @NL80211_PHYMODE_A: 5 GHz PHY + * @NL80211_PHYMODE_B: 2.4 GHz PHY (B mode) + * @NL80211_PHYMODE_G: 2.4 GHz PHY (G, compatible with B) + * @__NL80211_PHYMODE_AFTER_LAST: internal use + * + * These values are used for %NL80211_ATTR_PHYMODE. + */ +enum nl80211_phymode { + NL80211_PHYMODE_A, + NL80211_PHYMODE_B, + NL80211_PHYMODE_G, + + /* keep last */ + __NL80211_PHYMODE_AFTER_LAST +}; +#define NL80211_PHYMODE_MAX (__NL80211_PHYMODE_AFTER_LAST - 1) + +/** + * enum nl80211_bsstype - BSS types + * @NL80211_BSSTYPE_INFRASTRUCTURE: infrastructure BSS + * @NL80211_BSSTYPE_INDEPENDENT: independent BSS (ad-hoc network) + * @__NL80211_BSSTYPE_AFTER_LAST: internal use + * + * These values are used for %NL80211_ATTR_BSSTYPE. + */ +enum nl80211_bsstype { + NL80211_BSSTYPE_INFRASTRUCTURE, + NL80211_BSSTYPE_INDEPENDENT, + + /* keep last */ + __NL80211_BSSTYPE_AFTER_LAST +}; +#define NL80211_BSSTYPE_MAX (__NL80211_BSSTYPE_AFTER_LAST - 1) + +/** + * enum nl80211_keytype - key types + * @NL80211_KEYTYPE_GROUP: group key + * @NL80211_KEYTYPE_PAIRWISE: pairwise key + * @NL80211_KEYTYPE_PEER: peer key + */ +enum nl80211_keytype { + NL80211_KEYTYPE_GROUP, + NL80211_KEYTYPE_PAIRWISE, + NL80211_KEYTYPE_PEER, + + /* keep last */ + __NL80211_KEYTYPE_AFTER_LAST +}; +#define NL80211_KEYTYPE_MAX (__NL80211_KEYTYPE_AFTER_LAST - 1) + #endif /* __LINUX_NL80211_H */ Index: linux-2.6.23-rc6/include/net/cfg80211.h =================================================================== --- linux-2.6.23-rc6.orig/include/net/cfg80211.h 2007-09-21 16:23:52.000000000 +0800 +++ linux-2.6.23-rc6/include/net/cfg80211.h 2007-09-21 16:24:07.000000000 +0800 @@ -3,6 +3,7 @@ #include #include +#include #include /* @@ -49,6 +50,69 @@ struct ieee80211_radiotap_iterator *iterator); +/** + * struct scan_channel - describes a single channel to scan + * @phymode: PHY mode for this channel + * @channel: channel number (1-14, ...) + * @active: scan actively or passively on this channel + */ +struct scan_channel { + enum nl80211_phymode phymode; + u32 channel; + int active; +}; + +/** + * struct scan_params - describes scan parameters + * @n_channels: number of items in @channels array or -1 to indicate all + * channels should be scanned (in that case @channels will be %NULL) + * @active: when n_channels is -1 this determines active/passive scanning. + * @phymode: when n_channels is -1 this determines PHY mode to scan. It is + * not possible to scan different PHY modes in one request w/o giving + * a channel list. + * @channels: array containing @n_channels &struct scan_channel items + */ +struct scan_params { + int n_channels; + int active; + enum nl80211_phymode phymode; + struct scan_channel *channels; +}; + +/** + * struct association_params - describes association parameters + * @valid: this member contains flags which items are valid + * @bssid: the BSSID of the BSS to associate [%ASSOC_PARAMS_BSSID] + * @timeout: timeout (in TU) [%ASSOC_PARAMS_TIMEOUT] + * @ie: information element(s) to include in the association frames [%ASSOC_PARAMS_IE] + * @ie_len: length of the information element(s) + * @ssid: the SSID, always valid. + * @ssid_len: length of the SSID + */ +struct association_params { + u8 *bssid; + u32 timeout; + u8 *ie; + int ie_len; + u8 *ssid; + int ssid_len; + + unsigned int valid; +}; +#define ASSOC_PARAMS_TIMEOUT (1<<0) + +/** + * struct key_params - key information + */ +struct key_params { + u8 *key; + int key_len; + int key_id; + u32 key_type; + u8 *macaddress; + u32 cipher; +}; + /* from net/wireless.h */ struct wiphy; @@ -68,11 +132,62 @@ * @add_virtual_intf: create a new virtual interface with the given name * * @del_virtual_intf: remove the virtual interface determined by ifindex. + * + * @change_virtual_intf: change type of virtual interface + * + * @associate: associate with given parameters + * + * @disassociate: disassociate from current AP + * + * @deauth: deauth from current AP + * + * @initiate_scan: scan with the given information (see &struct scan_params above) + * + * @get_association: get BSSID of the BSS that the device is currently + * associated to and return 1, or return 0 if not + * associated (or a negative error code) + * @get_auth_list: get list of BSSIDs of all BSSs the device has + * authenticated with, must call next_bssid for each, + * next_bssid returns non-zero on error, the given data + * is to be passed to that callback + * @add_key: add a key using &struct key_params + * @del_key: delete a key using info from &struct key_params */ struct cfg80211_ops { int (*add_virtual_intf)(struct wiphy *wiphy, char *name, - unsigned int type); + enum nl80211_iftype type); int (*del_virtual_intf)(struct wiphy *wiphy, int ifindex); + int (*change_virtual_intf)(struct wiphy *wiphy, int ifindex, + enum nl80211_iftype type); + + int (*associate)(struct wiphy *wiphy, struct net_device *dev, + struct association_params *params); + int (*disassociate)(struct wiphy *wiphy, struct net_device *dev); + int (*deauth)(struct wiphy *wiphy, struct net_device *dev); + + + int (*initiate_scan)(struct wiphy *wiphy, struct net_device *dev, + struct scan_params *params); + + + int (*get_association)(struct wiphy *wiphy, struct net_device *dev, + u8 *bssid); + + int (*get_auth_list)(struct wiphy *wiphy, struct net_device *dev, + void *data, + int (*next_bssid)(void *data, u8 *bssid)); + + int (*add_key)(struct wiphy *wiphy, struct net_device *dev, + struct key_params *params); + int (*del_key)(struct wiphy *wiphy, struct net_device *dev, + struct key_params *params); }; + +/* helper functions specific to nl80211 */ +extern void *nl80211hdr_put(struct sk_buff *skb, u32 pid, + u32 seq, int flags, u8 cmd); +extern void *nl80211msg_new(struct sk_buff **skb, u32 pid, + u32 seq, int flags, u8 cmd); + #endif /* __NET_CFG80211_H */ Index: linux-2.6.23-rc6/include/net/iw_handler.h =================================================================== --- linux-2.6.23-rc6.orig/include/net/iw_handler.h 2007-09-21 16:23:52.000000000 +0800 +++ linux-2.6.23-rc6/include/net/iw_handler.h 2007-09-21 16:24:07.000000000 +0800 @@ -431,7 +431,13 @@ * Those may be called only within the kernel. */ -/* functions that may be called by driver modules */ +/* First : function strictly used inside the kernel */ + +/* Handle /proc/net/wireless, called in net/code/dev.c */ +extern int dev_get_wireless_info(char * buffer, char **start, off_t offset, + int length); + +/* Second : functions that may be called by driver modules */ /* Send a single event to user space */ extern void wireless_send_event(struct net_device * dev, Index: linux-2.6.23-rc6/include/net/mac80211.h =================================================================== --- linux-2.6.23-rc6.orig/include/net/mac80211.h 2007-09-21 16:23:52.000000000 +0800 +++ linux-2.6.23-rc6/include/net/mac80211.h 2007-09-21 16:24:07.000000000 +0800 @@ -300,7 +300,6 @@ /* Following five fields are used for IEEE 802.11H */ unsigned int radar_detect; unsigned int spect_mgmt; - /* All following fields are currently unused. */ unsigned int quiet_duration; /* duration of quiet period */ unsigned int quiet_offset; /* how far into the beacon is the quiet * period */ @@ -521,6 +520,9 @@ * per-packet RC4 key with each TX frame when doing hwcrypto */ #define IEEE80211_HW_TKIP_REQ_PHASE2_KEY (1<<14) + /* The device capable of supporting 11n */ +#define IEEE80211_HW_SUPPORT_HT_MODE (1<<15) + u32 flags; /* hardware flags defined above */ /* Set to the size of a needed device specific skb headroom for TX skbs. */ @@ -649,8 +651,7 @@ * used if the wlan hardware or low-level driver implements PAE. * 80211.o module will anyway filter frames based on authorization * state, so this function pointer can be NULL if low-level driver does - * not require event notification about port state changes. - * Currently unused. */ + * not require event notification about port state changes. */ int (*set_port_auth)(struct ieee80211_hw *hw, u8 *addr, int authorized); @@ -702,8 +703,9 @@ /* Get statistics of the current TX queue status. This is used to get * number of currently queued packets (queue length), maximum queue * size (limit), and total number of packets sent using each TX queue - * (count). - * Currently unused. */ + * (count). This information is used for WMM to find out which TX + * queues have room for more packets and by hostapd to provide + * statistics about the current queueing state to external programs. */ int (*get_tx_stats)(struct ieee80211_hw *hw, struct ieee80211_tx_queue_stats *stats); @@ -713,12 +715,25 @@ * Must be atomic. */ u64 (*get_tsf)(struct ieee80211_hw *hw); + /* Call low level driver with 11n Block Ack action */ + int (*handle_ba_action)(struct ieee80211_hw *hw, + struct ieee80211_mgmt *mgmt); + /* Reset the TSF timer and allow firmware/hardware to synchronize with * other STAs in the IBSS. This is only used in IBSS mode. This * function is optional if the firmware/hardware takes full care of * TSF synchronization. */ void (*reset_tsf)(struct ieee80211_hw *hw); + /* Configure ht parameters. */ + int (*conf_ht)(struct ieee80211_hw *hw, + struct ieee80211_ht_capability *ht_cap_param, + struct ieee80211_ht_additional_info *ht_extra_param); + + /* Get ht capabilities from the device */ + void (*get_ht_capab)(struct ieee80211_hw *hw, + struct ieee80211_ht_capability *ht_cap_param); + /* Setup beacon data for IBSS beacons. Unlike access point (Master), * IBSS uses a fixed beacon frame which is configured using this * function. This handler is required only for IBSS mode. */