ieee80211.h revision 127903
1/*-
2 * Copyright (c) 2001 Atsushi Onoe
3 * Copyright (c) 2002, 2003 Sam Leffler, Errno Consulting
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 *    derived from this software without specific prior written permission.
16 *
17 * Alternatively, this software may be distributed under the terms of the
18 * GNU General Public License ("GPL") version 2 as published by the Free
19 * Software Foundation.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 *
32 * $FreeBSD: head/sys/net80211/ieee80211.h 127903 2004-04-05 17:47:40Z sam $
33 */
34#ifndef _NET80211_IEEE80211_H_
35#define _NET80211_IEEE80211_H_
36
37/*
38 * 802.11 protocol definitions.
39 */
40
41#define	IEEE80211_ADDR_LEN	6		/* size of 802.11 address */
42/* is 802.11 address multicast/broadcast? */
43#define	IEEE80211_IS_MULTICAST(_a)	(*(_a) & 0x01)
44
45/* IEEE 802.11 PLCP header */
46struct ieee80211_plcp_hdr {
47	u_int16_t	i_sfd;
48	u_int8_t	i_signal;
49	u_int8_t	i_service;
50	u_int16_t	i_length;
51	u_int16_t	i_crc;
52} __attribute__((__packed__));
53
54#define IEEE80211_PLCP_SFD      0xF3A0
55#define IEEE80211_PLCP_SERVICE  0x00
56
57/*
58 * generic definitions for IEEE 802.11 frames
59 */
60struct ieee80211_frame {
61	u_int8_t	i_fc[2];
62	u_int8_t	i_dur[2];
63	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
64	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
65	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
66	u_int8_t	i_seq[2];
67	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
68	/* see below */
69} __attribute__((__packed__));
70
71struct ieee80211_qosframe {
72	u_int8_t	i_fc[2];
73	u_int8_t	i_dur[2];
74	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
75	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
76	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
77	u_int8_t	i_seq[2];
78	u_int8_t	i_qos[2];
79	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
80	/* see below */
81} __attribute__((__packed__));
82
83struct ieee80211_qoscntl {
84	u_int8_t	i_qos[2];
85};
86
87struct ieee80211_frame_addr4 {
88	u_int8_t	i_fc[2];
89	u_int8_t	i_dur[2];
90	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
91	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
92	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
93	u_int8_t	i_seq[2];
94	u_int8_t	i_addr4[IEEE80211_ADDR_LEN];
95} __attribute__((__packed__));
96
97
98struct ieee80211_qosframe_addr4 {
99	u_int8_t	i_fc[2];
100	u_int8_t	i_dur[2];
101	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
102	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
103	u_int8_t	i_addr3[IEEE80211_ADDR_LEN];
104	u_int8_t	i_seq[2];
105	u_int8_t	i_addr4[IEEE80211_ADDR_LEN];
106	u_int8_t	i_qos[2];
107} __attribute__((__packed__));
108
109/*
110 * Management Notification Frame
111 */
112struct ieee80211_mnf {
113	u_int8_t	mnf_category;
114	u_int8_t	mnf_action;
115	u_int8_t	mnf_dialog;
116	u_int8_t	mnf_status;
117} __attribute__((__packed__));
118#define	MNF_SETUP_REQ	0
119#define	MNF_SETUP_RESP	1
120#define	MNF_TEARDOWN	2
121
122/*
123 * WME/802.11e Tspec Element
124 */
125struct ieee80211_wme_tspec {
126	u_int8_t	ts_id;
127	u_int8_t	ts_len;
128	u_int8_t	ts_oui[3];
129	u_int8_t	ts_oui_type;
130	u_int8_t	ts_oui_subtype;
131	u_int8_t	ts_version;
132	u_int8_t	ts_tsinfo[3];
133	u_int8_t	ts_nom_msdu[2];
134	u_int8_t	ts_max_msdu[2];
135	u_int8_t	ts_min_svc[4];
136	u_int8_t	ts_max_svc[4];
137	u_int8_t	ts_inactv_intv[4];
138	u_int8_t	ts_susp_intv[4];
139	u_int8_t	ts_start_svc[4];
140	u_int8_t	ts_min_rate[4];
141	u_int8_t	ts_mean_rate[4];
142	u_int8_t	ts_max_burst[4];
143	u_int8_t	ts_min_phy[4];
144	u_int8_t	ts_peak_rate[4];
145	u_int8_t	ts_delay[4];
146	u_int8_t	ts_surplus[2];
147	u_int8_t	ts_medium_time[2];
148} __attribute__((__packed__));
149
150#define	IEEE80211_FC0_VERSION_MASK		0x03
151#define	IEEE80211_FC0_VERSION_SHIFT		0
152#define	IEEE80211_FC0_VERSION_0			0x00
153#define	IEEE80211_FC0_TYPE_MASK			0x0c
154#define	IEEE80211_FC0_TYPE_SHIFT		2
155#define	IEEE80211_FC0_TYPE_MGT			0x00
156#define	IEEE80211_FC0_TYPE_CTL			0x04
157#define	IEEE80211_FC0_TYPE_DATA			0x08
158
159#define	IEEE80211_FC0_SUBTYPE_MASK		0xf0
160#define	IEEE80211_FC0_SUBTYPE_SHIFT		4
161/* for TYPE_MGT */
162#define	IEEE80211_FC0_SUBTYPE_ASSOC_REQ		0x00
163#define	IEEE80211_FC0_SUBTYPE_ASSOC_RESP	0x10
164#define	IEEE80211_FC0_SUBTYPE_REASSOC_REQ	0x20
165#define	IEEE80211_FC0_SUBTYPE_REASSOC_RESP	0x30
166#define	IEEE80211_FC0_SUBTYPE_PROBE_REQ		0x40
167#define	IEEE80211_FC0_SUBTYPE_PROBE_RESP	0x50
168#define	IEEE80211_FC0_SUBTYPE_BEACON		0x80
169#define	IEEE80211_FC0_SUBTYPE_ATIM		0x90
170#define	IEEE80211_FC0_SUBTYPE_DISASSOC		0xa0
171#define	IEEE80211_FC0_SUBTYPE_AUTH		0xb0
172#define	IEEE80211_FC0_SUBTYPE_DEAUTH		0xc0
173/* for TYPE_CTL */
174#define	IEEE80211_FC0_SUBTYPE_PS_POLL		0xa0
175#define	IEEE80211_FC0_SUBTYPE_RTS		0xb0
176#define	IEEE80211_FC0_SUBTYPE_CTS		0xc0
177#define	IEEE80211_FC0_SUBTYPE_ACK		0xd0
178#define	IEEE80211_FC0_SUBTYPE_CF_END		0xe0
179#define	IEEE80211_FC0_SUBTYPE_CF_END_ACK	0xf0
180/* for TYPE_DATA (bit combination) */
181#define	IEEE80211_FC0_SUBTYPE_DATA		0x00
182#define	IEEE80211_FC0_SUBTYPE_CF_ACK		0x10
183#define	IEEE80211_FC0_SUBTYPE_CF_POLL		0x20
184#define	IEEE80211_FC0_SUBTYPE_CF_ACPL		0x30
185#define	IEEE80211_FC0_SUBTYPE_NODATA		0x40
186#define	IEEE80211_FC0_SUBTYPE_CFACK		0x50
187#define	IEEE80211_FC0_SUBTYPE_CFPOLL		0x60
188#define	IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK	0x70
189#define	IEEE80211_FC0_SUBTYPE_QOS		0x80
190
191#define	IEEE80211_FC1_DIR_MASK			0x03
192#define	IEEE80211_FC1_DIR_NODS			0x00	/* STA->STA */
193#define	IEEE80211_FC1_DIR_TODS			0x01	/* STA->AP  */
194#define	IEEE80211_FC1_DIR_FROMDS		0x02	/* AP ->STA */
195#define	IEEE80211_FC1_DIR_DSTODS		0x03	/* AP ->AP  */
196
197#define	IEEE80211_FC1_MORE_FRAG			0x04
198#define	IEEE80211_FC1_RETRY			0x08
199#define	IEEE80211_FC1_PWR_MGT			0x10
200#define	IEEE80211_FC1_MORE_DATA			0x20
201#define	IEEE80211_FC1_WEP			0x40
202#define	IEEE80211_FC1_ORDER			0x80
203
204#define	IEEE80211_SEQ_FRAG_MASK			0x000f
205#define	IEEE80211_SEQ_FRAG_SHIFT		0
206#define	IEEE80211_SEQ_SEQ_MASK			0xfff0
207#define	IEEE80211_SEQ_SEQ_SHIFT			4
208
209#define	IEEE80211_NWID_LEN			32
210
211#define	IEEE80211_QOS_TXOP			0x00ff
212/* bit 8 is reserved */
213#define	IEEE80211_QOS_ACKPOLICY			0x0600
214#define	IEEE80211_QOS_ESOP			0x0800
215#define	IEEE80211_QOS_TID			0xf000
216
217/*
218 * Control frames.
219 */
220struct ieee80211_frame_min {
221	u_int8_t	i_fc[2];
222	u_int8_t	i_dur[2];
223	u_int8_t	i_addr1[IEEE80211_ADDR_LEN];
224	u_int8_t	i_addr2[IEEE80211_ADDR_LEN];
225	/* FCS */
226} __attribute__((__packed__));
227
228struct ieee80211_frame_rts {
229	u_int8_t	i_fc[2];
230	u_int8_t	i_dur[2];
231	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
232	u_int8_t	i_ta[IEEE80211_ADDR_LEN];
233	/* FCS */
234} __attribute__((__packed__));
235
236struct ieee80211_frame_cts {
237	u_int8_t	i_fc[2];
238	u_int8_t	i_dur[2];
239	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
240	/* FCS */
241} __attribute__((__packed__));
242
243struct ieee80211_frame_ack {
244	u_int8_t	i_fc[2];
245	u_int8_t	i_dur[2];
246	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
247	/* FCS */
248} __attribute__((__packed__));
249
250struct ieee80211_frame_pspoll {
251	u_int8_t	i_fc[2];
252	u_int8_t	i_aid[2];
253	u_int8_t	i_bssid[IEEE80211_ADDR_LEN];
254	u_int8_t	i_ta[IEEE80211_ADDR_LEN];
255	/* FCS */
256} __attribute__((__packed__));
257
258struct ieee80211_frame_cfend {		/* NB: also CF-End+CF-Ack */
259	u_int8_t	i_fc[2];
260	u_int8_t	i_dur[2];	/* should be zero */
261	u_int8_t	i_ra[IEEE80211_ADDR_LEN];
262	u_int8_t	i_bssid[IEEE80211_ADDR_LEN];
263	/* FCS */
264} __attribute__((__packed__));
265
266/*
267 * BEACON management packets
268 *
269 *	octet timestamp[8]
270 *	octet beacon interval[2]
271 *	octet capability information[2]
272 *	information element
273 *		octet elemid
274 *		octet length
275 *		octet information[length]
276 */
277
278typedef uint8_t *ieee80211_mgt_beacon_t;
279
280#define	IEEE80211_BEACON_INTERVAL(beacon) \
281	((beacon)[8] | ((beacon)[9] << 8))
282#define	IEEE80211_BEACON_CAPABILITY(beacon) \
283	((beacon)[10] | ((beacon)[11] << 8))
284
285#define	IEEE80211_CAPINFO_ESS			0x0001
286#define	IEEE80211_CAPINFO_IBSS			0x0002
287#define	IEEE80211_CAPINFO_CF_POLLABLE		0x0004
288#define	IEEE80211_CAPINFO_CF_POLLREQ		0x0008
289#define	IEEE80211_CAPINFO_PRIVACY		0x0010
290#define	IEEE80211_CAPINFO_SHORT_PREAMBLE	0x0020
291#define	IEEE80211_CAPINFO_PBCC			0x0040
292#define	IEEE80211_CAPINFO_CHNL_AGILITY		0x0080
293/* bits 8-9 are reserved */
294#define	IEEE80211_CAPINFO_SHORT_SLOTTIME	0x0400
295#define	IEEE80211_CAPINFO_RSN			0x0800
296/* bit 12 is reserved */
297#define	IEEE80211_CAPINFO_DSSSOFDM		0x2000
298/* bits 14-15 are reserved */
299
300/*
301 * 802.11i/WPA information element (maximally sized).
302 */
303struct ieee80211_ie_wpa {
304	u_int8_t	wpa_oui[3];	/* 0x00, 0x50, 0xf2 */
305	u_int8_t	wpa_type;	/* OUI type */
306	u_int16_t	wpa_version;	/* spec revision */
307	u_int32_t	wpa_mcipher[1];	/* multicast/group key cipher */
308	u_int16_t	wpa_uciphercnt;	/* # pairwise key ciphers */
309	u_int32_t	wpa_uciphers[8];/* ciphers */
310	u_int16_t	wpa_authselcnt;	/* authentication selector cnt*/
311	u_int32_t	wpa_authsels[8];/* selectors */
312} __attribute__((__packed__));
313
314/*
315 * Management information elements
316 */
317struct ieee80211_information {
318	char	ssid[IEEE80211_NWID_LEN+1];
319	struct rates {
320		u_int8_t	*p;
321	} rates;
322	struct fh {
323		u_int16_t	dwell;
324		u_int8_t	set;
325		u_int8_t	pattern;
326		u_int8_t	index;
327	} fh;
328	struct ds {
329		u_int8_t	channel;
330	} ds;
331	struct cf {
332		u_int8_t	count;
333		u_int8_t	period;
334		u_int8_t	maxdur[2];
335		u_int8_t	dur[2];
336	} cf;
337	struct tim {
338		u_int8_t	count;
339		u_int8_t	period;
340		u_int8_t	bitctl;
341		/* u_int8_t	pvt[251]; The driver needs to use this. */
342	} tim;
343	struct ibss {
344		u_int16_t	atim;
345	} ibss;
346	struct challenge {
347		u_int8_t	*p;
348		u_int8_t	len;
349	} challenge;
350	struct erp {
351		u_int8_t	flags;
352	} erp;
353	struct country {
354		u_int8_t	cc[3];		/* ISO CC+(I)ndoor/(O)utdoor */
355		struct {
356			u_int8_t schan;		/* starting channel */
357			u_int8_t nchan;		/* number channels */
358			u_int8_t maxtxpwr;
359		} band[4];			/* up to 4 sub bands */
360	} country;
361	struct ath {
362		u_int8_t	flags;
363	} ath;
364	struct ieee80211_ie_wpa	wpa;
365};
366
367enum {
368	IEEE80211_ELEMID_SSID			= 0,
369	IEEE80211_ELEMID_RATES			= 1,
370	IEEE80211_ELEMID_FHPARMS		= 2,
371	IEEE80211_ELEMID_DSPARMS		= 3,
372	IEEE80211_ELEMID_CFPARMS		= 4,
373	IEEE80211_ELEMID_TIM			= 5,
374	IEEE80211_ELEMID_IBSSPARMS		= 6,
375	IEEE80211_ELEMID_COUNTRY		= 7,
376	IEEE80211_ELEMID_CHALLENGE		= 16,
377	/* 17-31 reserved for challenge text extension */
378	IEEE80211_ELEMID_ERP			= 42,
379	IEEE80211_ELEMID_XRATES			= 50,
380	IEEE80211_ELEMID_TPC			= 150,
381	IEEE80211_ELEMID_CCKM			= 156,
382	IEEE80211_ELEMID_VENDOR			= 221,	/* vendor private */
383};
384
385#define IEEE80211_CHALLENGE_LEN			128
386
387#define	IEEE80211_RATE_BASIC			0x80
388#define	IEEE80211_RATE_VAL			0x7f
389
390/* EPR information element flags */
391#define	IEEE80211_ERP_NON_ERP_PRESENT		0x01
392#define	IEEE80211_ERP_USE_PROTECTION		0x02
393#define	IEEE80211_ERP_BARKER_MODE		0x04
394
395/* Atheros private advanced capabilities info */
396#define	ATHEROS_CAP_TURBO_PRIME			0x01
397#define	ATHEROS_CAP_COMPRESSION			0x02
398#define	ATHEROS_CAP_FAST_FRAME			0x04
399/* bits 3-6 reserved */
400#define	ATHEROS_CAP_BOOST			0x80
401
402#define	ATH_OUI			0x7f0300		/* Atheros OUI */
403#define	ATH_OUI_TYPE		0x01
404#define	ATH_OUI_VERSION		0x01
405
406#define	WPA_OUI			0xf25000
407#define	WPA_OUI_TYPE		0x01
408#define	WPA_OUI_VERSION		1		/* current supported version */
409
410#define	WPA_CSE_NULL		0x00
411#define	WPA_CSE_WEP40		0x01
412#define	WPA_CSE_TKIP		0x02
413#define	WPA_CSE_WRAP		0x03		/* WPA2/802.11i */
414#define	WPA_CSE_CCMP		0x04
415#define	WPA_CSE_WEP104		0x05
416
417#define	WPA_ASE_NONE		0x00
418#define	WPA_ASE_8021X_UNSPEC	0x01
419#define	WPA_ASE_8021X_PSK	0x02
420
421/*
422 * AUTH management packets
423 *
424 *	octet algo[2]
425 *	octet seq[2]
426 *	octet status[2]
427 *	octet chal.id
428 *	octet chal.length
429 *	octet chal.text[253]
430 */
431
432typedef u_int8_t *ieee80211_mgt_auth_t;
433
434#define	IEEE80211_AUTH_ALGORITHM(auth) \
435	((auth)[0] | ((auth)[1] << 8))
436#define	IEEE80211_AUTH_TRANSACTION(auth) \
437	((auth)[2] | ((auth)[3] << 8))
438#define	IEEE80211_AUTH_STATUS(auth) \
439	((auth)[4] | ((auth)[5] << 8))
440
441#define	IEEE80211_AUTH_ALG_OPEN			0x0000
442#define	IEEE80211_AUTH_ALG_SHARED		0x0001
443#define	IEEE80211_AUTH_ALG_LEAP			0x0080
444
445enum {
446	IEEE80211_AUTH_OPEN_REQUEST		= 1,
447	IEEE80211_AUTH_OPEN_RESPONSE		= 2,
448};
449
450enum {
451	IEEE80211_AUTH_SHARED_REQUEST		= 1,
452	IEEE80211_AUTH_SHARED_CHALLENGE		= 2,
453	IEEE80211_AUTH_SHARED_RESPONSE		= 3,
454	IEEE80211_AUTH_SHARED_PASS		= 4,
455};
456
457/*
458 * Reason codes
459 *
460 * Unlisted codes are reserved
461 */
462
463enum {
464	IEEE80211_REASON_UNSPECIFIED		= 1,
465	IEEE80211_REASON_AUTH_EXPIRE		= 2,
466	IEEE80211_REASON_AUTH_LEAVE		= 3,
467	IEEE80211_REASON_ASSOC_EXPIRE		= 4,
468	IEEE80211_REASON_ASSOC_TOOMANY		= 5,
469	IEEE80211_REASON_NOT_AUTHED		= 6,
470	IEEE80211_REASON_NOT_ASSOCED		= 7,
471	IEEE80211_REASON_ASSOC_LEAVE		= 8,
472	IEEE80211_REASON_ASSOC_NOT_AUTHED	= 9,
473
474	IEEE80211_REASON_RSN_REQUIRED		= 11,
475	IEEE80211_REASON_RSN_INCONSISTENT	= 12,
476	IEEE80211_REASON_IE_INVALID		= 13,
477	IEEE80211_REASON_MIC_FAILURE		= 14,
478
479	IEEE80211_STATUS_SUCCESS		= 0,
480	IEEE80211_STATUS_UNSPECIFIED		= 1,
481	IEEE80211_STATUS_CAPINFO		= 10,
482	IEEE80211_STATUS_NOT_ASSOCED		= 11,
483	IEEE80211_STATUS_OTHER			= 12,
484	IEEE80211_STATUS_ALG			= 13,
485	IEEE80211_STATUS_SEQUENCE		= 14,
486	IEEE80211_STATUS_CHALLENGE		= 15,
487	IEEE80211_STATUS_TIMEOUT		= 16,
488	IEEE80211_STATUS_TOOMANY		= 17,
489	IEEE80211_STATUS_BASIC_RATE		= 18,
490	IEEE80211_STATUS_SP_REQUIRED		= 19,
491	IEEE80211_STATUS_PBCC_REQUIRED		= 20,
492	IEEE80211_STATUS_CA_REQUIRED		= 21,
493	IEEE80211_STATUS_TOO_MANY_STATIONS	= 22,
494	IEEE80211_STATUS_RATES			= 23,
495	IEEE80211_STATUS_SHORTSLOT_REQUIRED	= 25,
496	IEEE80211_STATUS_DSSSOFDM_REQUIRED	= 26,
497};
498
499#define	IEEE80211_WEP_KEYLEN			5	/* 40bit */
500#define	IEEE80211_WEP_IVLEN			3	/* 24bit */
501#define	IEEE80211_WEP_KIDLEN			1	/* 1 octet */
502#define	IEEE80211_WEP_CRCLEN			4	/* CRC-32 */
503#define	IEEE80211_WEP_NKID			4	/* number of key ids */
504
505#define	IEEE80211_CRC_LEN			4
506
507/*
508 * Maximum acceptable MTU is:
509 *	IEEE80211_MAX_LEN - WEP overhead - CRC -
510 *		QoS overhead - RSN/WPA overhead
511 * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
512 * mtu is Ethernet-compatible; it's set by ether_ifattach.
513 */
514#define	IEEE80211_MTU_MAX			2290
515#define	IEEE80211_MTU_MIN			32
516
517#define	IEEE80211_MAX_LEN			(2300 + IEEE80211_CRC_LEN + \
518    (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
519#define	IEEE80211_MIN_LEN \
520	(sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
521
522/*
523 * RTS frame length parameters.  The default is specified in
524 * the 802.11 spec.  The max may be wrong for jumbo frames.
525 */
526#define	IEEE80211_RTS_DEFAULT			512
527#define	IEEE80211_RTS_MIN			1
528#define	IEEE80211_RTS_MAX			IEEE80211_MAX_LEN
529
530enum {
531	IEEE80211_AUTH_NONE	= 0,
532	IEEE80211_AUTH_OPEN	= 1,
533	IEEE80211_AUTH_SHARED	= 2,
534};
535
536#endif /* _NET80211_IEEE80211_H_ */
537