diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-22 10:38:37 -0500 |
commit | fcc9d2e5a6c89d22b8b773a64fb4ad21ac318446 (patch) | |
tree | a57612d1888735a2ec7972891b68c1ac5ec8faea /drivers/net/wireless/bcm4329/include/proto/eapol.h | |
parent | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (diff) |
Diffstat (limited to 'drivers/net/wireless/bcm4329/include/proto/eapol.h')
-rw-r--r-- | drivers/net/wireless/bcm4329/include/proto/eapol.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/drivers/net/wireless/bcm4329/include/proto/eapol.h b/drivers/net/wireless/bcm4329/include/proto/eapol.h new file mode 100644 index 00000000000..95e76ff18c6 --- /dev/null +++ b/drivers/net/wireless/bcm4329/include/proto/eapol.h | |||
@@ -0,0 +1,172 @@ | |||
1 | /* | ||
2 | * 802.1x EAPOL definitions | ||
3 | * | ||
4 | * See | ||
5 | * IEEE Std 802.1X-2001 | ||
6 | * IEEE 802.1X RADIUS Usage Guidelines | ||
7 | * | ||
8 | * Copyright (C) 2002 Broadcom Corporation | ||
9 | * | ||
10 | * $Id: eapol.h,v 9.18.260.1.2.1.6.6 2009/04/08 05:00:08 Exp $ | ||
11 | */ | ||
12 | |||
13 | #ifndef _eapol_h_ | ||
14 | #define _eapol_h_ | ||
15 | |||
16 | #ifndef _TYPEDEFS_H_ | ||
17 | #include <typedefs.h> | ||
18 | #endif | ||
19 | |||
20 | /* This marks the start of a packed structure section. */ | ||
21 | #include <packed_section_start.h> | ||
22 | |||
23 | #define AKW_BLOCK_LEN 8 /* The only def we need here */ | ||
24 | |||
25 | /* EAPOL for 802.3/Ethernet */ | ||
26 | typedef struct { | ||
27 | struct ether_header eth; /* 802.3/Ethernet header */ | ||
28 | unsigned char version; /* EAPOL protocol version */ | ||
29 | unsigned char type; /* EAPOL type */ | ||
30 | unsigned short length; /* Length of body */ | ||
31 | unsigned char body[1]; /* Body (optional) */ | ||
32 | } eapol_header_t; | ||
33 | |||
34 | #define EAPOL_HEADER_LEN 18 | ||
35 | |||
36 | /* EAPOL version */ | ||
37 | #define WPA2_EAPOL_VERSION 2 | ||
38 | #define WPA_EAPOL_VERSION 1 | ||
39 | #define LEAP_EAPOL_VERSION 1 | ||
40 | #define SES_EAPOL_VERSION 1 | ||
41 | |||
42 | /* EAPOL types */ | ||
43 | #define EAP_PACKET 0 | ||
44 | #define EAPOL_START 1 | ||
45 | #define EAPOL_LOGOFF 2 | ||
46 | #define EAPOL_KEY 3 | ||
47 | #define EAPOL_ASF 4 | ||
48 | |||
49 | /* EAPOL-Key types */ | ||
50 | #define EAPOL_RC4_KEY 1 | ||
51 | #define EAPOL_WPA2_KEY 2 /* 802.11i/WPA2 */ | ||
52 | #define EAPOL_WPA_KEY 254 /* WPA */ | ||
53 | |||
54 | /* RC4 EAPOL-Key header field sizes */ | ||
55 | #define EAPOL_KEY_REPLAY_LEN 8 | ||
56 | #define EAPOL_KEY_IV_LEN 16 | ||
57 | #define EAPOL_KEY_SIG_LEN 16 | ||
58 | |||
59 | /* RC4 EAPOL-Key */ | ||
60 | typedef BWL_PRE_PACKED_STRUCT struct { | ||
61 | unsigned char type; /* Key Descriptor Type */ | ||
62 | unsigned short length; /* Key Length (unaligned) */ | ||
63 | unsigned char replay[EAPOL_KEY_REPLAY_LEN]; /* Replay Counter */ | ||
64 | unsigned char iv[EAPOL_KEY_IV_LEN]; /* Key IV */ | ||
65 | unsigned char index; /* Key Flags & Index */ | ||
66 | unsigned char signature[EAPOL_KEY_SIG_LEN]; /* Key Signature */ | ||
67 | unsigned char key[1]; /* Key (optional) */ | ||
68 | } BWL_POST_PACKED_STRUCT eapol_key_header_t; | ||
69 | |||
70 | #define EAPOL_KEY_HEADER_LEN 44 | ||
71 | |||
72 | /* RC4 EAPOL-Key flags */ | ||
73 | #define EAPOL_KEY_FLAGS_MASK 0x80 | ||
74 | #define EAPOL_KEY_BROADCAST 0 | ||
75 | #define EAPOL_KEY_UNICAST 0x80 | ||
76 | |||
77 | /* RC4 EAPOL-Key index */ | ||
78 | #define EAPOL_KEY_INDEX_MASK 0x7f | ||
79 | |||
80 | /* WPA/802.11i/WPA2 EAPOL-Key header field sizes */ | ||
81 | #define EAPOL_WPA_KEY_REPLAY_LEN 8 | ||
82 | #define EAPOL_WPA_KEY_NONCE_LEN 32 | ||
83 | #define EAPOL_WPA_KEY_IV_LEN 16 | ||
84 | #define EAPOL_WPA_KEY_ID_LEN 8 | ||
85 | #define EAPOL_WPA_KEY_RSC_LEN 8 | ||
86 | #define EAPOL_WPA_KEY_MIC_LEN 16 | ||
87 | #define EAPOL_WPA_KEY_DATA_LEN (EAPOL_WPA_MAX_KEY_SIZE + AKW_BLOCK_LEN) | ||
88 | #define EAPOL_WPA_MAX_KEY_SIZE 32 | ||
89 | |||
90 | /* WPA EAPOL-Key */ | ||
91 | typedef BWL_PRE_PACKED_STRUCT struct { | ||
92 | unsigned char type; /* Key Descriptor Type */ | ||
93 | unsigned short key_info; /* Key Information (unaligned) */ | ||
94 | unsigned short key_len; /* Key Length (unaligned) */ | ||
95 | unsigned char replay[EAPOL_WPA_KEY_REPLAY_LEN]; /* Replay Counter */ | ||
96 | unsigned char nonce[EAPOL_WPA_KEY_NONCE_LEN]; /* Nonce */ | ||
97 | unsigned char iv[EAPOL_WPA_KEY_IV_LEN]; /* Key IV */ | ||
98 | unsigned char rsc[EAPOL_WPA_KEY_RSC_LEN]; /* Key RSC */ | ||
99 | unsigned char id[EAPOL_WPA_KEY_ID_LEN]; /* WPA:Key ID, 802.11i/WPA2: Reserved */ | ||
100 | unsigned char mic[EAPOL_WPA_KEY_MIC_LEN]; /* Key MIC */ | ||
101 | unsigned short data_len; /* Key Data Length */ | ||
102 | unsigned char data[EAPOL_WPA_KEY_DATA_LEN]; /* Key data */ | ||
103 | } BWL_POST_PACKED_STRUCT eapol_wpa_key_header_t; | ||
104 | |||
105 | #define EAPOL_WPA_KEY_LEN 95 | ||
106 | |||
107 | /* WPA/802.11i/WPA2 KEY KEY_INFO bits */ | ||
108 | #define WPA_KEY_DESC_V1 0x01 | ||
109 | #define WPA_KEY_DESC_V2 0x02 | ||
110 | #define WPA_KEY_PAIRWISE 0x08 | ||
111 | #define WPA_KEY_INSTALL 0x40 | ||
112 | #define WPA_KEY_ACK 0x80 | ||
113 | #define WPA_KEY_MIC 0x100 | ||
114 | #define WPA_KEY_SECURE 0x200 | ||
115 | #define WPA_KEY_ERROR 0x400 | ||
116 | #define WPA_KEY_REQ 0x800 | ||
117 | |||
118 | /* WPA-only KEY KEY_INFO bits */ | ||
119 | #define WPA_KEY_INDEX_0 0x00 | ||
120 | #define WPA_KEY_INDEX_1 0x10 | ||
121 | #define WPA_KEY_INDEX_2 0x20 | ||
122 | #define WPA_KEY_INDEX_3 0x30 | ||
123 | #define WPA_KEY_INDEX_MASK 0x30 | ||
124 | #define WPA_KEY_INDEX_SHIFT 0x04 | ||
125 | |||
126 | /* 802.11i/WPA2-only KEY KEY_INFO bits */ | ||
127 | #define WPA_KEY_ENCRYPTED_DATA 0x1000 | ||
128 | |||
129 | /* Key Data encapsulation */ | ||
130 | typedef BWL_PRE_PACKED_STRUCT struct { | ||
131 | uint8 type; | ||
132 | uint8 length; | ||
133 | uint8 oui[3]; | ||
134 | uint8 subtype; | ||
135 | uint8 data[1]; | ||
136 | } BWL_POST_PACKED_STRUCT eapol_wpa2_encap_data_t; | ||
137 | |||
138 | #define EAPOL_WPA2_ENCAP_DATA_HDR_LEN 6 | ||
139 | |||
140 | #define WPA2_KEY_DATA_SUBTYPE_GTK 1 | ||
141 | #define WPA2_KEY_DATA_SUBTYPE_STAKEY 2 | ||
142 | #define WPA2_KEY_DATA_SUBTYPE_MAC 3 | ||
143 | #define WPA2_KEY_DATA_SUBTYPE_PMKID 4 | ||
144 | |||
145 | /* GTK encapsulation */ | ||
146 | typedef BWL_PRE_PACKED_STRUCT struct { | ||
147 | uint8 flags; | ||
148 | uint8 reserved; | ||
149 | uint8 gtk[EAPOL_WPA_MAX_KEY_SIZE]; | ||
150 | } BWL_POST_PACKED_STRUCT eapol_wpa2_key_gtk_encap_t; | ||
151 | |||
152 | #define EAPOL_WPA2_KEY_GTK_ENCAP_HDR_LEN 2 | ||
153 | |||
154 | #define WPA2_GTK_INDEX_MASK 0x03 | ||
155 | #define WPA2_GTK_INDEX_SHIFT 0x00 | ||
156 | |||
157 | #define WPA2_GTK_TRANSMIT 0x04 | ||
158 | |||
159 | /* STAKey encapsulation */ | ||
160 | typedef BWL_PRE_PACKED_STRUCT struct { | ||
161 | uint8 reserved[2]; | ||
162 | uint8 mac[ETHER_ADDR_LEN]; | ||
163 | uint8 stakey[EAPOL_WPA_MAX_KEY_SIZE]; | ||
164 | } BWL_POST_PACKED_STRUCT eapol_wpa2_key_stakey_encap_t; | ||
165 | |||
166 | #define WPA2_KEY_DATA_PAD 0xdd | ||
167 | |||
168 | |||
169 | /* This marks the end of a packed structure section. */ | ||
170 | #include <packed_section_end.h> | ||
171 | |||
172 | #endif /* _eapol_h_ */ | ||