interface.h revision 39298
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 32struct tok { 33 int v; /* value */ 34 char *s; /* string */ 35}; 36 37extern int aflag; /* translate network and broadcast addresses */ 38extern int dflag; /* print filter code */ 39extern int eflag; /* print ethernet header */ 40extern int fflag; /* don't translate "foreign" IP address */ 41extern int nflag; /* leave addresses as numbers */ 42extern int Nflag; /* remove domains from printed host names */ 43extern int qflag; /* quick (shorter) output */ 44extern int Sflag; /* print raw TCP sequence numbers */ 45extern int tflag; /* print packet arrival time */ 46extern int vflag; /* verbose */ 47extern int xflag; /* print packet in hex */ 48 49extern 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 109extern char *program_name; /* used to generate self-identifying messages */ 110 111extern int32_t thiszone; /* seconds offset from gmt to local time */ 112 113extern int snaplen; 114/* global pointers to beginning and end of current packet (during printing) */ 115extern const u_char *packetp; 116extern 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__ 131struct timeval; 132#endif 133 134extern void ts_print(const struct timeval *); 135 136extern int fn_print(const u_char *, const u_char *); 137extern int fn_printn(const u_char *, u_int, const u_char *); 138extern const char *tok2str(const struct tok *, const char *, int); 139extern char *dnaddr_string(u_short); 140 141extern void wrapup(int); 142 143#if __STDC__ 144extern __dead void error(const char *, ...) 145 __attribute__((volatile, format (printf, 1, 2))); 146extern void warning(const char *, ...) __attribute__ ((format (printf, 1, 2))); 147#endif 148 149extern char *read_infile(char *); 150extern char *copy_argv(char **); 151 152extern char *isonsap_string(const u_char *); 153extern char *llcsap_string(u_char); 154extern char *protoid_string(const u_char *); 155extern char *dnname_string(u_short); 156extern char *dnnum_string(u_short); 157 158/* The printer routines. */ 159 160#ifdef __STDC__ 161struct pcap_pkthdr; 162#endif 163 164extern int ether_encap_print(u_short, const u_char *, u_int, u_int); 165extern int llc_print(const u_char *, u_int, u_int, const u_char *, 166 const u_char *); 167extern void aarp_print(const u_char *, u_int); 168extern void arp_print(const u_char *, u_int, u_int); 169extern void atalk_print(const u_char *, u_int); 170extern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 171extern void bootp_print(const u_char *, u_int, u_short, u_short); 172extern void decnet_print(const u_char *, u_int, u_int); 173extern void default_print(const u_char *, u_int); 174extern void default_print_unaligned(const u_char *, u_int); 175extern void dvmrp_print(const u_char *, u_int); 176extern void egp_print(const u_char *, u_int, const u_char *); 177extern void ether_if_print(u_char *, const struct pcap_pkthdr *, 178 const u_char *); 179extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 180extern void gre_print(const u_char *, u_int); 181extern void icmp_print(const u_char *, const u_char *); 182extern void igrp_print(const u_char *, u_int, const u_char *); 183extern void ip_print(const u_char *, u_int); 184extern void ipx_print(const u_char *, u_int); 185extern void isoclns_print(const u_char *, u_int, u_int, const u_char *, 186 const u_char *); 187extern void krb_print(const u_char *, u_int); 188extern void nfsreply_print(const u_char *, u_int, const u_char *); 189extern void nfsreq_print(const u_char *, u_int, const u_char *); 190extern void ns_print(const u_char *, u_int); 191extern void ntp_print(const u_char *, u_int); 192extern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 193extern void ospf_print(const u_char *, u_int, const u_char *); 194extern void pim_print(const u_char *, u_int); 195extern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 196extern void ppp_bsdos_if_print(u_char *, const struct pcap_pkthdr *, 197 const u_char *); 198extern void raw_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 199extern void rip_print(const u_char *, u_int); 200extern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 201extern void sl_bsdos_if_print(u_char *, const struct pcap_pkthdr *, 202 const u_char *); 203extern void snmp_print(const u_char *, u_int); 204extern void sunrpcrequest_print(const u_char *, u_int, const u_char *); 205extern void tcp_print(const u_char *, u_int, const u_char *); 206extern void tftp_print(const u_char *, u_int); 207extern void udp_print(const u_char *, u_int, const u_char *); 208extern void wb_print(const void *, u_int); 209