Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 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 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 | |||
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 |