X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/5a2794d55e7a180e56c981ace81f80aac3ae8aaf..10bdeb0c44eb4a997645ebdc15376fb36f9d3ae2:/tcpdump-stdinc.h diff --git a/tcpdump-stdinc.h b/tcpdump-stdinc.h index 2663d60f..d350d1be 100644 --- a/tcpdump-stdinc.h +++ b/tcpdump-stdinc.h @@ -28,6 +28,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + * + * @(#) $Header: /tcpdump/master/tcpdump/tcpdump-stdinc.h,v 1.18 2007-11-24 18:13:33 mcr Exp $ (LBL) */ /* @@ -44,22 +46,47 @@ #include #include +#include #include "bittypes.h" #include #include #include -#include "IP6_misc.h" #include +#include +#include /* in wpcap's Win32/include */ + +#ifndef NBBY +#define NBBY 8 +#endif + +#if !defined(__MINGW32__) && !defined(__WATCOMC__) +#undef toascii +#define isascii __isascii +#define toascii __toascii +#define stat _stat +#define open _open +#define fstat _fstat +#define read _read +#define close _close +#define O_RDONLY _O_RDONLY + +typedef short ino_t; +#endif /* __MINGW32__ */ #ifdef __MINGW32__ #include -int* _errno(); -#define errno (*_errno()) +#endif -#define INET_ADDRSTRLEN 16 -#define INET6_ADDRSTRLEN 46 +/* Protos for missing/x.c functions (ideally + * should be used, but it clashes with ). + */ +extern const char *inet_ntop (int, const void *, char *, size_t); +extern int inet_pton (int, const char *, void *); +extern int inet_aton (const char *cp, struct in_addr *addr); -#endif /* __MINGW32__ */ +#ifndef INET6_ADDRSTRLEN +#define INET6_ADDRSTRLEN 46 +#endif #ifndef toascii #define toascii(c) ((c) & 0x7f) @@ -71,29 +98,25 @@ typedef char* caddr_t; #define MAXHOSTNAMELEN 64 #define NI_MAXHOST 1025 -#define IPPROTO_EGP 8 /* Exterior Gateway Protocol */ #define snprintf _snprintf #define vsnprintf _vsnprintf #define RETSIGTYPE void -#if !defined(__MINGW32__) && !defined(__WATCOMC__) -#undef toascii -#define isascii __isascii -#define toascii __toascii -#define stat _stat -#define open _open -#define fstat _fstat -#define read _read -#define O_RDONLY _O_RDONLY - -typedef short ino_t; -#endif /* __MINGW32__ */ - #else /* WIN32 */ #include #include #include +#if HAVE_INTTYPES_H +#include +#else +#if HAVE_STDINT_H +#include +#endif +#endif +#ifdef HAVE_SYS_BITYPES_H +#include +#endif #include #include /* concession to AIX */ #include @@ -108,10 +131,43 @@ typedef short ino_t; #endif /* WIN32 */ -#ifdef INET6 -#include "ip6.h" +#ifndef HAVE___ATTRIBUTE__ +#define __attribute__(x) #endif +/* + * Used to declare a structure unaligned, so that the C compiler, + * if necessary, generates code that doesn't assume alignment. + * This is required because there is no guarantee that the packet + * data we get from libpcap/WinPcap is properly aligned. + * + * This assumes that, for all compilers that support __attribute__: + * + * 1) they support __attribute__((packed)); + * + * 2) for all instruction set architectures requiring strict + * alignment, declaring a structure with that attribute + * causes the compiler to generate code that handles + * misaligned 2-byte, 4-byte, and 8-byte integral + * quantities. + * + * It does not (yet) handle compilers where you can get the compiler + * to generate code of that sort by some other means. + * + * This is required in order to, for example, keep the compiler from + * generating, for + * + * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) { + * + * in print-bootp.c, code that loads the first 4-byte word of a + * "struct bootp", masking out the bp_hops field, and comparing the result + * against 0x01010600. + * + * Note: this also requires that padding be put into the structure, + * at least for compilers where it's implemented as __attribute__((packed)). + */ +#define UNALIGNED __attribute__((packed)) + #if defined(WIN32) || defined(MSDOS) #define FOPEN_READ_TXT "rt" #define FOPEN_READ_BIN "rb" @@ -124,4 +180,47 @@ typedef short ino_t; #define FOPEN_WRITE_BIN FOPEN_WRITE_TXT #endif +#if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl) + #undef ntohl + #undef ntohs + #undef htonl + #undef htons + + static __inline__ unsigned long __ntohl (unsigned long x); + static __inline__ unsigned short __ntohs (unsigned short x); + + #define ntohl(x) __ntohl(x) + #define ntohs(x) __ntohs(x) + #define htonl(x) __ntohl(x) + #define htons(x) __ntohs(x) + + static __inline__ unsigned long __ntohl (unsigned long x) + { + __asm__ ("xchgb %b0, %h0\n\t" /* swap lower bytes */ + "rorl $16, %0\n\t" /* swap words */ + "xchgb %b0, %h0" /* swap higher bytes */ + : "=q" (x) : "0" (x)); + return (x); + } + + static __inline__ unsigned short __ntohs (unsigned short x) + { + __asm__ ("xchgb %b0, %h0" /* swap bytes */ + : "=q" (x) : "0" (x)); + return (x); + } +#endif + +#ifndef INET_ADDRSTRLEN +#define INET_ADDRSTRLEN 16 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + #endif /* tcpdump_stdinc_h */