1 /* 2 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that: (1) source code distributions 7 * retain the above copyright notice and this paragraph in its entirety, (2) 8 * distributions including binary code include the above copyright notice and 9 * this paragraph in its entirety in the documentation or other materials 10 * provided with the distribution, and (3) all advertising materials mentioning 11 * features or use of this software display the following acknowledgement: 12 * ``This product includes software developed by the University of California, 13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14 * the University nor the names of its contributors may be used to endorse 15 * or promote products derived from this software without specific prior 16 * written permission. 17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 * @(#) $Header: interface.h,v 1.95 96/07/14 19:38:52 leres Exp $ (LBL) 22 */ 23 24 #ifndef tcpdump_interface_h 25 #define tcpdump_interface_h 26 27 #include "gnuc.h" 28 #ifdef HAVE_OS_PROTO_H 29 #include "os-proto.h" 30 #endif 31 32 struct tok { 33 int v; /* value */ 34 char *s; /* string */ 35 }; 36 37 extern int dflag; /* print filter code */ 38 extern int eflag; /* print ethernet header */ 39 extern int nflag; /* leave addresses as numbers */ 40 extern int Nflag; /* remove domains from printed host names */ 41 extern int qflag; /* quick (shorter) output */ 42 extern int Sflag; /* print raw TCP sequence numbers */ 43 extern int tflag; /* print packet arrival time */ 44 extern int vflag; /* verbose */ 45 extern int xflag; /* print packet in hex */ 46 47 extern int packettype; /* as specified by -T */ 48 #define PT_VAT 1 /* Visual Audio Tool */ 49 #define PT_WB 2 /* distributed White Board */ 50 #define PT_RPC 3 /* Remote Procedure Call */ 51 #define PT_RTP 4 /* Real-Time Applications protocol */ 52 #define PT_RTCP 5 /* Real-Time Applications control protocol */ 53 54 extern char *program_name; /* used to generate self-identifying messages */ 55 56 extern int32_t thiszone; /* seconds offset from gmt to local time */ 57 58 extern int snaplen; 59 /* global pointers to beginning and end of current packet (during printing) */ 60 extern const u_char *packetp; 61 extern const u_char *snapend; 62 63 #define TCHECK2(var, l) if ((u_char *)&(var) > snapend - (l)) goto trunc 64 #define TCHECK(var) TCHECK2(var, sizeof(var)) 65 66 #ifdef __STDC__ 67 struct timeval; 68 #endif 69 70 extern void ts_print(const struct timeval *); 71 extern int32_t gmt2local(void); 72 73 extern int fn_print(const u_char *, const u_char *); 74 extern int fn_printn(const u_char *, u_int, const u_char *); 75 extern const char *tok2str(const struct tok *, const char *, int); 76 extern char *dnaddr_string(u_short); 77 extern char *savestr(const char *); 78 79 extern void wrapup(int); 80 81 #if __STDC__ 82 extern __dead void error(const char *, ...) 83 __attribute__((volatile, format (printf, 1, 2))); 84 extern void warning(const char *, ...) __attribute__ ((format (printf, 1, 2))); 85 #endif 86 87 extern char *read_infile(char *); 88 extern char *copy_argv(char **); 89 90 extern char *isonsap_string(const u_char *); 91 extern char *llcsap_string(u_char); 92 extern char *protoid_string(const u_char *); 93 extern char *dnname_string(u_short); 94 extern char *dnnum_string(u_short); 95 96 /* The printer routines. */ 97 98 #ifdef __STDC__ 99 struct pcap_pkthdr; 100 #endif 101 102 extern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 103 extern void ether_if_print(u_char *, const struct pcap_pkthdr *, 104 const u_char *); 105 extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char*); 106 extern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char*); 107 extern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 108 extern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 109 110 extern void arp_print(const u_char *, u_int, u_int); 111 extern void ip_print(const u_char *, u_int); 112 extern void tcp_print(const u_char *, u_int, const u_char *); 113 extern void udp_print(const u_char *, u_int, const u_char *); 114 extern void icmp_print(const u_char *, const u_char *); 115 extern void igrp_print(const u_char *, u_int, const u_char *); 116 extern void default_print(const u_char *, u_int); 117 extern void default_print_unaligned(const u_char *, u_int); 118 119 extern void aarp_print(const u_char *, u_int); 120 extern void atalk_print(const u_char *, u_int); 121 extern void bootp_print(const u_char *, u_int, u_short, u_short); 122 extern void decnet_print(const u_char *, u_int, u_int); 123 extern void egp_print(const u_char *, u_int, const u_char *); 124 extern int ether_encap_print(u_short, const u_char *, u_int, u_int); 125 extern void ipx_print(const u_char *, u_int); 126 extern void isoclns_print(const u_char *, u_int, u_int, 127 const u_char *, const u_char *); 128 extern int llc_print(const u_char *, u_int, u_int, 129 const u_char *, const u_char *); 130 extern void nfsreply_print(const u_char *, u_int, const u_char *); 131 extern void nfsreq_print(const u_char *, u_int, const u_char *); 132 extern void ns_print(const u_char *, u_int); 133 extern void ntp_print(const u_char *, u_int); 134 extern void ospf_print(const u_char *, u_int, const u_char *); 135 extern void rip_print(const u_char *, u_int); 136 extern void snmp_print(const u_char *, u_int); 137 extern void sunrpcrequest_print(const u_char *, u_int, const u_char *); 138 extern void tftp_print(const u_char *, u_int); 139 extern void wb_print(const void *, u_int); 140 extern void dvmrp_print(const u_char *, u_int); 141 extern void pim_print(const u_char *, u_int); 142 extern void krb_print(const u_char *, u_int); 143 144 #ifndef min 145 #define min(a,b) ((a)>(b)?(b):(a)) 146 #endif 147 #ifndef max 148 #define max(a,b) ((b)>(a)?(b):(a)) 149 #endif 150 151 /* 152 * The default snapshot length. This value allows most printers to print 153 * useful information while keeping the amount of unwanted data down. 154 * In particular, it allows for an ethernet header, tcp/ip header, and 155 * 14 bytes of data (assuming no ip options). 156 */ 157 #define DEFAULT_SNAPLEN 68 158 159 #ifndef BIG_ENDIAN 160 #define BIG_ENDIAN 4321 161 #define LITTLE_ENDIAN 1234 162 #endif 163 164 #ifdef ETHER_HEADER_HAS_EA 165 #define ESRC(ep) ((ep)->ether_shost.ether_addr_octet) 166 #define EDST(ep) ((ep)->ether_dhost.ether_addr_octet) 167 #else 168 #define ESRC(ep) ((ep)->ether_shost) 169 #define EDST(ep) ((ep)->ether_dhost) 170 #endif 171 172 #ifdef ETHER_ARP_HAS_X 173 #define SHA(ap) ((ap)->arp_xsha) 174 #define THA(ap) ((ap)->arp_xtha) 175 #define SPA(ap) ((ap)->arp_xspa) 176 #define TPA(ap) ((ap)->arp_xtpa) 177 #else 178 #ifdef ETHER_ARP_HAS_EA 179 #define SHA(ap) ((ap)->arp_sha.ether_addr_octet) 180 #define THA(ap) ((ap)->arp_tha.ether_addr_octet) 181 #else 182 #define SHA(ap) ((ap)->arp_sha) 183 #define THA(ap) ((ap)->arp_tha) 184 #endif 185 #define SPA(ap) ((ap)->arp_spa) 186 #define TPA(ap) ((ap)->arp_tpa) 187 #endif 188 189 #ifndef NTOHL 190 #define NTOHL(x) (x) = ntohl(x) 191 #define NTOHS(x) (x) = ntohs(x) 192 #define HTONL(x) (x) = htonl(x) 193 #define HTONS(x) (x) = htons(x) 194 #endif 195 #endif 196