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.30 356 lines 9.6 kB view raw
1/* 2 ************************************************************************* 3 * Ralink Tech Inc. 4 * 5F., No.36, Taiyuan St., Jhubei City, 5 * Hsinchu County 302, 6 * Taiwan, R.O.C. 7 * 8 * (c) Copyright 2002-2007, Ralink Technology, Inc. 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 as published by * 12 * the Free Software Foundation; either version 2 of the License, or * 13 * (at your option) any later version. * 14 * * 15 * This program is distributed in the hope that it will be useful, * 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 18 * GNU General Public License for more details. * 19 * * 20 * You should have received a copy of the GNU General Public License * 21 * along with this program; if not, write to the * 22 * Free Software Foundation, Inc., * 23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 24 * * 25 ************************************************************************* 26 27 Module Name: 28 wpa.h 29 30 Abstract: 31 32 Revision History: 33 Who When What 34 -------- ---------- ---------------------------------------------- 35 Name Date Modification logs 36*/ 37 38#ifndef __WPA_H__ 39#define __WPA_H__ 40 41// EAPOL Key descripter frame format related length 42#define LEN_KEY_DESC_NONCE 32 43#define LEN_KEY_DESC_IV 16 44#define LEN_KEY_DESC_RSC 8 45#define LEN_KEY_DESC_ID 8 46#define LEN_KEY_DESC_REPLAY 8 47#define LEN_KEY_DESC_MIC 16 48 49// The length is the EAPoL-Key frame except key data field. 50// Please refer to 802.11i-2004 ,Figure 43u in p.78 51#define LEN_EAPOL_KEY_MSG (sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE) 52 53// EAP Code Type. 54#define EAP_CODE_REQUEST 1 55#define EAP_CODE_RESPONSE 2 56#define EAP_CODE_SUCCESS 3 57#define EAP_CODE_FAILURE 4 58 59// EAPOL frame Protocol Version 60#define EAPOL_VER 1 61#define EAPOL_VER2 2 62 63// EAPOL-KEY Descriptor Type 64#define WPA1_KEY_DESC 0xfe 65#define WPA2_KEY_DESC 0x02 66 67// Key Descriptor Version of Key Information 68#define DESC_TYPE_TKIP 1 69#define DESC_TYPE_AES 2 70#define DESC_TYPE_MESH 3 71 72#define LEN_MSG1_2WAY 0x7f 73#define MAX_LEN_OF_EAP_HS 256 74 75#define LEN_MASTER_KEY 32 76 77// EAPOL EK, MK 78#define LEN_EAP_EK 16 79#define LEN_EAP_MICK 16 80#define LEN_EAP_KEY ((LEN_EAP_EK)+(LEN_EAP_MICK)) 81// TKIP key related 82#define LEN_PMKID 16 83#define LEN_TKIP_EK 16 84#define LEN_TKIP_RXMICK 8 85#define LEN_TKIP_TXMICK 8 86#define LEN_AES_EK 16 87#define LEN_AES_KEY LEN_AES_EK 88#define LEN_TKIP_KEY ((LEN_TKIP_EK)+(LEN_TKIP_RXMICK)+(LEN_TKIP_TXMICK)) 89#define TKIP_AP_TXMICK_OFFSET ((LEN_EAP_KEY)+(LEN_TKIP_EK)) 90#define TKIP_AP_RXMICK_OFFSET (TKIP_AP_TXMICK_OFFSET+LEN_TKIP_TXMICK) 91#define TKIP_GTK_LENGTH ((LEN_TKIP_EK)+(LEN_TKIP_RXMICK)+(LEN_TKIP_TXMICK)) 92#define LEN_PTK ((LEN_EAP_KEY)+(LEN_TKIP_KEY)) 93 94// RSN IE Length definition 95#define MAX_LEN_OF_RSNIE 90 96#define MIN_LEN_OF_RSNIE 8 97 98//EAP Packet Type 99#define EAPPacket 0 100#define EAPOLStart 1 101#define EAPOLLogoff 2 102#define EAPOLKey 3 103#define EAPOLASFAlert 4 104#define EAPTtypeMax 5 105 106#define EAPOL_MSG_INVALID 0 107#define EAPOL_PAIR_MSG_1 1 108#define EAPOL_PAIR_MSG_2 2 109#define EAPOL_PAIR_MSG_3 3 110#define EAPOL_PAIR_MSG_4 4 111#define EAPOL_GROUP_MSG_1 5 112#define EAPOL_GROUP_MSG_2 6 113 114#define PAIRWISEKEY 1 115#define GROUPKEY 0 116 117// Retry timer counter initial value 118#define PEER_MSG1_RETRY_TIMER_CTR 0 119#define PEER_MSG3_RETRY_TIMER_CTR 10 120#define GROUP_MSG1_RETRY_TIMER_CTR 20 121 122 123#define EAPOL_START_DISABLE 0 124#define EAPOL_START_PSK 1 125#define EAPOL_START_1X 2 126 127#define MIX_CIPHER_WPA_TKIP_ON(x) (((x) & 0x08) != 0) 128#define MIX_CIPHER_WPA_AES_ON(x) (((x) & 0x04) != 0) 129#define MIX_CIPHER_WPA2_TKIP_ON(x) (((x) & 0x02) != 0) 130#define MIX_CIPHER_WPA2_AES_ON(x) (((x) & 0x01) != 0) 131 132#define ROUND_UP(__x, __y) \ 133 (((ULONG)((__x)+((__y)-1))) & ((ULONG)~((__y)-1))) 134 135#define ADD_ONE_To_64BIT_VAR(_V) \ 136{ \ 137 UCHAR cnt = LEN_KEY_DESC_REPLAY; \ 138 do \ 139 { \ 140 cnt--; \ 141 _V[cnt]++; \ 142 if (cnt == 0) \ 143 break; \ 144 }while (_V[cnt] == 0); \ 145} 146 147#define IS_WPA_CAPABILITY(a) (((a) >= Ndis802_11AuthModeWPA) && ((a) <= Ndis802_11AuthModeWPA1PSKWPA2PSK)) 148 149// EAPOL Key Information definition within Key descriptor format 150typedef struct PACKED _KEY_INFO 151{ 152#ifdef RT_BIG_ENDIAN 153 UCHAR KeyAck:1; 154 UCHAR Install:1; 155 UCHAR KeyIndex:2; 156 UCHAR KeyType:1; 157 UCHAR KeyDescVer:3; 158 UCHAR Rsvd:3; 159 UCHAR EKD_DL:1; // EKD for AP; DL for STA 160 UCHAR Request:1; 161 UCHAR Error:1; 162 UCHAR Secure:1; 163 UCHAR KeyMic:1; 164#else 165 UCHAR KeyMic:1; 166 UCHAR Secure:1; 167 UCHAR Error:1; 168 UCHAR Request:1; 169 UCHAR EKD_DL:1; // EKD for AP; DL for STA 170 UCHAR Rsvd:3; 171 UCHAR KeyDescVer:3; 172 UCHAR KeyType:1; 173 UCHAR KeyIndex:2; 174 UCHAR Install:1; 175 UCHAR KeyAck:1; 176#endif 177} KEY_INFO, *PKEY_INFO; 178 179// EAPOL Key descriptor format 180typedef struct PACKED _KEY_DESCRIPTER 181{ 182 UCHAR Type; 183 KEY_INFO KeyInfo; 184 UCHAR KeyLength[2]; 185 UCHAR ReplayCounter[LEN_KEY_DESC_REPLAY]; 186 UCHAR KeyNonce[LEN_KEY_DESC_NONCE]; 187 UCHAR KeyIv[LEN_KEY_DESC_IV]; 188 UCHAR KeyRsc[LEN_KEY_DESC_RSC]; 189 UCHAR KeyId[LEN_KEY_DESC_ID]; 190 UCHAR KeyMic[LEN_KEY_DESC_MIC]; 191 UCHAR KeyDataLen[2]; 192 UCHAR KeyData[MAX_LEN_OF_RSNIE]; 193} KEY_DESCRIPTER, *PKEY_DESCRIPTER; 194 195typedef struct PACKED _EAPOL_PACKET 196{ 197 UCHAR ProVer; 198 UCHAR ProType; 199 UCHAR Body_Len[2]; 200 KEY_DESCRIPTER KeyDesc; 201} EAPOL_PACKET, *PEAPOL_PACKET; 202 203//802.11i D10 page 83 204typedef struct PACKED _GTK_ENCAP 205{ 206#ifndef RT_BIG_ENDIAN 207 UCHAR Kid:2; 208 UCHAR tx:1; 209 UCHAR rsv:5; 210 UCHAR rsv1; 211#else 212 UCHAR rsv:5; 213 UCHAR tx:1; 214 UCHAR Kid:2; 215 UCHAR rsv1; 216#endif 217 UCHAR GTK[TKIP_GTK_LENGTH]; 218} GTK_ENCAP, *PGTK_ENCAP; 219 220typedef struct PACKED _KDE_ENCAP 221{ 222 UCHAR Type; 223 UCHAR Len; 224 UCHAR OUI[3]; 225 UCHAR DataType; 226 GTK_ENCAP GTKEncap; 227} KDE_ENCAP, *PKDE_ENCAP; 228 229// For WPA1 230typedef struct PACKED _RSNIE { 231 UCHAR oui[4]; 232 USHORT version; 233 UCHAR mcast[4]; 234 USHORT ucount; 235 struct PACKED { 236 UCHAR oui[4]; 237 }ucast[1]; 238} RSNIE, *PRSNIE; 239 240// For WPA2 241typedef struct PACKED _RSNIE2 { 242 USHORT version; 243 UCHAR mcast[4]; 244 USHORT ucount; 245 struct PACKED { 246 UCHAR oui[4]; 247 }ucast[1]; 248} RSNIE2, *PRSNIE2; 249 250// AKM Suite 251typedef struct PACKED _RSNIE_AUTH { 252 USHORT acount; 253 struct PACKED { 254 UCHAR oui[4]; 255 }auth[1]; 256} RSNIE_AUTH,*PRSNIE_AUTH; 257 258typedef union PACKED _RSN_CAPABILITIES { 259 struct PACKED { 260#ifdef RT_BIG_ENDIAN 261 USHORT Rsvd:10; 262 USHORT GTKSA_R_Counter:2; 263 USHORT PTKSA_R_Counter:2; 264 USHORT No_Pairwise:1; 265 USHORT PreAuth:1; 266#else 267 USHORT PreAuth:1; 268 USHORT No_Pairwise:1; 269 USHORT PTKSA_R_Counter:2; 270 USHORT GTKSA_R_Counter:2; 271 USHORT Rsvd:10; 272#endif 273 } field; 274 USHORT word; 275} RSN_CAPABILITIES, *PRSN_CAPABILITIES; 276 277typedef struct PACKED _EAP_HDR { 278 UCHAR ProVer; 279 UCHAR ProType; 280 UCHAR Body_Len[2]; 281 UCHAR code; 282 UCHAR identifier; 283 UCHAR length[2]; // including code and identifier, followed by length-2 octets of data 284} EAP_HDR, *PEAP_HDR; 285 286// For supplicant state machine states. 802.11i Draft 4.1, p. 97 287// We simplified it 288typedef enum _WpaState 289{ 290 SS_NOTUSE, // 0 291 SS_START, // 1 292 SS_WAIT_MSG_3, // 2 293 SS_WAIT_GROUP, // 3 294 SS_FINISH, // 4 295 SS_KEYUPDATE, // 5 296} WPA_STATE; 297 298// 299// The definition of the cipher combination 300// 301// bit3 bit2 bit1 bit0 302// +------------+------------+ 303// | WPA | WPA2 | 304// +------+-----+------+-----+ 305// | TKIP | AES | TKIP | AES | 306// | 0 | 1 | 1 | 0 | -> 0x06 307// | 0 | 1 | 1 | 1 | -> 0x07 308// | 1 | 0 | 0 | 1 | -> 0x09 309// | 1 | 0 | 1 | 1 | -> 0x0B 310// | 1 | 1 | 0 | 1 | -> 0x0D 311// | 1 | 1 | 1 | 0 | -> 0x0E 312// | 1 | 1 | 1 | 1 | -> 0x0F 313// +------+-----+------+-----+ 314// 315typedef enum _WpaMixPairCipher 316{ 317 MIX_CIPHER_NOTUSE = 0x00, 318 WPA_NONE_WPA2_TKIPAES = 0x03, // WPA2-TKIPAES 319 WPA_AES_WPA2_TKIP = 0x06, 320 WPA_AES_WPA2_TKIPAES = 0x07, 321 WPA_TKIP_WPA2_AES = 0x09, 322 WPA_TKIP_WPA2_TKIPAES = 0x0B, 323 WPA_TKIPAES_WPA2_NONE = 0x0C, // WPA-TKIPAES 324 WPA_TKIPAES_WPA2_AES = 0x0D, 325 WPA_TKIPAES_WPA2_TKIP = 0x0E, 326 WPA_TKIPAES_WPA2_TKIPAES = 0x0F, 327} WPA_MIX_PAIR_CIPHER; 328 329typedef struct PACKED _RSN_IE_HEADER_STRUCT { 330 UCHAR Eid; 331 UCHAR Length; 332 USHORT Version; // Little endian format 333} RSN_IE_HEADER_STRUCT, *PRSN_IE_HEADER_STRUCT; 334 335// Cipher suite selector types 336typedef struct PACKED _CIPHER_SUITE_STRUCT { 337 UCHAR Oui[3]; 338 UCHAR Type; 339} CIPHER_SUITE_STRUCT, *PCIPHER_SUITE_STRUCT; 340 341// Authentication and Key Management suite selector 342typedef struct PACKED _AKM_SUITE_STRUCT { 343 UCHAR Oui[3]; 344 UCHAR Type; 345} AKM_SUITE_STRUCT, *PAKM_SUITE_STRUCT; 346 347// RSN capability 348typedef struct PACKED _RSN_CAPABILITY { 349 USHORT Rsv:10; 350 USHORT GTKSAReplayCnt:2; 351 USHORT PTKSAReplayCnt:2; 352 USHORT NoPairwise:1; 353 USHORT PreAuth:1; 354} RSN_CAPABILITY, *PRSN_CAPABILITY; 355 356#endif