4 #include <linux/types.h>
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
,
13 Association_requester_not_authenticated
,
18 #define IEEE_802_11_LINK_STATUS_FAILURE_REASON_STRINGS \
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"},\
36 struct ieee_802_11_header
{
37 u16 frame_control
;// needs to be subtyped
49 struct ieee_802_3_header
{
58 #define P80211_OUI_LEN 3
60 struct ieee_802_11_snap_header
{
62 u8 dsap
; /* always 0xAA */
63 u8 ssap
; /* always 0xAA */
64 u8 ctrl
; /* always 0x03 */
65 u8 oui
[P80211_OUI_LEN
]; /* organizational universal id */
67 } __attribute__ ((packed
));
69 #define P80211_LLC_OUI_LEN 3
71 struct ieee_802_11_802_1H_header
{
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
));
81 struct ieee_802_11_802_2_header
{
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, */
89 } __attribute__ ((packed
));
93 // following is incoplete and may be incorrect and need reorganization
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
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)
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)"},\
155 struct ieee_802_11_frame_subtype_class
{
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},\