xref: /minix3/external/bsd/tcpdump/dist/netdissect.h (revision b636d99d91c3d54204248f643c14627405d4afd1)
1*b636d99dSDavid van Moolenbroek /*
2*b636d99dSDavid van Moolenbroek  * Copyright (c) 1988-1997
3*b636d99dSDavid van Moolenbroek  *	The Regents of the University of California.  All rights reserved.
4*b636d99dSDavid van Moolenbroek  *
5*b636d99dSDavid van Moolenbroek  * Copyright (c) 1998-2012  Michael Richardson <mcr@tcpdump.org>
6*b636d99dSDavid van Moolenbroek  *      The TCPDUMP project
7*b636d99dSDavid van Moolenbroek  *
8*b636d99dSDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
9*b636d99dSDavid van Moolenbroek  * modification, are permitted provided that: (1) source code distributions
10*b636d99dSDavid van Moolenbroek  * retain the above copyright notice and this paragraph in its entirety, (2)
11*b636d99dSDavid van Moolenbroek  * distributions including binary code include the above copyright notice and
12*b636d99dSDavid van Moolenbroek  * this paragraph in its entirety in the documentation or other materials
13*b636d99dSDavid van Moolenbroek  * provided with the distribution, and (3) all advertising materials mentioning
14*b636d99dSDavid van Moolenbroek  * features or use of this software display the following acknowledgement:
15*b636d99dSDavid van Moolenbroek  * ``This product includes software developed by the University of California,
16*b636d99dSDavid van Moolenbroek  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
17*b636d99dSDavid van Moolenbroek  * the University nor the names of its contributors may be used to endorse
18*b636d99dSDavid van Moolenbroek  * or promote products derived from this software without specific prior
19*b636d99dSDavid van Moolenbroek  * written permission.
20*b636d99dSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
21*b636d99dSDavid van Moolenbroek  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
22*b636d99dSDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
23*b636d99dSDavid van Moolenbroek  */
24*b636d99dSDavid van Moolenbroek 
25*b636d99dSDavid van Moolenbroek #ifndef netdissect_h
26*b636d99dSDavid van Moolenbroek #define netdissect_h
27*b636d99dSDavid van Moolenbroek 
28*b636d99dSDavid van Moolenbroek #ifdef HAVE_OS_PROTO_H
29*b636d99dSDavid van Moolenbroek #include "os-proto.h"
30*b636d99dSDavid van Moolenbroek #endif
31*b636d99dSDavid van Moolenbroek #include <sys/types.h>
32*b636d99dSDavid van Moolenbroek 
33*b636d99dSDavid van Moolenbroek #ifndef HAVE___ATTRIBUTE__
34*b636d99dSDavid van Moolenbroek #define __attribute__(x)
35*b636d99dSDavid van Moolenbroek #endif
36*b636d99dSDavid van Moolenbroek 
37*b636d99dSDavid van Moolenbroek /* snprintf et al */
38*b636d99dSDavid van Moolenbroek 
39*b636d99dSDavid van Moolenbroek #include <stdarg.h>
40*b636d99dSDavid van Moolenbroek 
41*b636d99dSDavid van Moolenbroek #include "ip.h" /* struct ip for nextproto4_cksum() */
42*b636d99dSDavid van Moolenbroek 
43*b636d99dSDavid van Moolenbroek #if !defined(HAVE_SNPRINTF)
44*b636d99dSDavid van Moolenbroek int snprintf (char *str, size_t sz, const char *format, ...)
45*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK
46*b636d99dSDavid van Moolenbroek      __attribute__((format (printf, 3, 4)))
47*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */
48*b636d99dSDavid van Moolenbroek      ;
49*b636d99dSDavid van Moolenbroek #endif /* !defined(HAVE_SNPRINTF) */
50*b636d99dSDavid van Moolenbroek 
51*b636d99dSDavid van Moolenbroek #if !defined(HAVE_VSNPRINTF)
52*b636d99dSDavid van Moolenbroek int vsnprintf (char *str, size_t sz, const char *format, va_list ap)
53*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK
54*b636d99dSDavid van Moolenbroek      __attribute__((format (printf, 3, 0)))
55*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */
56*b636d99dSDavid van Moolenbroek      ;
57*b636d99dSDavid van Moolenbroek #endif /* !defined(HAVE_SNPRINTF) */
58*b636d99dSDavid van Moolenbroek 
59*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRLCAT
60*b636d99dSDavid van Moolenbroek extern size_t strlcat (char *, const char *, size_t);
61*b636d99dSDavid van Moolenbroek #endif
62*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRLCPY
63*b636d99dSDavid van Moolenbroek extern size_t strlcpy (char *, const char *, size_t);
64*b636d99dSDavid van Moolenbroek #endif
65*b636d99dSDavid van Moolenbroek 
66*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRDUP
67*b636d99dSDavid van Moolenbroek extern char *strdup (const char *str);
68*b636d99dSDavid van Moolenbroek #endif
69*b636d99dSDavid van Moolenbroek 
70*b636d99dSDavid van Moolenbroek #ifndef HAVE_STRSEP
71*b636d99dSDavid van Moolenbroek extern char *strsep(char **, const char *);
72*b636d99dSDavid van Moolenbroek #endif
73*b636d99dSDavid van Moolenbroek 
74*b636d99dSDavid van Moolenbroek struct tok {
75*b636d99dSDavid van Moolenbroek 	u_int v;		/* value */
76*b636d99dSDavid van Moolenbroek 	const char *s;		/* string */
77*b636d99dSDavid van Moolenbroek };
78*b636d99dSDavid van Moolenbroek 
79*b636d99dSDavid van Moolenbroek #define TOKBUFSIZE 128
80*b636d99dSDavid van Moolenbroek extern const char *tok2strbuf(const struct tok *, const char *, u_int,
81*b636d99dSDavid van Moolenbroek 			      char *buf, size_t bufsize);
82*b636d99dSDavid van Moolenbroek 
83*b636d99dSDavid van Moolenbroek /* tok2str is deprecated */
84*b636d99dSDavid van Moolenbroek extern const char *tok2str(const struct tok *, const char *, int);
85*b636d99dSDavid van Moolenbroek extern char *bittok2str(const struct tok *, const char *, int);
86*b636d99dSDavid van Moolenbroek extern char *bittok2str_nosep(const struct tok *, const char *, int);
87*b636d99dSDavid van Moolenbroek 
88*b636d99dSDavid van Moolenbroek 
89*b636d99dSDavid van Moolenbroek typedef struct netdissect_options netdissect_options;
90*b636d99dSDavid van Moolenbroek 
91*b636d99dSDavid van Moolenbroek struct netdissect_options {
92*b636d99dSDavid van Moolenbroek   int ndo_aflag;		/* translate network and broadcast addresses */
93*b636d99dSDavid van Moolenbroek   int ndo_bflag;		/* print 4 byte ASes in ASDOT notation */
94*b636d99dSDavid van Moolenbroek   int ndo_eflag;		/* print ethernet header */
95*b636d99dSDavid van Moolenbroek   int ndo_fflag;		/* don't translate "foreign" IP address */
96*b636d99dSDavid van Moolenbroek   int ndo_Kflag;		/* don't check TCP checksums */
97*b636d99dSDavid van Moolenbroek   int ndo_nflag;		/* leave addresses as numbers */
98*b636d99dSDavid van Moolenbroek   int ndo_Nflag;		/* remove domains from printed host names */
99*b636d99dSDavid van Moolenbroek   int ndo_qflag;		/* quick (shorter) output */
100*b636d99dSDavid van Moolenbroek   int ndo_Rflag;		/* print sequence # field in AH/ESP*/
101*b636d99dSDavid van Moolenbroek   int ndo_sflag;		/* use the libsmi to translate OIDs */
102*b636d99dSDavid van Moolenbroek   int ndo_Sflag;		/* print raw TCP sequence numbers */
103*b636d99dSDavid van Moolenbroek   int ndo_tflag;		/* print packet arrival time */
104*b636d99dSDavid van Moolenbroek   int ndo_Uflag;		/* "unbuffered" output of dump files */
105*b636d99dSDavid van Moolenbroek   int ndo_uflag;		/* Print undecoded NFS handles */
106*b636d99dSDavid van Moolenbroek   int ndo_vflag;		/* verbose */
107*b636d99dSDavid van Moolenbroek   int ndo_xflag;		/* print packet in hex */
108*b636d99dSDavid van Moolenbroek   int ndo_Xflag;		/* print packet in hex/ascii */
109*b636d99dSDavid van Moolenbroek   int ndo_Aflag;		/* print packet only in ascii observing TAB,
110*b636d99dSDavid van Moolenbroek 				 * LF, CR and SPACE as graphical chars
111*b636d99dSDavid van Moolenbroek 				 */
112*b636d99dSDavid van Moolenbroek   int ndo_Bflag;		/* buffer size */
113*b636d99dSDavid van Moolenbroek   int ndo_Iflag;		/* rfmon (monitor) mode */
114*b636d99dSDavid van Moolenbroek   int ndo_Oflag;                /* run filter code optimizer */
115*b636d99dSDavid van Moolenbroek   int ndo_dlt;                  /* if != -1, ask libpcap for the DLT it names*/
116*b636d99dSDavid van Moolenbroek   int ndo_jflag;                /* packet time stamp source */
117*b636d99dSDavid van Moolenbroek   int ndo_pflag;                /* don't go promiscuous */
118*b636d99dSDavid van Moolenbroek   int ndo_immediate;            /* use immediate mode */
119*b636d99dSDavid van Moolenbroek 
120*b636d99dSDavid van Moolenbroek   int ndo_Cflag;                /* rotate dump files after this many bytes */
121*b636d99dSDavid van Moolenbroek   int ndo_Cflag_count;      /* Keep track of which file number we're writing */
122*b636d99dSDavid van Moolenbroek   int ndo_Gflag;            /* rotate dump files after this many seconds */
123*b636d99dSDavid van Moolenbroek   int ndo_Gflag_count;      /* number of files created with Gflag rotation */
124*b636d99dSDavid van Moolenbroek   time_t ndo_Gflag_time;    /* The last time_t the dump file was rotated. */
125*b636d99dSDavid van Moolenbroek   int ndo_Wflag;          /* recycle output files after this number of files */
126*b636d99dSDavid van Moolenbroek   int ndo_WflagChars;
127*b636d99dSDavid van Moolenbroek   int ndo_Hflag;		/* dissect 802.11s draft mesh standard */
128*b636d99dSDavid van Moolenbroek   int ndo_packet_number;	/* print a packet number in the beginning of line */
129*b636d99dSDavid van Moolenbroek   int ndo_suppress_default_print; /* don't use default_print() for unknown packet types */
130*b636d99dSDavid van Moolenbroek   int ndo_tstamp_precision;   /* requested time stamp precision */
131*b636d99dSDavid van Moolenbroek   const char *ndo_dltname;
132*b636d99dSDavid van Moolenbroek 
133*b636d99dSDavid van Moolenbroek   char *ndo_espsecret;
134*b636d99dSDavid van Moolenbroek   struct sa_list *ndo_sa_list_head;  /* used by print-esp.c */
135*b636d99dSDavid van Moolenbroek   struct sa_list *ndo_sa_default;
136*b636d99dSDavid van Moolenbroek 
137*b636d99dSDavid van Moolenbroek   char *ndo_sigsecret;     	/* Signature verification secret key */
138*b636d99dSDavid van Moolenbroek 
139*b636d99dSDavid van Moolenbroek   struct esp_algorithm *ndo_espsecret_xform;   /* cache of decoded  */
140*b636d99dSDavid van Moolenbroek   char                 *ndo_espsecret_key;
141*b636d99dSDavid van Moolenbroek 
142*b636d99dSDavid van Moolenbroek   int   ndo_packettype;	/* as specified by -T */
143*b636d99dSDavid van Moolenbroek 
144*b636d99dSDavid van Moolenbroek   char *ndo_program_name;	/*used to generate self-identifying messages */
145*b636d99dSDavid van Moolenbroek 
146*b636d99dSDavid van Moolenbroek   int32_t ndo_thiszone;	/* seconds offset from gmt to local time */
147*b636d99dSDavid van Moolenbroek 
148*b636d99dSDavid van Moolenbroek   int   ndo_snaplen;
149*b636d99dSDavid van Moolenbroek 
150*b636d99dSDavid van Moolenbroek   /*global pointers to beginning and end of current packet (during printing) */
151*b636d99dSDavid van Moolenbroek   const u_char *ndo_packetp;
152*b636d99dSDavid van Moolenbroek   const u_char *ndo_snapend;
153*b636d99dSDavid van Moolenbroek 
154*b636d99dSDavid van Moolenbroek   /* bookkeeping for ^T output */
155*b636d99dSDavid van Moolenbroek   int ndo_infodelay;
156*b636d99dSDavid van Moolenbroek 
157*b636d99dSDavid van Moolenbroek   /* pointer to void function to output stuff */
158*b636d99dSDavid van Moolenbroek   void (*ndo_default_print)(netdissect_options *,
159*b636d99dSDavid van Moolenbroek   		      register const u_char *bp, register u_int length);
160*b636d99dSDavid van Moolenbroek 
161*b636d99dSDavid van Moolenbroek   /* pointer to function to print ^T output */
162*b636d99dSDavid van Moolenbroek   void (*ndo_info)(netdissect_options *, int verbose);
163*b636d99dSDavid van Moolenbroek 
164*b636d99dSDavid van Moolenbroek   /* pointer to function to do regular output */
165*b636d99dSDavid van Moolenbroek   int  (*ndo_printf)(netdissect_options *,
166*b636d99dSDavid van Moolenbroek 		     const char *fmt, ...)
167*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
168*b636d99dSDavid van Moolenbroek 		     __attribute__ ((format (printf, 2, 3)))
169*b636d99dSDavid van Moolenbroek #endif
170*b636d99dSDavid van Moolenbroek 		     ;
171*b636d99dSDavid van Moolenbroek   /* pointer to function to output errors */
172*b636d99dSDavid van Moolenbroek   void (*ndo_error)(netdissect_options *,
173*b636d99dSDavid van Moolenbroek 		    const char *fmt, ...)
174*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___NORETURN_OK_FOR_FUNCTION_POINTERS
175*b636d99dSDavid van Moolenbroek 		     __attribute__ ((noreturn))
176*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___NORETURN_OK_FOR_FUNCTION_POINTERS */
177*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
178*b636d99dSDavid van Moolenbroek 		     __attribute__ ((format (printf, 2, 3)))
179*b636d99dSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS */
180*b636d99dSDavid van Moolenbroek 		     ;
181*b636d99dSDavid van Moolenbroek   /* pointer to function to output warnings */
182*b636d99dSDavid van Moolenbroek   void (*ndo_warning)(netdissect_options *,
183*b636d99dSDavid van Moolenbroek 		      const char *fmt, ...)
184*b636d99dSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
185*b636d99dSDavid van Moolenbroek 		     __attribute__ ((format (printf, 2, 3)))
186*b636d99dSDavid van Moolenbroek #endif
187*b636d99dSDavid van Moolenbroek 		     ;
188*b636d99dSDavid van Moolenbroek };
189*b636d99dSDavid van Moolenbroek 
190*b636d99dSDavid van Moolenbroek #define PT_VAT		1	/* Visual Audio Tool */
191*b636d99dSDavid van Moolenbroek #define PT_WB		2	/* distributed White Board */
192*b636d99dSDavid van Moolenbroek #define PT_RPC		3	/* Remote Procedure Call */
193*b636d99dSDavid van Moolenbroek #define PT_RTP		4	/* Real-Time Applications protocol */
194*b636d99dSDavid van Moolenbroek #define PT_RTCP		5	/* Real-Time Applications control protocol */
195*b636d99dSDavid van Moolenbroek #define PT_SNMP		6	/* Simple Network Management Protocol */
196*b636d99dSDavid van Moolenbroek #define PT_CNFP		7	/* Cisco NetFlow protocol */
197*b636d99dSDavid van Moolenbroek #define PT_TFTP		8	/* trivial file transfer protocol */
198*b636d99dSDavid van Moolenbroek #define PT_AODV		9	/* Ad-hoc On-demand Distance Vector Protocol */
199*b636d99dSDavid van Moolenbroek #define PT_CARP		10	/* Common Address Redundancy Protocol */
200*b636d99dSDavid van Moolenbroek #define PT_RADIUS	11	/* RADIUS authentication Protocol */
201*b636d99dSDavid van Moolenbroek #define PT_ZMTP1	12	/* ZeroMQ Message Transport Protocol 1.0 */
202*b636d99dSDavid van Moolenbroek #define PT_VXLAN	13	/* Virtual eXtensible Local Area Network */
203*b636d99dSDavid van Moolenbroek #define PT_PGM		14	/* [UDP-encapsulated] Pragmatic General Multicast */
204*b636d99dSDavid van Moolenbroek #define PT_PGM_ZMTP1	15	/* ZMTP/1.0 inside PGM (native or UDP-encapsulated) */
205*b636d99dSDavid van Moolenbroek #define PT_LMP		16	/* Link Management Protocol */
206*b636d99dSDavid van Moolenbroek 
207*b636d99dSDavid van Moolenbroek #ifndef min
208*b636d99dSDavid van Moolenbroek #define min(a,b) ((a)>(b)?(b):(a))
209*b636d99dSDavid van Moolenbroek #endif
210*b636d99dSDavid van Moolenbroek #ifndef max
211*b636d99dSDavid van Moolenbroek #define max(a,b) ((b)>(a)?(b):(a))
212*b636d99dSDavid van Moolenbroek #endif
213*b636d99dSDavid van Moolenbroek 
214*b636d99dSDavid van Moolenbroek /*
215*b636d99dSDavid van Moolenbroek  * Maximum snapshot length.  This should be enough to capture the full
216*b636d99dSDavid van Moolenbroek  * packet on most network interfaces.
217*b636d99dSDavid van Moolenbroek  *
218*b636d99dSDavid van Moolenbroek  *
219*b636d99dSDavid van Moolenbroek  * Somewhat arbitrary, but chosen to be:
220*b636d99dSDavid van Moolenbroek  *
221*b636d99dSDavid van Moolenbroek  *    1) big enough for maximum-size Linux loopback packets (65549)
222*b636d99dSDavid van Moolenbroek  *       and some USB packets captured with USBPcap:
223*b636d99dSDavid van Moolenbroek  *
224*b636d99dSDavid van Moolenbroek  *           http://desowin.org/usbpcap/
225*b636d99dSDavid van Moolenbroek  *
226*b636d99dSDavid van Moolenbroek  *       (> 131072, < 262144)
227*b636d99dSDavid van Moolenbroek  *
228*b636d99dSDavid van Moolenbroek  * and
229*b636d99dSDavid van Moolenbroek  *
230*b636d99dSDavid van Moolenbroek  *    2) small enough not to cause attempts to allocate huge amounts of
231*b636d99dSDavid van Moolenbroek  *       memory; some applications might use the snapshot length in a
232*b636d99dSDavid van Moolenbroek  *       savefile header to control the size of the buffer they allocate,
233*b636d99dSDavid van Moolenbroek  *       so a size of, say, 2^31-1 might not work well.
234*b636d99dSDavid van Moolenbroek  *
235*b636d99dSDavid van Moolenbroek  * XXX - does it need to be bigger still?
236*b636d99dSDavid van Moolenbroek  */
237*b636d99dSDavid van Moolenbroek #define MAXIMUM_SNAPLEN	262144
238*b636d99dSDavid van Moolenbroek 
239*b636d99dSDavid van Moolenbroek /*
240*b636d99dSDavid van Moolenbroek  * The default snapshot length is the maximum.
241*b636d99dSDavid van Moolenbroek  */
242*b636d99dSDavid van Moolenbroek #define DEFAULT_SNAPLEN	MAXIMUM_SNAPLEN
243*b636d99dSDavid van Moolenbroek 
244*b636d99dSDavid van Moolenbroek #define ESRC(ep) ((ep)->ether_shost)
245*b636d99dSDavid van Moolenbroek #define EDST(ep) ((ep)->ether_dhost)
246*b636d99dSDavid van Moolenbroek 
247*b636d99dSDavid van Moolenbroek #ifndef NTOHL
248*b636d99dSDavid van Moolenbroek #define NTOHL(x)	(x) = ntohl(x)
249*b636d99dSDavid van Moolenbroek #define NTOHS(x)	(x) = ntohs(x)
250*b636d99dSDavid van Moolenbroek #define HTONL(x)	(x) = htonl(x)
251*b636d99dSDavid van Moolenbroek #define HTONS(x)	(x) = htons(x)
252*b636d99dSDavid van Moolenbroek #endif
253*b636d99dSDavid van Moolenbroek 
254*b636d99dSDavid van Moolenbroek /*
255*b636d99dSDavid van Moolenbroek  * True if "l" bytes of "var" were captured.
256*b636d99dSDavid van Moolenbroek  *
257*b636d99dSDavid van Moolenbroek  * The "ndo->ndo_snapend - (l) <= ndo->ndo_snapend" checks to make sure
258*b636d99dSDavid van Moolenbroek  * "l" isn't so large that "ndo->ndo_snapend - (l)" underflows.
259*b636d99dSDavid van Moolenbroek  *
260*b636d99dSDavid van Moolenbroek  * The check is for <= rather than < because "l" might be 0.
261*b636d99dSDavid van Moolenbroek  *
262*b636d99dSDavid van Moolenbroek  * We cast the pointers to uintptr_t to make sure that the compiler
263*b636d99dSDavid van Moolenbroek  * doesn't optimize away any of these tests (which it is allowed to
264*b636d99dSDavid van Moolenbroek  * do, as adding an integer to, or subtracting an integer from, a
265*b636d99dSDavid van Moolenbroek  * pointer assumes that the pointer is a pointer to an element of an
266*b636d99dSDavid van Moolenbroek  * array and that the result of the addition or subtraction yields a
267*b636d99dSDavid van Moolenbroek  * pointer to another member of the array, so that, for example, if
268*b636d99dSDavid van Moolenbroek  * you subtract a positive integer from a pointer, the result is
269*b636d99dSDavid van Moolenbroek  * guaranteed to be less than the original pointer value). See
270*b636d99dSDavid van Moolenbroek  *
271*b636d99dSDavid van Moolenbroek  *	http://www.kb.cert.org/vuls/id/162289
272*b636d99dSDavid van Moolenbroek  */
273*b636d99dSDavid van Moolenbroek #define ND_TTEST2(var, l) \
274*b636d99dSDavid van Moolenbroek   ((l) >= 0 && \
275*b636d99dSDavid van Moolenbroek 	((uintptr_t)ndo->ndo_snapend - (l) <= (uintptr_t)ndo->ndo_snapend && \
276*b636d99dSDavid van Moolenbroek          (uintptr_t)&(var) <= (uintptr_t)ndo->ndo_snapend - (l)))
277*b636d99dSDavid van Moolenbroek 
278*b636d99dSDavid van Moolenbroek /* True if "var" was captured */
279*b636d99dSDavid van Moolenbroek #define ND_TTEST(var) ND_TTEST2(var, sizeof(var))
280*b636d99dSDavid van Moolenbroek 
281*b636d99dSDavid van Moolenbroek /* Bail if "l" bytes of "var" were not captured */
282*b636d99dSDavid van Moolenbroek #define ND_TCHECK2(var, l) if (!ND_TTEST2(var, l)) goto trunc
283*b636d99dSDavid van Moolenbroek 
284*b636d99dSDavid van Moolenbroek /* Bail if "var" was not captured */
285*b636d99dSDavid van Moolenbroek #define ND_TCHECK(var) ND_TCHECK2(var, sizeof(var))
286*b636d99dSDavid van Moolenbroek 
287*b636d99dSDavid van Moolenbroek #define ND_PRINT(STUFF) (*ndo->ndo_printf)STUFF
288*b636d99dSDavid van Moolenbroek #define ND_DEFAULTPRINT(ap, length) (*ndo->ndo_default_print)(ndo, ap, length)
289*b636d99dSDavid van Moolenbroek 
290*b636d99dSDavid van Moolenbroek extern void ts_print(netdissect_options *, const struct timeval *);
291*b636d99dSDavid van Moolenbroek extern void relts_print(netdissect_options *, int);
292*b636d99dSDavid van Moolenbroek 
293*b636d99dSDavid van Moolenbroek extern int fn_print(netdissect_options *, const u_char *, const u_char *);
294*b636d99dSDavid van Moolenbroek extern int fn_printn(netdissect_options *, const u_char *, u_int, const u_char *);
295*b636d99dSDavid van Moolenbroek extern int fn_printzp(netdissect_options *, const u_char *, u_int, const u_char *);
296*b636d99dSDavid van Moolenbroek extern const char *tok2str(const struct tok *, const char *, int);
297*b636d99dSDavid van Moolenbroek 
298*b636d99dSDavid van Moolenbroek /*
299*b636d99dSDavid van Moolenbroek  * Flags for txtproto_print().
300*b636d99dSDavid van Moolenbroek  */
301*b636d99dSDavid van Moolenbroek #define RESP_CODE_SECOND_TOKEN	0x00000001	/* response code is second token in response line */
302*b636d99dSDavid van Moolenbroek 
303*b636d99dSDavid van Moolenbroek extern void txtproto_print(netdissect_options *, const u_char *, u_int,
304*b636d99dSDavid van Moolenbroek     const char *, const char **, u_int);
305*b636d99dSDavid van Moolenbroek 
306*b636d99dSDavid van Moolenbroek #if 0
307*b636d99dSDavid van Moolenbroek extern char *read_infile(netdissect_options *, char *);
308*b636d99dSDavid van Moolenbroek extern char *copy_argv(netdissect_options *, char **);
309*b636d99dSDavid van Moolenbroek #endif
310*b636d99dSDavid van Moolenbroek 
311*b636d99dSDavid van Moolenbroek /*
312*b636d99dSDavid van Moolenbroek  * Locale-independent macros for testing character properties and
313*b636d99dSDavid van Moolenbroek  * stripping the 8th bit from characters.  Assumed to be handed
314*b636d99dSDavid van Moolenbroek  * a value between 0 and 255, i.e. don't hand them a char, as
315*b636d99dSDavid van Moolenbroek  * those might be in the range -128 to 127.
316*b636d99dSDavid van Moolenbroek  */
317*b636d99dSDavid van Moolenbroek #define ND_ISASCII(c)	(!((c) & 0x80))	/* value is an ASCII code point */
318*b636d99dSDavid van Moolenbroek #define ND_ISPRINT(c)	((c) >= 0x20 && (c) <= 0x7E)
319*b636d99dSDavid van Moolenbroek #define ND_ISGRAPH(c)	((c) > 0x20 && (c) <= 0x7E)
320*b636d99dSDavid van Moolenbroek #define ND_TOASCII(c)	((c) & 0x7F)
321*b636d99dSDavid van Moolenbroek 
322*b636d99dSDavid van Moolenbroek extern void safeputchar(netdissect_options *, const u_char);
323*b636d99dSDavid van Moolenbroek extern void safeputs(netdissect_options *, const u_char *, const u_int);
324*b636d99dSDavid van Moolenbroek 
325*b636d99dSDavid van Moolenbroek #ifdef LBL_ALIGN
326*b636d99dSDavid van Moolenbroek /*
327*b636d99dSDavid van Moolenbroek  * The processor doesn't natively handle unaligned loads,
328*b636d99dSDavid van Moolenbroek  * and the compiler might "helpfully" optimize memcpy()
329*b636d99dSDavid van Moolenbroek  * and memcmp(), when handed pointers that would normally
330*b636d99dSDavid van Moolenbroek  * be properly aligned, into sequences that assume proper
331*b636d99dSDavid van Moolenbroek  * alignment.
332*b636d99dSDavid van Moolenbroek  *
333*b636d99dSDavid van Moolenbroek  * Do copies and compares of possibly-unaligned data by
334*b636d99dSDavid van Moolenbroek  * calling routines that wrap memcpy() and memcmp(), to
335*b636d99dSDavid van Moolenbroek  * prevent that optimization.
336*b636d99dSDavid van Moolenbroek  */
337*b636d99dSDavid van Moolenbroek extern void unaligned_memcpy(void *, const void *, size_t);
338*b636d99dSDavid van Moolenbroek extern int unaligned_memcmp(const void *, const void *, size_t);
339*b636d99dSDavid van Moolenbroek #define UNALIGNED_MEMCPY(p, q, l)	unaligned_memcpy((p), (q), (l))
340*b636d99dSDavid van Moolenbroek #define UNALIGNED_MEMCMP(p, q, l)	unaligned_memcmp((p), (q), (l))
341*b636d99dSDavid van Moolenbroek #else
342*b636d99dSDavid van Moolenbroek /*
343*b636d99dSDavid van Moolenbroek  * The procesor natively handles unaligned loads, so just use memcpy()
344*b636d99dSDavid van Moolenbroek  * and memcmp(), to enable those optimizations.
345*b636d99dSDavid van Moolenbroek  */
346*b636d99dSDavid van Moolenbroek #define UNALIGNED_MEMCPY(p, q, l)	memcpy((p), (q), (l))
347*b636d99dSDavid van Moolenbroek #define UNALIGNED_MEMCMP(p, q, l)	memcmp((p), (q), (l))
348*b636d99dSDavid van Moolenbroek #endif
349*b636d99dSDavid van Moolenbroek 
350*b636d99dSDavid van Moolenbroek #define PLURAL_SUFFIX(n) \
351*b636d99dSDavid van Moolenbroek 	(((n) != 1) ? "s" : "")
352*b636d99dSDavid van Moolenbroek 
353*b636d99dSDavid van Moolenbroek #if 0
354*b636d99dSDavid van Moolenbroek extern const char *dnname_string(netdissect_options *, u_short);
355*b636d99dSDavid van Moolenbroek extern const char *dnnum_string(netdissect_options *, u_short);
356*b636d99dSDavid van Moolenbroek #endif
357*b636d99dSDavid van Moolenbroek 
358*b636d99dSDavid van Moolenbroek /* The printer routines. */
359*b636d99dSDavid van Moolenbroek 
360*b636d99dSDavid van Moolenbroek #include <pcap.h>
361*b636d99dSDavid van Moolenbroek 
362*b636d99dSDavid van Moolenbroek extern char *q922_string(netdissect_options *ndo, const u_char *, u_int);
363*b636d99dSDavid van Moolenbroek 
364*b636d99dSDavid van Moolenbroek typedef u_int (*if_ndo_printer)(struct netdissect_options *ndo,
365*b636d99dSDavid van Moolenbroek 				const struct pcap_pkthdr *, const u_char *);
366*b636d99dSDavid van Moolenbroek typedef u_int (*if_printer)(const struct pcap_pkthdr *, const u_char *);
367*b636d99dSDavid van Moolenbroek 
368*b636d99dSDavid van Moolenbroek extern if_ndo_printer lookup_ndo_printer(int);
369*b636d99dSDavid van Moolenbroek extern if_printer lookup_printer(int);
370*b636d99dSDavid van Moolenbroek 
371*b636d99dSDavid van Moolenbroek extern void eap_print(netdissect_options *,const u_char *, u_int);
372*b636d99dSDavid van Moolenbroek extern int esp_print(netdissect_options *,
373*b636d99dSDavid van Moolenbroek 		     const u_char *bp, const int length, const u_char *bp2,
374*b636d99dSDavid van Moolenbroek 		     int *nhdr, int *padlen);
375*b636d99dSDavid van Moolenbroek extern void arp_print(netdissect_options *,const u_char *, u_int, u_int);
376*b636d99dSDavid van Moolenbroek extern void tipc_print(netdissect_options *, const u_char *, u_int, u_int);
377*b636d99dSDavid van Moolenbroek extern void msnlb_print(netdissect_options *, const u_char *);
378*b636d99dSDavid van Moolenbroek extern void icmp6_print(netdissect_options *ndo, const u_char *,
379*b636d99dSDavid van Moolenbroek                         u_int, const u_char *, int);
380*b636d99dSDavid van Moolenbroek extern void isakmp_print(netdissect_options *,const u_char *,
381*b636d99dSDavid van Moolenbroek 			 u_int, const u_char *);
382*b636d99dSDavid van Moolenbroek extern void isakmp_rfc3948_print(netdissect_options *,const u_char *,
383*b636d99dSDavid van Moolenbroek 				 u_int, const u_char *);
384*b636d99dSDavid van Moolenbroek extern void ip_print(netdissect_options *,const u_char *, u_int);
385*b636d99dSDavid van Moolenbroek extern void ip_print_inner(netdissect_options *ndo,
386*b636d99dSDavid van Moolenbroek 			   const u_char *bp, u_int length, u_int nh,
387*b636d99dSDavid van Moolenbroek 			   const u_char *bp2);
388*b636d99dSDavid van Moolenbroek extern void rrcp_print(netdissect_options *,const u_char *, u_int);
389*b636d99dSDavid van Moolenbroek extern void loopback_print(netdissect_options *, const u_char *, const u_int);
390*b636d99dSDavid van Moolenbroek extern void carp_print(netdissect_options *, const u_char *, u_int, int);
391*b636d99dSDavid van Moolenbroek 
392*b636d99dSDavid van Moolenbroek extern void ether_print(netdissect_options *,
393*b636d99dSDavid van Moolenbroek                         const u_char *, u_int, u_int,
394*b636d99dSDavid van Moolenbroek                         void (*)(netdissect_options *, const u_char *),
395*b636d99dSDavid van Moolenbroek                         const u_char *);
396*b636d99dSDavid van Moolenbroek 
397*b636d99dSDavid van Moolenbroek extern u_int ether_if_print(netdissect_options *,
398*b636d99dSDavid van Moolenbroek                             const struct pcap_pkthdr *,const u_char *);
399*b636d99dSDavid van Moolenbroek extern u_int netanalyzer_if_print(netdissect_options *,
400*b636d99dSDavid van Moolenbroek                                   const struct pcap_pkthdr *,const u_char *);
401*b636d99dSDavid van Moolenbroek extern u_int netanalyzer_transparent_if_print(netdissect_options *,
402*b636d99dSDavid van Moolenbroek                                               const struct pcap_pkthdr *,
403*b636d99dSDavid van Moolenbroek                                               const u_char *);
404*b636d99dSDavid van Moolenbroek 
405*b636d99dSDavid van Moolenbroek extern int ethertype_print(netdissect_options *,u_short, const u_char *,
406*b636d99dSDavid van Moolenbroek 			     u_int, u_int);
407*b636d99dSDavid van Moolenbroek 
408*b636d99dSDavid van Moolenbroek extern int print_unknown_data(netdissect_options *,const u_char *, const char *,int);
409*b636d99dSDavid van Moolenbroek extern void ascii_print(netdissect_options *, const u_char *, u_int);
410*b636d99dSDavid van Moolenbroek extern void hex_print_with_offset(netdissect_options *, const char *ident, const u_char *cp,
411*b636d99dSDavid van Moolenbroek 				  u_int, u_int);
412*b636d99dSDavid van Moolenbroek extern void hex_print(netdissect_options *,const char *ident, const u_char *cp,u_int);
413*b636d99dSDavid van Moolenbroek extern void hex_and_ascii_print_with_offset(netdissect_options *, const char *, const u_char *, u_int, u_int);
414*b636d99dSDavid van Moolenbroek extern void hex_and_ascii_print(netdissect_options *, const char *, const u_char *, u_int);
415*b636d99dSDavid van Moolenbroek 
416*b636d99dSDavid van Moolenbroek extern int ah_print(netdissect_options *, register const u_char *);
417*b636d99dSDavid van Moolenbroek extern void beep_print(netdissect_options *, const u_char *, u_int);
418*b636d99dSDavid van Moolenbroek extern void dtp_print(netdissect_options *, const u_char *, u_int);
419*b636d99dSDavid van Moolenbroek extern u_int cip_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
420*b636d99dSDavid van Moolenbroek extern int ipcomp_print(netdissect_options *, register const u_char *, int *);
421*b636d99dSDavid van Moolenbroek extern u_int ipfc_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
422*b636d99dSDavid van Moolenbroek extern void udld_print(netdissect_options *, const u_char *, u_int);
423*b636d99dSDavid van Moolenbroek extern void hsrp_print(netdissect_options *, const u_char *, u_int);
424*b636d99dSDavid van Moolenbroek extern void igrp_print(netdissect_options *, const u_char *, u_int);
425*b636d99dSDavid van Moolenbroek extern void msdp_print(netdissect_options *, const u_char *, u_int);
426*b636d99dSDavid van Moolenbroek extern u_int null_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
427*b636d99dSDavid van Moolenbroek extern void mobile_print(netdissect_options *, const u_char *, u_int);
428*b636d99dSDavid van Moolenbroek extern u_int ap1394_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
429*b636d99dSDavid van Moolenbroek extern u_int bt_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
430*b636d99dSDavid van Moolenbroek extern void lane_print(netdissect_options *, const u_char *, u_int, u_int);
431*b636d99dSDavid van Moolenbroek extern u_int lane_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
432*b636d99dSDavid van Moolenbroek extern void otv_print(netdissect_options *, const u_char *, u_int);
433*b636d99dSDavid van Moolenbroek extern void ahcp_print(netdissect_options *, const u_char *, const u_int);
434*b636d99dSDavid van Moolenbroek extern void vxlan_print(netdissect_options *, const u_char *, u_int);
435*b636d99dSDavid van Moolenbroek extern u_int arcnet_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
436*b636d99dSDavid van Moolenbroek extern u_int arcnet_linux_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
437*b636d99dSDavid van Moolenbroek extern void bfd_print(netdissect_options *, const u_char *, u_int, u_int);
438*b636d99dSDavid van Moolenbroek extern void gre_print(netdissect_options *, const u_char *, u_int);
439*b636d99dSDavid van Moolenbroek extern int vjc_print(netdissect_options *, register const char *, u_short);
440*b636d99dSDavid van Moolenbroek extern void ipN_print(netdissect_options *, const u_char *, u_int);
441*b636d99dSDavid van Moolenbroek extern u_int raw_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
442*b636d99dSDavid van Moolenbroek extern u_int usb_linux_48_byte_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
443*b636d99dSDavid van Moolenbroek extern u_int usb_linux_64_byte_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
444*b636d99dSDavid van Moolenbroek extern u_int symantec_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
445*b636d99dSDavid van Moolenbroek extern u_int chdlc_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
446*b636d99dSDavid van Moolenbroek extern u_int chdlc_print(netdissect_options *, register const u_char *, u_int);
447*b636d99dSDavid van Moolenbroek extern void zmtp1_print(netdissect_options *, const u_char *, u_int);
448*b636d99dSDavid van Moolenbroek extern void zmtp1_print_datagram(netdissect_options *, const u_char *, const u_int);
449*b636d99dSDavid van Moolenbroek extern void ipx_print(netdissect_options *, const u_char *, u_int);
450*b636d99dSDavid van Moolenbroek extern void mpls_print(netdissect_options *, const u_char *, u_int);
451*b636d99dSDavid van Moolenbroek extern u_int pppoe_print(netdissect_options *, const u_char *, u_int);
452*b636d99dSDavid van Moolenbroek extern u_int pppoe_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
453*b636d99dSDavid van Moolenbroek extern void sunrpcrequest_print(netdissect_options *, const u_char *, u_int, const u_char *);
454*b636d99dSDavid van Moolenbroek extern u_int pflog_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
455*b636d99dSDavid van Moolenbroek extern u_int token_print(netdissect_options *, const u_char *, u_int, u_int);
456*b636d99dSDavid van Moolenbroek extern u_int token_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
457*b636d99dSDavid van Moolenbroek extern void vqp_print(netdissect_options *, register const u_char *, register u_int);
458*b636d99dSDavid van Moolenbroek extern void zephyr_print(netdissect_options *, const u_char *, int);
459*b636d99dSDavid van Moolenbroek extern void fddi_print(netdissect_options *, const u_char *, u_int, u_int);
460*b636d99dSDavid van Moolenbroek extern u_int fddi_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
461*b636d99dSDavid van Moolenbroek extern void mpcp_print(netdissect_options *, const u_char *, u_int);
462*b636d99dSDavid van Moolenbroek extern void rpki_rtr_print(netdissect_options *, const u_char *, u_int);
463*b636d99dSDavid van Moolenbroek extern u_int sll_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
464*b636d99dSDavid van Moolenbroek extern void dccp_print(netdissect_options *, const u_char *, const u_char *, u_int);
465*b636d99dSDavid van Moolenbroek extern int llc_print(netdissect_options *, const u_char *, u_int, u_int, const u_char *, const u_char *, u_short *);
466*b636d99dSDavid van Moolenbroek extern int snap_print(netdissect_options *, const u_char *, u_int, u_int, u_int);
467*b636d99dSDavid van Moolenbroek extern void eigrp_print(netdissect_options *, const u_char *, u_int);
468*b636d99dSDavid van Moolenbroek extern void stp_print(netdissect_options *, const u_char *, u_int);
469*b636d99dSDavid van Moolenbroek extern void l2tp_print(netdissect_options *, const u_char *, u_int);
470*b636d99dSDavid van Moolenbroek extern void udp_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
471*b636d99dSDavid van Moolenbroek extern void icmp_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
472*b636d99dSDavid van Moolenbroek extern void openflow_print(netdissect_options *, const u_char *, const u_int);
473*b636d99dSDavid van Moolenbroek extern void telnet_print(netdissect_options *, const u_char *, u_int);
474*b636d99dSDavid van Moolenbroek extern void slow_print(netdissect_options *, const u_char *, u_int);
475*b636d99dSDavid van Moolenbroek extern void radius_print(netdissect_options *, const u_char *, u_int);
476*b636d99dSDavid van Moolenbroek extern void lmp_print(netdissect_options *, const u_char *, u_int);
477*b636d99dSDavid van Moolenbroek extern u_int fr_print(netdissect_options *, register const u_char *, u_int);
478*b636d99dSDavid van Moolenbroek extern u_int mfr_print(netdissect_options *, register const u_char *, u_int);
479*b636d99dSDavid van Moolenbroek extern u_int fr_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
480*b636d99dSDavid van Moolenbroek extern u_int mfr_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
481*b636d99dSDavid van Moolenbroek extern void q933_print(netdissect_options *, const u_char *, u_int);
482*b636d99dSDavid van Moolenbroek extern void igmp_print(netdissect_options *, const u_char *, u_int);
483*b636d99dSDavid van Moolenbroek extern void rip_print(netdissect_options *, const u_char *, u_int);
484*b636d99dSDavid van Moolenbroek extern void lwapp_control_print(netdissect_options *, const u_char *, u_int, int);
485*b636d99dSDavid van Moolenbroek extern void lwapp_data_print(netdissect_options *, const u_char *, u_int);
486*b636d99dSDavid van Moolenbroek extern void pgm_print(netdissect_options *, const u_char *, u_int, const u_char *);
487*b636d99dSDavid van Moolenbroek extern void pptp_print(netdissect_options *, const u_char *);
488*b636d99dSDavid van Moolenbroek extern void ldp_print(netdissect_options *, const u_char *, u_int);
489*b636d99dSDavid van Moolenbroek extern void wb_print(netdissect_options *, const void *, u_int);
490*b636d99dSDavid van Moolenbroek extern int oam_print(netdissect_options *, const u_char *, u_int, u_int);
491*b636d99dSDavid van Moolenbroek extern void atm_print(netdissect_options *, u_int, u_int, u_int, const u_char *, u_int, u_int);
492*b636d99dSDavid van Moolenbroek extern u_int sunatm_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
493*b636d99dSDavid van Moolenbroek extern u_int atm_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
494*b636d99dSDavid van Moolenbroek extern void vtp_print(netdissect_options *, const u_char *, u_int);
495*b636d99dSDavid van Moolenbroek extern int mptcp_print(netdissect_options *, const u_char *, u_int, u_char);
496*b636d99dSDavid van Moolenbroek extern void ntp_print(netdissect_options *, const u_char *, u_int);
497*b636d99dSDavid van Moolenbroek extern void cnfp_print(netdissect_options *, const u_char *);
498*b636d99dSDavid van Moolenbroek extern void dvmrp_print(netdissect_options *, const u_char *, u_int);
499*b636d99dSDavid van Moolenbroek extern void egp_print(netdissect_options *, const u_char *, u_int);
500*b636d99dSDavid van Moolenbroek extern u_int enc_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
501*b636d99dSDavid van Moolenbroek extern u_int sl_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
502*b636d99dSDavid van Moolenbroek extern u_int sl_bsdos_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
503*b636d99dSDavid van Moolenbroek extern void tftp_print(netdissect_options *, const u_char *, u_int);
504*b636d99dSDavid van Moolenbroek extern void vrrp_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
505*b636d99dSDavid van Moolenbroek extern void pimv1_print(netdissect_options *, const u_char *, u_int);
506*b636d99dSDavid van Moolenbroek extern void cisco_autorp_print(netdissect_options *, const u_char *, u_int);
507*b636d99dSDavid van Moolenbroek extern void pim_print(netdissect_options *, const u_char *, u_int, u_int);
508*b636d99dSDavid van Moolenbroek extern const u_char * ns_nprint (netdissect_options *, register const u_char *, register const u_char *);
509*b636d99dSDavid van Moolenbroek extern void ns_print(netdissect_options *, const u_char *, u_int, int);
510*b636d99dSDavid van Moolenbroek extern void bootp_print(netdissect_options *, const u_char *, u_int);
511*b636d99dSDavid van Moolenbroek extern void sflow_print(netdissect_options *, const u_char *, u_int);
512*b636d99dSDavid van Moolenbroek extern void aodv_print(netdissect_options *, const u_char *, u_int, int);
513*b636d99dSDavid van Moolenbroek extern void sctp_print(netdissect_options *, const u_char *, const u_char *, u_int);
514*b636d99dSDavid van Moolenbroek extern char *bgp_vpn_rd_print (netdissect_options *, const u_char *);
515*b636d99dSDavid van Moolenbroek extern void bgp_print(netdissect_options *, const u_char *, int);
516*b636d99dSDavid van Moolenbroek extern void olsr_print(netdissect_options *, const u_char *, u_int, int);
517*b636d99dSDavid van Moolenbroek extern void forces_print(netdissect_options *, const u_char *, u_int);
518*b636d99dSDavid van Moolenbroek extern void lspping_print(netdissect_options *, const u_char *, u_int);
519*b636d99dSDavid van Moolenbroek extern void isoclns_print(netdissect_options *, const u_char *, u_int, u_int);
520*b636d99dSDavid van Moolenbroek extern void krb_print(netdissect_options *, const u_char *);
521*b636d99dSDavid van Moolenbroek extern void cdp_print(netdissect_options *, const u_char *, u_int, u_int);
522*b636d99dSDavid van Moolenbroek extern void atalk_print(netdissect_options *, const u_char *, u_int);
523*b636d99dSDavid van Moolenbroek extern u_int ltalk_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
524*b636d99dSDavid van Moolenbroek extern u_int llap_print(netdissect_options *, const u_char *, u_int);
525*b636d99dSDavid van Moolenbroek extern void aarp_print(netdissect_options *, const u_char *, u_int);
526*b636d99dSDavid van Moolenbroek extern u_int juniper_atm1_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
527*b636d99dSDavid van Moolenbroek extern u_int juniper_atm2_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
528*b636d99dSDavid van Moolenbroek extern u_int juniper_mfr_print(netdissect_options *, const struct pcap_pkthdr *, register const u_char *);
529*b636d99dSDavid van Moolenbroek extern u_int juniper_mlfr_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
530*b636d99dSDavid van Moolenbroek extern u_int juniper_mlppp_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
531*b636d99dSDavid van Moolenbroek extern u_int juniper_pppoe_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
532*b636d99dSDavid van Moolenbroek extern u_int juniper_pppoe_atm_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
533*b636d99dSDavid van Moolenbroek extern u_int juniper_ggsn_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
534*b636d99dSDavid van Moolenbroek extern u_int juniper_es_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
535*b636d99dSDavid van Moolenbroek extern u_int juniper_monitor_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
536*b636d99dSDavid van Moolenbroek extern u_int juniper_services_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
537*b636d99dSDavid van Moolenbroek extern u_int juniper_ether_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
538*b636d99dSDavid van Moolenbroek extern u_int juniper_ppp_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
539*b636d99dSDavid van Moolenbroek extern u_int juniper_frelay_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
540*b636d99dSDavid van Moolenbroek extern u_int juniper_chdlc_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
541*b636d99dSDavid van Moolenbroek extern void snmp_print(netdissect_options *, const u_char *, u_int);
542*b636d99dSDavid van Moolenbroek extern void rx_print(netdissect_options *, register const u_char *, int, int, int, u_char *);
543*b636d99dSDavid van Moolenbroek extern void nfsreply_print(netdissect_options *, const u_char *, u_int, const u_char *);
544*b636d99dSDavid van Moolenbroek extern void nfsreply_print_noaddr(netdissect_options *, const u_char *, u_int, const u_char *);
545*b636d99dSDavid van Moolenbroek extern void nfsreq_print_noaddr(netdissect_options *, const u_char *, u_int, const u_char *);
546*b636d99dSDavid van Moolenbroek extern void sip_print(netdissect_options *, const u_char *, u_int);
547*b636d99dSDavid van Moolenbroek extern void syslog_print(netdissect_options *, const u_char *, u_int);
548*b636d99dSDavid van Moolenbroek extern void lwres_print(netdissect_options *, const u_char *, u_int);
549*b636d99dSDavid van Moolenbroek extern void cfm_print(netdissect_options *, const u_char *, u_int);
550*b636d99dSDavid van Moolenbroek extern void nbt_tcp_print(netdissect_options *, const u_char *, int);
551*b636d99dSDavid van Moolenbroek extern void nbt_udp137_print(netdissect_options *, const u_char *, int);
552*b636d99dSDavid van Moolenbroek extern void nbt_udp138_print(netdissect_options *, const u_char *, int);
553*b636d99dSDavid van Moolenbroek extern void smb_tcp_print(netdissect_options *, const u_char *, int);
554*b636d99dSDavid van Moolenbroek extern void netbeui_print(netdissect_options *, u_short, const u_char *, int);
555*b636d99dSDavid van Moolenbroek extern void ipx_netbios_print(netdissect_options *, const u_char *, u_int);
556*b636d99dSDavid van Moolenbroek extern void print_data(netdissect_options *, const unsigned char *, int);
557*b636d99dSDavid van Moolenbroek extern void decnet_print(netdissect_options *, const u_char *, u_int, u_int);
558*b636d99dSDavid van Moolenbroek extern void tcp_print(netdissect_options *, const u_char *, u_int, const u_char *, int);
559*b636d99dSDavid van Moolenbroek extern void ospf_print(netdissect_options *, const u_char *, u_int, const u_char *);
560*b636d99dSDavid van Moolenbroek extern int ospf_print_te_lsa(netdissect_options *, const uint8_t *, u_int);
561*b636d99dSDavid van Moolenbroek extern int ospf_print_grace_lsa(netdissect_options *, const uint8_t *, u_int);
562*b636d99dSDavid van Moolenbroek extern u_int ppp_print(netdissect_options *, register const u_char *, u_int);
563*b636d99dSDavid van Moolenbroek extern u_int ppp_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
564*b636d99dSDavid van Moolenbroek extern u_int ppp_hdlc_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
565*b636d99dSDavid van Moolenbroek extern u_int ppp_bsdos_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
566*b636d99dSDavid van Moolenbroek extern void lldp_print(netdissect_options *, const u_char *, u_int);
567*b636d99dSDavid van Moolenbroek extern void rsvp_print(netdissect_options *, const u_char *, u_int);
568*b636d99dSDavid van Moolenbroek extern void timed_print(netdissect_options *, const u_char *);
569*b636d99dSDavid van Moolenbroek extern void m3ua_print(netdissect_options *, const u_char *, const u_int);
570*b636d99dSDavid van Moolenbroek extern void aoe_print(netdissect_options *, const u_char *, const u_int);
571*b636d99dSDavid van Moolenbroek extern void ftp_print(netdissect_options *, const u_char *, u_int);
572*b636d99dSDavid van Moolenbroek extern void http_print(netdissect_options *, const u_char *, u_int);
573*b636d99dSDavid van Moolenbroek extern void rtsp_print(netdissect_options *, const u_char *, u_int);
574*b636d99dSDavid van Moolenbroek extern void smtp_print(netdissect_options *, const u_char *, u_int);
575*b636d99dSDavid van Moolenbroek extern void geneve_print(netdissect_options *, const u_char *, u_int);
576*b636d99dSDavid van Moolenbroek 
577*b636d99dSDavid van Moolenbroek 
578*b636d99dSDavid van Moolenbroek /* stuff that has not yet been rototiled */
579*b636d99dSDavid van Moolenbroek 
580*b636d99dSDavid van Moolenbroek #if 0
581*b636d99dSDavid van Moolenbroek extern void ascii_print(netdissect_options *,u_int);
582*b636d99dSDavid van Moolenbroek extern void default_print(netdissect_options *,const u_char *, u_int);
583*b636d99dSDavid van Moolenbroek extern char *smb_errstr(netdissect_options *,int, int);
584*b636d99dSDavid van Moolenbroek extern const char *nt_errstr(netdissect_options *, uint32_t);
585*b636d99dSDavid van Moolenbroek #endif
586*b636d99dSDavid van Moolenbroek 
587*b636d99dSDavid van Moolenbroek extern u_int pfsync_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
588*b636d99dSDavid van Moolenbroek extern u_int ipnet_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
589*b636d99dSDavid van Moolenbroek extern u_int ppi_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
590*b636d99dSDavid van Moolenbroek extern u_int nflog_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
591*b636d99dSDavid van Moolenbroek extern u_int ieee802_15_4_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
592*b636d99dSDavid van Moolenbroek extern u_int pktap_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
593*b636d99dSDavid van Moolenbroek extern u_int ieee802_11_radio_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
594*b636d99dSDavid van Moolenbroek extern u_int ieee802_11_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
595*b636d99dSDavid van Moolenbroek extern u_int ieee802_11_radio_avs_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
596*b636d99dSDavid van Moolenbroek extern u_int prism_if_print(netdissect_options *, const struct pcap_pkthdr *, const u_char *);
597*b636d99dSDavid van Moolenbroek 
598*b636d99dSDavid van Moolenbroek extern void ip6_print(netdissect_options *,const u_char *, u_int);
599*b636d99dSDavid van Moolenbroek #ifdef INET6
600*b636d99dSDavid van Moolenbroek extern int frag6_print(netdissect_options *, const u_char *, const u_char *);
601*b636d99dSDavid van Moolenbroek extern int rt6_print(netdissect_options *, const u_char *, const u_char *);
602*b636d99dSDavid van Moolenbroek extern int hbhopt_print(netdissect_options *, const u_char *);
603*b636d99dSDavid van Moolenbroek extern int dstopt_print(netdissect_options *, const u_char *);
604*b636d99dSDavid van Moolenbroek extern void ripng_print(netdissect_options *, const u_char *, unsigned int);
605*b636d99dSDavid van Moolenbroek extern int mobility_print(netdissect_options *, const u_char *, const u_char *);
606*b636d99dSDavid van Moolenbroek extern void dhcp6_print(netdissect_options *, const u_char *, u_int);
607*b636d99dSDavid van Moolenbroek extern void ospf6_print(netdissect_options *, const u_char *, u_int);
608*b636d99dSDavid van Moolenbroek extern void babel_print(netdissect_options *, const u_char *, u_int);
609*b636d99dSDavid van Moolenbroek #endif /*INET6*/
610*b636d99dSDavid van Moolenbroek 
611*b636d99dSDavid van Moolenbroek #if 0
612*b636d99dSDavid van Moolenbroek struct cksum_vec {
613*b636d99dSDavid van Moolenbroek 	const uint8_t	*ptr;
614*b636d99dSDavid van Moolenbroek 	int		len;
615*b636d99dSDavid van Moolenbroek };
616*b636d99dSDavid van Moolenbroek extern uint16_t in_cksum(const struct cksum_vec *, int);
617*b636d99dSDavid van Moolenbroek extern uint16_t in_cksum_shouldbe(uint16_t, uint16_t);
618*b636d99dSDavid van Moolenbroek #endif
619*b636d99dSDavid van Moolenbroek extern int nextproto4_cksum(netdissect_options *ndo, const struct ip *, const uint8_t *, u_int, u_int, u_int);
620*b636d99dSDavid van Moolenbroek extern int decode_prefix4(netdissect_options *ndo, const u_char *, u_int, char *, u_int);
621*b636d99dSDavid van Moolenbroek #ifdef INET6
622*b636d99dSDavid van Moolenbroek extern int decode_prefix6(netdissect_options *ndo, const u_char *, u_int, char *, u_int);
623*b636d99dSDavid van Moolenbroek #endif
624*b636d99dSDavid van Moolenbroek 
625*b636d99dSDavid van Moolenbroek extern void esp_print_decodesecret(netdissect_options *ndo);
626*b636d99dSDavid van Moolenbroek extern int esp_print_decrypt_buffer_by_ikev2(netdissect_options *ndo,
627*b636d99dSDavid van Moolenbroek 					     int initiator,
628*b636d99dSDavid van Moolenbroek 					     u_char spii[8], u_char spir[8],
629*b636d99dSDavid van Moolenbroek 					     u_char *buf, u_char *end);
630*b636d99dSDavid van Moolenbroek 
631*b636d99dSDavid van Moolenbroek 
632*b636d99dSDavid van Moolenbroek extern void geonet_print(netdissect_options *ndo,const u_char *eth_hdr,const u_char *geo_pck, u_int len);
633*b636d99dSDavid van Moolenbroek extern void calm_fast_print(netdissect_options *ndo,const u_char *eth_hdr,const u_char *calm_pck, u_int len);
634*b636d99dSDavid van Moolenbroek 
635*b636d99dSDavid van Moolenbroek extern void pfsync_ip_print(const u_char *bp, u_int len, const u_char *bp2 __unused);
636*b636d99dSDavid van Moolenbroek 
637*b636d99dSDavid van Moolenbroek #endif  /* netdissect_h */
638