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