1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef __IEEE80211_EXT_H
21#define __IEEE80211_EXT_H
22
23#include <osdep_service.h>
24#include <drv_types.h>
25
26#define WMM_OUI_TYPE 2
27#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
28#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
29#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
30#define WMM_VERSION 1
31
32#define WPA_PROTO_WPA BIT(0)
33#define WPA_PROTO_RSN BIT(1)
34
35#define WPA_KEY_MGMT_IEEE8021X BIT(0)
36#define WPA_KEY_MGMT_PSK BIT(1)
37#define WPA_KEY_MGMT_NONE BIT(2)
38#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
39#define WPA_KEY_MGMT_WPA_NONE BIT(4)
40
41
42#define WPA_CAPABILITY_PREAUTH BIT(0)
43#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
44#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
45
46
47#define PMKID_LEN 16
48
49
50struct wpa_ie_hdr {
51 u8 elem_id;
52 u8 len;
53 u8 oui[4];
54 u8 version[2];
55} __packed;
56
57struct rsn_ie_hdr {
58 u8 elem_id;
59 u8 len;
60 u8 version[2];
61} __packed;
62
63struct wme_ac_parameter {
64#if defined(__LITTLE_ENDIAN)
65
66 u8 aifsn:4,
67 acm:1,
68 aci:2,
69 reserved:1;
70
71
72 u8 eCWmin:4,
73 eCWmax:4;
74#elif defined(__BIG_ENDIAN)
75
76 u8 reserved:1,
77 aci:2,
78 acm:1,
79 aifsn:4;
80
81
82 u8 eCWmax:4,
83 eCWmin:4;
84#else
85#error "Please fix <endian.h>"
86#endif
87
88
89 u16 txopLimit;
90} __packed;
91
92struct wme_parameter_element {
93
94 u8 oui[3];
95 u8 oui_type;
96 u8 oui_subtype;
97 u8 version;
98 u8 acInfo;
99 u8 reserved;
100 struct wme_ac_parameter ac[4];
101
102} __packed;
103
104#define WPA_PUT_LE16(a, val) \
105 do { \
106 (a)[1] = ((u16)(val)) >> 8; \
107 (a)[0] = ((u16)(val)) & 0xff; \
108 } while (0)
109
110#define WPA_PUT_BE32(a, val) \
111 do { \
112 (a)[0] = (u8)((((u32) (val)) >> 24) & 0xff); \
113 (a)[1] = (u8)((((u32) (val)) >> 16) & 0xff); \
114 (a)[2] = (u8)((((u32) (val)) >> 8) & 0xff); \
115 (a)[3] = (u8)(((u32) (val)) & 0xff); \
116 } while (0)
117
118#define WPA_PUT_LE32(a, val) \
119 do { \
120 (a)[3] = (u8)((((u32) (val)) >> 24) & 0xff); \
121 (a)[2] = (u8)((((u32) (val)) >> 16) & 0xff); \
122 (a)[1] = (u8)((((u32) (val)) >> 8) & 0xff); \
123 (a)[0] = (u8)(((u32) (val)) & 0xff); \
124 } while (0)
125
126#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *)(a), (val))
127
128
129enum ieee80211_category {
130 WLAN_CATEGORY_SPECTRUM_MGMT = 0,
131 WLAN_CATEGORY_QOS = 1,
132 WLAN_CATEGORY_DLS = 2,
133 WLAN_CATEGORY_BACK = 3,
134 WLAN_CATEGORY_HT = 7,
135 WLAN_CATEGORY_WMM = 17,
136};
137
138
139enum ieee80211_spectrum_mgmt_actioncode {
140 WLAN_ACTION_SPCT_MSR_REQ = 0,
141 WLAN_ACTION_SPCT_MSR_RPRT = 1,
142 WLAN_ACTION_SPCT_TPC_REQ = 2,
143 WLAN_ACTION_SPCT_TPC_RPRT = 3,
144 WLAN_ACTION_SPCT_CHL_SWITCH = 4,
145 WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
146};
147
148
149enum ieee80211_back_actioncode {
150 WLAN_ACTION_ADDBA_REQ = 0,
151 WLAN_ACTION_ADDBA_RESP = 1,
152 WLAN_ACTION_DELBA = 2,
153};
154
155
156enum ieee80211_ht_actioncode {
157 WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
158 WLAN_ACTION_SM_PS = 1,
159 WLAN_ACTION_PSPM = 2,
160 WLAN_ACTION_PCO_PHASE = 3,
161 WLAN_ACTION_MIMO_CSI_MX = 4,
162 WLAN_ACTION_MIMO_NONCP_BF = 5,
163 WLAN_ACTION_MIMP_CP_BF = 6,
164 WLAN_ACTION_ASEL_INDICATES_FB = 7,
165 WLAN_ACTION_HI_INFO_EXCHG = 8,
166};
167
168
169enum ieee80211_back_parties {
170 WLAN_BACK_RECIPIENT = 0,
171 WLAN_BACK_INITIATOR = 1,
172 WLAN_BACK_TIMER = 2,
173};
174
175struct ieee80211_mgmt {
176 u16 frame_control;
177 u16 duration;
178 u8 da[6];
179 u8 sa[6];
180 u8 bssid[6];
181 u16 seq_ctrl;
182 union {
183 struct {
184 u16 auth_alg;
185 u16 auth_transaction;
186 u16 status_code;
187
188 u8 variable[0];
189 } __packed auth;
190 struct {
191 u16 reason_code;
192 } __packed deauth;
193 struct {
194 u16 capab_info;
195 u16 listen_interval;
196
197 u8 variable[0];
198 } __packed assoc_req;
199 struct {
200 u16 capab_info;
201 u16 status_code;
202 u16 aid;
203
204 u8 variable[0];
205 } __packed assoc_resp, reassoc_resp;
206 struct {
207 u16 capab_info;
208 u16 listen_interval;
209 u8 current_ap[6];
210
211 u8 variable[0];
212 } __packed reassoc_req;
213 struct {
214 u16 reason_code;
215 } __packed disassoc;
216 struct {
217 __le64 timestamp;
218 u16 beacon_int;
219 u16 capab_info;
220
221
222 u8 variable[0];
223 } __packed beacon;
224 struct {
225
226 u8 variable[0];
227 } __packed probe_req;
228 struct {
229 __le64 timestamp;
230 u16 beacon_int;
231 u16 capab_info;
232
233
234 u8 variable[0];
235 } __packed probe_resp;
236 struct {
237 u8 category;
238 union {
239 struct {
240 u8 action_code;
241 u8 dialog_token;
242 u8 status_code;
243 u8 variable[0];
244 } __packed wme_action;
245 struct {
246 u8 action_code;
247 u8 dialog_token;
248 u16 capab;
249 u16 timeout;
250 u16 start_seq_num;
251 } __packed addba_req;
252 struct {
253 u8 action_code;
254 u8 dialog_token;
255 u16 status;
256 u16 capab;
257 u16 timeout;
258 } __packed addba_resp;
259 struct {
260 u8 action_code;
261 u16 params;
262 u16 reason_code;
263 } __packed delba;
264 structi {
265 u8 action_code;
266
267
268
269 u16 aux;
270
271
272
273
274
275 u8 variable[0];
276 } __packed plink_action;
277 struct{
278 u8 action_code;
279 u8 variable[0];
280 } __packed mesh_action;
281 } __packed u;
282 } __packed action;
283 } __packed u;
284} __packed;
285
286
287#define IEEE80211_MIN_ACTION_SIZE \
288 FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
289
290#endif
291