ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.6.tar.bz2
[linux-2.6.git] / 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