- Kai Germaschewski: ymfpci cleanups and resource leak fixes
[davej-history.git] / include / linux / 802_11.h
blobcff47601a23161357ca8d0e386198f9cff8d8524
1 #ifndef IEEE_802_11
2 #define IEEE_802_11
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,
10 Class_2_from_NonAuth,
11 Class_3_from_NonAuth,
12 Sender_Quits_BSS,
13 Association_requester_not_authenticated,
14 Reserved10
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}\
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];
49 struct ieee_802_3_header {
51 u16 status;
52 u16 payload_length;
53 u8 dst_mac[6];
54 u8 src_mac[6];
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 {
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));
81 struct ieee_802_11_802_2_header {
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, */
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)"},\
153 { 0,0,NULL}\
155 struct ieee_802_11_frame_subtype_class {
156 u8 subtype;
157 u8 mask;
158 u8 class;
159 u8 type;
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}\
191 #endif