Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.24-rc1 414 lines 12 kB view raw
1/* 2 * IEEE 802.11 defines 3 * 4 * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen 5 * <jkmaline@cc.hut.fi> 6 * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi> 7 * Copyright (c) 2005, Devicescape Software, Inc. 8 * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 */ 14 15#ifndef IEEE80211_H 16#define IEEE80211_H 17 18#include <linux/types.h> 19#include <asm/byteorder.h> 20 21#define FCS_LEN 4 22 23#define IEEE80211_FCTL_VERS 0x0003 24#define IEEE80211_FCTL_FTYPE 0x000c 25#define IEEE80211_FCTL_STYPE 0x00f0 26#define IEEE80211_FCTL_TODS 0x0100 27#define IEEE80211_FCTL_FROMDS 0x0200 28#define IEEE80211_FCTL_MOREFRAGS 0x0400 29#define IEEE80211_FCTL_RETRY 0x0800 30#define IEEE80211_FCTL_PM 0x1000 31#define IEEE80211_FCTL_MOREDATA 0x2000 32#define IEEE80211_FCTL_PROTECTED 0x4000 33#define IEEE80211_FCTL_ORDER 0x8000 34 35#define IEEE80211_SCTL_FRAG 0x000F 36#define IEEE80211_SCTL_SEQ 0xFFF0 37 38#define IEEE80211_FTYPE_MGMT 0x0000 39#define IEEE80211_FTYPE_CTL 0x0004 40#define IEEE80211_FTYPE_DATA 0x0008 41 42/* management */ 43#define IEEE80211_STYPE_ASSOC_REQ 0x0000 44#define IEEE80211_STYPE_ASSOC_RESP 0x0010 45#define IEEE80211_STYPE_REASSOC_REQ 0x0020 46#define IEEE80211_STYPE_REASSOC_RESP 0x0030 47#define IEEE80211_STYPE_PROBE_REQ 0x0040 48#define IEEE80211_STYPE_PROBE_RESP 0x0050 49#define IEEE80211_STYPE_BEACON 0x0080 50#define IEEE80211_STYPE_ATIM 0x0090 51#define IEEE80211_STYPE_DISASSOC 0x00A0 52#define IEEE80211_STYPE_AUTH 0x00B0 53#define IEEE80211_STYPE_DEAUTH 0x00C0 54#define IEEE80211_STYPE_ACTION 0x00D0 55 56/* control */ 57#define IEEE80211_STYPE_PSPOLL 0x00A0 58#define IEEE80211_STYPE_RTS 0x00B0 59#define IEEE80211_STYPE_CTS 0x00C0 60#define IEEE80211_STYPE_ACK 0x00D0 61#define IEEE80211_STYPE_CFEND 0x00E0 62#define IEEE80211_STYPE_CFENDACK 0x00F0 63 64/* data */ 65#define IEEE80211_STYPE_DATA 0x0000 66#define IEEE80211_STYPE_DATA_CFACK 0x0010 67#define IEEE80211_STYPE_DATA_CFPOLL 0x0020 68#define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 69#define IEEE80211_STYPE_NULLFUNC 0x0040 70#define IEEE80211_STYPE_CFACK 0x0050 71#define IEEE80211_STYPE_CFPOLL 0x0060 72#define IEEE80211_STYPE_CFACKPOLL 0x0070 73#define IEEE80211_STYPE_QOS_DATA 0x0080 74#define IEEE80211_STYPE_QOS_DATA_CFACK 0x0090 75#define IEEE80211_STYPE_QOS_DATA_CFPOLL 0x00A0 76#define IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0 77#define IEEE80211_STYPE_QOS_NULLFUNC 0x00C0 78#define IEEE80211_STYPE_QOS_CFACK 0x00D0 79#define IEEE80211_STYPE_QOS_CFPOLL 0x00E0 80#define IEEE80211_STYPE_QOS_CFACKPOLL 0x00F0 81 82 83/* miscellaneous IEEE 802.11 constants */ 84#define IEEE80211_MAX_FRAG_THRESHOLD 2346 85#define IEEE80211_MAX_RTS_THRESHOLD 2347 86#define IEEE80211_MAX_AID 2007 87#define IEEE80211_MAX_TIM_LEN 251 88#define IEEE80211_MAX_DATA_LEN 2304 89/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section 90 6.2.1.1.2. 91 92 The figure in section 7.1.2 suggests a body size of up to 2312 93 bytes is allowed, which is a bit confusing, I suspect this 94 represents the 2304 bytes of real data, plus a possible 8 bytes of 95 WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ 96 97#define IEEE80211_MAX_SSID_LEN 32 98 99struct ieee80211_hdr { 100 __le16 frame_control; 101 __le16 duration_id; 102 u8 addr1[6]; 103 u8 addr2[6]; 104 u8 addr3[6]; 105 __le16 seq_ctrl; 106 u8 addr4[6]; 107} __attribute__ ((packed)); 108 109 110struct ieee80211_mgmt { 111 __le16 frame_control; 112 __le16 duration; 113 u8 da[6]; 114 u8 sa[6]; 115 u8 bssid[6]; 116 __le16 seq_ctrl; 117 union { 118 struct { 119 __le16 auth_alg; 120 __le16 auth_transaction; 121 __le16 status_code; 122 /* possibly followed by Challenge text */ 123 u8 variable[0]; 124 } __attribute__ ((packed)) auth; 125 struct { 126 __le16 reason_code; 127 } __attribute__ ((packed)) deauth; 128 struct { 129 __le16 capab_info; 130 __le16 listen_interval; 131 /* followed by SSID and Supported rates */ 132 u8 variable[0]; 133 } __attribute__ ((packed)) assoc_req; 134 struct { 135 __le16 capab_info; 136 __le16 status_code; 137 __le16 aid; 138 /* followed by Supported rates */ 139 u8 variable[0]; 140 } __attribute__ ((packed)) assoc_resp, reassoc_resp; 141 struct { 142 __le16 capab_info; 143 __le16 listen_interval; 144 u8 current_ap[6]; 145 /* followed by SSID and Supported rates */ 146 u8 variable[0]; 147 } __attribute__ ((packed)) reassoc_req; 148 struct { 149 __le16 reason_code; 150 } __attribute__ ((packed)) disassoc; 151 struct { 152 __le64 timestamp; 153 __le16 beacon_int; 154 __le16 capab_info; 155 /* followed by some of SSID, Supported rates, 156 * FH Params, DS Params, CF Params, IBSS Params, TIM */ 157 u8 variable[0]; 158 } __attribute__ ((packed)) beacon; 159 struct { 160 /* only variable items: SSID, Supported rates */ 161 u8 variable[0]; 162 } __attribute__ ((packed)) probe_req; 163 struct { 164 __le64 timestamp; 165 __le16 beacon_int; 166 __le16 capab_info; 167 /* followed by some of SSID, Supported rates, 168 * FH Params, DS Params, CF Params, IBSS Params */ 169 u8 variable[0]; 170 } __attribute__ ((packed)) probe_resp; 171 struct { 172 u8 category; 173 union { 174 struct { 175 u8 action_code; 176 u8 dialog_token; 177 u8 status_code; 178 u8 variable[0]; 179 } __attribute__ ((packed)) wme_action; 180 struct{ 181 u8 action_code; 182 u8 element_id; 183 u8 length; 184 u8 switch_mode; 185 u8 new_chan; 186 u8 switch_count; 187 } __attribute__((packed)) chan_switch; 188 } u; 189 } __attribute__ ((packed)) action; 190 } u; 191} __attribute__ ((packed)); 192 193 194/* Control frames */ 195struct ieee80211_rts { 196 __le16 frame_control; 197 __le16 duration; 198 u8 ra[6]; 199 u8 ta[6]; 200} __attribute__ ((packed)); 201 202struct ieee80211_cts { 203 __le16 frame_control; 204 __le16 duration; 205 u8 ra[6]; 206} __attribute__ ((packed)); 207 208 209/* Authentication algorithms */ 210#define WLAN_AUTH_OPEN 0 211#define WLAN_AUTH_SHARED_KEY 1 212#define WLAN_AUTH_FAST_BSS_TRANSITION 2 213#define WLAN_AUTH_LEAP 128 214 215#define WLAN_AUTH_CHALLENGE_LEN 128 216 217#define WLAN_CAPABILITY_ESS (1<<0) 218#define WLAN_CAPABILITY_IBSS (1<<1) 219#define WLAN_CAPABILITY_CF_POLLABLE (1<<2) 220#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) 221#define WLAN_CAPABILITY_PRIVACY (1<<4) 222#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) 223#define WLAN_CAPABILITY_PBCC (1<<6) 224#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) 225/* 802.11h */ 226#define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) 227#define WLAN_CAPABILITY_QOS (1<<9) 228#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) 229#define WLAN_CAPABILITY_DSSS_OFDM (1<<13) 230 231/* 802.11g ERP information element */ 232#define WLAN_ERP_NON_ERP_PRESENT (1<<0) 233#define WLAN_ERP_USE_PROTECTION (1<<1) 234#define WLAN_ERP_BARKER_PREAMBLE (1<<2) 235 236/* WLAN_ERP_BARKER_PREAMBLE values */ 237enum { 238 WLAN_ERP_PREAMBLE_SHORT = 0, 239 WLAN_ERP_PREAMBLE_LONG = 1, 240}; 241 242/* Status codes */ 243enum ieee80211_statuscode { 244 WLAN_STATUS_SUCCESS = 0, 245 WLAN_STATUS_UNSPECIFIED_FAILURE = 1, 246 WLAN_STATUS_CAPS_UNSUPPORTED = 10, 247 WLAN_STATUS_REASSOC_NO_ASSOC = 11, 248 WLAN_STATUS_ASSOC_DENIED_UNSPEC = 12, 249 WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG = 13, 250 WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION = 14, 251 WLAN_STATUS_CHALLENGE_FAIL = 15, 252 WLAN_STATUS_AUTH_TIMEOUT = 16, 253 WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA = 17, 254 WLAN_STATUS_ASSOC_DENIED_RATES = 18, 255 /* 802.11b */ 256 WLAN_STATUS_ASSOC_DENIED_NOSHORTPREAMBLE = 19, 257 WLAN_STATUS_ASSOC_DENIED_NOPBCC = 20, 258 WLAN_STATUS_ASSOC_DENIED_NOAGILITY = 21, 259 /* 802.11h */ 260 WLAN_STATUS_ASSOC_DENIED_NOSPECTRUM = 22, 261 WLAN_STATUS_ASSOC_REJECTED_BAD_POWER = 23, 262 WLAN_STATUS_ASSOC_REJECTED_BAD_SUPP_CHAN = 24, 263 /* 802.11g */ 264 WLAN_STATUS_ASSOC_DENIED_NOSHORTTIME = 25, 265 WLAN_STATUS_ASSOC_DENIED_NODSSSOFDM = 26, 266 /* 802.11i */ 267 WLAN_STATUS_INVALID_IE = 40, 268 WLAN_STATUS_INVALID_GROUP_CIPHER = 41, 269 WLAN_STATUS_INVALID_PAIRWISE_CIPHER = 42, 270 WLAN_STATUS_INVALID_AKMP = 43, 271 WLAN_STATUS_UNSUPP_RSN_VERSION = 44, 272 WLAN_STATUS_INVALID_RSN_IE_CAP = 45, 273 WLAN_STATUS_CIPHER_SUITE_REJECTED = 46, 274}; 275 276 277/* Reason codes */ 278enum ieee80211_reasoncode { 279 WLAN_REASON_UNSPECIFIED = 1, 280 WLAN_REASON_PREV_AUTH_NOT_VALID = 2, 281 WLAN_REASON_DEAUTH_LEAVING = 3, 282 WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY = 4, 283 WLAN_REASON_DISASSOC_AP_BUSY = 5, 284 WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA = 6, 285 WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA = 7, 286 WLAN_REASON_DISASSOC_STA_HAS_LEFT = 8, 287 WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH = 9, 288 /* 802.11h */ 289 WLAN_REASON_DISASSOC_BAD_POWER = 10, 290 WLAN_REASON_DISASSOC_BAD_SUPP_CHAN = 11, 291 /* 802.11i */ 292 WLAN_REASON_INVALID_IE = 13, 293 WLAN_REASON_MIC_FAILURE = 14, 294 WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT = 15, 295 WLAN_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT = 16, 296 WLAN_REASON_IE_DIFFERENT = 17, 297 WLAN_REASON_INVALID_GROUP_CIPHER = 18, 298 WLAN_REASON_INVALID_PAIRWISE_CIPHER = 19, 299 WLAN_REASON_INVALID_AKMP = 20, 300 WLAN_REASON_UNSUPP_RSN_VERSION = 21, 301 WLAN_REASON_INVALID_RSN_IE_CAP = 22, 302 WLAN_REASON_IEEE8021X_FAILED = 23, 303 WLAN_REASON_CIPHER_SUITE_REJECTED = 24, 304}; 305 306 307/* Information Element IDs */ 308enum ieee80211_eid { 309 WLAN_EID_SSID = 0, 310 WLAN_EID_SUPP_RATES = 1, 311 WLAN_EID_FH_PARAMS = 2, 312 WLAN_EID_DS_PARAMS = 3, 313 WLAN_EID_CF_PARAMS = 4, 314 WLAN_EID_TIM = 5, 315 WLAN_EID_IBSS_PARAMS = 6, 316 WLAN_EID_CHALLENGE = 16, 317 /* 802.11d */ 318 WLAN_EID_COUNTRY = 7, 319 WLAN_EID_HP_PARAMS = 8, 320 WLAN_EID_HP_TABLE = 9, 321 WLAN_EID_REQUEST = 10, 322 /* 802.11h */ 323 WLAN_EID_PWR_CONSTRAINT = 32, 324 WLAN_EID_PWR_CAPABILITY = 33, 325 WLAN_EID_TPC_REQUEST = 34, 326 WLAN_EID_TPC_REPORT = 35, 327 WLAN_EID_SUPPORTED_CHANNELS = 36, 328 WLAN_EID_CHANNEL_SWITCH = 37, 329 WLAN_EID_MEASURE_REQUEST = 38, 330 WLAN_EID_MEASURE_REPORT = 39, 331 WLAN_EID_QUIET = 40, 332 WLAN_EID_IBSS_DFS = 41, 333 /* 802.11g */ 334 WLAN_EID_ERP_INFO = 42, 335 WLAN_EID_EXT_SUPP_RATES = 50, 336 /* 802.11i */ 337 WLAN_EID_RSN = 48, 338 WLAN_EID_WPA = 221, 339 WLAN_EID_GENERIC = 221, 340 WLAN_EID_VENDOR_SPECIFIC = 221, 341 WLAN_EID_QOS_PARAMETER = 222 342}; 343 344/* cipher suite selectors */ 345#define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00 346#define WLAN_CIPHER_SUITE_WEP40 0x000FAC01 347#define WLAN_CIPHER_SUITE_TKIP 0x000FAC02 348/* reserved: 0x000FAC03 */ 349#define WLAN_CIPHER_SUITE_CCMP 0x000FAC04 350#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05 351 352#define WLAN_MAX_KEY_LEN 32 353 354/** 355 * ieee80211_get_SA - get pointer to SA 356 * 357 * Given an 802.11 frame, this function returns the offset 358 * to the source address (SA). It does not verify that the 359 * header is long enough to contain the address, and the 360 * header must be long enough to contain the frame control 361 * field. 362 * 363 * @hdr: the frame 364 */ 365static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr) 366{ 367 u8 *raw = (u8 *) hdr; 368 u8 tofrom = (*(raw+1)) & 3; /* get the TODS and FROMDS bits */ 369 370 switch (tofrom) { 371 case 2: 372 return hdr->addr3; 373 case 3: 374 return hdr->addr4; 375 } 376 return hdr->addr2; 377} 378 379/** 380 * ieee80211_get_DA - get pointer to DA 381 * 382 * Given an 802.11 frame, this function returns the offset 383 * to the destination address (DA). It does not verify that 384 * the header is long enough to contain the address, and the 385 * header must be long enough to contain the frame control 386 * field. 387 * 388 * @hdr: the frame 389 */ 390static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr) 391{ 392 u8 *raw = (u8 *) hdr; 393 u8 to_ds = (*(raw+1)) & 1; /* get the TODS bit */ 394 395 if (to_ds) 396 return hdr->addr3; 397 return hdr->addr1; 398} 399 400/** 401 * ieee80211_get_morefrag - determine whether the MOREFRAGS bit is set 402 * 403 * This function determines whether the "more fragments" bit is set 404 * in the frame. 405 * 406 * @hdr: the frame 407 */ 408static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr) 409{ 410 return (le16_to_cpu(hdr->frame_control) & 411 IEEE80211_FCTL_MOREFRAGS) != 0; 412} 413 414#endif /* IEEE80211_H */