X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/ba8a8cd5a385e86a857b90d2d087dd6f2cd5b083..febd0bc5aa33b3de9b5864e8c5565fe7b63f519f:/netdissect.h diff --git a/netdissect.h b/netdissect.h index 87f5e3ec..26d6d47b 100644 --- a/netdissect.h +++ b/netdissect.h @@ -82,19 +82,13 @@ extern int32_t thiszone; /* seconds offset from gmt to local time */ extern const char istr[]; #if !defined(HAVE_SNPRINTF) -int snprintf (char *str, size_t sz, const char *format, ...) -#ifdef __ATTRIBUTE___FORMAT_OK - __attribute__((format (printf, 3, 4))) -#endif /* __ATTRIBUTE___FORMAT_OK */ - ; +int snprintf (char *str, size_t sz, FORMAT_STRING(const char *format), ...) + PRINTFLIKE(3, 4); #endif /* !defined(HAVE_SNPRINTF) */ #if !defined(HAVE_VSNPRINTF) -int vsnprintf (char *str, size_t sz, const char *format, va_list ap) -#ifdef __ATTRIBUTE___FORMAT_OK - __attribute__((format (printf, 3, 0))) -#endif /* __ATTRIBUTE___FORMAT_OK */ - ; +int vsnprintf (char *str, size_t sz, FORMAT_STRING(const char *format), + va_list ap) PRINTFLIKE(3, 0); #endif /* !defined(HAVE_VSNPRINTF) */ #ifndef HAVE_STRLCAT @@ -125,6 +119,20 @@ extern const char *tok2str(const struct tok *, const char *, u_int); extern char *bittok2str(const struct tok *, const char *, u_int); extern char *bittok2str_nosep(const struct tok *, const char *, u_int); +/* Initialize netdissect. */ +extern int nd_init(char *, size_t); +/* Clean up netdissect. */ +extern void nd_cleanup(void); + +/* Do we have libsmi support? */ +extern int nd_have_smi_support(void); +/* Load an SMI module. */ +extern int nd_load_smi_module(const char *, char *, size_t); +/* Flag indicating whether an SMI module has been loaded. */ +extern int nd_smi_module_loaded; +/* Version number of the SMI library, or NULL if we don't have libsmi support. */ +extern const char *nd_smi_version_string(void); + typedef struct netdissect_options netdissect_options; #define IF_PRINTER_ARGS (netdissect_options *, const struct pcap_pkthdr *, const u_char *) @@ -139,14 +147,13 @@ struct netdissect_options { int ndo_nflag; /* leave addresses as numbers */ int ndo_Nflag; /* remove domains from printed host names */ int ndo_qflag; /* quick (shorter) output */ - int ndo_mflag; /* use the libsmi to translate OIDs */ int ndo_Sflag; /* print raw TCP sequence numbers */ int ndo_tflag; /* print packet arrival time */ int ndo_uflag; /* Print undecoded NFS handles */ int ndo_vflag; /* verbosity level */ int ndo_xflag; /* print packet in hex */ - int ndo_Xflag; /* print packet in hex/ascii */ - int ndo_Aflag; /* print packet only in ascii observing TAB, + int ndo_Xflag; /* print packet in hex/ASCII */ + int ndo_Aflag; /* print packet only in ASCII observing TAB, * LF, CR and SPACE as graphical chars */ int ndo_Hflag; /* dissect 802.11s draft mesh standard */ @@ -179,27 +186,15 @@ struct netdissect_options { /* pointer to function to do regular output */ int (*ndo_printf)(netdissect_options *, const char *fmt, ...) -#ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS - __attribute__ ((format (printf, 2, 3))) -#endif - ; + PRINTFLIKE_FUNCPTR(2, 3); /* pointer to function to output errors */ - void (*ndo_error)(netdissect_options *, - const char *fmt, ...) -#ifdef __ATTRIBUTE___NORETURN_OK_FOR_FUNCTION_POINTERS - __attribute__ ((noreturn)) -#endif /* __ATTRIBUTE___NORETURN_OK_FOR_FUNCTION_POINTERS */ -#ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS - __attribute__ ((format (printf, 2, 3))) -#endif /* __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS */ - ; + void NORETURN_FUNCPTR (*ndo_error)(netdissect_options *, + const char *fmt, ...) + PRINTFLIKE_FUNCPTR(2, 3); /* pointer to function to output warnings */ void (*ndo_warning)(netdissect_options *, const char *fmt, ...) -#ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS - __attribute__ ((format (printf, 2, 3))) -#endif - ; + PRINTFLIKE_FUNCPTR(2, 3); }; #define PT_VAT 1 /* Visual Audio Tool */ @@ -218,6 +213,7 @@ struct netdissect_options { #define PT_PGM 14 /* [UDP-encapsulated] Pragmatic General Multicast */ #define PT_PGM_ZMTP1 15 /* ZMTP/1.0 inside PGM (native or UDP-encapsulated) */ #define PT_LMP 16 /* Link Management Protocol */ +#define PT_RESP 17 /* RESP */ #ifndef min #define min(a,b) ((a)>(b)?(b):(a)) @@ -250,15 +246,14 @@ struct netdissect_options { * savefile header to control the size of the buffer they allocate, * so a size of, say, 2^31-1 might not work well. * - * XXX - does it need to be bigger still? + * XXX - does it need to be bigger still? Note that, for versions of + * libpcap with pcap_create()/pcap_activate(), if no -s flag is specified + * or -s 0 is specified, we won't set the snapshot length at all, and will + * let libpcap choose a snapshot length; newer versions may choose a bigger + * value than 262144 for D-Bus, for example. */ #define MAXIMUM_SNAPLEN 262144 -/* - * The default snapshot length is the maximum. - */ -#define DEFAULT_SNAPLEN MAXIMUM_SNAPLEN - #define ESRC(ep) ((ep)->ether_shost) #define EDST(ep) ((ep)->ether_dhost) @@ -314,10 +309,12 @@ struct netdissect_options { #define ND_DEFAULTPRINT(ap, length) (*ndo->ndo_default_print)(ndo, ap, length) extern void ts_print(netdissect_options *, const struct timeval *); -extern void relts_print(netdissect_options *, int); +extern void signed_relts_print(netdissect_options *, int32_t); +extern void unsigned_relts_print(netdissect_options *, uint32_t); extern void fn_print_char(netdissect_options *, u_char); extern int fn_print(netdissect_options *, const u_char *, const u_char *); +extern u_int fn_printztn(netdissect_options *ndo, const u_char *, u_int, const u_char *); extern int fn_printn(netdissect_options *, const u_char *, u_int, const u_char *); extern int fn_printzp(netdissect_options *, const u_char *, u_int, const u_char *); @@ -435,6 +432,21 @@ extern u_int token_if_print IF_PRINTER_ARGS; extern u_int usb_linux_48_byte_print IF_PRINTER_ARGS; extern u_int usb_linux_64_byte_print IF_PRINTER_ARGS; +/* + * Structure passed to some printers to allow them to print + * link-layer address information if ndo_eflag isn't set + * (because they are for protocols that don't have their + * own addresses, so that we'd want to report link-layer + * address information). + * + * This contains a pointer to an address and a pointer to a routine + * to which we pass that pointer in order to get a string. + */ +struct lladdr_info { + const char *(*addr_string)(netdissect_options *, const u_char *); + const u_char *addr; +}; + /* The printer routines. */ extern void aarp_print(netdissect_options *, const u_char *, u_int); @@ -452,7 +464,7 @@ extern void bfd_print(netdissect_options *, const u_char *, u_int, u_int); extern void bgp_print(netdissect_options *, const u_char *, int); extern char *bgp_vpn_rd_print (netdissect_options *, const u_char *); extern void bootp_print(netdissect_options *, const u_char *, u_int); -extern void calm_fast_print(netdissect_options *, const u_char *, const u_char *, u_int); +extern void calm_fast_print(netdissect_options *, const u_char *, u_int, const struct lladdr_info *); extern void carp_print(netdissect_options *, const u_char *, u_int, int); extern void cdp_print(netdissect_options *, const u_char *, u_int, u_int); extern void cfm_print(netdissect_options *, const u_char *, u_int); @@ -470,20 +482,21 @@ extern void egp_print(netdissect_options *, const u_char *, u_int); extern void eigrp_print(netdissect_options *, const u_char *, u_int); extern int esp_print(netdissect_options *, const u_char *, const int, const u_char *, int *, int *); extern u_int ether_print(netdissect_options *, const u_char *, u_int, u_int, void (*)(netdissect_options *, const u_char *), const u_char *); -extern int ethertype_print(netdissect_options *, u_short, const u_char *, u_int, u_int); +extern int ethertype_print(netdissect_options *, u_short, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *); extern u_int fddi_print(netdissect_options *, const u_char *, u_int, u_int); extern void forces_print(netdissect_options *, const u_char *, u_int); extern u_int fr_print(netdissect_options *, register const u_char *, u_int); extern int frag6_print(netdissect_options *, const u_char *, const u_char *); extern void ftp_print(netdissect_options *, const u_char *, u_int); extern void geneve_print(netdissect_options *, const u_char *, u_int); -extern void geonet_print(netdissect_options *, const u_char *, const u_char *, u_int); +extern void geonet_print(netdissect_options *, const u_char *, u_int, const struct lladdr_info *); extern void gre_print(netdissect_options *, const u_char *, u_int); extern int hbhopt_print(netdissect_options *, const u_char *); extern void hex_and_ascii_print(netdissect_options *, const char *, const u_char *, u_int); extern void hex_and_ascii_print_with_offset(netdissect_options *, const char *, const u_char *, u_int, u_int); extern void hex_print(netdissect_options *, const char *ident, const u_char *cp, u_int); extern void hex_print_with_offset(netdissect_options *, const char *ident, const u_char *cp, u_int, u_int); +extern void hncp_print(netdissect_options *, const u_char *, u_int); extern void hsrp_print(netdissect_options *, const u_char *, u_int); extern void http_print(netdissect_options *, const u_char *, u_int); extern void icmp6_print(netdissect_options *, const u_char *, u_int, const u_char *, int); @@ -494,7 +507,7 @@ extern void ip6_print(netdissect_options *, const u_char *, u_int); extern void ipN_print(netdissect_options *, const u_char *, u_int); extern void ip_print(netdissect_options *, const u_char *, u_int); extern void ip_print_inner(netdissect_options *, const u_char *, u_int, u_int nh, const u_char *); -extern int ipcomp_print(netdissect_options *, register const u_char *, int *); +extern void ipcomp_print(netdissect_options *, register const u_char *); extern void ipx_netbios_print(netdissect_options *, const u_char *, u_int); extern void ipx_print(netdissect_options *, const u_char *, u_int); extern void isakmp_print(netdissect_options *, const u_char *, u_int, const u_char *); @@ -506,7 +519,7 @@ extern void lane_print(netdissect_options *, const u_char *, u_int, u_int); extern void ldp_print(netdissect_options *, const u_char *, u_int); extern void lisp_print(netdissect_options *, const u_char *, u_int); extern u_int llap_print(netdissect_options *, const u_char *, u_int); -extern int llc_print(netdissect_options *, const u_char *, u_int, u_int, const u_char *, const u_char *); +extern int llc_print(netdissect_options *, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *); extern void lldp_print(netdissect_options *, const u_char *, u_int); extern void lmp_print(netdissect_options *, const u_char *, u_int); extern void loopback_print(netdissect_options *, const u_char *, const u_int); @@ -515,7 +528,7 @@ extern void lwapp_control_print(netdissect_options *, const u_char *, u_int, int extern void lwapp_data_print(netdissect_options *, const u_char *, u_int); extern void lwres_print(netdissect_options *, const u_char *, u_int); extern void m3ua_print(netdissect_options *, const u_char *, const u_int); -extern void medsa_print(netdissect_options *, const u_char *, u_int, u_int); +extern void medsa_print(netdissect_options *, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *); extern u_int mfr_print(netdissect_options *, register const u_char *, u_int); extern void mobile_print(netdissect_options *, const u_char *, u_int); extern int mobility_print(netdissect_options *, const u_char *, const u_char *); @@ -533,8 +546,9 @@ extern void nfsreply_print_noaddr(netdissect_options *, const u_char *, u_int, c extern void nfsreq_print_noaddr(netdissect_options *, const u_char *, u_int, const u_char *); extern const u_char * ns_nprint (netdissect_options *, register const u_char *, register const u_char *); extern void ns_print(netdissect_options *, const u_char *, u_int, int); +extern void nsh_print(netdissect_options *ndo, const u_char *bp, u_int len); extern void ntp_print(netdissect_options *, const u_char *, u_int); -extern int oam_print(netdissect_options *, const u_char *, u_int, u_int); +extern void oam_print(netdissect_options *, const u_char *, u_int, u_int); extern void olsr_print(netdissect_options *, const u_char *, u_int, int); extern void openflow_print(netdissect_options *, const u_char *, const u_int); extern void ospf6_print(netdissect_options *, const u_char *, u_int); @@ -552,10 +566,11 @@ extern int print_unknown_data(netdissect_options *, const u_char *, const char * extern char *q922_string(netdissect_options *, const u_char *, u_int); extern void q933_print(netdissect_options *, const u_char *, u_int); extern void radius_print(netdissect_options *, const u_char *, u_int); +extern void resp_print(netdissect_options *, const u_char *, u_int); extern void rip_print(netdissect_options *, const u_char *, u_int); extern void ripng_print(netdissect_options *, const u_char *, unsigned int); extern void rpki_rtr_print(netdissect_options *, const u_char *, u_int); -extern void rrcp_print(netdissect_options *, const u_char *, u_int); +extern void rrcp_print(netdissect_options *, const u_char *, u_int, const struct lladdr_info *, const struct lladdr_info *); extern void rsvp_print(netdissect_options *, const u_char *, u_int); extern int rt6_print(netdissect_options *, const u_char *, const u_char *); extern void rtsp_print(netdissect_options *, const u_char *, u_int); @@ -567,7 +582,7 @@ extern void slow_print(netdissect_options *, const u_char *, u_int); extern void smb_print_data(netdissect_options *, const unsigned char *, int); extern void smb_tcp_print(netdissect_options *, const u_char *, int); extern void smtp_print(netdissect_options *, const u_char *, u_int); -extern int snap_print(netdissect_options *, const u_char *, u_int, u_int, const u_char *, const u_char *, u_int); +extern int snap_print(netdissect_options *, const u_char *, u_int, u_int, const struct lladdr_info *, const struct lladdr_info *, u_int); extern void snmp_print(netdissect_options *, const u_char *, u_int); extern void stp_print(netdissect_options *, const u_char *, u_int); extern void sunrpcrequest_print(netdissect_options *, const u_char *, u_int, const u_char *); @@ -584,13 +599,12 @@ extern int vjc_print(netdissect_options *, register const char *, u_short); extern void vqp_print(netdissect_options *, register const u_char *, register u_int); extern void vrrp_print(netdissect_options *, const u_char *, u_int, const u_char *, int); extern void vtp_print(netdissect_options *, const u_char *, u_int); -extern void vxlan_print(netdissect_options *, const u_char *, u_int); extern void vxlan_gpe_print(netdissect_options *ndo, const u_char *bp, u_int len); +extern void vxlan_print(netdissect_options *, const u_char *, u_int); extern void wb_print(netdissect_options *, const void *, u_int); extern void zephyr_print(netdissect_options *, const u_char *, int); extern void zmtp1_print(netdissect_options *, const u_char *, u_int); extern void zmtp1_print_datagram(netdissect_options *, const u_char *, const u_int); -extern void nsh_print(netdissect_options *ndo, const u_char *bp, u_int len); /* checksum routines */ extern void init_checksum(void);