1 /* 2 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 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.105 97/04/26 13:39:58 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 aflag; /* translate network and broadcast addresses */ 38 extern int dflag; /* print filter code */ 39 extern int eflag; /* print ethernet header */ 40 extern int fflag; /* don't translate "foreign" IP address */ 41 extern int nflag; /* leave addresses as numbers */ 42 extern int Nflag; /* remove domains from printed host names */ 43 extern int qflag; /* quick (shorter) output */ 44 extern int Sflag; /* print raw TCP sequence numbers */ 45 extern int tflag; /* print packet arrival time */ 46 extern int vflag; /* verbose */ 47 extern int xflag; /* print packet in hex */ 48 49 extern int packettype; /* as specified by -T */ 50 #define PT_VAT 1 /* Visual Audio Tool */ 51 #define PT_WB 2 /* distributed White Board */ 52 #define PT_RPC 3 /* Remote Procedure Call */ 53 #define PT_RTP 4 /* Real-Time Applications protocol */ 54 #define PT_RTCP 5 /* Real-Time Applications control protocol */ 55 56 #ifndef min 57 #define min(a,b) ((a)>(b)?(b):(a)) 58 #endif 59 #ifndef max 60 #define max(a,b) ((b)>(a)?(b):(a)) 61 #endif 62 63 /* 64 * The default snapshot length. This value allows most printers to print 65 * useful information while keeping the amount of unwanted data down. 66 * In particular, it allows for an ethernet header, tcp/ip header, and 67 * 14 bytes of data (assuming no ip options). 68 */ 69 #define DEFAULT_SNAPLEN 68 70 71 #ifndef BIG_ENDIAN 72 #define BIG_ENDIAN 4321 73 #define LITTLE_ENDIAN 1234 74 #endif 75 76 #ifdef ETHER_HEADER_HAS_EA 77 #define ESRC(ep) ((ep)->ether_shost.ether_addr_octet) 78 #define EDST(ep) ((ep)->ether_dhost.ether_addr_octet) 79 #else 80 #define ESRC(ep) ((ep)->ether_shost) 81 #define EDST(ep) ((ep)->ether_dhost) 82 #endif 83 84 #ifdef ETHER_ARP_HAS_X 85 #define SHA(ap) ((ap)->arp_xsha) 86 #define THA(ap) ((ap)->arp_xtha) 87 #define SPA(ap) ((ap)->arp_xspa) 88 #define TPA(ap) ((ap)->arp_xtpa) 89 #else 90 #ifdef ETHER_ARP_HAS_EA 91 #define SHA(ap) ((ap)->arp_sha.ether_addr_octet) 92 #define THA(ap) ((ap)->arp_tha.ether_addr_octet) 93 #else 94 #define SHA(ap) ((ap)->arp_sha) 95 #define THA(ap) ((ap)->arp_tha) 96 #endif 97 #define SPA(ap) ((ap)->arp_spa) 98 #define TPA(ap) ((ap)->arp_tpa) 99 #endif 100 101 #ifndef NTOHL 102 #define NTOHL(x) (x) = ntohl(x) 103 #define NTOHS(x) (x) = ntohs(x) 104 #define HTONL(x) (x) = htonl(x) 105 #define HTONS(x) (x) = htons(x) 106 #endif 107 #endif 108 109 extern char *program_name; /* used to generate self-identifying messages */ 110 111 extern int32_t thiszone; /* seconds offset from gmt to local time */ 112 113 extern int snaplen; 114 /* global pointers to beginning and end of current packet (during printing) */ 115 extern const u_char *packetp; 116 extern const u_char *snapend; 117 118 /* True if "l" bytes of "var" were captured */ 119 #define TTEST2(var, l) ((u_char *)&(var) <= snapend - (l)) 120 121 /* True if "var" was captured */ 122 #define TTEST(var) TTEST2(var, sizeof(var)) 123 124 /* Bail if "l" bytes of "var" were not captured */ 125 #define TCHECK2(var, l) if (!TTEST2(var, l)) goto trunc 126 127 /* Bail if "var" was not captured */ 128 #define TCHECK(var) TCHECK2(var, sizeof(var)) 129 130 #ifdef __STDC__ 131 struct timeval; 132 #endif 133 134 extern void ts_print(const struct timeval *); 135 136 extern int fn_print(const u_char *, const u_char *); 137 extern int fn_printn(const u_char *, u_int, const u_char *); 138 extern const char *tok2str(const struct tok *, const char *, int); 139 extern char *dnaddr_string(u_short); 140 141 extern void wrapup(int); 142 143 #if __STDC__ 144 extern __dead void error(const char *, ...) 145 __attribute__((volatile, format (printf, 1, 2))); 146 extern void warning(const char *, ...) __attribute__ ((format (printf, 1, 2))); 147 #endif 148 149 extern char *read_infile(char *); 150 extern char *copy_argv(char **); 151 152 extern char *isonsap_string(const u_char *); 153 extern char *llcsap_string(u_char); 154 extern char *protoid_string(const u_char *); 155 extern char *dnname_string(u_short); 156 extern char *dnnum_string(u_short); 157 158 /* The printer routines. */ 159 160 #ifdef __STDC__ 161 struct pcap_pkthdr; 162 #endif 163 164 extern int ether_encap_print(u_short, const u_char *, u_int, u_int); 165 extern int llc_print(const u_char *, u_int, u_int, const u_char *, 166 const u_char *); 167 extern void aarp_print(const u_char *, u_int); 168 extern void arp_print(const u_char *, u_int, u_int); 169 extern void atalk_print(const u_char *, u_int); 170 extern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 171 extern void bootp_print(const u_char *, u_int, u_short, u_short); 172 extern void decnet_print(const u_char *, u_int, u_int); 173 extern void default_print(const u_char *, u_int); 174 extern void default_print_unaligned(const u_char *, u_int); 175 extern void dvmrp_print(const u_char *, u_int); 176 extern void egp_print(const u_char *, u_int, const u_char *); 177 extern void ether_if_print(u_char *, const struct pcap_pkthdr *, 178 const u_char *); 179 extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 180 extern void gre_print(const u_char *, u_int); 181 extern void icmp_print(const u_char *, const u_char *); 182 extern void igrp_print(const u_char *, u_int, const u_char *); 183 extern void ip_print(const u_char *, u_int); 184 extern void ipx_print(const u_char *, u_int); 185 extern void isoclns_print(const u_char *, u_int, u_int, const u_char *, 186 const u_char *); 187 extern void krb_print(const u_char *, u_int); 188 extern void nfsreply_print(const u_char *, u_int, const u_char *); 189 extern void nfsreq_print(const u_char *, u_int, const u_char *); 190 extern void ns_print(const u_char *, u_int); 191 extern void ntp_print(const u_char *, u_int); 192 extern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 193 extern void ospf_print(const u_char *, u_int, const u_char *); 194 extern void pim_print(const u_char *, u_int); 195 extern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 196 extern void ppp_bsdos_if_print(u_char *, const struct pcap_pkthdr *, 197 const u_char *); 198 extern void raw_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 199 extern void rip_print(const u_char *, u_int); 200 extern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 201 extern void sl_bsdos_if_print(u_char *, const struct pcap_pkthdr *, 202 const u_char *); 203 extern void snmp_print(const u_char *, u_int); 204 extern void sunrpcrequest_print(const u_char *, u_int, const u_char *); 205 extern void tcp_print(const u_char *, u_int, const u_char *); 206 extern void tftp_print(const u_char *, u_int); 207 extern void udp_print(const u_char *, u_int, const u_char *); 208 extern void wb_print(const void *, u_int); 209