1#ifndef IEEE_802_11
2#define IEEE_802_11
3
4#include <linux/types.h>
5
6enum 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 nonAssociated 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
36struct ieee_802_11_header {
37 u16 frame_control;
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
49struct 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
60struct ieee_802_11_snap_header {
61
62 u8 dsap;
63 u8 ssap;
64 u8 ctrl;
65 u8 oui[P80211_OUI_LEN];
66
67} __attribute__ ((packed));
68
69#define P80211_LLC_OUI_LEN 3
70
71struct ieee_802_11_802_1H_header {
72
73 u8 dsap;
74 u8 ssap;
75 u8 ctrl;
76 u8 oui[P80211_OUI_LEN];
77 u16 unknown1;
78 u16 unknown2;
79} __attribute__ ((packed));
80
81struct ieee_802_11_802_2_header {
82
83 u8 dsap;
84 u8 ssap;
85 u8 ctrl;
86 u8 oui[P80211_OUI_LEN];
87 u8 type;
88
89} __attribute__ ((packed));
90
91
92
93
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
101#define ieee_802_11_frame_subtype_Association_Resp 0x1
102#define ieee_802_11_frame_subtype_Reassociation_Req 0x2
103#define ieee_802_11_frame_subtype_Reassociation_Resp 0x3
104#define ieee_802_11_frame_subtype_Probe_Req 0x4
105#define ieee_802_11_frame_subtype_Probe_Resp 0x5
106#define ieee_802_11_frame_subtype_Beacon 0x8
107#define ieee_802_11_frame_subtype_ATIM 0x9
108#define ieee_802_11_frame_subtype_Disassociation 0xA
109#define ieee_802_11_frame_subtype_Authentication 0xB
110#define ieee_802_11_frame_subtype_Deauthentication 0xC
111#define ieee_802_11_frame_subtype_PS_Poll 0xA
112#define ieee_802_11_frame_subtype_RTS 0xB
113#define ieee_802_11_frame_subtype_CTS 0xC
114#define ieee_802_11_frame_subtype_ACK 0xD
115#define ieee_802_11_frame_subtype_CFEnd 0xE
116#define ieee_802_11_frame_subtype_CFEnd_CFAck 0xF
117#define ieee_802_11_frame_subtype_Data 0x0
118#define ieee_802_11_frame_subtype_Data_CFAck 0x1
119#define ieee_802_11_frame_subtype_Data_CF_Poll 0x2
120#define ieee_802_11_frame_subtype_Data_CF_AckCF_Poll 0x3
121#define ieee_802_11_frame_subtype_NullFunction 0x4
122#define ieee_802_11_frame_subtype_CF_Ack 0x5
123#define ieee_802_11_frame_subtype_CF_Poll 0x6
124#define ieee_802_11_frame_subtype_CF_AckCF_Poll 0x7
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}
155struct 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