nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | /* |
2 | * Copyright (c) 2002 - 2003 |
||
3 | * NetGroup, Politecnico di Torino (Italy) |
||
4 | * All rights reserved. |
||
5 | * |
||
6 | * Redistribution and use in source and binary forms, with or without |
||
7 | * modification, are permitted provided that the following conditions |
||
8 | * are met: |
||
9 | * |
||
10 | * 1. Redistributions of source code must retain the above copyright |
||
11 | * notice, this list of conditions and the following disclaimer. |
||
12 | * 2. Redistributions in binary form must reproduce the above copyright |
||
13 | * notice, this list of conditions and the following disclaimer in the |
||
14 | * documentation and/or other materials provided with the distribution. |
||
15 | * 3. Neither the name of the Politecnico di Torino nor the names of its |
||
16 | * contributors may be used to endorse or promote products derived from |
||
17 | * this software without specific prior written permission. |
||
18 | * |
||
19 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||
20 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||
21 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||
22 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||
23 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||
24 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||
25 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||
26 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||
27 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||
28 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||
29 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||
30 | */ |
||
31 | |||
32 | /* |
||
33 | * Include the appropriate OS header files on Windows and various flavors |
||
34 | * of UNIX, include various non-OS header files on Windows, and define |
||
35 | * various items as needed, to isolate most of tcpdump's platform |
||
36 | * differences to this one file. |
||
37 | */ |
||
38 | |||
39 | #ifndef tcpdump_stdinc_h |
||
40 | #define tcpdump_stdinc_h |
||
41 | |||
42 | #include <errno.h> |
||
43 | |||
44 | #ifdef WIN32 |
||
45 | |||
46 | #include <stdint.h> |
||
47 | #include <stdio.h> |
||
48 | #include <winsock2.h> |
||
49 | #include <ws2tcpip.h> |
||
50 | #include "bittypes.h" /* in wpcap's Win32/include */ |
||
51 | #include <ctype.h> |
||
52 | #include <time.h> |
||
53 | #include <io.h> |
||
54 | #include <fcntl.h> |
||
55 | #include <sys/types.h> |
||
56 | #include <net/netdb.h> /* in wpcap's Win32/include */ |
||
57 | |||
58 | #ifndef uint8_t |
||
59 | #define uint8_t unsigned char |
||
60 | #endif |
||
61 | |||
62 | #ifndef int8_t |
||
63 | #define int8_t signed char |
||
64 | #endif |
||
65 | |||
66 | #ifndef uint16_t |
||
67 | #define uint16_t unsigned short |
||
68 | #endif |
||
69 | |||
70 | #ifndef int16_t |
||
71 | #define int16_t signed short |
||
72 | #endif |
||
73 | |||
74 | #ifndef uint32_t |
||
75 | #define uint32_t unsigned int |
||
76 | #endif |
||
77 | |||
78 | #ifndef int32_t |
||
79 | #define int32_t signed int |
||
80 | #endif |
||
81 | |||
82 | #ifdef _MSC_EXTENSIONS |
||
83 | |||
84 | #ifndef uint64_t |
||
85 | #define uint64_t unsigned _int64 |
||
86 | #endif |
||
87 | |||
88 | #ifndef int64_t |
||
89 | #define int64_t _int64 |
||
90 | #endif |
||
91 | |||
92 | #ifndef PRId64 |
||
93 | #define PRId64 "I64d" |
||
94 | #endif |
||
95 | |||
96 | #ifndef PRIo64 |
||
97 | #define PRIo64 "I64o" |
||
98 | #endif |
||
99 | |||
100 | #ifndef PRIu64 |
||
101 | #define PRIu64 "I64u" |
||
102 | #endif |
||
103 | |||
104 | #ifndef PRIx64 |
||
105 | #define PRIx64 "I64x" |
||
106 | #endif |
||
107 | |||
108 | #else /* _MSC_EXTENSIONS */ |
||
109 | |||
110 | #ifndef uint64_t |
||
111 | #define uint64_t unsigned long long |
||
112 | #endif |
||
113 | |||
114 | #ifndef int64_t |
||
115 | #define int64_t long long |
||
116 | #endif |
||
117 | |||
118 | #ifndef PRId64 |
||
119 | #define PRId64 "lld" |
||
120 | #endif |
||
121 | |||
122 | #ifndef PRIo64 |
||
123 | #define PRIo64 "llo" |
||
124 | #endif |
||
125 | |||
126 | #ifndef PRIu64 |
||
127 | #define PRIu64 "llu" |
||
128 | #endif |
||
129 | |||
130 | #ifndef PRIx64 |
||
131 | #define PRIx64 "llx" |
||
132 | #endif |
||
133 | |||
134 | #endif /* _MSC_EXTENSIONS */ |
||
135 | |||
136 | #ifdef _MSC_VER |
||
137 | #define stat _stat |
||
138 | #define open _open |
||
139 | #define fstat _fstat |
||
140 | #define read _read |
||
141 | #define close _close |
||
142 | #define O_RDONLY _O_RDONLY |
||
143 | #endif /* _MSC_VER */ |
||
144 | |||
145 | /* Protos for missing/x.c functions (ideally <missing/addrinfo.h> |
||
146 | * should be used, but it clashes with <ws2tcpip.h>). |
||
147 | */ |
||
148 | extern const char *inet_ntop (int, const void *, char *, size_t); |
||
149 | extern int inet_pton (int, const char *, void *); |
||
150 | extern int inet_aton (const char *cp, struct in_addr *addr); |
||
151 | |||
152 | /* |
||
153 | * With MSVC, for C, __inline is used to make a function an inline. |
||
154 | */ |
||
155 | #ifdef _MSC_VER |
||
156 | #define inline __inline |
||
157 | #endif |
||
158 | |||
159 | #ifndef INET6_ADDRSTRLEN |
||
160 | #define INET6_ADDRSTRLEN 46 |
||
161 | #endif |
||
162 | |||
163 | /* It is in MSVC's <errno.h>, but not defined in MingW+Watcom. |
||
164 | */ |
||
165 | #ifndef EAFNOSUPPORT |
||
166 | #define EAFNOSUPPORT WSAEAFNOSUPPORT |
||
167 | #endif |
||
168 | |||
169 | #ifndef caddr_t |
||
170 | typedef char* caddr_t; |
||
171 | #endif /* caddr_t */ |
||
172 | |||
173 | #define MAXHOSTNAMELEN 64 |
||
174 | #define NI_MAXHOST 1025 |
||
175 | #define snprintf _snprintf |
||
176 | #define vsnprintf _vsnprintf |
||
177 | #define RETSIGTYPE void |
||
178 | |||
179 | #else /* WIN32 */ |
||
180 | |||
181 | #include <ctype.h> |
||
182 | #include <unistd.h> |
||
183 | #include <netdb.h> |
||
184 | #if HAVE_INTTYPES_H |
||
185 | #include <inttypes.h> |
||
186 | #elif HAVE_STDINT_H |
||
187 | #include <stdint.h> |
||
188 | #endif |
||
189 | #include <sys/param.h> |
||
190 | #include <sys/types.h> /* concession to AIX */ |
||
191 | #include <sys/time.h> |
||
192 | #include <sys/socket.h> |
||
193 | #include <netinet/in.h> |
||
194 | |||
195 | #ifdef TIME_WITH_SYS_TIME |
||
196 | #include <time.h> |
||
197 | #endif |
||
198 | |||
199 | #include <arpa/inet.h> |
||
200 | |||
201 | #endif /* WIN32 */ |
||
202 | |||
203 | #ifndef HAVE___ATTRIBUTE__ |
||
204 | #define __attribute__(x) |
||
205 | #endif |
||
206 | |||
207 | /* |
||
208 | * Used to declare a structure unaligned, so that the C compiler, |
||
209 | * if necessary, generates code that doesn't assume alignment. |
||
210 | * This is required because there is no guarantee that the packet |
||
211 | * data we get from libpcap/WinPcap is properly aligned. |
||
212 | * |
||
213 | * This assumes that, for all compilers that support __attribute__: |
||
214 | * |
||
215 | * 1) they support __attribute__((packed)); |
||
216 | * |
||
217 | * 2) for all instruction set architectures requiring strict |
||
218 | * alignment, declaring a structure with that attribute |
||
219 | * causes the compiler to generate code that handles |
||
220 | * misaligned 2-byte, 4-byte, and 8-byte integral |
||
221 | * quantities. |
||
222 | * |
||
223 | * It does not (yet) handle compilers where you can get the compiler |
||
224 | * to generate code of that sort by some other means. |
||
225 | * |
||
226 | * This is required in order to, for example, keep the compiler from |
||
227 | * generating, for |
||
228 | * |
||
229 | * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) { |
||
230 | * |
||
231 | * in print-bootp.c, code that loads the first 4-byte word of a |
||
232 | * "struct bootp", masking out the bp_hops field, and comparing the result |
||
233 | * against 0x01010600. |
||
234 | * |
||
235 | * Note: this also requires that padding be put into the structure, |
||
236 | * at least for compilers where it's implemented as __attribute__((packed)). |
||
237 | */ |
||
238 | #if !(defined(_MSC_VER) && defined(UNALIGNED)) |
||
239 | /* MSVC may have its own macro defined with the same name and purpose. */ |
||
240 | #undef UNALIGNED |
||
241 | #define UNALIGNED __attribute__((packed)) |
||
242 | #endif |
||
243 | |||
244 | #if defined(WIN32) || defined(MSDOS) |
||
245 | #define FOPEN_READ_TXT "rt" |
||
246 | #define FOPEN_READ_BIN "rb" |
||
247 | #define FOPEN_WRITE_TXT "wt" |
||
248 | #define FOPEN_WRITE_BIN "wb" |
||
249 | #else |
||
250 | #define FOPEN_READ_TXT "r" |
||
251 | #define FOPEN_READ_BIN FOPEN_READ_TXT |
||
252 | #define FOPEN_WRITE_TXT "w" |
||
253 | #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT |
||
254 | #endif |
||
255 | |||
256 | #if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl) |
||
257 | #undef ntohl |
||
258 | #undef ntohs |
||
259 | #undef htonl |
||
260 | #undef htons |
||
261 | |||
262 | static __inline__ unsigned long __ntohl (unsigned long x); |
||
263 | static __inline__ unsigned short __ntohs (unsigned short x); |
||
264 | |||
265 | #define ntohl(x) __ntohl(x) |
||
266 | #define ntohs(x) __ntohs(x) |
||
267 | #define htonl(x) __ntohl(x) |
||
268 | #define htons(x) __ntohs(x) |
||
269 | |||
270 | static __inline__ unsigned long __ntohl (unsigned long x) |
||
271 | { |
||
272 | __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */ |
||
273 | "rorl $16, %0\n\t" /* swap words */ |
||
274 | "xchgb %b0, %h0" /* swap higher bytes */ |
||
275 | : "=q" (x) : "0" (x)); |
||
276 | return (x); |
||
277 | } |
||
278 | |||
279 | static __inline__ unsigned short __ntohs (unsigned short x) |
||
280 | { |
||
281 | __asm__ ("xchgb %b0, %h0" /* swap bytes */ |
||
282 | : "=q" (x) : "0" (x)); |
||
283 | return (x); |
||
284 | } |
||
285 | #endif |
||
286 | |||
287 | #ifndef INET_ADDRSTRLEN |
||
288 | #define INET_ADDRSTRLEN 16 |
||
289 | #endif |
||
290 | |||
291 | #ifndef TRUE |
||
292 | #define TRUE 1 |
||
293 | #endif |
||
294 | |||
295 | #ifndef FALSE |
||
296 | #define FALSE 0 |
||
297 | #endif |
||
298 | |||
299 | /* |
||
300 | * The Apple deprecation workaround macros below were adopted from the |
||
301 | * FreeRADIUS server code under permission of Alan DeKok and Arran Cudbard-Bell. |
||
302 | */ |
||
303 | |||
304 | #define XSTRINGIFY(x) #x |
||
305 | |||
306 | /* |
||
307 | * Macros for controlling warnings in GCC >= 4.2 and clang >= 2.8 |
||
308 | */ |
||
309 | #define DIAG_JOINSTR(x,y) XSTRINGIFY(x ## y) |
||
310 | #define DIAG_DO_PRAGMA(x) _Pragma (#x) |
||
311 | |||
312 | #if defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402 |
||
313 | # define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(GCC diagnostic x) |
||
314 | # if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406 |
||
315 | # define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) |
||
316 | # define DIAG_ON(x) DIAG_PRAGMA(pop) |
||
317 | # else |
||
318 | # define DIAG_OFF(x) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) |
||
319 | # define DIAG_ON(x) DIAG_PRAGMA(warning DIAG_JOINSTR(-W,x)) |
||
320 | # endif |
||
321 | #elif defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__ >= 208) |
||
322 | # define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(clang diagnostic x) |
||
323 | # define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) |
||
324 | # define DIAG_ON(x) DIAG_PRAGMA(pop) |
||
325 | #else |
||
326 | # define DIAG_OFF(x) |
||
327 | # define DIAG_ON(x) |
||
328 | #endif |
||
329 | |||
330 | /* |
||
331 | * For dealing with APIs which are only deprecated in OSX (like the OpenSSL API) |
||
332 | */ |
||
333 | #ifdef __APPLE__ |
||
334 | # define USES_APPLE_DEPRECATED_API DIAG_OFF(deprecated-declarations) |
||
335 | # define USES_APPLE_RST DIAG_ON(deprecated-declarations) |
||
336 | #else |
||
337 | # define USES_APPLE_DEPRECATED_API |
||
338 | # define USES_APPLE_RST |
||
339 | #endif |
||
340 | |||
341 | /* |
||
342 | * end of Apple deprecation workaround macros |
||
343 | */ |
||
344 | |||
345 | #ifndef min |
||
346 | #define min(a,b) ((a)>(b)?(b):(a)) |
||
347 | #endif |
||
348 | #ifndef max |
||
349 | #define max(a,b) ((b)>(a)?(b):(a)) |
||
350 | #endif |
||
351 | |||
352 | #endif /* tcpdump_stdinc_h */ |