diff options
Diffstat (limited to 'src/transport/wlan/byteorder.h')
-rw-r--r-- | src/transport/wlan/byteorder.h | 397 |
1 files changed, 397 insertions, 0 deletions
diff --git a/src/transport/wlan/byteorder.h b/src/transport/wlan/byteorder.h new file mode 100644 index 000000000..75dc5e5d5 --- /dev/null +++ b/src/transport/wlan/byteorder.h | |||
@@ -0,0 +1,397 @@ | |||
1 | /* | ||
2 | * Compatibility header | ||
3 | * | ||
4 | * Copyright (C) 2009 Thomas d'Otreppe | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | * | ||
11 | * This program is distributed in the hope that it will be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write to the Free Software | ||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
19 | */ | ||
20 | |||
21 | #ifndef _AIRCRACK_NG_BYTEORDER_H_ | ||
22 | #define _AIRCRACK_NG_BYTEORDER_H_ | ||
23 | |||
24 | #define ___my_swab16(x) \ | ||
25 | ((u_int16_t)( \ | ||
26 | (((u_int16_t)(x) & (u_int16_t)0x00ffU) << 8) | \ | ||
27 | (((u_int16_t)(x) & (u_int16_t)0xff00U) >> 8) )) | ||
28 | #define ___my_swab32(x) \ | ||
29 | ((u_int32_t)( \ | ||
30 | (((u_int32_t)(x) & (u_int32_t)0x000000ffUL) << 24) | \ | ||
31 | (((u_int32_t)(x) & (u_int32_t)0x0000ff00UL) << 8) | \ | ||
32 | (((u_int32_t)(x) & (u_int32_t)0x00ff0000UL) >> 8) | \ | ||
33 | (((u_int32_t)(x) & (u_int32_t)0xff000000UL) >> 24) )) | ||
34 | #define ___my_swab64(x) \ | ||
35 | ((u_int64_t)( \ | ||
36 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x00000000000000ffULL) << 56) | \ | ||
37 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x000000000000ff00ULL) << 40) | \ | ||
38 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x0000000000ff0000ULL) << 24) | \ | ||
39 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x00000000ff000000ULL) << 8) | \ | ||
40 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x000000ff00000000ULL) >> 8) | \ | ||
41 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x0000ff0000000000ULL) >> 24) | \ | ||
42 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0x00ff000000000000ULL) >> 40) | \ | ||
43 | (u_int64_t)(((u_int64_t)(x) & (u_int64_t)0xff00000000000000ULL) >> 56) )) | ||
44 | |||
45 | |||
46 | /* | ||
47 | * Linux | ||
48 | */ | ||
49 | #if defined(linux) || defined(Linux) || defined(__linux__) || defined(__linux) || defined(__gnu_linux__) | ||
50 | #include <endian.h> | ||
51 | #include <unistd.h> | ||
52 | #include <stdint.h> | ||
53 | |||
54 | #ifndef __int8_t_defined | ||
55 | typedef uint64_t u_int64_t; | ||
56 | typedef uint32_t u_int32_t; | ||
57 | typedef uint16_t u_int16_t; | ||
58 | typedef uint8_t u_int8_t; | ||
59 | #endif | ||
60 | |||
61 | #endif | ||
62 | |||
63 | /* | ||
64 | * Cygwin | ||
65 | */ | ||
66 | #if defined(__CYGWIN32__) | ||
67 | #include <asm/byteorder.h> | ||
68 | #include <unistd.h> | ||
69 | |||
70 | #define __be64_to_cpu(x) ___my_swab64(x) | ||
71 | #define __be32_to_cpu(x) ___my_swab32(x) | ||
72 | #define __be16_to_cpu(x) ___my_swab16(x) | ||
73 | #define __cpu_to_be64(x) ___my_swab64(x) | ||
74 | #define __cpu_to_be32(x) ___my_swab32(x) | ||
75 | #define __cpu_to_be16(x) ___my_swab16(x) | ||
76 | #define __le64_to_cpu(x) (x) | ||
77 | #define __le32_to_cpu(x) (x) | ||
78 | #define __le16_to_cpu(x) (x) | ||
79 | #define __cpu_to_le64(x) (x) | ||
80 | #define __cpu_to_le32(x) (x) | ||
81 | #define __cpu_to_le16(x) (x) | ||
82 | |||
83 | #define AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
84 | |||
85 | #endif | ||
86 | |||
87 | /* | ||
88 | * Windows (DDK) | ||
89 | */ | ||
90 | #if defined(__WIN__) | ||
91 | |||
92 | #include <io.h> | ||
93 | |||
94 | #define __be64_to_cpu(x) ___my_swab64(x) | ||
95 | #define __be32_to_cpu(x) ___my_swab32(x) | ||
96 | #define __be16_to_cpu(x) ___my_swab16(x) | ||
97 | #define __cpu_to_be64(x) ___my_swab64(x) | ||
98 | #define __cpu_to_be32(x) ___my_swab32(x) | ||
99 | #define __cpu_to_be16(x) ___my_swab16(x) | ||
100 | #define __le64_to_cpu(x) (x) | ||
101 | #define __le32_to_cpu(x) (x) | ||
102 | #define __le16_to_cpu(x) (x) | ||
103 | #define __cpu_to_le64(x) (x) | ||
104 | #define __cpu_to_le32(x) (x) | ||
105 | #define __cpu_to_le16(x) (x) | ||
106 | |||
107 | #define AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
108 | |||
109 | #endif | ||
110 | |||
111 | /* | ||
112 | * MAC (Darwin) | ||
113 | */ | ||
114 | #if defined(__APPLE_CC__) | ||
115 | #if defined(__x86_64__) && defined(__APPLE__) | ||
116 | |||
117 | #include <libkern/OSByteOrder.h> | ||
118 | |||
119 | #define __swab64(x) (unsigned long long) OSSwapInt64((uint64_t)x) | ||
120 | #define __swab32(x) (unsigned long) OSSwapInt32((uint32_t)x) | ||
121 | #define __swab16(x) (unsigned short) OSSwapInt16((uint16_t)x) | ||
122 | #define __be64_to_cpu(x) (unsigned long long) OSSwapBigToHostInt64((uint64_t)x) | ||
123 | #define __be32_to_cpu(x) (unsigned long) OSSwapBigToHostInt32((uint32_t)x) | ||
124 | #define __be16_to_cpu(x) (unsigned short) OSSwapBigToHostInt16((uint16_t)x) | ||
125 | #define __le64_to_cpu(x) (unsigned long long) OSSwapLittleToHostInt64((uint64_t)x) | ||
126 | #define __le32_to_cpu(x) (unsigned long) OSSwapLittleToHostInt32((uint32_t)x) | ||
127 | #define __le16_to_cpu(x) (unsigned short) OSSwapLittleToHostInt16((uint16_t)x) | ||
128 | #define __cpu_to_be64(x) (unsigned long long) OSSwapHostToBigInt64((uint64_t)x) | ||
129 | #define __cpu_to_be32(x) (unsigned long) OSSwapHostToBigInt32((uint32_t)x) | ||
130 | #define __cpu_to_be16(x) (unsigned short) OSSwapHostToBigInt16((uint16_t)x) | ||
131 | #define __cpu_to_le64(x) (unsigned long long) OSSwapHostToLittleInt64((uint64_t)x) | ||
132 | #define __cpu_to_le32(x) (unsigned long) OSSwapHostToLittleInt32((uint32_t)x) | ||
133 | #define __cpu_to_le16(x) (unsigned short) OSSwapHostToLittleInt16((uint16_t)x) | ||
134 | |||
135 | #else | ||
136 | |||
137 | #include <architecture/byte_order.h> | ||
138 | |||
139 | #define __swab64(x) NXSwapLongLong(x) | ||
140 | #define __swab32(x) NXSwapLong(x) | ||
141 | #define __swab16(x) NXSwapShort(x) | ||
142 | #define __be64_to_cpu(x) NXSwapBigLongLongToHost(x) | ||
143 | #define __be32_to_cpu(x) NXSwapBigLongToHost(x) | ||
144 | #define __be16_to_cpu(x) NXSwapBigShortToHost(x) | ||
145 | #define __le64_to_cpu(x) NXSwapLittleLongLongToHost(x) | ||
146 | #define __le32_to_cpu(x) NXSwapLittleLongToHost(x) | ||
147 | #define __le16_to_cpu(x) NXSwapLittleShortToHost(x) | ||
148 | #define __cpu_to_be64(x) NXSwapHostLongLongToBig(x) | ||
149 | #define __cpu_to_be32(x) NXSwapHostLongToBig(x) | ||
150 | #define __cpu_to_be16(x) NXSwapHostShortToBig(x) | ||
151 | #define __cpu_to_le64(x) NXSwapHostLongLongToLittle(x) | ||
152 | #define __cpu_to_le32(x) NXSwapHostLongToLittle(x) | ||
153 | #define __cpu_to_le16(x) NXSwapHostShortToLittle(x) | ||
154 | |||
155 | #endif | ||
156 | |||
157 | #define __LITTLE_ENDIAN 1234 | ||
158 | #define __BIG_ENDIAN 4321 | ||
159 | #define __PDP_ENDIAN 3412 | ||
160 | #define __BYTE_ORDER __BIG_ENDIAN | ||
161 | |||
162 | #define AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
163 | |||
164 | #endif | ||
165 | |||
166 | /* | ||
167 | * Solaris | ||
168 | * ------- | ||
169 | */ | ||
170 | #if defined(__sparc__) | ||
171 | #include <sys/byteorder.h> | ||
172 | #include <sys/types.h> | ||
173 | #include <unistd.h> | ||
174 | |||
175 | #define __be64_to_cpu(x) (x) | ||
176 | #define __be32_to_cpu(x) (x) | ||
177 | #define __be16_to_cpu(x) (x) | ||
178 | #define __cpu_to_be64(x) (x) | ||
179 | #define __cpu_to_be32(x) (x) | ||
180 | #define __cpu_to_be16(x) (x) | ||
181 | #define __le64_to_cpu(x) ___my_swab64(x) | ||
182 | #define __le32_to_cpu(x) ___my_swab32(x) | ||
183 | #define __le16_to_cpu(x) ___my_swab16(x) | ||
184 | #define __cpu_to_le64(x) ___my_swab64(x) | ||
185 | #define __cpu_to_le32(x) ___my_swab32(x) | ||
186 | #define __cpu_to_le16(x) ___my_swab16(x) | ||
187 | |||
188 | typedef uint64_t u_int64_t; | ||
189 | typedef uint32_t u_int32_t; | ||
190 | typedef uint16_t u_int16_t; | ||
191 | typedef uint8_t u_int8_t; | ||
192 | |||
193 | #define AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
194 | |||
195 | #endif | ||
196 | |||
197 | /* | ||
198 | * Custom stuff | ||
199 | */ | ||
200 | #if defined(__MACH__) && !defined(__APPLE_CC__) | ||
201 | #include <libkern/OSByteOrder.h> | ||
202 | #define __cpu_to_be64(x) = OSSwapHostToBigInt64(x) | ||
203 | #define __cpu_to_be32(x) = OSSwapHostToBigInt32(x) | ||
204 | |||
205 | #define AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
206 | |||
207 | #endif | ||
208 | |||
209 | |||
210 | // FreeBSD | ||
211 | #ifdef __FreeBSD__ | ||
212 | #include <machine/endian.h> | ||
213 | #endif | ||
214 | |||
215 | // XXX: Is there anything to include on OpenBSD/NetBSD/DragonFlyBSD/...? | ||
216 | |||
217 | |||
218 | // XXX: Mac: Check http://www.opensource.apple.com/source/CF/CF-476.18/CFByteOrder.h | ||
219 | // http://developer.apple.com/DOCUMENTATION/CoreFoundation/Reference/CFByteOrderUtils/Reference/reference.html | ||
220 | // Write to apple to ask what should be used. | ||
221 | |||
222 | #if defined(LITTLE_ENDIAN) | ||
223 | #define AIRCRACK_NG_LITTLE_ENDIAN LITTLE_ENDIAN | ||
224 | #elif defined(__LITTLE_ENDIAN) | ||
225 | #define AIRCRACK_NG_LITTLE_ENDIAN __LITTLE_ENDIAN | ||
226 | #elif defined(_LITTLE_ENDIAN) | ||
227 | #define AIRCRACK_NG_LITTLE_ENDIAN _LITTLE_ENDIAN | ||
228 | #endif | ||
229 | |||
230 | #if defined(BIG_ENDIAN) | ||
231 | #define AIRCRACK_NG_BIG_ENDIAN BIG_ENDIAN | ||
232 | #elif defined(__BIG_ENDIAN) | ||
233 | #define AIRCRACK_NG_BIG_ENDIAN __BIG_ENDIAN | ||
234 | #elif defined(_BIG_ENDIAN) | ||
235 | #define AIRCRACK_NG_BIG_ENDIAN _BIG_ENDIAN | ||
236 | #endif | ||
237 | |||
238 | #if !defined(AIRCRACK_NG_LITTLE_ENDIAN) && !defined(AIRCRACK_NG_BIG_ENDIAN) | ||
239 | #error Impossible to determine endianness (Little or Big endian), please contact the author. | ||
240 | #endif | ||
241 | |||
242 | #if defined(BYTE_ORDER) | ||
243 | #if (BYTE_ORDER == AIRCRACK_NG_LITTLE_ENDIAN) | ||
244 | #define AIRCRACK_NG_BYTE_ORDER AIRCRACK_NG_LITTLE_ENDIAN | ||
245 | #elif (BYTE_ORDER == AIRCRACK_NG_BIG_ENDIAN) | ||
246 | #define AIRCRACK_NG_BYTE_ORDER AIRCRACK_NG_BIG_ENDIAN | ||
247 | #endif | ||
248 | #elif defined(__BYTE_ORDER) | ||
249 | #if (__BYTE_ORDER == AIRCRACK_NG_LITTLE_ENDIAN) | ||
250 | #define AIRCRACK_NG_BYTE_ORDER AIRCRACK_NG_LITTLE_ENDIAN | ||
251 | #elif (__BYTE_ORDER == AIRCRACK_NG_BIG_ENDIAN) | ||
252 | #define AIRCRACK_NG_BYTE_ORDER AIRCRACK_NG_BIG_ENDIAN | ||
253 | #endif | ||
254 | #elif defined(_BYTE_ORDER) | ||
255 | #if (_BYTE_ORDER == AIRCRACK_NG_LITTLE_ENDIAN) | ||
256 | #define AIRCRACK_NG_BYTE_ORDER AIRCRACK_NG_LITTLE_ENDIAN | ||
257 | #elif (_BYTE_ORDER == AIRCRACK_NG_BIG_ENDIAN) | ||
258 | #define AIRCRACK_NG_BYTE_ORDER AIRCRACK_NG_BIG_ENDIAN | ||
259 | #endif | ||
260 | #endif | ||
261 | |||
262 | #ifndef AIRCRACK_NG_BYTE_ORDER | ||
263 | #error Impossible to determine endianness (Little or Big endian), please contact the author. | ||
264 | #endif | ||
265 | |||
266 | #if (AIRCRACK_NG_BYTE_ORDER == AIRCRACK_NG_LITTLE_ENDIAN) | ||
267 | |||
268 | #ifndef AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
269 | #define __be64_to_cpu(x) ___my_swab64(x) | ||
270 | #define __be32_to_cpu(x) ___my_swab32(x) | ||
271 | #define __be16_to_cpu(x) ___my_swab16(x) | ||
272 | #define __cpu_to_be64(x) ___my_swab64(x) | ||
273 | #define __cpu_to_be32(x) ___my_swab32(x) | ||
274 | #define __cpu_to_be16(x) ___my_swab16(x) | ||
275 | #define __le64_to_cpu(x) (x) | ||
276 | #define __le32_to_cpu(x) (x) | ||
277 | #define __le16_to_cpu(x) (x) | ||
278 | #define __cpu_to_le64(x) (x) | ||
279 | #define __cpu_to_le32(x) (x) | ||
280 | #define __cpu_to_le16(x) (x) | ||
281 | #endif | ||
282 | |||
283 | #ifndef htobe16 | ||
284 | #define htobe16 ___my_swab16 | ||
285 | #endif | ||
286 | #ifndef htobe32 | ||
287 | #define htobe32 ___my_swab32 | ||
288 | #endif | ||
289 | #ifndef betoh16 | ||
290 | #define betoh16 ___my_swab16 | ||
291 | #endif | ||
292 | #ifndef betoh32 | ||
293 | #define betoh32 ___my_swab32 | ||
294 | #endif | ||
295 | |||
296 | #ifndef htole16 | ||
297 | #define htole16(x) (x) | ||
298 | #endif | ||
299 | #ifndef htole32 | ||
300 | #define htole32(x) (x) | ||
301 | #endif | ||
302 | #ifndef letoh16 | ||
303 | #define letoh16(x) (x) | ||
304 | #endif | ||
305 | #ifndef letoh32 | ||
306 | #define letoh32(x) (x) | ||
307 | #endif | ||
308 | |||
309 | #endif | ||
310 | |||
311 | #if (AIRCRACK_NG_BYTE_ORDER == AIRCRACK_NG_BIG_ENDIAN) | ||
312 | |||
313 | #ifndef AIRCRACK_NG_BYTE_ORDER_DEFINED | ||
314 | #define __be64_to_cpu(x) (x) | ||
315 | #define __be32_to_cpu(x) (x) | ||
316 | #define __be16_to_cpu(x) (x) | ||
317 | #define __cpu_to_be64(x) (x) | ||
318 | #define __cpu_to_be32(x) (x) | ||
319 | #define __cpu_to_be16(x) (x) | ||
320 | #define __le64_to_cpu(x) ___my_swab64(x) | ||
321 | #define __le32_to_cpu(x) ___my_swab32(x) | ||
322 | #define __le16_to_cpu(x) ___my_swab16(x) | ||
323 | #define __cpu_to_le64(x) ___my_swab64(x) | ||
324 | #define __cpu_to_le32(x) ___my_swab32(x) | ||
325 | #define __cpu_to_le16(x) ___my_swab16(x) | ||
326 | #endif | ||
327 | |||
328 | #ifndef htobe16 | ||
329 | #define htobe16(x) (x) | ||
330 | #endif | ||
331 | #ifndef htobe32 | ||
332 | #define htobe32(x) (x) | ||
333 | #endif | ||
334 | #ifndef betoh16 | ||
335 | #define betoh16(x) (x) | ||
336 | #endif | ||
337 | #ifndef betoh32 | ||
338 | #define betoh32(x) (x) | ||
339 | #endif | ||
340 | |||
341 | #ifndef htole16 | ||
342 | #define htole16 ___my_swab16 | ||
343 | #endif | ||
344 | #ifndef htole32 | ||
345 | #define htole32 ___my_swab32 | ||
346 | #endif | ||
347 | #ifndef letoh16 | ||
348 | #define letoh16 ___my_swab16 | ||
349 | #endif | ||
350 | #ifndef letoh32 | ||
351 | #define letoh32 ___my_swab32 | ||
352 | #endif | ||
353 | |||
354 | #endif | ||
355 | |||
356 | // Common defines | ||
357 | #define cpu_to_le64 __cpu_to_le64 | ||
358 | #define le64_to_cpu __le64_to_cpu | ||
359 | #define cpu_to_le32 __cpu_to_le32 | ||
360 | #define le32_to_cpu __le32_to_cpu | ||
361 | #define cpu_to_le16 __cpu_to_le16 | ||
362 | #define le16_to_cpu __le16_to_cpu | ||
363 | #define cpu_to_be64 __cpu_to_be64 | ||
364 | #define be64_to_cpu __be64_to_cpu | ||
365 | #define cpu_to_be32 __cpu_to_be32 | ||
366 | #define be32_to_cpu __be32_to_cpu | ||
367 | #define cpu_to_be16 __cpu_to_be16 | ||
368 | #define be16_to_cpu __be16_to_cpu | ||
369 | |||
370 | #ifndef le16toh | ||
371 | #define le16toh le16_to_cpu | ||
372 | #endif | ||
373 | #ifndef be16toh | ||
374 | #define be16toh be16_to_cpu | ||
375 | #endif | ||
376 | #ifndef le32toh | ||
377 | #define le32toh le32_to_cpu | ||
378 | #endif | ||
379 | #ifndef be32toh | ||
380 | #define be32toh be32_to_cpu | ||
381 | #endif | ||
382 | |||
383 | |||
384 | #ifndef htons | ||
385 | #define htons be16_to_cpu | ||
386 | #endif | ||
387 | #ifndef htonl | ||
388 | #define htonl cpu_to_be16 | ||
389 | #endif | ||
390 | #ifndef ntohs | ||
391 | #define ntohs cpu_to_be16 | ||
392 | #endif | ||
393 | #ifndef ntohl | ||
394 | #define ntohl cpu_to_be32 | ||
395 | #endif | ||
396 | |||
397 | #endif | ||