This source file includes following definitions.
- wlan_ctl_framelen
- p80211_headerlen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 #ifndef _P80211HDR_H
62 #define _P80211HDR_H
63
64 #include <linux/if_ether.h>
65
66
67 #define WLAN_CRC_LEN 4
68 #define WLAN_BSSID_LEN 6
69 #define WLAN_HDR_A3_LEN 24
70 #define WLAN_HDR_A4_LEN 30
71 #define WLAN_SSID_MAXLEN 32
72 #define WLAN_DATA_MAXLEN 2312
73 #define WLAN_WEP_IV_LEN 4
74 #define WLAN_WEP_ICV_LEN 4
75
76
77
78 #define WLAN_FTYPE_MGMT 0x00
79 #define WLAN_FTYPE_CTL 0x01
80 #define WLAN_FTYPE_DATA 0x02
81
82
83
84 #define WLAN_FSTYPE_ASSOCREQ 0x00
85 #define WLAN_FSTYPE_ASSOCRESP 0x01
86 #define WLAN_FSTYPE_REASSOCREQ 0x02
87 #define WLAN_FSTYPE_REASSOCRESP 0x03
88 #define WLAN_FSTYPE_PROBEREQ 0x04
89 #define WLAN_FSTYPE_PROBERESP 0x05
90 #define WLAN_FSTYPE_BEACON 0x08
91 #define WLAN_FSTYPE_ATIM 0x09
92 #define WLAN_FSTYPE_DISASSOC 0x0a
93 #define WLAN_FSTYPE_AUTHEN 0x0b
94 #define WLAN_FSTYPE_DEAUTHEN 0x0c
95
96
97 #define WLAN_FSTYPE_BLOCKACKREQ 0x8
98 #define WLAN_FSTYPE_BLOCKACK 0x9
99 #define WLAN_FSTYPE_PSPOLL 0x0a
100 #define WLAN_FSTYPE_RTS 0x0b
101 #define WLAN_FSTYPE_CTS 0x0c
102 #define WLAN_FSTYPE_ACK 0x0d
103 #define WLAN_FSTYPE_CFEND 0x0e
104 #define WLAN_FSTYPE_CFENDCFACK 0x0f
105
106
107 #define WLAN_FSTYPE_DATAONLY 0x00
108 #define WLAN_FSTYPE_DATA_CFACK 0x01
109 #define WLAN_FSTYPE_DATA_CFPOLL 0x02
110 #define WLAN_FSTYPE_DATA_CFACK_CFPOLL 0x03
111 #define WLAN_FSTYPE_NULL 0x04
112 #define WLAN_FSTYPE_CFACK 0x05
113 #define WLAN_FSTYPE_CFPOLL 0x06
114 #define WLAN_FSTYPE_CFACK_CFPOLL 0x07
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135 #define WLAN_GET_FC_FTYPE(n) ((((u16)(n)) & GENMASK(3, 2)) >> 2)
136 #define WLAN_GET_FC_FSTYPE(n) ((((u16)(n)) & GENMASK(7, 4)) >> 4)
137 #define WLAN_GET_FC_TODS(n) ((((u16)(n)) & (BIT(8))) >> 8)
138 #define WLAN_GET_FC_FROMDS(n) ((((u16)(n)) & (BIT(9))) >> 9)
139 #define WLAN_GET_FC_ISWEP(n) ((((u16)(n)) & (BIT(14))) >> 14)
140
141 #define WLAN_SET_FC_FTYPE(n) (((u16)(n)) << 2)
142 #define WLAN_SET_FC_FSTYPE(n) (((u16)(n)) << 4)
143 #define WLAN_SET_FC_TODS(n) (((u16)(n)) << 8)
144 #define WLAN_SET_FC_FROMDS(n) (((u16)(n)) << 9)
145 #define WLAN_SET_FC_ISWEP(n) (((u16)(n)) << 14)
146
147 #define DOT11_RATE5_ISBASIC_GET(r) (((u8)(r)) & BIT(7))
148
149
150
151 struct p80211_hdr_a3 {
152 __le16 fc;
153 u16 dur;
154 u8 a1[ETH_ALEN];
155 u8 a2[ETH_ALEN];
156 u8 a3[ETH_ALEN];
157 u16 seq;
158 } __packed;
159
160 struct p80211_hdr_a4 {
161 u16 fc;
162 u16 dur;
163 u8 a1[ETH_ALEN];
164 u8 a2[ETH_ALEN];
165 u8 a3[ETH_ALEN];
166 u16 seq;
167 u8 a4[ETH_ALEN];
168 } __packed;
169
170 union p80211_hdr {
171 struct p80211_hdr_a3 a3;
172 struct p80211_hdr_a4 a4;
173 } __packed;
174
175
176
177 static inline u16 wlan_ctl_framelen(u16 fstype)
178 {
179 switch (fstype) {
180 case WLAN_FSTYPE_BLOCKACKREQ:
181 return 24;
182 case WLAN_FSTYPE_BLOCKACK:
183 return 152;
184 case WLAN_FSTYPE_PSPOLL:
185 case WLAN_FSTYPE_RTS:
186 case WLAN_FSTYPE_CFEND:
187 case WLAN_FSTYPE_CFENDCFACK:
188 return 20;
189 case WLAN_FSTYPE_CTS:
190 case WLAN_FSTYPE_ACK:
191 return 14;
192 default:
193 return 4;
194 }
195 }
196
197 #define WLAN_FCS_LEN 4
198
199
200 static inline u16 p80211_headerlen(u16 fctl)
201 {
202 u16 hdrlen = 0;
203
204 switch (WLAN_GET_FC_FTYPE(fctl)) {
205 case WLAN_FTYPE_MGMT:
206 hdrlen = WLAN_HDR_A3_LEN;
207 break;
208 case WLAN_FTYPE_DATA:
209 hdrlen = WLAN_HDR_A3_LEN;
210 if (WLAN_GET_FC_TODS(fctl) && WLAN_GET_FC_FROMDS(fctl))
211 hdrlen += ETH_ALEN;
212 break;
213 case WLAN_FTYPE_CTL:
214 hdrlen = wlan_ctl_framelen(WLAN_GET_FC_FSTYPE(fctl)) -
215 WLAN_FCS_LEN;
216 break;
217 default:
218 hdrlen = WLAN_HDR_A3_LEN;
219 }
220
221 return hdrlen;
222 }
223
224 #endif