File: /usr/include/linux/802_11.h

1     #ifndef IEEE_802_11
2     #define IEEE_802_11  
3     
4     #include <linux/types.h>
5     
6     enum ieee_802_11_link_status_failure_reason {
7     	reserved0, Unspecified=1, Previous_not_valid, 
8     	Sender_Quits_ESS_or_IBSS,
9     	Due_Inactivity, AP_Overload, 
10     	Class_2_from_NonAuth,
11     	Class_3_from_NonAuth,
12     	Sender_Quits_BSS,
13     	Association_requester_not_authenticated,
14     	Reserved10 
15     };
16     	
17     	
18     #define IEEE_802_11_LINK_STATUS_FAILURE_REASON_STRINGS \
19     {	\
20             {reserved0,		0xff," Reserved reason "},\
21             {Unspecified,		0xff," Unspecified Reason "},\
22             {Previous_not_valid,	0xff," Previous Authentication no longer valid "},\
23             {Sender_Quits_ESS_or_IBSS,0xff," Deauthenticated because sending station is leaving (has left) IBSS or ESS "},\
24             {Due_Inactivity,	0xff," Disassociated due to inactivity "},\
25             {AP_Overload,		0xff," Disassociated because AP is unable to handle all currently associated stations "},\
26             {Class_2_from_NonAuth,	0xff," Class 2 frame received from non-Authenticated station"},\
27             {Class_3_from_NonAuth,	0xff," Class 3 frame received from non­Associated station"},\
28             {Sender_Quits_BSS,	0xff," Disassociated because sending station is leaving (has left) BSS"},\
29             {Association_requester_not_authenticated,0xff," Station requesting (Re)Association is not Authenticated with responding station"},\
30             {Reserved10,		0xff," Reserved"},\
31     	{0,0,NULL}\
32     };
33     
34     
35     
36     struct ieee_802_11_header {
37     	u16	frame_control;// needs to be subtyped
38     	u16	duration;
39     	u8	mac1[6];
40     	u8	mac2[6];
41     	u8	mac3[6];
42     	u16	SeqCtl;
43     	u8	mac4[6];
44     	u16	gapLen;
45     	u8	gap[8];
46     };
47     
48     
49     struct ieee_802_3_header {
50     
51     	u16	status;
52     	u16	payload_length;
53     	u8	dst_mac[6];
54     	u8	src_mac[6];
55     	
56     };
57     
58     #define P80211_OUI_LEN 3
59     
60     struct ieee_802_11_snap_header { 
61     
62     	u8    dsap;   /* always 0xAA */
63     	u8    ssap;   /* always 0xAA */
64     	u8    ctrl;   /* always 0x03 */
65     	u8    oui[P80211_OUI_LEN];    /* organizational universal id */
66     
67     } __attribute__ ((packed));
68     
69     #define P80211_LLC_OUI_LEN 3
70     
71     struct ieee_802_11_802_1H_header {
72     
73     	u8    dsap;   
74     	u8    ssap;   /* always 0xAA */
75     	u8    ctrl;   /* always 0x03 */
76     	u8    oui[P80211_OUI_LEN];    /* organizational universal id */
77     	u16    unknown1;      /* packet type ID fields */
78     	u16    unknown2;		/* here is something like length in some cases */
79     } __attribute__ ((packed));
80     
81     struct ieee_802_11_802_2_header {
82     
83     	u8    dsap;   
84     	u8    ssap;   /* always 0xAA */
85     	u8    ctrl;   /* always 0x03 */
86     	u8    oui[P80211_OUI_LEN];    /* organizational universal id */
87     	u8    type;      /* packet type ID field. i guess,  */
88     
89     } __attribute__ ((packed));
90     
91     
92     
93     // following is incoplete and may be incorrect and need reorganization
94     
95     #define ieee_802_11_frame_type_Management	0x00
96     #define ieee_802_11_frame_type_Control		0x01
97     #define ieee_802_11_frame_type_Data		0x10
98     #define ieee_802_11_frame_type_Reserved		0x11
99     
100     #define ieee_802_11_frame_subtype_Association_Req	0x0 // Association Request
101     #define ieee_802_11_frame_subtype_Association_Resp	0x1 // Association Response
102     #define ieee_802_11_frame_subtype_Reassociation_Req	0x2 // Reassociation Request
103     #define ieee_802_11_frame_subtype_Reassociation_Resp	0x3 // Reassociation Response
104     #define ieee_802_11_frame_subtype_Probe_Req		0x4 // Probe Request
105     #define ieee_802_11_frame_subtype_Probe_Resp		0x5 // Probe Response
106     #define ieee_802_11_frame_subtype_Beacon 		0x8 // Beacon
107     #define ieee_802_11_frame_subtype_ATIM 			0x9 // ATIM
108     #define ieee_802_11_frame_subtype_Disassociation 	0xA // Disassociation
109     #define ieee_802_11_frame_subtype_Authentication 	0xB // Authentication
110     #define ieee_802_11_frame_subtype_Deauthentication 	0xC // Deauthentication
111     #define ieee_802_11_frame_subtype_PS_Poll 		0xA // PS-Poll
112     #define ieee_802_11_frame_subtype_RTS 			0xB // RTS
113     #define ieee_802_11_frame_subtype_CTS 			0xC // CTS
114     #define ieee_802_11_frame_subtype_ACK 			0xD // ACK
115     #define ieee_802_11_frame_subtype_CFEnd 		0xE // CF-End
116     #define ieee_802_11_frame_subtype_CFEnd_CFAck 		0xF // CF-End + CF-Ack
117     #define ieee_802_11_frame_subtype_Data 			0x0 // Data
118     #define ieee_802_11_frame_subtype_Data_CFAck 		0x1 // Data + CF-Ack
119     #define ieee_802_11_frame_subtype_Data_CF_Poll 		0x2 // Data + CF-Poll
120     #define ieee_802_11_frame_subtype_Data_CF_AckCF_Poll 	0x3 // Data + CF-Ack + CF-Poll
121     #define ieee_802_11_frame_subtype_NullFunction 		0x4 // Null Function (no data)
122     #define ieee_802_11_frame_subtype_CF_Ack 		0x5 // CF-Ack (no data)
123     #define ieee_802_11_frame_subtype_CF_Poll 		0x6 // CF-Poll (no data)
124     #define ieee_802_11_frame_subtype_CF_AckCF_Poll 	0x7 // CF-Ack + CF-Poll (no data)
125     
126     
127     #define ieee_802_11_frame_subtype_strings {\
128     	{ ieee_802_11_frame_subtype_Association_Req,	0xF,"f  Association Request"},\
129     	{ ieee_802_11_frame_subtype_Association_Resp,	0xF,"1  Association Response"},\
130     	{ ieee_802_11_frame_subtype_Reassociation_Req,	0xF,"2  Reassociation Request"},\
131     	{ ieee_802_11_frame_subtype_Reassociation_Resp,	0xF,"3  Reassociation Response"},\
132     	{ ieee_802_11_frame_subtype_Probe_Req	,	0xF,"4  Probe Request"},\
133     	{ ieee_802_11_frame_subtype_Probe_Resp	,	0xF,"5  Probe Response"},\
134     	{ ieee_802_11_frame_subtype_Beacon 	,	0xF,"8  Beacon"},\
135     	{ ieee_802_11_frame_subtype_ATIM 	,	0xF,"9  ATIM"},\
136     	{ ieee_802_11_frame_subtype_Disassociation,	0xF,"A  Disassociation"},\
137     	{ ieee_802_11_frame_subtype_Authentication,	0xF,"B  Authentication"},\
138     	{ ieee_802_11_frame_subtype_Deauthentication,	0xF,"C  Deauthentication"},\
139     	{ ieee_802_11_frame_subtype_PS_Poll 	,	0xF,"A  PS-Poll"},\
140     	{ ieee_802_11_frame_subtype_RTS 	,	0xF,"B  RTS"},\
141     	{ ieee_802_11_frame_subtype_CTS 	,	0xF,"C  CTS"},\
142     	{ ieee_802_11_frame_subtype_ACK 	,	0xF,"D  ACK"},\
143     	{ ieee_802_11_frame_subtype_CFEnd	,	0xF,"E  CF-End"},\
144     	{ ieee_802_11_frame_subtype_CFEnd_CFAck ,	0xF,"F  CF-End + CF-Ack"},\
145     	{ ieee_802_11_frame_subtype_Data 	,	0xF,"0  Data"},\
146     	{ ieee_802_11_frame_subtype_Data_CFAck 	,	0xF,"1  Data + CF-Ack"},\
147     	{ ieee_802_11_frame_subtype_Data_CFPoll ,	0xF,"2  Data + CF-Poll"},\
148     	{ ieee_802_11_frame_subtype_Data_CFAck_CFPoll,	0xF,"3  Data + CF-Ack + CF-Poll"},\
149     	{ ieee_802_11_frame_subtype_Null_Function ,	0xF,"4  Null Function (no data)"},\
150     	{ ieee_802_11_frame_subtype_CFAck ,		0xF,"5  CF-Ack (no data)"},\
151     	{ ieee_802_11_frame_subtype_CFPoll ,		0xF,"6  CF-Poll (no data)"},\
152     	{ ieee_802_11_frame_subtype_CFAck_CFPoll,	0xF,"y7  CF-Ack + CF-Poll (no data)"},\
153     	{ 0,0,NULL}\
154     }
155     struct ieee_802_11_frame_subtype_class {
156     	u8	subtype;
157     	u8	mask;
158     	u8	class;
159     	u8	type;
160     };
161     #define ieee_802_11_frame_subtype_classes {\
162     	{ ieee_802_11_frame_subtype_Association_Req,	0xF,2,ieee_802_11_frame_type_Management},\
163     	{ ieee_802_11_frame_subtype_Association_Resp,	0xF,2,ieee_802_11_frame_type_Management},\
164     	{ ieee_802_11_frame_subtype_Reassociation_Req,	0xF,2,ieee_802_11_frame_type_Management},\
165     	{ ieee_802_11_frame_subtype_Reassociation_Resp,	0xF,2,ieee_802_11_frame_type_Management},\
166     	{ ieee_802_11_frame_subtype_Probe_Req	,	0xF,1,ieee_802_11_frame_type_Management},\
167     	{ ieee_802_11_frame_subtype_Probe_Resp	,	0xF,1,ieee_802_11_frame_type_Management},\
168     	{ ieee_802_11_frame_subtype_Beacon 	,	0xF,1,ieee_802_11_frame_type_Management},\
169     	{ ieee_802_11_frame_subtype_ATIM 	,	0xF,1,ieee_802_11_frame_type_Management},\
170     	{ ieee_802_11_frame_subtype_Disassociation,	0xF,2,ieee_802_11_frame_type_Management},\
171     	{ ieee_802_11_frame_subtype_Authentication,	0xF,1,ieee_802_11_frame_type_Management},\
172     	{ ieee_802_11_frame_subtype_Deauthentication,	0xF,3,ieee_802_11_frame_type_Management},\
173     	{ ieee_802_11_frame_subtype_PS-Poll 	,	0xF,3,ieee_802_11_frame_type_Control},\
174     	{ ieee_802_11_frame_subtype_RTS 	,	0xF,1,ieee_802_11_frame_type_Control},\
175     	{ ieee_802_11_frame_subtype_CTS 	,	0xF,1,ieee_802_11_frame_type_Control},\
176     	{ ieee_802_11_frame_subtype_ACK 	,	0xF,1,ieee_802_11_frame_type_Control},\
177     	{ ieee_802_11_frame_subtype_CFEnd	,	0xF,1,ieee_802_11_frame_type_Control},\
178     	{ ieee_802_11_frame_subtype_CFEnd_CFAck ,	0xF,1,ieee_802_11_frame_type_Control},\
179     	{ ieee_802_11_frame_subtype_Data 	,	0xF,3,ieee_802_11_frame_type_Data},\
180     	{ ieee_802_11_frame_subtype_Data_CFAck 	,	0xF,3,ieee_802_11_frame_type_Data},\
181     	{ ieee_802_11_frame_subtype_Data_CF_Poll 	0xF,3,ieee_802_11_frame_type_Data},\
182     	{ ieee_802_11_frame_subtype_Data_CF_AckCF_Poll,	0xF,3,ieee_802_11_frame_type_Data},\
183     	{ ieee_802_11_frame_subtype_NullFunction 	0xF,1,ieee_802_11_frame_type_Data},\
184     	{ ieee_802_11_frame_subtype_CF_Ack ,		0xF,1,ieee_802_11_frame_type_Data},\
185     	{ ieee_802_11_frame_subtype_CF_Poll ,		0xF,1,ieee_802_11_frame_type_Data},\
186     	{ ieee_802_11_frame_subtype_CF_AckCF_Poll,	0xF,1,ieee_802_11_frame_type_Data},\
187     	{ 0,0,NULL}\
188     }
189     
190     
191     #endif
192