interface.h revision 53146
117680Spst/*
239297Sfenner * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
317680Spst *	The Regents of the University of California.  All rights reserved.
417680Spst *
517680Spst * Redistribution and use in source and binary forms, with or without
617680Spst * modification, are permitted provided that: (1) source code distributions
717680Spst * retain the above copyright notice and this paragraph in its entirety, (2)
817680Spst * distributions including binary code include the above copyright notice and
917680Spst * this paragraph in its entirety in the documentation or other materials
1017680Spst * provided with the distribution, and (3) all advertising materials mentioning
1117680Spst * features or use of this software display the following acknowledgement:
1217680Spst * ``This product includes software developed by the University of California,
1317680Spst * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
1417680Spst * the University nor the names of its contributors may be used to endorse
1517680Spst * or promote products derived from this software without specific prior
1617680Spst * written permission.
1717680Spst * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
1817680Spst * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
1917680Spst * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
2017680Spst *
2139297Sfenner * @(#) $Header: interface.h,v 1.105 97/04/26 13:39:58 leres Exp $ (LBL)
2253146Sbrian * $FreeBSD: head/contrib/tcpdump/interface.h 53146 1999-11-14 11:28:11Z brian $
2317680Spst */
2417680Spst
2517680Spst#ifndef tcpdump_interface_h
2617680Spst#define tcpdump_interface_h
2717680Spst
2817680Spst#include "gnuc.h"
2917680Spst#ifdef HAVE_OS_PROTO_H
3017680Spst#include "os-proto.h"
3117680Spst#endif
3217680Spst
3317680Spststruct tok {
3417680Spst	int v;			/* value */
3517680Spst	char *s;		/* string */
3617680Spst};
3717680Spst
3839297Sfennerextern int aflag;		/* translate network and broadcast addresses */
3917680Spstextern int dflag;		/* print filter code */
4017680Spstextern int eflag;		/* print ethernet header */
4139297Sfennerextern int fflag;		/* don't translate "foreign" IP address */
4217680Spstextern int nflag;		/* leave addresses as numbers */
4317680Spstextern int Nflag;		/* remove domains from printed host names */
4417680Spstextern int qflag;		/* quick (shorter) output */
4517680Spstextern int Sflag;		/* print raw TCP sequence numbers */
4617680Spstextern int tflag;		/* print packet arrival time */
4717680Spstextern int vflag;		/* verbose */
4817680Spstextern int xflag;		/* print packet in hex */
4917680Spst
5017680Spstextern int packettype;		/* as specified by -T */
5117680Spst#define PT_VAT		1	/* Visual Audio Tool */
5217680Spst#define PT_WB		2	/* distributed White Board */
5317680Spst#define PT_RPC		3	/* Remote Procedure Call */
5417680Spst#define PT_RTP		4	/* Real-Time Applications protocol */
5517680Spst#define PT_RTCP		5	/* Real-Time Applications control protocol */
5617680Spst
5726180Sfenner#ifndef min
5826180Sfenner#define min(a,b) ((a)>(b)?(b):(a))
5926180Sfenner#endif
6026180Sfenner#ifndef max
6126180Sfenner#define max(a,b) ((b)>(a)?(b):(a))
6226180Sfenner#endif
6326180Sfenner
6426180Sfenner/*
6526180Sfenner * The default snapshot length.  This value allows most printers to print
6626180Sfenner * useful information while keeping the amount of unwanted data down.
6726180Sfenner * In particular, it allows for an ethernet header, tcp/ip header, and
6826180Sfenner * 14 bytes of data (assuming no ip options).
6926180Sfenner */
7026180Sfenner#define DEFAULT_SNAPLEN 68
7126180Sfenner
7226180Sfenner#ifndef BIG_ENDIAN
7326180Sfenner#define BIG_ENDIAN 4321
7426180Sfenner#define LITTLE_ENDIAN 1234
7526180Sfenner#endif
7626180Sfenner
7726180Sfenner#ifdef ETHER_HEADER_HAS_EA
7826180Sfenner#define ESRC(ep) ((ep)->ether_shost.ether_addr_octet)
7926180Sfenner#define EDST(ep) ((ep)->ether_dhost.ether_addr_octet)
8026180Sfenner#else
8126180Sfenner#define ESRC(ep) ((ep)->ether_shost)
8226180Sfenner#define EDST(ep) ((ep)->ether_dhost)
8326180Sfenner#endif
8426180Sfenner
8526180Sfenner#ifdef ETHER_ARP_HAS_X
8626180Sfenner#define SHA(ap) ((ap)->arp_xsha)
8726180Sfenner#define THA(ap) ((ap)->arp_xtha)
8826180Sfenner#define SPA(ap) ((ap)->arp_xspa)
8926180Sfenner#define TPA(ap) ((ap)->arp_xtpa)
9026180Sfenner#else
9126180Sfenner#ifdef ETHER_ARP_HAS_EA
9226180Sfenner#define SHA(ap) ((ap)->arp_sha.ether_addr_octet)
9326180Sfenner#define THA(ap) ((ap)->arp_tha.ether_addr_octet)
9426180Sfenner#else
9526180Sfenner#define SHA(ap) ((ap)->arp_sha)
9626180Sfenner#define THA(ap) ((ap)->arp_tha)
9726180Sfenner#endif
9826180Sfenner#define SPA(ap) ((ap)->arp_spa)
9926180Sfenner#define TPA(ap) ((ap)->arp_tpa)
10026180Sfenner#endif
10126180Sfenner
10226180Sfenner#ifndef NTOHL
10326180Sfenner#define NTOHL(x)	(x) = ntohl(x)
10426180Sfenner#define NTOHS(x)	(x) = ntohs(x)
10526180Sfenner#define HTONL(x)	(x) = htonl(x)
10626180Sfenner#define HTONS(x)	(x) = htons(x)
10726180Sfenner#endif
10826180Sfenner#endif
10926180Sfenner
11017680Spstextern char *program_name;	/* used to generate self-identifying messages */
11117680Spst
11217680Spstextern int32_t thiszone;	/* seconds offset from gmt to local time */
11317680Spst
11417680Spstextern int snaplen;
11517680Spst/* global pointers to beginning and end of current packet (during printing) */
11617680Spstextern const u_char *packetp;
11717680Spstextern const u_char *snapend;
11817680Spst
11926180Sfenner/* True if  "l" bytes of "var" were captured */
12026180Sfenner#define TTEST2(var, l) ((u_char *)&(var) <= snapend - (l))
12126180Sfenner
12226180Sfenner/* True if "var" was captured */
12326180Sfenner#define TTEST(var) TTEST2(var, sizeof(var))
12426180Sfenner
12526180Sfenner/* Bail if "l" bytes of "var" were not captured */
12626180Sfenner#define TCHECK2(var, l) if (!TTEST2(var, l)) goto trunc
12726180Sfenner
12826180Sfenner/* Bail if "var" was not captured */
12917680Spst#define TCHECK(var) TCHECK2(var, sizeof(var))
13017680Spst
13117680Spst#ifdef __STDC__
13217680Spststruct timeval;
13317680Spst#endif
13417680Spst
13517680Spstextern void ts_print(const struct timeval *);
13617680Spst
13717680Spstextern int fn_print(const u_char *, const u_char *);
13817680Spstextern int fn_printn(const u_char *, u_int, const u_char *);
13917680Spstextern const char *tok2str(const struct tok *, const char *, int);
14017680Spstextern char *dnaddr_string(u_short);
14117680Spst
14217680Spstextern void wrapup(int);
14317680Spst
14417680Spst#if __STDC__
14517680Spstextern __dead void error(const char *, ...)
14617680Spst    __attribute__((volatile, format (printf, 1, 2)));
14717680Spstextern void warning(const char *, ...) __attribute__ ((format (printf, 1, 2)));
14817680Spst#endif
14917680Spst
15017680Spstextern char *read_infile(char *);
15117680Spstextern char *copy_argv(char **);
15217680Spst
15317680Spstextern char *isonsap_string(const u_char *);
15417680Spstextern char *llcsap_string(u_char);
15517680Spstextern char *protoid_string(const u_char *);
15617680Spstextern char *dnname_string(u_short);
15717680Spstextern char *dnnum_string(u_short);
15817680Spst
15917680Spst/* The printer routines. */
16017680Spst
16117680Spst#ifdef __STDC__
16217680Spststruct pcap_pkthdr;
16317680Spst#endif
16417680Spst
16526180Sfennerextern int ether_encap_print(u_short, const u_char *, u_int, u_int);
16626180Sfennerextern int llc_print(const u_char *, u_int, u_int, const u_char *,
16717680Spst	const u_char *);
16826180Sfennerextern void aarp_print(const u_char *, u_int);
16917680Spstextern void arp_print(const u_char *, u_int, u_int);
17017680Spstextern void atalk_print(const u_char *, u_int);
17126180Sfennerextern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
17217680Spstextern void bootp_print(const u_char *, u_int, u_short, u_short);
17317680Spstextern void decnet_print(const u_char *, u_int, u_int);
17426180Sfennerextern void default_print(const u_char *, u_int);
17526180Sfennerextern void default_print_unaligned(const u_char *, u_int);
17626180Sfennerextern void dvmrp_print(const u_char *, u_int);
17717680Spstextern void egp_print(const u_char *, u_int, const u_char *);
17826180Sfennerextern void ether_if_print(u_char *, const struct pcap_pkthdr *,
17926180Sfenner	const u_char *);
18044165Sjulianextern void token_if_print(u_char *, const struct pcap_pkthdr *,
18144165Sjulian	const u_char *);
18226180Sfennerextern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
18326180Sfennerextern void gre_print(const u_char *, u_int);
18426180Sfennerextern void icmp_print(const u_char *, const u_char *);
18526180Sfennerextern void igrp_print(const u_char *, u_int, const u_char *);
18626180Sfennerextern void ip_print(const u_char *, u_int);
18717680Spstextern void ipx_print(const u_char *, u_int);
18826180Sfennerextern void isoclns_print(const u_char *, u_int, u_int, const u_char *,
18926180Sfenner	const u_char *);
19026180Sfennerextern void krb_print(const u_char *, u_int);
19117680Spstextern void nfsreply_print(const u_char *, u_int, const u_char *);
19217680Spstextern void nfsreq_print(const u_char *, u_int, const u_char *);
19317680Spstextern void ns_print(const u_char *, u_int);
19417680Spstextern void ntp_print(const u_char *, u_int);
19526180Sfennerextern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
19617680Spstextern void ospf_print(const u_char *, u_int, const u_char *);
19726180Sfennerextern void pim_print(const u_char *, u_int);
19826180Sfennerextern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
19939297Sfennerextern void ppp_bsdos_if_print(u_char *, const struct pcap_pkthdr *,
20039297Sfenner	const u_char *);
20153146Sbrianextern void pppoe_print(const u_char *, u_int);
20239297Sfennerextern void raw_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
20317680Spstextern void rip_print(const u_char *, u_int);
20426180Sfennerextern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *);
20539297Sfennerextern void sl_bsdos_if_print(u_char *, const struct pcap_pkthdr *,
20639297Sfenner    const u_char *);
20717680Spstextern void snmp_print(const u_char *, u_int);
20817680Spstextern void sunrpcrequest_print(const u_char *, u_int, const u_char *);
20926180Sfennerextern void tcp_print(const u_char *, u_int, const u_char *);
21017680Spstextern void tftp_print(const u_char *, u_int);
21126180Sfennerextern void udp_print(const u_char *, u_int, const u_char *);
21217680Spstextern void wb_print(const void *, u_int);
213