1 #ifndef _IPXE_NET80211_ERR_H
2 #define _IPXE_NET80211_ERR_H
3 
4 #include <errno.h>
5 #include <ipxe/ieee80211.h>
6 
7 /*
8  * The iPXE 802.11 MAC layer.
9  *
10  * Copyright (c) 2009 Joshua Oreman <oremanj@rwcr.net>.
11  */
12 
13 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
14 
15 /** @file
16  *
17  * The iPXE 802.11 MAC layer errors.
18  */
19 
20 /* Disambiguate the EINVAL's a bit */
21 #define EINVAL_PKT_TOO_SHORT __einfo_error ( EINFO_EINVAL_PKT_TOO_SHORT )
22 #define EINFO_EINVAL_PKT_TOO_SHORT __einfo_uniqify \
23 	( EINFO_EINVAL, 0x01, "Packet too short" )
24 #define EINVAL_PKT_VERSION __einfo_error ( EINFO_EINVAL_PKT_VERSION )
25 #define EINFO_EINVAL_PKT_VERSION __einfo_uniqify \
26 	( EINFO_EINVAL, 0x02, "Packet 802.11 version not supported" )
27 #define EINVAL_PKT_NOT_DATA __einfo_error ( EINFO_EINVAL_PKT_NOT_DATA )
28 #define EINFO_EINVAL_PKT_NOT_DATA __einfo_uniqify \
29 	( EINFO_EINVAL, 0x03, "Packet not a data packet" )
30 #define EINVAL_PKT_NOT_FROMDS __einfo_error ( EINFO_EINVAL_PKT_NOT_FROMDS )
31 #define EINFO_EINVAL_PKT_NOT_FROMDS __einfo_uniqify \
32 	( EINFO_EINVAL, 0x04, "Packet not from an Access Point" )
33 #define EINVAL_PKT_LLC_HEADER __einfo_error ( EINFO_EINVAL_PKT_LLC_HEADER )
34 #define EINFO_EINVAL_PKT_LLC_HEADER __einfo_uniqify \
35 	( EINFO_EINVAL, 0x05, "Packet has invalid LLC header" )
36 #define EINVAL_CRYPTO_REQUEST __einfo_error ( EINFO_EINVAL_CRYPTO_REQUEST )
37 #define EINFO_EINVAL_CRYPTO_REQUEST __einfo_uniqify \
38 	( EINFO_EINVAL, 0x06, "Packet decryption error" )
39 #define EINVAL_ACTIVE_SCAN __einfo_error ( EINFO_EINVAL_ACTIVE_SCAN )
40 #define EINFO_EINVAL_ACTIVE_SCAN __einfo_uniqify \
41 	( EINFO_EINVAL, 0x07, "Invalid active scan requested" )
42 
43 /*
44  * 802.11 error codes: The AP can give us a status code explaining why
45  * authentication failed, or a reason code explaining why we were
46  * deauthenticated/disassociated. These codes range from 0-63 (the
47  * field is 16 bits wide, but only up to 45 or so are defined yet; we
48  * allow up to 63 for extensibility). This is encoded into an error
49  * code as such:
50  *
51  *                                      status & 0x1f goes here --vv--
52  *   Status code 0-31:  ECONNREFUSED | EUNIQ_(status & 0x1f) (0e1a6038)
53  *   Status code 32-63: EHOSTUNREACH | EUNIQ_(status & 0x1f) (171a6011)
54  *   Reason code 0-31:  ECONNRESET | EUNIQ_(reason & 0x1f)   (0f1a6039)
55  *   Reason code 32-63: ENETRESET | EUNIQ_(reason & 0x1f)    (271a6001)
56  *
57  * The POSIX error codes more or less convey the appropriate message
58  * (status codes occur when we can't associate at all, reason codes
59  * when we lose association unexpectedly) and let us extract the
60  * complete 802.11 error code from the rc value.
61  *
62  * The error messages follow the 802.11 standard as much as is
63  * feasible, but most have been abbreviated to fit the 50-character
64  * limit imposed by strerror().
65  */
66 
67 /* 802.11 status codes (IEEE Std 802.11-2007, Table 7-23) */
68 
69 #define ECONNREFUSED_FAILURE __einfo_error				\
70 	( EINFO_ECONNREFUSED_FAILURE )
71 #define EINFO_ECONNREFUSED_FAILURE __einfo_uniqify			\
72 	( EINFO_ECONNREFUSED,						\
73 	  ( IEEE80211_STATUS_FAILURE & 0x1f ),				\
74 	  "Unspecified failure" )
75 
76 #define ECONNREFUSED_CAPAB_UNSUPP __einfo_error				\
77 	( EINFO_ECONNREFUSED_CAPAB_UNSUPP )
78 #define EINFO_ECONNREFUSED_CAPAB_UNSUPP __einfo_uniqify			\
79 	( EINFO_ECONNREFUSED,						\
80 	  ( IEEE80211_STATUS_CAPAB_UNSUPP & 0x1f ),			\
81 	  "Cannot support all requested capabilities" )
82 
83 #define ECONNREFUSED_REASSOC_INVALID __einfo_error			\
84 	( EINFO_ECONNREFUSED_REASSOC_INVALID )
85 #define EINFO_ECONNREFUSED_REASSOC_INVALID __einfo_uniqify		\
86 	( EINFO_ECONNREFUSED,						\
87 	  ( IEEE80211_STATUS_REASSOC_INVALID & 0x1f ),			\
88 	  "Reassociation denied due to lack of association" )
89 
90 #define ECONNREFUSED_ASSOC_DENIED __einfo_error				\
91 	( EINFO_ECONNREFUSED_ASSOC_DENIED )
92 #define EINFO_ECONNREFUSED_ASSOC_DENIED __einfo_uniqify			\
93 	( EINFO_ECONNREFUSED,						\
94 	  ( IEEE80211_STATUS_ASSOC_DENIED & 0x1f ),			\
95 	  "Association denied for another reason" )
96 
97 #define ECONNREFUSED_AUTH_ALGO_UNSUPP __einfo_error			\
98 	( EINFO_ECONNREFUSED_AUTH_ALGO_UNSUPP )
99 #define EINFO_ECONNREFUSED_AUTH_ALGO_UNSUPP __einfo_uniqify		\
100 	( EINFO_ECONNREFUSED,						\
101 	  ( IEEE80211_STATUS_AUTH_ALGO_UNSUPP & 0x1f ),			\
102 	  "Authentication algorithm unsupported" )
103 
104 #define ECONNREFUSED_AUTH_SEQ_INVALID __einfo_error			\
105 	( EINFO_ECONNREFUSED_AUTH_SEQ_INVALID )
106 #define EINFO_ECONNREFUSED_AUTH_SEQ_INVALID __einfo_uniqify		\
107 	( EINFO_ECONNREFUSED,						\
108 	  ( IEEE80211_STATUS_AUTH_SEQ_INVALID & 0x1f ),			\
109 	  "Authentication sequence number unexpected" )
110 
111 #define ECONNREFUSED_AUTH_CHALL_INVALID __einfo_error			\
112 	( EINFO_ECONNREFUSED_AUTH_CHALL_INVALID )
113 #define EINFO_ECONNREFUSED_AUTH_CHALL_INVALID __einfo_uniqify		\
114 	( EINFO_ECONNREFUSED,					\
115 	  ( IEEE80211_STATUS_AUTH_CHALL_INVALID & 0x1f ),		\
116 	  "Authentication rejected due to challenge failure" )
117 
118 #define ECONNREFUSED_AUTH_TIMEOUT __einfo_error				\
119 	( EINFO_ECONNREFUSED_AUTH_TIMEOUT )
120 #define EINFO_ECONNREFUSED_AUTH_TIMEOUT __einfo_uniqify			\
121 	( EINFO_ECONNREFUSED,						\
122 	  ( IEEE80211_STATUS_AUTH_TIMEOUT & 0x1f ),			\
123 	  "Authentication rejected due to timeout" )
124 
125 #define ECONNREFUSED_ASSOC_NO_ROOM __einfo_error			\
126 	( EINFO_ECONNREFUSED_ASSOC_NO_ROOM )
127 #define EINFO_ECONNREFUSED_ASSOC_NO_ROOM __einfo_uniqify		\
128 	( EINFO_ECONNREFUSED,						\
129 	  ( IEEE80211_STATUS_ASSOC_NO_ROOM & 0x1f ),			\
130 	  "Association denied because AP is out of resources" )
131 
132 #define ECONNREFUSED_ASSOC_NEED_RATE __einfo_error			\
133 	( EINFO_ECONNREFUSED_ASSOC_NEED_RATE )
134 #define EINFO_ECONNREFUSED_ASSOC_NEED_RATE __einfo_uniqify		\
135 	( EINFO_ECONNREFUSED,						\
136 	  ( IEEE80211_STATUS_ASSOC_NEED_RATE & 0x1f ),			\
137 	  "Association denied; basic rate support required" )
138 
139 #define ECONNREFUSED_ASSOC_NEED_SHORT_PMBL __einfo_error		\
140 	( EINFO_ECONNREFUSED_ASSOC_NEED_SHORT_PMBL )
141 #define EINFO_ECONNREFUSED_ASSOC_NEED_SHORT_PMBL __einfo_uniqify	\
142 	( EINFO_ECONNREFUSED,						\
143 	  ( IEEE80211_STATUS_ASSOC_NEED_SHORT_PMBL & 0x1f ),		\
144 	  "Association denied; short preamble support req'd" )
145 
146 #define ECONNREFUSED_ASSOC_NEED_PBCC __einfo_error			\
147 	( EINFO_ECONNREFUSED_ASSOC_NEED_PBCC )
148 #define EINFO_ECONNREFUSED_ASSOC_NEED_PBCC __einfo_uniqify		\
149 	( EINFO_ECONNREFUSED,						\
150 	  ( IEEE80211_STATUS_ASSOC_NEED_PBCC & 0x1f ),			\
151 	  "Association denied; PBCC modulation support req'd" )
152 
153 #define ECONNREFUSED_ASSOC_NEED_CHAN_AGILITY __einfo_error		\
154 	( EINFO_ECONNREFUSED_ASSOC_NEED_CHAN_AGILITY )
155 #define EINFO_ECONNREFUSED_ASSOC_NEED_CHAN_AGILITY __einfo_uniqify	\
156 	( EINFO_ECONNREFUSED,						\
157 	  ( IEEE80211_STATUS_ASSOC_NEED_CHAN_AGILITY & 0x1f ),		\
158 	  "Association denied; Channel Agility support req'd" )
159 
160 #define ECONNREFUSED_ASSOC_NEED_SPECTRUM_MGMT __einfo_error		\
161 	( EINFO_ECONNREFUSED_ASSOC_NEED_SPECTRUM_MGMT )
162 #define EINFO_ECONNREFUSED_ASSOC_NEED_SPECTRUM_MGMT __einfo_uniqify	\
163 	( EINFO_ECONNREFUSED,						\
164 	  ( IEEE80211_STATUS_ASSOC_NEED_SPECTRUM_MGMT & 0x1f ),		\
165 	  "Association denied; Spectrum Management required" )
166 
167 #define ECONNREFUSED_ASSOC_BAD_POWER __einfo_error			\
168 	( EINFO_ECONNREFUSED_ASSOC_BAD_POWER )
169 #define EINFO_ECONNREFUSED_ASSOC_BAD_POWER __einfo_uniqify		\
170 	( EINFO_ECONNREFUSED,						\
171 	  ( IEEE80211_STATUS_ASSOC_BAD_POWER & 0x1f ),			\
172 	  "Association denied; Power Capability unacceptable" )
173 
174 #define ECONNREFUSED_ASSOC_BAD_CHANNELS __einfo_error			\
175 	( EINFO_ECONNREFUSED_ASSOC_BAD_CHANNELS )
176 #define EINFO_ECONNREFUSED_ASSOC_BAD_CHANNELS __einfo_uniqify		\
177 	( EINFO_ECONNREFUSED,						\
178 	  ( IEEE80211_STATUS_ASSOC_BAD_CHANNELS & 0x1f ),		\
179 	  "Association denied; Supported Channels unacceptable" )
180 
181 #define ECONNREFUSED_ASSOC_NEED_SHORT_SLOT __einfo_error		\
182 	( EINFO_ECONNREFUSED_ASSOC_NEED_SHORT_SLOT )
183 #define EINFO_ECONNREFUSED_ASSOC_NEED_SHORT_SLOT __einfo_uniqify	\
184 	( EINFO_ECONNREFUSED,						\
185 	  ( IEEE80211_STATUS_ASSOC_NEED_SHORT_SLOT & 0x1f ),		\
186 	  "Association denied; Short Slot Tume support req'd" )
187 
188 #define ECONNREFUSED_ASSOC_NEED_DSSS_OFDM __einfo_error			\
189 	( EINFO_ECONNREFUSED_ASSOC_NEED_DSSS_OFDM )
190 #define EINFO_ECONNREFUSED_ASSOC_NEED_DSSS_OFDM __einfo_uniqify		\
191 	( EINFO_ECONNREFUSED,						\
192 	  ( IEEE80211_STATUS_ASSOC_NEED_DSSS_OFDM & 0x1f ),		\
193 	  "Association denied; DSSS-OFDM support required" )
194 
195 #define EHOSTUNREACH_QOS_FAILURE __einfo_error				\
196 	( EINFO_EHOSTUNREACH_QOS_FAILURE )
197 #define EINFO_EHOSTUNREACH_QOS_FAILURE __einfo_uniqify			\
198 	( EINFO_EHOSTUNREACH,						\
199 	  ( IEEE80211_STATUS_QOS_FAILURE & 0x1f ),			\
200 	  "Unspecified, QoS-related failure" )
201 
202 #define EHOSTUNREACH_QOS_NO_ROOM __einfo_error				\
203 	( EINFO_EHOSTUNREACH_QOS_NO_ROOM )
204 #define EINFO_EHOSTUNREACH_QOS_NO_ROOM __einfo_uniqify			\
205 	( EINFO_EHOSTUNREACH,						\
206 	  ( IEEE80211_STATUS_QOS_NO_ROOM & 0x1f ),			\
207 	  "Association denied; QoS AP out of QoS resources" )
208 
209 #define EHOSTUNREACH_LINK_IS_HORRIBLE __einfo_error			\
210 	( EINFO_EHOSTUNREACH_LINK_IS_HORRIBLE )
211 #define EINFO_EHOSTUNREACH_LINK_IS_HORRIBLE __einfo_uniqify		\
212 	( EINFO_EHOSTUNREACH,						\
213 	  ( IEEE80211_STATUS_LINK_IS_HORRIBLE & 0x1f ),			\
214 	  "Association denied due to excessively poor link" )
215 
216 #define EHOSTUNREACH_ASSOC_NEED_QOS __einfo_error			\
217 	( EINFO_EHOSTUNREACH_ASSOC_NEED_QOS )
218 #define EINFO_EHOSTUNREACH_ASSOC_NEED_QOS __einfo_uniqify		\
219 	( EINFO_EHOSTUNREACH,						\
220 	  ( IEEE80211_STATUS_ASSOC_NEED_QOS & 0x1f ),			\
221 	  "Association denied; QoS support required" )
222 
223 #define EHOSTUNREACH_REQUEST_DECLINED __einfo_error			\
224 	( EINFO_EHOSTUNREACH_REQUEST_DECLINED )
225 #define EINFO_EHOSTUNREACH_REQUEST_DECLINED __einfo_uniqify		\
226 	( EINFO_EHOSTUNREACH,						\
227 	  ( IEEE80211_STATUS_REQUEST_DECLINED & 0x1f ),			\
228 	  "The request has been declined" )
229 
230 #define EHOSTUNREACH_REQUEST_INVALID __einfo_error			\
231 	( EINFO_EHOSTUNREACH_REQUEST_INVALID )
232 #define EINFO_EHOSTUNREACH_REQUEST_INVALID __einfo_uniqify		\
233 	( EINFO_EHOSTUNREACH,						\
234 	  ( IEEE80211_STATUS_REQUEST_INVALID & 0x1f ),			\
235 	  "Request unsuccessful due to invalid parameters" )
236 
237 #define EHOSTUNREACH_TS_NOT_CREATED_AGAIN __einfo_error			\
238 	( EINFO_EHOSTUNREACH_TS_NOT_CREATED_AGAIN )
239 #define EINFO_EHOSTUNREACH_TS_NOT_CREATED_AGAIN __einfo_uniqify		\
240 	( EINFO_EHOSTUNREACH,						\
241 	  ( IEEE80211_STATUS_TS_NOT_CREATED_AGAIN & 0x1f ),		\
242 	  "TS not created due to bad specification" )
243 
244 #define EHOSTUNREACH_INVALID_IE __einfo_error				\
245 	( EINFO_EHOSTUNREACH_INVALID_IE )
246 #define EINFO_EHOSTUNREACH_INVALID_IE __einfo_uniqify			\
247 	( EINFO_EHOSTUNREACH,						\
248 	  ( IEEE80211_STATUS_INVALID_IE & 0x1f ),			\
249 	  "Invalid information element" )
250 
251 #define EHOSTUNREACH_GROUP_CIPHER_INVALID __einfo_error			\
252 	( EINFO_EHOSTUNREACH_GROUP_CIPHER_INVALID )
253 #define EINFO_EHOSTUNREACH_GROUP_CIPHER_INVALID __einfo_uniqify		\
254 	( EINFO_EHOSTUNREACH,						\
255 	  ( IEEE80211_STATUS_GROUP_CIPHER_INVALID & 0x1f ),		\
256 	  "Invalid group cipher" )
257 
258 #define EHOSTUNREACH_PAIR_CIPHER_INVALID __einfo_error			\
259 	( EINFO_EHOSTUNREACH_PAIR_CIPHER_INVALID )
260 #define EINFO_EHOSTUNREACH_PAIR_CIPHER_INVALID __einfo_uniqify		\
261 	( EINFO_EHOSTUNREACH,						\
262 	  ( IEEE80211_STATUS_PAIR_CIPHER_INVALID & 0x1f ),		\
263 	  "Invalid pairwise cipher" )
264 
265 #define EHOSTUNREACH_AKMP_INVALID __einfo_error				\
266 	( EINFO_EHOSTUNREACH_AKMP_INVALID )
267 #define EINFO_EHOSTUNREACH_AKMP_INVALID __einfo_uniqify			\
268 	( EINFO_EHOSTUNREACH,						\
269 	  ( IEEE80211_STATUS_AKMP_INVALID & 0x1f ),			\
270 	  "Invalid AKMP" )
271 
272 #define EHOSTUNREACH_RSN_VERSION_UNSUPP __einfo_error			\
273 	( EINFO_EHOSTUNREACH_RSN_VERSION_UNSUPP )
274 #define EINFO_EHOSTUNREACH_RSN_VERSION_UNSUPP __einfo_uniqify		\
275 	( EINFO_EHOSTUNREACH,						\
276 	  ( IEEE80211_STATUS_RSN_VERSION_UNSUPP & 0x1f ),		\
277 	  "Unsupported RSN information element version" )
278 
279 #define EHOSTUNREACH_RSN_CAPAB_INVALID __einfo_error			\
280 	( EINFO_EHOSTUNREACH_RSN_CAPAB_INVALID )
281 #define EINFO_EHOSTUNREACH_RSN_CAPAB_INVALID __einfo_uniqify		\
282 	( EINFO_EHOSTUNREACH,						\
283 	  ( IEEE80211_STATUS_RSN_CAPAB_INVALID & 0x1f ),		\
284 	  "Invalid RSN information element capabilities" )
285 
286 #define EHOSTUNREACH_CIPHER_REJECTED __einfo_error			\
287 	( EINFO_EHOSTUNREACH_CIPHER_REJECTED )
288 #define EINFO_EHOSTUNREACH_CIPHER_REJECTED __einfo_uniqify		\
289 	( EINFO_EHOSTUNREACH,						\
290 	  ( IEEE80211_STATUS_CIPHER_REJECTED & 0x1f ),			\
291 	  "Cipher suite rejected because of security policy" )
292 
293 #define EHOSTUNREACH_TS_NOT_CREATED_WAIT __einfo_error			\
294 	( EINFO_EHOSTUNREACH_TS_NOT_CREATED_WAIT )
295 #define EINFO_EHOSTUNREACH_TS_NOT_CREATED_WAIT __einfo_uniqify		\
296 	( EINFO_EHOSTUNREACH,						\
297 	  ( IEEE80211_STATUS_TS_NOT_CREATED_WAIT & 0x1f ),		\
298 	  "TS not created due to insufficient delay" )
299 
300 #define EHOSTUNREACH_DIRECT_LINK_FORBIDDEN __einfo_error		\
301 	( EINFO_EHOSTUNREACH_DIRECT_LINK_FORBIDDEN )
302 #define EINFO_EHOSTUNREACH_DIRECT_LINK_FORBIDDEN __einfo_uniqify	\
303 	( EINFO_EHOSTUNREACH,						\
304 	  ( IEEE80211_STATUS_DIRECT_LINK_FORBIDDEN & 0x1f ),		\
305 	  "Direct link is not allowed in the BSS by policy" )
306 
307 #define EHOSTUNREACH_DEST_NOT_PRESENT __einfo_error			\
308 	( EINFO_EHOSTUNREACH_DEST_NOT_PRESENT )
309 #define EINFO_EHOSTUNREACH_DEST_NOT_PRESENT __einfo_uniqify		\
310 	( EINFO_EHOSTUNREACH,						\
311 	  ( IEEE80211_STATUS_DEST_NOT_PRESENT & 0x1f ),			\
312 	  "The Destination STA is not present within the BSS" )
313 
314 #define EHOSTUNREACH_DEST_NOT_QOS __einfo_error				\
315 	( EINFO_EHOSTUNREACH_DEST_NOT_QOS )
316 #define EINFO_EHOSTUNREACH_DEST_NOT_QOS __einfo_uniqify			\
317 	( EINFO_EHOSTUNREACH,						\
318 	  ( IEEE80211_STATUS_DEST_NOT_QOS & 0x1f ),			\
319 	  "The Destination STA is not a QoS STA" )
320 
321 #define EHOSTUNREACH_ASSOC_LISTEN_TOO_HIGH __einfo_error		\
322 	( EINFO_EHOSTUNREACH_ASSOC_LISTEN_TOO_HIGH )
323 #define EINFO_EHOSTUNREACH_ASSOC_LISTEN_TOO_HIGH __einfo_uniqify	\
324 	( EINFO_EHOSTUNREACH,						\
325 	  ( IEEE80211_STATUS_ASSOC_LISTEN_TOO_HIGH & 0x1f ),		\
326 	  "Association denied; Listen Interval is too large" )
327 
328 /* 802.11 reason codes (IEEE Std 802.11-2007, Table 7-22) */
329 
330 #define ECONNRESET_UNSPECIFIED __einfo_error				\
331 	( EINFO_ECONNRESET_UNSPECIFIED )
332 #define EINFO_ECONNRESET_UNSPECIFIED __einfo_uniqify			\
333 	( EINFO_ECONNRESET,						\
334 	  ( IEEE80211_REASON_UNSPECIFIED & 0x1f ),			\
335 	  "Unspecified reason" )
336 
337 #define ECONNRESET_AUTH_NO_LONGER_VALID __einfo_error			\
338 	( EINFO_ECONNRESET_AUTH_NO_LONGER_VALID )
339 #define EINFO_ECONNRESET_AUTH_NO_LONGER_VALID __einfo_uniqify		\
340 	( EINFO_ECONNRESET,						\
341 	  ( IEEE80211_REASON_AUTH_NO_LONGER_VALID & 0x1f ),		\
342 	  "Previous authentication no longer valid" )
343 
344 #define ECONNRESET_LEAVING __einfo_error				\
345 	( EINFO_ECONNRESET_LEAVING )
346 #define EINFO_ECONNRESET_LEAVING __einfo_uniqify			\
347 	( EINFO_ECONNRESET,						\
348 	  ( IEEE80211_REASON_LEAVING & 0x1f ),				\
349 	  "Deauthenticated due to leaving network" )
350 
351 #define ECONNRESET_INACTIVITY __einfo_error				\
352 	( EINFO_ECONNRESET_INACTIVITY )
353 #define EINFO_ECONNRESET_INACTIVITY __einfo_uniqify			\
354 	( EINFO_ECONNRESET,						\
355 	  ( IEEE80211_REASON_INACTIVITY & 0x1f ),			\
356 	  "Disassociated due to inactivity" )
357 
358 #define ECONNRESET_OUT_OF_RESOURCES __einfo_error			\
359 	( EINFO_ECONNRESET_OUT_OF_RESOURCES )
360 #define EINFO_ECONNRESET_OUT_OF_RESOURCES __einfo_uniqify		\
361 	( EINFO_ECONNRESET,						\
362 	  ( IEEE80211_REASON_OUT_OF_RESOURCES & 0x1f ),			\
363 	  "Disassociated because AP is out of resources" )
364 
365 #define ECONNRESET_NEED_AUTH __einfo_error				\
366 	( EINFO_ECONNRESET_NEED_AUTH )
367 #define EINFO_ECONNRESET_NEED_AUTH __einfo_uniqify			\
368 	( EINFO_ECONNRESET,						\
369 	  ( IEEE80211_REASON_NEED_AUTH & 0x1f ),			\
370 	  "Class 2 frame received from nonauthenticated STA" )
371 
372 #define ECONNRESET_NEED_ASSOC __einfo_error				\
373 	( EINFO_ECONNRESET_NEED_ASSOC )
374 #define EINFO_ECONNRESET_NEED_ASSOC __einfo_uniqify			\
375 	( EINFO_ECONNRESET,						\
376 	  ( IEEE80211_REASON_NEED_ASSOC & 0x1f ),			\
377 	  "Class 3 frame received from nonassociated STA" )
378 
379 #define ECONNRESET_LEAVING_TO_ROAM __einfo_error			\
380 	( EINFO_ECONNRESET_LEAVING_TO_ROAM )
381 #define EINFO_ECONNRESET_LEAVING_TO_ROAM __einfo_uniqify		\
382 	( EINFO_ECONNRESET,						\
383 	  ( IEEE80211_REASON_LEAVING_TO_ROAM & 0x1f ),			\
384 	  "Disassociated due to roaming" )
385 
386 #define ECONNRESET_REASSOC_INVALID __einfo_error			\
387 	( EINFO_ECONNRESET_REASSOC_INVALID )
388 #define EINFO_ECONNRESET_REASSOC_INVALID __einfo_uniqify		\
389 	( EINFO_ECONNRESET,						\
390 	  ( IEEE80211_REASON_REASSOC_INVALID & 0x1f ),			\
391 	  "STA requesting (re)association not authenticated" )
392 
393 #define ECONNRESET_BAD_POWER __einfo_error				\
394 	( EINFO_ECONNRESET_BAD_POWER )
395 #define EINFO_ECONNRESET_BAD_POWER __einfo_uniqify			\
396 	( EINFO_ECONNRESET,						\
397 	  ( IEEE80211_REASON_BAD_POWER & 0x1f ),			\
398 	  "Disassociated; Power Capability unacceptable" )
399 
400 #define ECONNRESET_BAD_CHANNELS __einfo_error				\
401 	( EINFO_ECONNRESET_BAD_CHANNELS )
402 #define EINFO_ECONNRESET_BAD_CHANNELS __einfo_uniqify			\
403 	( EINFO_ECONNRESET,						\
404 	  ( IEEE80211_REASON_BAD_CHANNELS & 0x1f ),			\
405 	  "Disassociated; Supported Channels unacceptable" )
406 
407 #define ECONNRESET_INVALID_IE __einfo_error				\
408 	( EINFO_ECONNRESET_INVALID_IE )
409 #define EINFO_ECONNRESET_INVALID_IE __einfo_uniqify			\
410 	( EINFO_ECONNRESET,						\
411 	  ( IEEE80211_REASON_INVALID_IE & 0x1f ),			\
412 	  "Invalid information element" )
413 
414 #define ECONNRESET_MIC_FAILURE __einfo_error				\
415 	( EINFO_ECONNRESET_MIC_FAILURE )
416 #define EINFO_ECONNRESET_MIC_FAILURE __einfo_uniqify			\
417 	( EINFO_ECONNRESET,						\
418 	  ( IEEE80211_REASON_MIC_FAILURE & 0x1f ),			\
419 	  "Message integrity code (MIC) failure" )
420 
421 #define ECONNRESET_4WAY_TIMEOUT __einfo_error				\
422 	( EINFO_ECONNRESET_4WAY_TIMEOUT )
423 #define EINFO_ECONNRESET_4WAY_TIMEOUT __einfo_uniqify			\
424 	( EINFO_ECONNRESET,						\
425 	  ( IEEE80211_REASON_4WAY_TIMEOUT & 0x1f ),			\
426 	  "4-Way Handshake timeout" )
427 
428 #define ECONNRESET_GROUPKEY_TIMEOUT __einfo_error			\
429 	( EINFO_ECONNRESET_GROUPKEY_TIMEOUT )
430 #define EINFO_ECONNRESET_GROUPKEY_TIMEOUT __einfo_uniqify		\
431 	( EINFO_ECONNRESET,						\
432 	  ( IEEE80211_REASON_GROUPKEY_TIMEOUT & 0x1f ),			\
433 	  "Group Key Handshake timeout" )
434 
435 #define ECONNRESET_4WAY_INVALID __einfo_error				\
436 	( EINFO_ECONNRESET_4WAY_INVALID )
437 #define EINFO_ECONNRESET_4WAY_INVALID __einfo_uniqify			\
438 	( EINFO_ECONNRESET,						\
439 	  ( IEEE80211_REASON_4WAY_INVALID & 0x1f ),			\
440 	  "4-Way Handshake information element changed unduly" )
441 
442 #define ECONNRESET_GROUP_CIPHER_INVALID __einfo_error			\
443 	( EINFO_ECONNRESET_GROUP_CIPHER_INVALID )
444 #define EINFO_ECONNRESET_GROUP_CIPHER_INVALID __einfo_uniqify		\
445 	( EINFO_ECONNRESET,						\
446 	  ( IEEE80211_REASON_GROUP_CIPHER_INVALID & 0x1f ),		\
447 	  "Invalid group cipher" )
448 
449 #define ECONNRESET_PAIR_CIPHER_INVALID __einfo_error			\
450 	( EINFO_ECONNRESET_PAIR_CIPHER_INVALID )
451 #define EINFO_ECONNRESET_PAIR_CIPHER_INVALID __einfo_uniqify		\
452 	( EINFO_ECONNRESET,						\
453 	  ( IEEE80211_REASON_PAIR_CIPHER_INVALID & 0x1f ),		\
454 	  "Invalid pairwise cipher" )
455 
456 #define ECONNRESET_AKMP_INVALID __einfo_error				\
457 	( EINFO_ECONNRESET_AKMP_INVALID )
458 #define EINFO_ECONNRESET_AKMP_INVALID __einfo_uniqify			\
459 	( EINFO_ECONNRESET,						\
460 	  ( IEEE80211_REASON_AKMP_INVALID & 0x1f ),			\
461 	  "Invalid AKMP" )
462 
463 #define ECONNRESET_RSN_VERSION_INVALID __einfo_error			\
464 	( EINFO_ECONNRESET_RSN_VERSION_INVALID )
465 #define EINFO_ECONNRESET_RSN_VERSION_INVALID __einfo_uniqify		\
466 	( EINFO_ECONNRESET,						\
467 	  ( IEEE80211_REASON_RSN_VERSION_INVALID & 0x1f ),		\
468 	  "Unsupported RSN information element version" )
469 
470 #define ECONNRESET_RSN_CAPAB_INVALID __einfo_error			\
471 	( EINFO_ECONNRESET_RSN_CAPAB_INVALID )
472 #define EINFO_ECONNRESET_RSN_CAPAB_INVALID __einfo_uniqify		\
473 	( EINFO_ECONNRESET,						\
474 	  ( IEEE80211_REASON_RSN_CAPAB_INVALID & 0x1f ),		\
475 	  "Invalid RSN information element capabilities" )
476 
477 #define ECONNRESET_8021X_FAILURE __einfo_error				\
478 	( EINFO_ECONNRESET_8021X_FAILURE )
479 #define EINFO_ECONNRESET_8021X_FAILURE __einfo_uniqify			\
480 	( EINFO_ECONNRESET,						\
481 	  ( IEEE80211_REASON_8021X_FAILURE & 0x1f ),			\
482 	  "IEEE 802.1X authentication failed" )
483 
484 #define ECONNRESET_CIPHER_REJECTED __einfo_error			\
485 	( EINFO_ECONNRESET_CIPHER_REJECTED )
486 #define EINFO_ECONNRESET_CIPHER_REJECTED __einfo_uniqify		\
487 	( EINFO_ECONNRESET,						\
488 	  ( IEEE80211_REASON_CIPHER_REJECTED & 0x1f ),			\
489 	  "Cipher suite rejected because of security policy" )
490 
491 #define ENETRESET_QOS_UNSPECIFIED __einfo_error				\
492 	( EINFO_ENETRESET_QOS_UNSPECIFIED )
493 #define EINFO_ENETRESET_QOS_UNSPECIFIED __einfo_uniqify			\
494 	( EINFO_ENETRESET,						\
495 	  ( IEEE80211_REASON_QOS_UNSPECIFIED & 0x1f ),			\
496 	  "Disassociated for unspecified, QoS-related reason" )
497 
498 #define ENETRESET_QOS_OUT_OF_RESOURCES __einfo_error			\
499 	( EINFO_ENETRESET_QOS_OUT_OF_RESOURCES )
500 #define EINFO_ENETRESET_QOS_OUT_OF_RESOURCES __einfo_uniqify		\
501 	( EINFO_ENETRESET,						\
502 	  ( IEEE80211_REASON_QOS_OUT_OF_RESOURCES & 0x1f ),		\
503 	  "Disassociated; QoS AP is out of QoS resources" )
504 
505 #define ENETRESET_LINK_IS_HORRIBLE __einfo_error			\
506 	( EINFO_ENETRESET_LINK_IS_HORRIBLE )
507 #define EINFO_ENETRESET_LINK_IS_HORRIBLE __einfo_uniqify		\
508 	( EINFO_ENETRESET,						\
509 	  ( IEEE80211_REASON_LINK_IS_HORRIBLE & 0x1f ),			\
510 	  "Disassociated due to excessively poor link" )
511 
512 #define ENETRESET_INVALID_TXOP __einfo_error				\
513 	( EINFO_ENETRESET_INVALID_TXOP )
514 #define EINFO_ENETRESET_INVALID_TXOP __einfo_uniqify			\
515 	( EINFO_ENETRESET,						\
516 	  ( IEEE80211_REASON_INVALID_TXOP & 0x1f ),			\
517 	  "Disassociated due to TXOP limit violation" )
518 
519 #define ENETRESET_REQUESTED_LEAVING __einfo_error			\
520 	( EINFO_ENETRESET_REQUESTED_LEAVING )
521 #define EINFO_ENETRESET_REQUESTED_LEAVING __einfo_uniqify		\
522 	( EINFO_ENETRESET,						\
523 	  ( IEEE80211_REASON_REQUESTED_LEAVING & 0x1f ),		\
524 	  "Requested; STA is leaving the BSS (or resetting)" )
525 
526 #define ENETRESET_REQUESTED_NO_USE __einfo_error			\
527 	( EINFO_ENETRESET_REQUESTED_NO_USE )
528 #define EINFO_ENETRESET_REQUESTED_NO_USE __einfo_uniqify		\
529 	( EINFO_ENETRESET,						\
530 	  ( IEEE80211_REASON_REQUESTED_NO_USE & 0x1f ),			\
531 	  "Requested; does not want to use the mechanism" )
532 
533 #define ENETRESET_REQUESTED_NEED_SETUP __einfo_error			\
534 	( EINFO_ENETRESET_REQUESTED_NEED_SETUP )
535 #define EINFO_ENETRESET_REQUESTED_NEED_SETUP __einfo_uniqify		\
536 	( EINFO_ENETRESET,						\
537 	  ( IEEE80211_REASON_REQUESTED_NEED_SETUP & 0x1f ),		\
538 	  "Requested; setup is required" )
539 
540 #define ENETRESET_REQUESTED_TIMEOUT __einfo_error			\
541 	( EINFO_ENETRESET_REQUESTED_TIMEOUT )
542 #define EINFO_ENETRESET_REQUESTED_TIMEOUT __einfo_uniqify		\
543 	( EINFO_ENETRESET,						\
544 	  ( IEEE80211_REASON_REQUESTED_TIMEOUT & 0x1f ),		\
545 	  "Requested from peer STA due to timeout" )
546 
547 #define ENETRESET_CIPHER_UNSUPPORTED __einfo_error			\
548 	( EINFO_ENETRESET_CIPHER_UNSUPPORTED )
549 #define EINFO_ENETRESET_CIPHER_UNSUPPORTED __einfo_uniqify		\
550 	( EINFO_ENETRESET,						\
551 	  ( IEEE80211_REASON_CIPHER_UNSUPPORTED & 0x1f ),		\
552 	  "Peer STA does not support requested cipher suite" )
553 
554 /** Make return status code from 802.11 status code */
555 #define E80211_STATUS( stat )						\
556 	( ( (stat) & 0x20 ) ?						\
557 	  EUNIQ ( EINFO_EHOSTUNREACH, ( (stat) & 0x1f ),		\
558 		  EHOSTUNREACH_QOS_FAILURE,				\
559 		  EHOSTUNREACH_QOS_NO_ROOM,				\
560 		  EHOSTUNREACH_LINK_IS_HORRIBLE,			\
561 		  EHOSTUNREACH_ASSOC_NEED_QOS,				\
562 		  EHOSTUNREACH_REQUEST_DECLINED,			\
563 		  EHOSTUNREACH_REQUEST_INVALID,				\
564 		  EHOSTUNREACH_TS_NOT_CREATED_AGAIN,			\
565 		  EHOSTUNREACH_INVALID_IE,				\
566 		  EHOSTUNREACH_GROUP_CIPHER_INVALID,			\
567 		  EHOSTUNREACH_PAIR_CIPHER_INVALID,			\
568 		  EHOSTUNREACH_AKMP_INVALID,				\
569 		  EHOSTUNREACH_RSN_VERSION_UNSUPP,			\
570 		  EHOSTUNREACH_RSN_CAPAB_INVALID,			\
571 		  EHOSTUNREACH_CIPHER_REJECTED,				\
572 		  EHOSTUNREACH_TS_NOT_CREATED_WAIT,			\
573 		  EHOSTUNREACH_DIRECT_LINK_FORBIDDEN,			\
574 		  EHOSTUNREACH_DEST_NOT_PRESENT,			\
575 		  EHOSTUNREACH_DEST_NOT_QOS,				\
576 		  EHOSTUNREACH_ASSOC_LISTEN_TOO_HIGH ) :		\
577 	  EUNIQ ( EINFO_ECONNREFUSED, ( (stat) & 0x1f ),		\
578 		  ECONNREFUSED_FAILURE,					\
579 		  ECONNREFUSED_CAPAB_UNSUPP,				\
580 		  ECONNREFUSED_REASSOC_INVALID,				\
581 		  ECONNREFUSED_ASSOC_DENIED,				\
582 		  ECONNREFUSED_AUTH_ALGO_UNSUPP,			\
583 		  ECONNREFUSED_AUTH_SEQ_INVALID,			\
584 		  ECONNREFUSED_AUTH_CHALL_INVALID,			\
585 		  ECONNREFUSED_AUTH_TIMEOUT,				\
586 		  ECONNREFUSED_ASSOC_NO_ROOM,				\
587 		  ECONNREFUSED_ASSOC_NEED_RATE,				\
588 		  ECONNREFUSED_ASSOC_NEED_SHORT_PMBL,			\
589 		  ECONNREFUSED_ASSOC_NEED_PBCC,				\
590 		  ECONNREFUSED_ASSOC_NEED_CHAN_AGILITY,			\
591 		  ECONNREFUSED_ASSOC_NEED_SPECTRUM_MGMT,		\
592 		  ECONNREFUSED_ASSOC_BAD_POWER,				\
593 		  ECONNREFUSED_ASSOC_BAD_CHANNELS,			\
594 		  ECONNREFUSED_ASSOC_NEED_SHORT_SLOT,			\
595 		  ECONNREFUSED_ASSOC_NEED_DSSS_OFDM ) )
596 
597 /** Make return status code from 802.11 reason code */
598 #define E80211_REASON( reas )						\
599 	( ( (reas) & 0x20 ) ?						\
600 	  EUNIQ ( EINFO_ENETRESET, ( (reas) & 0x1f ),			\
601 		  ENETRESET_QOS_UNSPECIFIED,				\
602 		  ENETRESET_QOS_OUT_OF_RESOURCES,			\
603 		  ENETRESET_LINK_IS_HORRIBLE,				\
604 		  ENETRESET_INVALID_TXOP,				\
605 		  ENETRESET_REQUESTED_LEAVING,				\
606 		  ENETRESET_REQUESTED_NO_USE,				\
607 		  ENETRESET_REQUESTED_NEED_SETUP,			\
608 		  ENETRESET_REQUESTED_TIMEOUT,				\
609 		  ENETRESET_CIPHER_UNSUPPORTED ) :			\
610 	  EUNIQ ( EINFO_ECONNRESET, ( (reas) & 0x1f ),			\
611 		  ECONNRESET_UNSPECIFIED,				\
612 		  ECONNRESET_AUTH_NO_LONGER_VALID,			\
613 		  ECONNRESET_LEAVING,					\
614 		  ECONNRESET_INACTIVITY,				\
615 		  ECONNRESET_OUT_OF_RESOURCES,				\
616 		  ECONNRESET_NEED_AUTH,					\
617 		  ECONNRESET_NEED_ASSOC,				\
618 		  ECONNRESET_LEAVING_TO_ROAM,				\
619 		  ECONNRESET_REASSOC_INVALID,				\
620 		  ECONNRESET_BAD_POWER,					\
621 		  ECONNRESET_BAD_CHANNELS,				\
622 		  ECONNRESET_INVALID_IE,				\
623 		  ECONNRESET_MIC_FAILURE,				\
624 		  ECONNRESET_4WAY_TIMEOUT,				\
625 		  ECONNRESET_GROUPKEY_TIMEOUT,				\
626 		  ECONNRESET_4WAY_INVALID,				\
627 		  ECONNRESET_GROUP_CIPHER_INVALID,			\
628 		  ECONNRESET_PAIR_CIPHER_INVALID,			\
629 		  ECONNRESET_AKMP_INVALID,				\
630 		  ECONNRESET_RSN_VERSION_INVALID,			\
631 		  ECONNRESET_RSN_CAPAB_INVALID,				\
632 		  ECONNRESET_8021X_FAILURE,				\
633 		  ECONNRESET_CIPHER_REJECTED ) )
634 
635 #endif /* _IPXE_NET80211_ERR_H */
636