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