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