interface.h revision 17680
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 32struct tok { 33 int v; /* value */ 34 char *s; /* string */ 35}; 36 37extern int dflag; /* print filter code */ 38extern int eflag; /* print ethernet header */ 39extern int nflag; /* leave addresses as numbers */ 40extern int Nflag; /* remove domains from printed host names */ 41extern int qflag; /* quick (shorter) output */ 42extern int Sflag; /* print raw TCP sequence numbers */ 43extern int tflag; /* print packet arrival time */ 44extern int vflag; /* verbose */ 45extern int xflag; /* print packet in hex */ 46 47extern 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 54extern char *program_name; /* used to generate self-identifying messages */ 55 56extern int32_t thiszone; /* seconds offset from gmt to local time */ 57 58extern int snaplen; 59/* global pointers to beginning and end of current packet (during printing) */ 60extern const u_char *packetp; 61extern 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__ 67struct timeval; 68#endif 69 70extern void ts_print(const struct timeval *); 71extern int32_t gmt2local(void); 72 73extern int fn_print(const u_char *, const u_char *); 74extern int fn_printn(const u_char *, u_int, const u_char *); 75extern const char *tok2str(const struct tok *, const char *, int); 76extern char *dnaddr_string(u_short); 77extern char *savestr(const char *); 78 79extern void wrapup(int); 80 81#if __STDC__ 82extern __dead void error(const char *, ...) 83 __attribute__((volatile, format (printf, 1, 2))); 84extern void warning(const char *, ...) __attribute__ ((format (printf, 1, 2))); 85#endif 86 87extern char *read_infile(char *); 88extern char *copy_argv(char **); 89 90extern char *isonsap_string(const u_char *); 91extern char *llcsap_string(u_char); 92extern char *protoid_string(const u_char *); 93extern char *dnname_string(u_short); 94extern char *dnnum_string(u_short); 95 96/* The printer routines. */ 97 98#ifdef __STDC__ 99struct pcap_pkthdr; 100#endif 101 102extern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 103extern void ether_if_print(u_char *, const struct pcap_pkthdr *, 104 const u_char *); 105extern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char*); 106extern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char*); 107extern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 108extern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 109 110extern void arp_print(const u_char *, u_int, u_int); 111extern void ip_print(const u_char *, u_int); 112extern void tcp_print(const u_char *, u_int, const u_char *); 113extern void udp_print(const u_char *, u_int, const u_char *); 114extern void icmp_print(const u_char *, const u_char *); 115extern void igrp_print(const u_char *, u_int, const u_char *); 116extern void default_print(const u_char *, u_int); 117extern void default_print_unaligned(const u_char *, u_int); 118 119extern void aarp_print(const u_char *, u_int); 120extern void atalk_print(const u_char *, u_int); 121extern void bootp_print(const u_char *, u_int, u_short, u_short); 122extern void decnet_print(const u_char *, u_int, u_int); 123extern void egp_print(const u_char *, u_int, const u_char *); 124extern int ether_encap_print(u_short, const u_char *, u_int, u_int); 125extern void ipx_print(const u_char *, u_int); 126extern void isoclns_print(const u_char *, u_int, u_int, 127 const u_char *, const u_char *); 128extern int llc_print(const u_char *, u_int, u_int, 129 const u_char *, const u_char *); 130extern void nfsreply_print(const u_char *, u_int, const u_char *); 131extern void nfsreq_print(const u_char *, u_int, const u_char *); 132extern void ns_print(const u_char *, u_int); 133extern void ntp_print(const u_char *, u_int); 134extern void ospf_print(const u_char *, u_int, const u_char *); 135extern void rip_print(const u_char *, u_int); 136extern void snmp_print(const u_char *, u_int); 137extern void sunrpcrequest_print(const u_char *, u_int, const u_char *); 138extern void tftp_print(const u_char *, u_int); 139extern void wb_print(const void *, u_int); 140extern void dvmrp_print(const u_char *, u_int); 141extern void pim_print(const u_char *, u_int); 142extern 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