1*b636d99dSDavid van Moolenbroek /* $NetBSD: interface.h,v 1.6 2015/03/31 21:59:35 christos Exp $ */ 2*b636d99dSDavid van Moolenbroek 3*b636d99dSDavid van Moolenbroek /* 4*b636d99dSDavid van Moolenbroek * Copyright (c) 1988-2002 5*b636d99dSDavid van Moolenbroek * The Regents of the University of California. All rights reserved. 6*b636d99dSDavid van Moolenbroek * 7*b636d99dSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 8*b636d99dSDavid van Moolenbroek * modification, are permitted provided that: (1) source code distributions 9*b636d99dSDavid van Moolenbroek * retain the above copyright notice and this paragraph in its entirety, (2) 10*b636d99dSDavid van Moolenbroek * distributions including binary code include the above copyright notice and 11*b636d99dSDavid van Moolenbroek * this paragraph in its entirety in the documentation or other materials 12*b636d99dSDavid van Moolenbroek * provided with the distribution, and (3) all advertising materials mentioning 13*b636d99dSDavid van Moolenbroek * features or use of this software display the following acknowledgement: 14*b636d99dSDavid van Moolenbroek * ``This product includes software developed by the University of California, 15*b636d99dSDavid van Moolenbroek * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 16*b636d99dSDavid van Moolenbroek * the University nor the names of its contributors may be used to endorse 17*b636d99dSDavid van Moolenbroek * or promote products derived from this software without specific prior 18*b636d99dSDavid van Moolenbroek * written permission. 19*b636d99dSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 20*b636d99dSDavid van Moolenbroek * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 21*b636d99dSDavid van Moolenbroek * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 22*b636d99dSDavid van Moolenbroek */ 23*b636d99dSDavid van Moolenbroek 24*b636d99dSDavid van Moolenbroek #ifndef tcpdump_interface_h 25*b636d99dSDavid van Moolenbroek #define tcpdump_interface_h 26*b636d99dSDavid van Moolenbroek 27*b636d99dSDavid van Moolenbroek #ifdef HAVE_OS_PROTO_H 28*b636d99dSDavid van Moolenbroek #include "os-proto.h" 29*b636d99dSDavid van Moolenbroek #endif 30*b636d99dSDavid van Moolenbroek 31*b636d99dSDavid van Moolenbroek /* snprintf et al */ 32*b636d99dSDavid van Moolenbroek 33*b636d99dSDavid van Moolenbroek #include <stdarg.h> 34*b636d99dSDavid van Moolenbroek 35*b636d99dSDavid van Moolenbroek #if HAVE_STDINT_H 36*b636d99dSDavid van Moolenbroek #include <stdint.h> 37*b636d99dSDavid van Moolenbroek #endif 38*b636d99dSDavid van Moolenbroek 39*b636d99dSDavid van Moolenbroek #if !defined(HAVE_SNPRINTF) 40*b636d99dSDavid van Moolenbroek int snprintf(char *, size_t, const char *, ...) 41*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK 42*b636d99dSDavid van Moolenbroek __attribute__((format(printf, 3, 4))) 43*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */ 44*b636d99dSDavid van Moolenbroek ; 45*b636d99dSDavid van Moolenbroek #endif /* !defined(HAVE_SNPRINTF) */ 46*b636d99dSDavid van Moolenbroek 47*b636d99dSDavid van Moolenbroek #if !defined(HAVE_VSNPRINTF) 48*b636d99dSDavid van Moolenbroek int vsnprintf(char *, size_t, const char *, va_list) 49*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK 50*b636d99dSDavid van Moolenbroek __attribute__((format(printf, 3, 0))) 51*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */ 52*b636d99dSDavid van Moolenbroek ; 53*b636d99dSDavid van Moolenbroek #endif /* !defined(HAVE_VSNPRINTF) */ 54*b636d99dSDavid van Moolenbroek 55*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRLCAT 56*b636d99dSDavid van Moolenbroek extern size_t strlcat(char *, const char *, size_t); 57*b636d99dSDavid van Moolenbroek #endif 58*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRLCPY 59*b636d99dSDavid van Moolenbroek extern size_t strlcpy(char *, const char *, size_t); 60*b636d99dSDavid van Moolenbroek #endif 61*b636d99dSDavid van Moolenbroek 62*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRDUP 63*b636d99dSDavid van Moolenbroek extern char *strdup(const char *); 64*b636d99dSDavid van Moolenbroek #endif 65*b636d99dSDavid van Moolenbroek 66*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRSEP 67*b636d99dSDavid van Moolenbroek extern char *strsep(char **, const char *); 68*b636d99dSDavid van Moolenbroek #endif 69*b636d99dSDavid van Moolenbroek 70*b636d99dSDavid van Moolenbroek #define PT_VAT 1 /* Visual Audio Tool */ 71*b636d99dSDavid van Moolenbroek #define PT_WB 2 /* distributed White Board */ 72*b636d99dSDavid van Moolenbroek #define PT_RPC 3 /* Remote Procedure Call */ 73*b636d99dSDavid van Moolenbroek #define PT_RTP 4 /* Real-Time Applications protocol */ 74*b636d99dSDavid van Moolenbroek #define PT_RTCP 5 /* Real-Time Applications control protocol */ 75*b636d99dSDavid van Moolenbroek #define PT_SNMP 6 /* Simple Network Management Protocol */ 76*b636d99dSDavid van Moolenbroek #define PT_CNFP 7 /* Cisco NetFlow protocol */ 77*b636d99dSDavid van Moolenbroek #define PT_TFTP 8 /* trivial file transfer protocol */ 78*b636d99dSDavid van Moolenbroek #define PT_AODV 9 /* Ad-hoc On-demand Distance Vector Protocol */ 79*b636d99dSDavid van Moolenbroek #define PT_CARP 10 /* Common Address Redundancy Protocol */ 80*b636d99dSDavid van Moolenbroek #define PT_RADIUS 11 /* RADIUS authentication Protocol */ 81*b636d99dSDavid van Moolenbroek #define PT_ZMTP1 12 /* ZeroMQ Message Transport Protocol 1.0 */ 82*b636d99dSDavid van Moolenbroek #define PT_VXLAN 13 /* Virtual eXtensible Local Area Network */ 83*b636d99dSDavid van Moolenbroek #define PT_PGM 14 /* [UDP-encapsulated] Pragmatic General Multicast */ 84*b636d99dSDavid van Moolenbroek #define PT_PGM_ZMTP1 15 /* ZMTP/1.0 inside PGM (native or UDP-encapsulated) */ 85*b636d99dSDavid van Moolenbroek #define PT_LMP 16 /* Link Management Protocol */ 86*b636d99dSDavid van Moolenbroek 87*b636d99dSDavid van Moolenbroek #define ESRC(ep) ((ep)->ether_shost) 88*b636d99dSDavid van Moolenbroek #define EDST(ep) ((ep)->ether_dhost) 89*b636d99dSDavid van Moolenbroek 90*b636d99dSDavid van Moolenbroek #ifndef NTOHL 91*b636d99dSDavid van Moolenbroek #define NTOHL(x) (x) = ntohl(x) 92*b636d99dSDavid van Moolenbroek #define NTOHS(x) (x) = ntohs(x) 93*b636d99dSDavid van Moolenbroek #define HTONL(x) (x) = htonl(x) 94*b636d99dSDavid van Moolenbroek #define HTONS(x) (x) = htons(x) 95*b636d99dSDavid van Moolenbroek #endif 96*b636d99dSDavid van Moolenbroek #endif 97*b636d99dSDavid van Moolenbroek 98*b636d99dSDavid van Moolenbroek extern char *program_name; /* used to generate self-identifying messages */ 99*b636d99dSDavid van Moolenbroek 100*b636d99dSDavid van Moolenbroek extern int32_t thiszone; /* seconds offset from gmt to local time */ 101*b636d99dSDavid van Moolenbroek 102*b636d99dSDavid van Moolenbroek /* 103*b636d99dSDavid van Moolenbroek * True if "l" bytes of "var" were captured. 104*b636d99dSDavid van Moolenbroek * 105*b636d99dSDavid van Moolenbroek * The "snapend - (l) <= snapend" checks to make sure "l" isn't so large 106*b636d99dSDavid van Moolenbroek * that "snapend - (l)" underflows. 107*b636d99dSDavid van Moolenbroek * 108*b636d99dSDavid van Moolenbroek * The check is for <= rather than < because "l" might be 0. 109*b636d99dSDavid van Moolenbroek * 110*b636d99dSDavid van Moolenbroek * We cast the pointers to uintptr_t to make sure that the compiler 111*b636d99dSDavid van Moolenbroek * doesn't optimize away any of these tests (which it is allowed to 112*b636d99dSDavid van Moolenbroek * do, as adding an integer to, or subtracting an integer from, a 113*b636d99dSDavid van Moolenbroek * pointer assumes that the pointer is a pointer to an element of an 114*b636d99dSDavid van Moolenbroek * array and that the result of the addition or subtraction yields a 115*b636d99dSDavid van Moolenbroek * pointer to another member of the array, so that, for example, if 116*b636d99dSDavid van Moolenbroek * you subtract a positive integer from a pointer, the result is 117*b636d99dSDavid van Moolenbroek * guaranteed to be less than the original pointer value). See 118*b636d99dSDavid van Moolenbroek * 119*b636d99dSDavid van Moolenbroek * http://www.kb.cert.org/vuls/id/162289 120*b636d99dSDavid van Moolenbroek */ 121*b636d99dSDavid van Moolenbroek #define TTEST2(var, l) \ 122*b636d99dSDavid van Moolenbroek ((uintptr_t)snapend - (l) <= (uintptr_t)snapend && \ 123*b636d99dSDavid van Moolenbroek (uintptr_t)&(var) <= (uintptr_t)snapend - (l)) 124*b636d99dSDavid van Moolenbroek 125*b636d99dSDavid van Moolenbroek /* True if "var" was captured */ 126*b636d99dSDavid van Moolenbroek #define TTEST(var) TTEST2(var, sizeof(var)) 127*b636d99dSDavid van Moolenbroek 128*b636d99dSDavid van Moolenbroek /* Bail if "l" bytes of "var" were not captured */ 129*b636d99dSDavid van Moolenbroek #define TCHECK2(var, l) if (!TTEST2(var, l)) goto trunc 130*b636d99dSDavid van Moolenbroek 131*b636d99dSDavid van Moolenbroek /* Bail if "var" was not captured */ 132*b636d99dSDavid van Moolenbroek #define TCHECK(var) TCHECK2(var, sizeof(var)) 133*b636d99dSDavid van Moolenbroek 134*b636d99dSDavid van Moolenbroek extern int mask2plen(uint32_t); 135*b636d99dSDavid van Moolenbroek extern const char *tok2strary_internal(const char **, int, const char *, int); 136*b636d99dSDavid van Moolenbroek #define tok2strary(a,f,i) tok2strary_internal(a, sizeof(a)/sizeof(a[0]),f,i) 137*b636d99dSDavid van Moolenbroek 138*b636d99dSDavid van Moolenbroek extern void error(const char *, ...) 139*b636d99dSDavid van Moolenbroek __attribute__((noreturn)) 140*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK 141*b636d99dSDavid van Moolenbroek __attribute__((format (printf, 1, 2))) 142*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */ 143*b636d99dSDavid van Moolenbroek ; 144*b636d99dSDavid van Moolenbroek extern void warning(const char *, ...) 145*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK 146*b636d99dSDavid van Moolenbroek __attribute__((format (printf, 1, 2))) 147*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */ 148*b636d99dSDavid van Moolenbroek ; 149*b636d99dSDavid van Moolenbroek 150*b636d99dSDavid van Moolenbroek extern char *read_infile(char *); 151*b636d99dSDavid van Moolenbroek extern char *copy_argv(char **); 152*b636d99dSDavid van Moolenbroek 153*b636d99dSDavid van Moolenbroek extern const char *dnname_string(u_short); 154*b636d99dSDavid van Moolenbroek extern const char *dnnum_string(u_short); 155*b636d99dSDavid van Moolenbroek 156*b636d99dSDavid van Moolenbroek /* checksum routines */ 157*b636d99dSDavid van Moolenbroek extern void init_checksum(void); 158*b636d99dSDavid van Moolenbroek extern uint16_t verify_crc10_cksum(uint16_t, const u_char *, int); 159*b636d99dSDavid van Moolenbroek extern uint16_t create_osi_cksum(const uint8_t *, int, int); 160*b636d99dSDavid van Moolenbroek 161*b636d99dSDavid van Moolenbroek /* The printer routines. */ 162*b636d99dSDavid van Moolenbroek 163*b636d99dSDavid van Moolenbroek #include <pcap.h> 164*b636d99dSDavid van Moolenbroek 165*b636d99dSDavid van Moolenbroek extern char *smb_errstr(int, int); 166*b636d99dSDavid van Moolenbroek extern const char *nt_errstr(uint32_t); 167*b636d99dSDavid van Moolenbroek 168*b636d99dSDavid van Moolenbroek #ifdef INET6 169*b636d99dSDavid van Moolenbroek extern int mask62plen(const u_char *); 170*b636d99dSDavid van Moolenbroek #endif /*INET6*/ 171*b636d99dSDavid van Moolenbroek 172*b636d99dSDavid van Moolenbroek struct cksum_vec { 173*b636d99dSDavid van Moolenbroek const uint8_t *ptr; 174*b636d99dSDavid van Moolenbroek int len; 175*b636d99dSDavid van Moolenbroek }; 176*b636d99dSDavid van Moolenbroek extern uint16_t in_cksum(const struct cksum_vec *, int); 177*b636d99dSDavid van Moolenbroek extern uint16_t in_cksum_shouldbe(uint16_t, uint16_t); 178*b636d99dSDavid van Moolenbroek 179*b636d99dSDavid van Moolenbroek #ifndef HAVE_BPF_DUMP 180*b636d99dSDavid van Moolenbroek struct bpf_program; 181*b636d99dSDavid van Moolenbroek 182*b636d99dSDavid van Moolenbroek extern void bpf_dump(const struct bpf_program *, int); 183*b636d99dSDavid van Moolenbroek 184*b636d99dSDavid van Moolenbroek #endif 185*b636d99dSDavid van Moolenbroek 186*b636d99dSDavid van Moolenbroek #include "netdissect.h" 187*b636d99dSDavid van Moolenbroek 188*b636d99dSDavid van Moolenbroek /* forward compatibility */ 189*b636d99dSDavid van Moolenbroek 190*b636d99dSDavid van Moolenbroek #ifndef NETDISSECT_REWORKED 191*b636d99dSDavid van Moolenbroek extern netdissect_options *gndo; 192*b636d99dSDavid van Moolenbroek 193*b636d99dSDavid van Moolenbroek #define bflag gndo->ndo_bflag 194*b636d99dSDavid van Moolenbroek #define eflag gndo->ndo_eflag 195*b636d99dSDavid van Moolenbroek #define fflag gndo->ndo_fflag 196*b636d99dSDavid van Moolenbroek #define jflag gndo->ndo_jflag 197*b636d99dSDavid van Moolenbroek #define Kflag gndo->ndo_Kflag 198*b636d99dSDavid van Moolenbroek #define nflag gndo->ndo_nflag 199*b636d99dSDavid van Moolenbroek #define Nflag gndo->ndo_Nflag 200*b636d99dSDavid van Moolenbroek #define Oflag gndo->ndo_Oflag 201*b636d99dSDavid van Moolenbroek #define pflag gndo->ndo_pflag 202*b636d99dSDavid van Moolenbroek #define qflag gndo->ndo_qflag 203*b636d99dSDavid van Moolenbroek #define Rflag gndo->ndo_Rflag 204*b636d99dSDavid van Moolenbroek #define sflag gndo->ndo_sflag 205*b636d99dSDavid van Moolenbroek #define Sflag gndo->ndo_Sflag 206*b636d99dSDavid van Moolenbroek #define tflag gndo->ndo_tflag 207*b636d99dSDavid van Moolenbroek #define Uflag gndo->ndo_Uflag 208*b636d99dSDavid van Moolenbroek #define uflag gndo->ndo_uflag 209*b636d99dSDavid van Moolenbroek #define vflag gndo->ndo_vflag 210*b636d99dSDavid van Moolenbroek #define xflag gndo->ndo_xflag 211*b636d99dSDavid van Moolenbroek #define Xflag gndo->ndo_Xflag 212*b636d99dSDavid van Moolenbroek #define Cflag gndo->ndo_Cflag 213*b636d99dSDavid van Moolenbroek #define Gflag gndo->ndo_Gflag 214*b636d99dSDavid van Moolenbroek #define Aflag gndo->ndo_Aflag 215*b636d99dSDavid van Moolenbroek #define Bflag gndo->ndo_Bflag 216*b636d99dSDavid van Moolenbroek #define Iflag gndo->ndo_Iflag 217*b636d99dSDavid van Moolenbroek #define suppress_default_print gndo->ndo_suppress_default_print 218*b636d99dSDavid van Moolenbroek #define packettype gndo->ndo_packettype 219*b636d99dSDavid van Moolenbroek #define sigsecret gndo->ndo_sigsecret 220*b636d99dSDavid van Moolenbroek #define Wflag gndo->ndo_Wflag 221*b636d99dSDavid van Moolenbroek #define WflagChars gndo->ndo_WflagChars 222*b636d99dSDavid van Moolenbroek #define Cflag_count gndo->ndo_Cflag_count 223*b636d99dSDavid van Moolenbroek #define Gflag_count gndo->ndo_Gflag_count 224*b636d99dSDavid van Moolenbroek #define Gflag_time gndo->ndo_Gflag_time 225*b636d99dSDavid van Moolenbroek #define Hflag gndo->ndo_Hflag 226*b636d99dSDavid van Moolenbroek #define snaplen gndo->ndo_snaplen 227*b636d99dSDavid van Moolenbroek #define snapend gndo->ndo_snapend 228*b636d99dSDavid van Moolenbroek 229*b636d99dSDavid van Moolenbroek extern void default_print(const u_char *, u_int); 230*b636d99dSDavid van Moolenbroek 231*b636d99dSDavid van Moolenbroek #endif 232