12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 2002 - 2003 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * NetGroup, Politecnico di Torino (Italy) 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * All rights reserved. 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met: 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer. 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * documentation and/or other materials provided with the distribution. 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. Neither the name of the Politecnico di Torino nor the names of its 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * contributors may be used to endorse or promote products derived from 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this software without specific prior written permission. 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Include the appropriate OS header files on Windows and various flavors 34892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes * of UNIX, include various non-OS header files on Windows, and define 35892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes * various items as needed, to isolate most of tcpdump's platform 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * differences to this one file. 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef tcpdump_stdinc_h 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define tcpdump_stdinc_h 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 42892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#include <errno.h> 43892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef WIN32 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 46892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#include <stdint.h> 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <winsock2.h> 49892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#include <ws2tcpip.h> 50892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#include "bittypes.h" /* in wpcap's Win32/include */ 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <ctype.h> 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <time.h> 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <io.h> 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <fcntl.h> 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/types.h> 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <net/netdb.h> /* in wpcap's Win32/include */ 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 58892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef uint8_t 59892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define uint8_t unsigned char 60892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 61892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 62892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef int8_t 63892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define int8_t signed char 64892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 65892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 66892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef uint16_t 67892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define uint16_t unsigned short 68892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 69892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 70892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef int16_t 71892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define int16_t signed short 72892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 73892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 74892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef uint32_t 75892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define uint32_t unsigned int 76892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 77892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 78892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef int32_t 79892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define int32_t signed int 80892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 81892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 82892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifdef _MSC_EXTENSIONS 83892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 84892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef uint64_t 85892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define uint64_t unsigned _int64 86892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 87892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 88892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef int64_t 89892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define int64_t _int64 90892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 91892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 92892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRId64 93892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRId64 "I64d" 94892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 95892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 96892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRIo64 97892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRIo64 "I64o" 98892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 99892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 100892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRIu64 101892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRIu64 "I64u" 102892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 103892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 104892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRIx64 105892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRIx64 "I64x" 106892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 107892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 108892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#else /* _MSC_EXTENSIONS */ 109892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 110892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef uint64_t 111892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define uint64_t unsigned long long 112892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 113892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 114892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef int64_t 115892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define int64_t long long 116892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 117892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 118892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRId64 119892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRId64 "lld" 120892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 121892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 122892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRIo64 123892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRIo64 "llo" 12453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 12553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 126892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRIu64 127892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRIu64 "llu" 128892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 129892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 130892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef PRIx64 131892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define PRIx64 "llx" 132892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 133892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 134892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif /* _MSC_EXTENSIONS */ 135892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 136892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifdef _MSC_VER 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define stat _stat 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define open _open 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define fstat _fstat 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define read _read 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define close _close 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define O_RDONLY _O_RDONLY 143892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif /* _MSC_VER */ 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Protos for missing/x.c functions (ideally <missing/addrinfo.h> 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * should be used, but it clashes with <ws2tcpip.h>). 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern const char *inet_ntop (int, const void *, char *, size_t); 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int inet_pton (int, const char *, void *); 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectextern int inet_aton (const char *cp, struct in_addr *addr); 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15253f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * With MSVC, for C, __inline is used to make a function an inline. 15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 15553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef _MSC_VER 15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define inline __inline 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 15953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef INET6_ADDRSTRLEN 16053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define INET6_ADDRSTRLEN 46 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 163892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes/* It is in MSVC's <errno.h>, but not defined in MingW+Watcom. 164892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes */ 165892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef EAFNOSUPPORT 166892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define EAFNOSUPPORT WSAEAFNOSUPPORT 167892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 168892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef caddr_t 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttypedef char* caddr_t; 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* caddr_t */ 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define MAXHOSTNAMELEN 64 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define NI_MAXHOST 1025 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define snprintf _snprintf 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define vsnprintf _vsnprintf 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RETSIGTYPE void 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else /* WIN32 */ 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <ctype.h> 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <unistd.h> 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netdb.h> 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if HAVE_INTTYPES_H 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <inttypes.h> 186892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#elif HAVE_STDINT_H 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdint.h> 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/param.h> 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/types.h> /* concession to AIX */ 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/time.h> 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <sys/socket.h> 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <netinet/in.h> 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef TIME_WITH_SYS_TIME 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <time.h> 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <arpa/inet.h> 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* WIN32 */ 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 20353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef HAVE___ATTRIBUTE__ 20453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define __attribute__(x) 20553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 20653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 20753f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 20853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Used to declare a structure unaligned, so that the C compiler, 20953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * if necessary, generates code that doesn't assume alignment. 21053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * This is required because there is no guarantee that the packet 21153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * data we get from libpcap/WinPcap is properly aligned. 21253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 21353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * This assumes that, for all compilers that support __attribute__: 21453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 21553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1) they support __attribute__((packed)); 21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 21753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 2) for all instruction set architectures requiring strict 21853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * alignment, declaring a structure with that attribute 21953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * causes the compiler to generate code that handles 22053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * misaligned 2-byte, 4-byte, and 8-byte integral 22153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * quantities. 22253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 22353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * It does not (yet) handle compilers where you can get the compiler 22453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * to generate code of that sort by some other means. 22553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 22653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * This is required in order to, for example, keep the compiler from 22753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * generating, for 22853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 22953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) { 23053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 23153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * in print-bootp.c, code that loads the first 4-byte word of a 23253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * "struct bootp", masking out the bp_hops field, and comparing the result 23353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * against 0x01010600. 23453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 23553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Note: this also requires that padding be put into the structure, 23653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * at least for compilers where it's implemented as __attribute__((packed)). 23753f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 238892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#if !(defined(_MSC_VER) && defined(UNALIGNED)) 23953f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* MSVC may have its own macro defined with the same name and purpose. */ 240892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#undef UNALIGNED 24153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define UNALIGNED __attribute__((packed)) 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#if defined(WIN32) || defined(MSDOS) 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_TXT "rt" 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_BIN "rb" 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_TXT "wt" 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_BIN "wb" 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#else 2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_TXT "r" 2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_READ_BIN FOPEN_READ_TXT 2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_TXT "w" 2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT 2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 256892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl) 2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef ntohl 2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef ntohs 2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef htonl 2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #undef htons 2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 26253f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned long __ntohl (unsigned long x); 26353f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned short __ntohs (unsigned short x); 2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define ntohl(x) __ntohl(x) 2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define ntohs(x) __ntohs(x) 2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define htonl(x) __ntohl(x) 2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project #define htons(x) __ntohs(x) 2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27053f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned long __ntohl (unsigned long x) 2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */ 2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "rorl $16, %0\n\t" /* swap words */ 2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "xchgb %b0, %h0" /* swap higher bytes */ 2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project : "=q" (x) : "0" (x)); 2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (x); 2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 27953f17a9db278d33517d9888dd77848f554522a38JP Abgrall static __inline__ unsigned short __ntohs (unsigned short x) 2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project __asm__ ("xchgb %b0, %h0" /* swap bytes */ 2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project : "=q" (x) : "0" (x)); 2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (x); 2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef INET_ADDRSTRLEN 2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define INET_ADDRSTRLEN 16 2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef TRUE 2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define TRUE 1 2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef FALSE 2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define FALSE 0 2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 29953f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 30053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * The Apple deprecation workaround macros below were adopted from the 30153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * FreeRADIUS server code under permission of Alan DeKok and Arran Cudbard-Bell. 30253f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 30353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 30453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define XSTRINGIFY(x) #x 30553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 30653f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 30753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Macros for controlling warnings in GCC >= 4.2 and clang >= 2.8 30853f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 30953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DIAG_JOINSTR(x,y) XSTRINGIFY(x ## y) 31053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define DIAG_DO_PRAGMA(x) _Pragma (#x) 31153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 31253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#if defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402 31353f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(GCC diagnostic x) 31453f17a9db278d33517d9888dd77848f554522a38JP Abgrall# if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406 31553f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) 31653f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) DIAG_PRAGMA(pop) 31753f17a9db278d33517d9888dd77848f554522a38JP Abgrall# else 31853f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) 31953f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) DIAG_PRAGMA(warning DIAG_JOINSTR(-W,x)) 32053f17a9db278d33517d9888dd77848f554522a38JP Abgrall# endif 32153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#elif defined(__clang__) && ((__clang_major__ * 100) + __clang_minor__ >= 208) 32253f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(clang diagnostic x) 32353f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) 32453f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) DIAG_PRAGMA(pop) 32553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else 32653f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_OFF(x) 32753f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define DIAG_ON(x) 32853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 32953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 33053f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 33153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * For dealing with APIs which are only deprecated in OSX (like the OpenSSL API) 33253f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 33353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef __APPLE__ 33453f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_DEPRECATED_API DIAG_OFF(deprecated-declarations) 33553f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_RST DIAG_ON(deprecated-declarations) 33653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#else 33753f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_DEPRECATED_API 33853f17a9db278d33517d9888dd77848f554522a38JP Abgrall# define USES_APPLE_RST 33953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 34053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 34153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 34253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * end of Apple deprecation workaround macros 34353f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 34453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 345892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef min 346892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define min(a,b) ((a)>(b)?(b):(a)) 347892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 348892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#ifndef max 349892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#define max(a,b) ((b)>(a)?(b):(a)) 350892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes#endif 351892a68bdf2f50b40781212e4d7ee7369c8165953Elliott Hughes 3522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* tcpdump_stdinc_h */ 353