interface.h revision 98348
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 * 2175118Sfenner * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.149 2001/01/02 22:47:06 guy Exp $ (LBL) 2253146Sbrian * $FreeBSD: head/contrib/tcpdump/interface.h 98348 2002-06-17 15:26:56Z fenner $ 2317680Spst */ 2417680Spst 2517680Spst#ifndef tcpdump_interface_h 2617680Spst#define tcpdump_interface_h 2717680Spst 2817680Spst#ifdef HAVE_OS_PROTO_H 2917680Spst#include "os-proto.h" 3017680Spst#endif 3175118Sfenner#include <sys/types.h> 3275118Sfenner#include <sys/time.h> 3317680Spst 3475118Sfenner#ifndef HAVE___ATTRIBUTE__ 3575118Sfenner#define __attribute__(x) 3675118Sfenner#endif 3775118Sfenner 3875118Sfenner/* snprintf et al */ 3975118Sfenner 4075118Sfenner#include <stdarg.h> 4175118Sfenner 4275118Sfenner#if !defined(HAVE_SNPRINTF) 4375118Sfennerint snprintf (char *str, size_t sz, const char *format, ...) 4475118Sfenner __attribute__ ((format (printf, 3, 4))); 4575118Sfenner#endif 4675118Sfenner 4775118Sfenner#if !defined(HAVE_VSNPRINTF) 4875118Sfennerint vsnprintf (char *str, size_t sz, const char *format, va_list ap) 4975118Sfenner __attribute__((format (printf, 3, 0))); 5075118Sfenner#endif 5175118Sfenner 5275118Sfenner#ifndef HAVE_STRLCAT 5375118Sfennerextern size_t strlcat (char *, const char *, size_t); 5475118Sfenner#endif 5575118Sfenner#ifndef HAVE_STRLCPY 5675118Sfennerextern size_t strlcpy (char *, const char *, size_t); 5775118Sfenner#endif 5875118Sfenner 5917680Spststruct tok { 6017680Spst int v; /* value */ 6117680Spst char *s; /* string */ 6217680Spst}; 6317680Spst 6439297Sfennerextern int aflag; /* translate network and broadcast addresses */ 6517680Spstextern int dflag; /* print filter code */ 6617680Spstextern int eflag; /* print ethernet header */ 6739297Sfennerextern int fflag; /* don't translate "foreign" IP address */ 6817680Spstextern int nflag; /* leave addresses as numbers */ 6917680Spstextern int Nflag; /* remove domains from printed host names */ 7017680Spstextern int qflag; /* quick (shorter) output */ 7156896Sfennerextern int Rflag; /* print sequence # field in AH/ESP*/ 7256896Sfennerextern int sflag; /* use the libsmi to translate OIDs */ 7317680Spstextern int Sflag; /* print raw TCP sequence numbers */ 7417680Spstextern int tflag; /* print packet arrival time */ 7575118Sfennerextern int uflag; /* Print undecoded NFS handles */ 7617680Spstextern int vflag; /* verbose */ 7717680Spstextern int xflag; /* print packet in hex */ 7856896Sfennerextern int Xflag; /* print packet in hex/ascii */ 7917680Spst 8056896Sfennerextern char *espsecret; 8156896Sfenner 8217680Spstextern int packettype; /* as specified by -T */ 8317680Spst#define PT_VAT 1 /* Visual Audio Tool */ 8417680Spst#define PT_WB 2 /* distributed White Board */ 8517680Spst#define PT_RPC 3 /* Remote Procedure Call */ 8617680Spst#define PT_RTP 4 /* Real-Time Applications protocol */ 8717680Spst#define PT_RTCP 5 /* Real-Time Applications control protocol */ 8856896Sfenner#define PT_SNMP 6 /* Simple Network Management Protocol */ 8975118Sfenner#define PT_CNFP 7 /* Cisco NetFlow protocol */ 9017680Spst 9126180Sfenner#ifndef min 9226180Sfenner#define min(a,b) ((a)>(b)?(b):(a)) 9326180Sfenner#endif 9426180Sfenner#ifndef max 9526180Sfenner#define max(a,b) ((b)>(a)?(b):(a)) 9626180Sfenner#endif 9726180Sfenner 9856896Sfenner#ifndef INET6 9926180Sfenner/* 10026180Sfenner * The default snapshot length. This value allows most printers to print 10126180Sfenner * useful information while keeping the amount of unwanted data down. 10226180Sfenner * In particular, it allows for an ethernet header, tcp/ip header, and 10326180Sfenner * 14 bytes of data (assuming no ip options). 10426180Sfenner */ 10526180Sfenner#define DEFAULT_SNAPLEN 68 10656896Sfenner#else 10756896Sfenner#define DEFAULT_SNAPLEN 96 10856896Sfenner#endif 10926180Sfenner 11026180Sfenner#ifndef BIG_ENDIAN 11126180Sfenner#define BIG_ENDIAN 4321 11226180Sfenner#define LITTLE_ENDIAN 1234 11326180Sfenner#endif 11426180Sfenner 11526180Sfenner#define ESRC(ep) ((ep)->ether_shost) 11626180Sfenner#define EDST(ep) ((ep)->ether_dhost) 11726180Sfenner 11826180Sfenner#ifndef NTOHL 11926180Sfenner#define NTOHL(x) (x) = ntohl(x) 12026180Sfenner#define NTOHS(x) (x) = ntohs(x) 12126180Sfenner#define HTONL(x) (x) = htonl(x) 12226180Sfenner#define HTONS(x) (x) = htons(x) 12326180Sfenner#endif 12426180Sfenner#endif 12526180Sfenner 12617680Spstextern char *program_name; /* used to generate self-identifying messages */ 12717680Spst 12817680Spstextern int32_t thiszone; /* seconds offset from gmt to local time */ 12917680Spst 13017680Spstextern int snaplen; 13117680Spst/* global pointers to beginning and end of current packet (during printing) */ 13217680Spstextern const u_char *packetp; 13317680Spstextern const u_char *snapend; 13417680Spst 13598348Sfenner/* 13698348Sfenner * True if "l" bytes of "var" were captured. 13798348Sfenner * 13898348Sfenner * The "snapend - (l) <= snapend" checks to make sure "l" isn't so large 13998348Sfenner * that "snapend - (l)" underflows. 14098348Sfenner * 14198348Sfenner * The check is for <= rather than < because "l" might be 0. 14298348Sfenner */ 14398348Sfenner#define TTEST2(var, l) (snapend - (l) <= snapend && \ 14498348Sfenner (const u_char *)&(var) <= snapend - (l)) 14526180Sfenner 14626180Sfenner/* True if "var" was captured */ 14726180Sfenner#define TTEST(var) TTEST2(var, sizeof(var)) 14826180Sfenner 14926180Sfenner/* Bail if "l" bytes of "var" were not captured */ 15026180Sfenner#define TCHECK2(var, l) if (!TTEST2(var, l)) goto trunc 15126180Sfenner 15226180Sfenner/* Bail if "var" was not captured */ 15317680Spst#define TCHECK(var) TCHECK2(var, sizeof(var)) 15417680Spst 15517680Spststruct timeval; 15617680Spst 15717680Spstextern void ts_print(const struct timeval *); 15856896Sfennerextern void relts_print(int); 15917680Spst 16017680Spstextern int fn_print(const u_char *, const u_char *); 16117680Spstextern int fn_printn(const u_char *, u_int, const u_char *); 16217680Spstextern const char *tok2str(const struct tok *, const char *, int); 16317680Spstextern char *dnaddr_string(u_short); 16417680Spst 16517680Spstextern void wrapup(int); 16617680Spst 16775118Sfennerextern void error(const char *, ...) 16875118Sfenner __attribute__((noreturn, format (printf, 1, 2))); 16917680Spstextern void warning(const char *, ...) __attribute__ ((format (printf, 1, 2))); 17017680Spst 17117680Spstextern char *read_infile(char *); 17217680Spstextern char *copy_argv(char **); 17317680Spst 17475118Sfennerextern void safeputchar(int); 17575118Sfennerextern void safeputs(const char *); 17675118Sfenner 17717680Spstextern char *isonsap_string(const u_char *); 17817680Spstextern char *llcsap_string(u_char); 17917680Spstextern char *protoid_string(const u_char *); 18017680Spstextern char *dnname_string(u_short); 18117680Spstextern char *dnnum_string(u_short); 18217680Spst 18317680Spst/* The printer routines. */ 18417680Spst 18517680Spststruct pcap_pkthdr; 18617680Spst 18756896Sfennerextern void ascii_print_with_offset(const u_char *, u_int, u_int); 18856896Sfennerextern void ascii_print(const u_char *, u_int); 18956896Sfennerextern void hex_print_with_offset(const u_char *, u_int, u_int); 19056896Sfennerextern void telnet_print(const u_char *, u_int); 19156896Sfennerextern void hex_print(const u_char *, u_int); 19275118Sfennerextern int ether_encap_print(u_short, const u_char *, u_int, u_int, u_short *); 19326180Sfennerextern int llc_print(const u_char *, u_int, u_int, const u_char *, 19475118Sfenner const u_char *, u_short *); 19526180Sfennerextern void aarp_print(const u_char *, u_int); 19617680Spstextern void arp_print(const u_char *, u_int, u_int); 19717680Spstextern void atalk_print(const u_char *, u_int); 19826180Sfennerextern void atm_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 19917680Spstextern void bootp_print(const u_char *, u_int, u_short, u_short); 20056896Sfennerextern void bgp_print(const u_char *, int); 20175118Sfennerextern void bxxp_print(const u_char *, u_int); 20275118Sfennerextern void cnfp_print(const u_char *cp, u_int len, const u_char *bp); 20317680Spstextern void decnet_print(const u_char *, u_int, u_int); 20426180Sfennerextern void default_print(const u_char *, u_int); 20526180Sfennerextern void default_print_unaligned(const u_char *, u_int); 20626180Sfennerextern void dvmrp_print(const u_char *, u_int); 20717680Spstextern void egp_print(const u_char *, u_int, const u_char *); 20826180Sfennerextern void ether_if_print(u_char *, const struct pcap_pkthdr *, 20926180Sfenner const u_char *); 21044165Sjulianextern void token_if_print(u_char *, const struct pcap_pkthdr *, 21144165Sjulian const u_char *); 21226180Sfennerextern void fddi_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 21326180Sfennerextern void gre_print(const u_char *, u_int); 21456896Sfennerextern void icmp_print(const u_char *, u_int, const u_char *); 21575118Sfennerextern void igmp_print(const u_char *, u_int, const u_char *); 21626180Sfennerextern void igrp_print(const u_char *, u_int, const u_char *); 21726180Sfennerextern void ip_print(const u_char *, u_int); 21875118Sfennerextern void ipN_print(const u_char *, u_int); 21917680Spstextern void ipx_print(const u_char *, u_int); 22026180Sfennerextern void isoclns_print(const u_char *, u_int, u_int, const u_char *, 22126180Sfenner const u_char *); 22226180Sfennerextern void krb_print(const u_char *, u_int); 22375118Sfennerextern void llap_print(const u_char *, u_int); 22417680Spstextern void nfsreply_print(const u_char *, u_int, const u_char *); 22517680Spstextern void nfsreq_print(const u_char *, u_int, const u_char *); 22617680Spstextern void ns_print(const u_char *, u_int); 22717680Spstextern void ntp_print(const u_char *, u_int); 22826180Sfennerextern void null_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 22917680Spstextern void ospf_print(const u_char *, u_int, const u_char *); 23056896Sfennerextern void pimv1_print(const u_char *, u_int); 23156896Sfennerextern void cisco_autorp_print(const u_char *, u_int); 23256896Sfennerextern void mobile_print(const u_char *, u_int); 23326180Sfennerextern void pim_print(const u_char *, u_int); 23456896Sfennerextern void pppoe_print(const u_char *, u_int); 23575118Sfennerextern void ppp_print(register const u_char *, u_int); 23626180Sfennerextern void ppp_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 23775118Sfennerextern void ppp_hdlc_if_print(u_char *, const struct pcap_pkthdr *, 23875118Sfenner const u_char *); 23939297Sfennerextern void ppp_bsdos_if_print(u_char *, const struct pcap_pkthdr *, 24039297Sfenner const u_char *); 24156896Sfennerextern int vjc_print(register const char *, register u_int, u_short); 24239297Sfennerextern void raw_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 24317680Spstextern void rip_print(const u_char *, u_int); 24426180Sfennerextern void sl_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 24556896Sfennerextern void lane_if_print(u_char *, const struct pcap_pkthdr *,const u_char *); 24656896Sfennerextern void cip_if_print(u_char *, const struct pcap_pkthdr *,const u_char *); 24739297Sfennerextern void sl_bsdos_if_print(u_char *, const struct pcap_pkthdr *, 24839297Sfenner const u_char *); 24956896Sfennerextern void chdlc_if_print(u_char *, const struct pcap_pkthdr *, 25056896Sfenner const u_char *); 25175118Sfennerextern void sll_if_print(u_char *, const struct pcap_pkthdr *, const u_char *); 25217680Spstextern void snmp_print(const u_char *, u_int); 25317680Spstextern void sunrpcrequest_print(const u_char *, u_int, const u_char *); 25475118Sfennerextern void tcp_print(const u_char *, u_int, const u_char *, int); 25517680Spstextern void tftp_print(const u_char *, u_int); 25675118Sfennerextern void timed_print(const u_char *, u_int); 25775118Sfennerextern void udp_print(const u_char *, u_int, const u_char *, int); 25817680Spstextern void wb_print(const void *, u_int); 25956896Sfennerextern int ah_print(register const u_char *, register const u_char *); 26056896Sfennerextern int esp_print(register const u_char *, register const u_char *, int *); 26156896Sfennerextern void isakmp_print(const u_char *, u_int, const u_char *); 26256896Sfennerextern int ipcomp_print(register const u_char *, register const u_char *, int *); 26356896Sfennerextern void rx_print(register const u_char *, int, int, int, u_char *); 26475118Sfennerextern void netbeui_print(u_short, const u_char *, const u_char *); 26556896Sfennerextern void ipx_netbios_print(const u_char *, const u_char *); 26656896Sfennerextern void nbt_tcp_print(const u_char *, int); 26756896Sfennerextern void nbt_udp137_print(const u_char *data, int); 26856896Sfennerextern void nbt_udp138_print(const u_char *data, int); 26956896Sfennerextern char *smb_errstr(int, int); 27056896Sfennerextern void print_data(const unsigned char *, int); 27156896Sfennerextern void l2tp_print(const u_char *, u_int); 27256896Sfennerextern void lcp_print(const u_char *, u_int); 27375118Sfennerextern void vrrp_print(const u_char *bp, u_int len, int ttl); 27475118Sfennerextern void cdp_print(const u_char *p, u_int length, u_int caplen, 27575118Sfenner const u_char *esrc, const u_char *edst); 27675118Sfennerextern void stp_print(const u_char *p, u_int length); 27775118Sfennerextern void radius_print(const u_char *, u_int); 27856896Sfenner 27956896Sfenner#ifdef INET6 28056896Sfennerextern void ip6_print(const u_char *, int); 28156896Sfennerextern void ip6_opt_print(const u_char *, int); 28256896Sfennerextern int hbhopt_print(const u_char *); 28356896Sfennerextern int dstopt_print(const u_char *); 28456896Sfennerextern int frag6_print(const u_char *, const u_char *); 28556896Sfennerextern void icmp6_print(const u_char *, const u_char *); 28656896Sfennerextern void ripng_print(const u_char *, int); 28756896Sfennerextern int rt6_print(const u_char *, const u_char *); 28856896Sfennerextern void ospf6_print(const u_char *, u_int); 28975118Sfennerextern void dhcp6_print(const u_char *, u_int, u_int16_t, u_int16_t); 29056896Sfenner#endif /*INET6*/ 29156896Sfennerextern u_short in_cksum(const u_short *addr, register int len, u_short csum); 292