Subversion Repositories shark

Rev

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 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