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 * @(#) $Header: /tcpdump/master/tcpdump/tcpdump-stdinc.h,v 1.12.2.5 2006/06/23 02:07:27 hannes Exp $ (LBL) 33 */ 34 35/* 36 * Include the appropriate OS header files on Windows and various flavors 37 * of UNIX, and also define some additional items and include various 38 * non-OS header files on Windows, and; this isolates most of the platform 39 * differences to this one file. 40 */ 41 42#ifndef tcpdump_stdinc_h 43#define tcpdump_stdinc_h 44 45#ifdef WIN32 46 47#include <stdio.h> 48#include <winsock2.h> 49#include <Ws2tcpip.h> 50#include "bittypes.h" 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#if !defined(__MINGW32__) && !defined(__WATCOMC__) 59#undef toascii 60#define isascii __isascii 61#define toascii __toascii 62#define stat _stat 63#define open _open 64#define fstat _fstat 65#define read _read 66#define close _close 67#define O_RDONLY _O_RDONLY 68 69typedef short ino_t; 70#endif /* __MINGW32__ */ 71 72#ifdef __MINGW32__ 73#include <stdint.h> 74#endif 75 76/* Protos for missing/x.c functions (ideally <missing/addrinfo.h> 77 * should be used, but it clashes with <ws2tcpip.h>). 78 */ 79extern const char *inet_ntop (int, const void *, char *, size_t); 80extern int inet_pton (int, const char *, void *); 81extern int inet_aton (const char *cp, struct in_addr *addr); 82 83#ifndef INET6_ADDRSTRLEN 84#define INET6_ADDRSTRLEN 46 85#endif 86 87#ifndef toascii 88#define toascii(c) ((c) & 0x7f) 89#endif 90 91#ifndef caddr_t 92typedef char* caddr_t; 93#endif /* caddr_t */ 94 95#define MAXHOSTNAMELEN 64 96#define NI_MAXHOST 1025 97#define snprintf _snprintf 98#define vsnprintf _vsnprintf 99#define RETSIGTYPE void 100 101#else /* WIN32 */ 102 103#include <ctype.h> 104#include <unistd.h> 105#include <netdb.h> 106#if HAVE_INTTYPES_H 107#include <inttypes.h> 108#else 109#if HAVE_STDINT_H 110#include <stdint.h> 111#endif 112#endif 113#ifdef HAVE_SYS_BITYPES_H 114#include <sys/bitypes.h> 115#endif 116#include <sys/param.h> 117#include <sys/types.h> /* concession to AIX */ 118#include <sys/time.h> 119#include <sys/socket.h> 120#include <netinet/in.h> 121#include <netinet6/in6.h> 122 123#ifdef TIME_WITH_SYS_TIME 124#include <time.h> 125#endif 126 127#include <arpa/inet.h> 128 129#endif /* WIN32 */ 130 131#ifdef INET6 132#include "ip6.h" 133#endif 134 135#if defined(WIN32) || defined(MSDOS) 136 #define FOPEN_READ_TXT "rt" 137 #define FOPEN_READ_BIN "rb" 138 #define FOPEN_WRITE_TXT "wt" 139 #define FOPEN_WRITE_BIN "wb" 140#else 141 #define FOPEN_READ_TXT "r" 142 #define FOPEN_READ_BIN FOPEN_READ_TXT 143 #define FOPEN_WRITE_TXT "w" 144 #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT 145#endif 146 147#if defined(__GNUC__) && defined(__i386__) && !defined(__ntohl) 148 #undef ntohl 149 #undef ntohs 150 #undef htonl 151 #undef htons 152 153 static __inline__ unsigned long __ntohl (unsigned long x); 154 static __inline__ unsigned short __ntohs (unsigned short x); 155 156 #define ntohl(x) __ntohl(x) 157 #define ntohs(x) __ntohs(x) 158 #define htonl(x) __ntohl(x) 159 #define htons(x) __ntohs(x) 160 161 static __inline__ unsigned long __ntohl (unsigned long x) 162 { 163 __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */ 164 "rorl $16, %0\n\t" /* swap words */ 165 "xchgb %b0, %h0" /* swap higher bytes */ 166 : "=q" (x) : "0" (x)); 167 return (x); 168 } 169 170 static __inline__ unsigned short __ntohs (unsigned short x) 171 { 172 __asm__ ("xchgb %b0, %h0" /* swap bytes */ 173 : "=q" (x) : "0" (x)); 174 return (x); 175 } 176#endif 177 178#ifndef INET_ADDRSTRLEN 179#define INET_ADDRSTRLEN 16 180#endif 181 182#ifndef TRUE 183#define TRUE 1 184#endif 185 186#ifndef FALSE 187#define FALSE 0 188#endif 189 190#endif /* tcpdump_stdinc_h */ 191