aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGilbert Ramirez <gram@alumni.rice.edu>1999-07-07 22:52:57 +0000
committerGilbert Ramirez <gram@alumni.rice.edu>1999-07-07 22:52:57 +0000
commit07f42b5b31f9523deeb147226521f77a2c8dd797 (patch)
treec720d2a42f11c9d14ac1a161eb785b438c2c4b14
parentfba49cfe85d4b23ebbffa97fae126a379e913ecd (diff)
Created a new protocol tree implementation and a new display filter
mechanism that is built into ethereal. Wiretap is now used to read all file formats. Libpcap is used only for capturing. svn path=/trunk/; revision=342
-rw-r--r--Makefile.am17
-rw-r--r--Makefile.in107
-rw-r--r--README13
-rw-r--r--acconfig.h2
-rw-r--r--aclocal.m44
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure271
-rw-r--r--configure.in36
-rw-r--r--dfilter-grammar.y640
-rw-r--r--dfilter.c806
-rw-r--r--dfilter.h105
-rw-r--r--doc/proto_tree235
-rw-r--r--ethereal.c74
-rw-r--r--ethertype.c31
-rw-r--r--file.c189
-rw-r--r--file.h63
-rw-r--r--follow.c3
-rw-r--r--gtkpacket.c89
-rw-r--r--gtkpacket.h4
-rw-r--r--menu.c9
-rw-r--r--packet-aarp.c25
-rw-r--r--packet-arp.c29
-rw-r--r--packet-atalk.c25
-rw-r--r--packet-bootp.c131
-rw-r--r--packet-cdp.c29
-rw-r--r--packet-data.c15
-rw-r--r--packet-dns.c106
-rw-r--r--packet-eth.c111
-rw-r--r--packet-fddi.c96
-rw-r--r--packet-ftp.c17
-rw-r--r--packet-giop.c81
-rw-r--r--packet-gre.c59
-rw-r--r--packet-http.c11
-rw-r--r--packet-icmpv6.c114
-rw-r--r--packet-ip.c291
-rw-r--r--packet-ipsec.c26
-rw-r--r--packet-ipv6.c30
-rw-r--r--packet-ipx.c88
-rw-r--r--packet-isakmp.c240
-rw-r--r--packet-llc.c194
-rw-r--r--packet-lpd.c19
-rw-r--r--packet-nbipx.c21
-rw-r--r--packet-nbns.c238
-rw-r--r--packet-ncp.c56
-rw-r--r--packet-nntp.c9
-rw-r--r--packet-null.c47
-rw-r--r--packet-osi.c385
-rw-r--r--packet-ospf.c163
-rw-r--r--packet-pop.c15
-rw-r--r--packet-ppp.c42
-rw-r--r--packet-pppoe.c43
-rw-r--r--packet-pptp.c199
-rw-r--r--packet-raw.c9
-rw-r--r--packet-rip.c41
-rw-r--r--packet-rsvp.c324
-rw-r--r--packet-rtsp.c11
-rw-r--r--packet-sdp.c13
-rw-r--r--packet-smb.c430
-rw-r--r--packet-snmp.c64
-rw-r--r--packet-tcp.c66
-rw-r--r--packet-telnet.c57
-rw-r--r--packet-tftp.c39
-rw-r--r--packet-tr.c250
-rw-r--r--packet-trmac.c93
-rw-r--r--packet-udp.c15
-rw-r--r--packet-vines.c47
-rw-r--r--packet.c165
-rw-r--r--packet.h44
-rw-r--r--print.c4
-rw-r--r--proto.c620
-rw-r--r--proto.h165
-rw-r--r--resolv.c25
-rw-r--r--resolv.h5
-rw-r--r--summary.c34
-rw-r--r--summary.h4
-rw-r--r--wiretap/ChangeLog4
-rw-r--r--wiretap/Makefile.am71
-rw-r--r--wiretap/Makefile.in166
-rw-r--r--wiretap/aclocal.m44
-rw-r--r--wiretap/bpf-engine.c318
-rw-r--r--wiretap/bpf-engine.h120
-rw-r--r--wiretap/bpf.c373
-rw-r--r--wiretap/bpf.h22
-rwxr-xr-xwiretap/configure146
-rw-r--r--wiretap/configure.in21
-rw-r--r--wiretap/ct-compile.c487
-rw-r--r--wiretap/ct-compile.h104
-rw-r--r--wiretap/ct-grammar.y149
-rw-r--r--wiretap/ct-main.c24
-rw-r--r--wiretap/ct-scanner.l74
-rw-r--r--wiretap/file.c6
-rw-r--r--wiretap/filter-eth38
-rw-r--r--wiretap/filter-tr57
-rw-r--r--wiretap/glib-new.c105
-rw-r--r--wiretap/glib-new.h30
-rw-r--r--wiretap/rt-compile.c82
-rw-r--r--wiretap/rt-compile.h29
-rw-r--r--wiretap/rt-global.h23
-rw-r--r--wiretap/rt-grammar-skel.y134
-rw-r--r--wiretap/rt-scanner-skel.l160
-rw-r--r--wiretap/wtap.c32
-rw-r--r--wiretap/wtap.h14
102 files changed, 5499 insertions, 5475 deletions
diff --git a/Makefile.am b/Makefile.am
index e9ae9d17a4..e1a979325b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,6 +4,8 @@ man_MANS = ethereal.1
sysconf_DATA = manuf
+YFLAGS=-d
+
ethereal_SOURCES = \
alignment.h \
capture.c \
@@ -11,6 +13,9 @@ ethereal_SOURCES = \
column.c \
column.h \
config.h \
+ dfilter-grammar.y \
+ dfilter.c \
+ dfilter.h \
display.c \
display.h \
ethereal.c \
@@ -87,15 +92,17 @@ ethereal_SOURCES = \
prefs.h \
print.c \
print.h \
+ proto.c \
+ proto.h \
ps.c \
ps.h \
resolv.c \
resolv.h \
smb.h \
- summary.h \
- summary.c \
timestamp.h \
util.c \
+ summary.c \
+ summary.h \
util.h
EXTRA_ethereal_SOURCES = \
@@ -106,8 +113,8 @@ EXTRA_ethereal_SOURCES = \
strerror.c \
strerror.h
-ethereal_DEPENDENCIES = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ @LIBWIRETAP_A@
-ethereal_LDADD = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ @LIBWIRETAP_A@ @SNMP_A@
+ethereal_DEPENDENCIES = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ wiretap/libwiretap.a
+ethereal_LDADD = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ wiretap/libwiretap.a @SNMP_A@
ps.c: print.ps rdps
./rdps print.ps ps.c
@@ -134,7 +141,7 @@ EXTRA_DIST = \
ylwrap \
VERSION
-SUBDIRS = @SUBDIRS@
+SUBDIRS = wiretap @SUBDIRS@
ethereal.1: doc/ethereal.pod VERSION
(cd doc ; \
diff --git a/Makefile.in b/Makefile.in
index b1e2f49be9..51fdb8b92d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4a from Makefile.am
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
@@ -46,9 +46,10 @@ AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_FLAG =
transform = @program_transform_name@
NORMAL_INSTALL = :
@@ -64,7 +65,6 @@ DATAFILE_DIR = @DATAFILE_DIR@
GTK_CFLAGS = @GTK_CFLAGS@
GTK_CONFIG = @GTK_CONFIG@
GTK_LIBS = @GTK_LIBS@
-LIBWIRETAP_A = @LIBWIRETAP_A@
MAKEINFO = @MAKEINFO@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
@@ -75,6 +75,7 @@ SNPRINTF_O = @SNPRINTF_O@
STRERROR_C = @STRERROR_C@
STRERROR_O = @STRERROR_O@
VERSION = @VERSION@
+YACC = @YACC@
bin_PROGRAMS = ethereal
@@ -82,14 +83,16 @@ man_MANS = ethereal.1
sysconf_DATA = manuf
-ethereal_SOURCES = alignment.h capture.c capture.h column.c column.h config.h display.c display.h ethereal.c ethereal.h ethertype.c etypes.h file.c file.h filter.c filter.h follow.c follow.h gtkpacket.c gtkpacket.h menu.c menu.h packet-aarp.c packet-arp.c packet-atalk.c packet-bootp.c packet-cdp.c packet-data.c packet-dns.c packet-dns.h packet-eth.c packet-fddi.c packet-ftp.c packet-giop.c packet-gre.c packet-http.c packet-icmpv6.c packet-ip.c packet-ip.h packet-ipsec.c packet-ipv6.c packet-ipv6.h packet-ipx.c packet-ipx.h packet-isakmp.c packet-llc.c packet-lpd.c packet-nbipx.c packet-nbns.c packet-ncp.c packet-ncp.h packet-nntp.c packet-null.c packet-osi.c packet-ospf.c packet-ospf.h packet-pop.c packet-ppp.c packet-pppoe.c packet-pptp.c packet-raw.c packet-rip.c packet-rip.h packet-rsvp.c packet-rsvp.h packet-rtsp.c packet-sdp.c packet-smb.c packet-tcp.c packet-telnet.c packet-tftp.c packet-tr.c packet-trmac.c packet-udp.c packet-vines.c packet-vines.h packet.c packet.h prefs.c prefs.h print.c print.h ps.c ps.h resolv.c resolv.h smb.h summary.h summary.c timestamp.h util.c util.h
+YFLAGS = -d
+
+ethereal_SOURCES = alignment.h capture.c capture.h column.c column.h config.h dfilter-grammar.y dfilter.c dfilter.h display.c display.h ethereal.c ethereal.h ethertype.c etypes.h file.c file.h filter.c filter.h follow.c follow.h gtkpacket.c gtkpacket.h menu.c menu.h packet-aarp.c packet-arp.c packet-atalk.c packet-bootp.c packet-cdp.c packet-data.c packet-dns.c packet-dns.h packet-eth.c packet-fddi.c packet-ftp.c packet-giop.c packet-gre.c packet-http.c packet-icmpv6.c packet-ip.c packet-ip.h packet-ipsec.c packet-ipv6.c packet-ipv6.h packet-ipx.c packet-ipx.h packet-isakmp.c packet-llc.c packet-lpd.c packet-nbipx.c packet-nbns.c packet-ncp.c packet-ncp.h packet-nntp.c packet-null.c packet-osi.c packet-ospf.c packet-ospf.h packet-pop.c packet-ppp.c packet-pppoe.c packet-pptp.c packet-raw.c packet-rip.c packet-rip.h packet-rsvp.c packet-rsvp.h packet-rtsp.c packet-sdp.c packet-smb.c packet-tcp.c packet-telnet.c packet-tftp.c packet-tr.c packet-trmac.c packet-udp.c packet-vines.c packet-vines.h packet.c packet.h prefs.c prefs.h print.c print.h proto.c proto.h ps.c ps.h resolv.c resolv.h smb.h timestamp.h util.c summary.c summary.h util.h
EXTRA_ethereal_SOURCES = packet-snmp.c snprintf.c snprintf.h snprintf-imp.h strerror.c strerror.h
-ethereal_DEPENDENCIES = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ @LIBWIRETAP_A@
-ethereal_LDADD = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ @LIBWIRETAP_A@ @SNMP_A@
+ethereal_DEPENDENCIES = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ wiretap/libwiretap.a
+ethereal_LDADD = @SNMP_O@ @SNPRINTF_O@ @STRERROR_O@ wiretap/libwiretap.a @SNMP_A@
DISTCLEANFILES = rdps ps.c *~
@@ -97,7 +100,7 @@ DISTCLEANFILES = rdps ps.c *~
EXTRA_DIST = doc/Makefile doc/ethereal.pod ethereal.1 ethereal.spec image/icon-excl.xpm image/icon-ethereal.xpm manuf print.ps README.tru64 rdps.c ylwrap VERSION
-SUBDIRS = @SUBDIRS@
+SUBDIRS = wiretap @SUBDIRS@
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
@@ -109,18 +112,19 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I.
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-ethereal_OBJECTS = capture.o column.o display.o ethereal.o ethertype.o \
-file.o filter.o follow.o gtkpacket.o menu.o packet-aarp.o packet-arp.o \
-packet-atalk.o packet-bootp.o packet-cdp.o packet-data.o packet-dns.o \
-packet-eth.o packet-fddi.o packet-ftp.o packet-giop.o packet-gre.o \
-packet-http.o packet-icmpv6.o packet-ip.o packet-ipsec.o packet-ipv6.o \
-packet-ipx.o packet-isakmp.o packet-llc.o packet-lpd.o packet-nbipx.o \
-packet-nbns.o packet-ncp.o packet-nntp.o packet-null.o packet-osi.o \
-packet-ospf.o packet-pop.o packet-ppp.o packet-pppoe.o packet-pptp.o \
-packet-raw.o packet-rip.o packet-rsvp.o packet-rtsp.o packet-sdp.o \
-packet-smb.o packet-tcp.o packet-telnet.o packet-tftp.o packet-tr.o \
-packet-trmac.o packet-udp.o packet-vines.o packet.o prefs.o print.o \
-ps.o resolv.o summary.o util.o
+ethereal_OBJECTS = capture.o column.o dfilter-grammar.o dfilter.o \
+display.o ethereal.o ethertype.o file.o filter.o follow.o gtkpacket.o \
+menu.o packet-aarp.o packet-arp.o packet-atalk.o packet-bootp.o \
+packet-cdp.o packet-data.o packet-dns.o packet-eth.o packet-fddi.o \
+packet-ftp.o packet-giop.o packet-gre.o packet-http.o packet-icmpv6.o \
+packet-ip.o packet-ipsec.o packet-ipv6.o packet-ipx.o packet-isakmp.o \
+packet-llc.o packet-lpd.o packet-nbipx.o packet-nbns.o packet-ncp.o \
+packet-nntp.o packet-null.o packet-osi.o packet-ospf.o packet-pop.o \
+packet-ppp.o packet-pppoe.o packet-pptp.o packet-raw.o packet-rip.o \
+packet-rsvp.o packet-rtsp.o packet-sdp.o packet-smb.o packet-tcp.o \
+packet-telnet.o packet-tftp.o packet-tr.o packet-trmac.o packet-udp.o \
+packet-vines.o packet.o prefs.o print.o proto.o ps.o resolv.o util.o \
+summary.o
ethereal_LDFLAGS =
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -134,40 +138,41 @@ DATA = $(sysconf_DATA)
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS acconfig.h acinclude.m4 aclocal.m4 \
-config.guess config.h.in config.sub configure configure.in install-sh \
-missing mkinstalldirs ylwrap
+config.guess config.h.in config.sub configure configure.in \
+dfilter-grammar.c install-sh missing mkinstalldirs ylwrap
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
+TAR = gtar
GZIP_ENV = --best
-DEP_FILES = .deps/capture.P .deps/column.P .deps/display.P \
-.deps/ethereal.P .deps/ethertype.P .deps/file.P .deps/filter.P \
-.deps/follow.P .deps/gtkpacket.P .deps/menu.P .deps/packet-aarp.P \
-.deps/packet-arp.P .deps/packet-atalk.P .deps/packet-bootp.P \
-.deps/packet-cdp.P .deps/packet-data.P .deps/packet-dns.P \
-.deps/packet-eth.P .deps/packet-fddi.P .deps/packet-ftp.P \
-.deps/packet-giop.P .deps/packet-gre.P .deps/packet-http.P \
-.deps/packet-icmpv6.P .deps/packet-ip.P .deps/packet-ipsec.P \
-.deps/packet-ipv6.P .deps/packet-ipx.P .deps/packet-isakmp.P \
-.deps/packet-llc.P .deps/packet-lpd.P .deps/packet-nbipx.P \
-.deps/packet-nbns.P .deps/packet-ncp.P .deps/packet-nntp.P \
-.deps/packet-null.P .deps/packet-osi.P .deps/packet-ospf.P \
-.deps/packet-pop.P .deps/packet-ppp.P .deps/packet-pppoe.P \
-.deps/packet-pptp.P .deps/packet-raw.P .deps/packet-rip.P \
-.deps/packet-rsvp.P .deps/packet-rtsp.P .deps/packet-sdp.P \
-.deps/packet-smb.P .deps/packet-snmp.P .deps/packet-tcp.P \
-.deps/packet-telnet.P .deps/packet-tftp.P .deps/packet-tr.P \
-.deps/packet-trmac.P .deps/packet-udp.P .deps/packet-vines.P \
-.deps/packet.P .deps/prefs.P .deps/print.P .deps/ps.P .deps/resolv.P \
-.deps/snprintf.P .deps/strerror.P .deps/summary.P .deps/util.P
+DEP_FILES = .deps/capture.P .deps/column.P .deps/dfilter-grammar.P \
+.deps/dfilter.P .deps/display.P .deps/ethereal.P .deps/ethertype.P \
+.deps/file.P .deps/filter.P .deps/follow.P .deps/gtkpacket.P \
+.deps/menu.P .deps/packet-aarp.P .deps/packet-arp.P \
+.deps/packet-atalk.P .deps/packet-bootp.P .deps/packet-cdp.P \
+.deps/packet-data.P .deps/packet-dns.P .deps/packet-eth.P \
+.deps/packet-fddi.P .deps/packet-ftp.P .deps/packet-giop.P \
+.deps/packet-gre.P .deps/packet-http.P .deps/packet-icmpv6.P \
+.deps/packet-ip.P .deps/packet-ipsec.P .deps/packet-ipv6.P \
+.deps/packet-ipx.P .deps/packet-isakmp.P .deps/packet-llc.P \
+.deps/packet-lpd.P .deps/packet-nbipx.P .deps/packet-nbns.P \
+.deps/packet-ncp.P .deps/packet-nntp.P .deps/packet-null.P \
+.deps/packet-osi.P .deps/packet-ospf.P .deps/packet-pop.P \
+.deps/packet-ppp.P .deps/packet-pppoe.P .deps/packet-pptp.P \
+.deps/packet-raw.P .deps/packet-rip.P .deps/packet-rsvp.P \
+.deps/packet-rtsp.P .deps/packet-sdp.P .deps/packet-smb.P \
+.deps/packet-snmp.P .deps/packet-tcp.P .deps/packet-telnet.P \
+.deps/packet-tftp.P .deps/packet-tr.P .deps/packet-trmac.P \
+.deps/packet-udp.P .deps/packet-vines.P .deps/packet.P .deps/prefs.P \
+.deps/print.P .deps/proto.P .deps/ps.P .deps/resolv.P .deps/snprintf.P \
+.deps/strerror.P .deps/summary.P .deps/util.P
SOURCES = $(ethereal_SOURCES) $(EXTRA_ethereal_SOURCES)
OBJECTS = $(ethereal_OBJECTS)
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .o .s
+.SUFFIXES: .S .c .o .s .y
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
@@ -225,8 +230,8 @@ install-binPROGRAMS: $(bin_PROGRAMS)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
if test -f $$p; then \
- echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
- $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
else :; fi; \
done
@@ -255,6 +260,13 @@ maintainer-clean-compile:
ethereal: $(ethereal_OBJECTS) $(ethereal_DEPENDENCIES)
@rm -f ethereal
$(LINK) $(ethereal_LDFLAGS) $(ethereal_OBJECTS) $(ethereal_LDADD) $(LIBS)
+.y.c:
+ $(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c
+ if test -f y.tab.h; then \
+ if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
+ else :; fi
+dfilter-grammar.h: dfilter-grammar.c
+
install-man1:
$(mkinstalldirs) $(DESTDIR)$(man1dir)
@@ -450,7 +462,7 @@ distdir: $(DISTFILES)
@for file in $(DISTFILES); do \
d=$(srcdir); \
if test -d $$d/$$file; then \
- cp -pr $$/$$file $(distdir)/$$file; \
+ cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
@@ -524,7 +536,7 @@ uninstall: uninstall-recursive
all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) config.h
all-redirect: all-recursive-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
installdirs: installdirs-recursive
installdirs-am:
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 \
@@ -541,6 +553,7 @@ distclean-generic:
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
+ -test -z "dfilter-grammarhdfilter-grammarc" || rm -f dfilter-grammarh dfilter-grammarc
mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \
mostlyclean-compile mostlyclean-tags mostlyclean-depend \
mostlyclean-generic
diff --git a/README b/README
index cdce480c4a..8f9296d523 100644
--- a/README
+++ b/README
@@ -31,19 +31,6 @@ Ethereal is known to compile and run on the following systems:
It should run on other systems without too much trouble.
-NOTE: the Makefile appears to depend on GNU "make"; it doesn't appear to
-work with the "make" that comes with Solaris 7 nor the BSD "make".
-
-In addition, wiretap (see below) requires "flex" - it cannot be built
-with vanilla "lex" - and either "bison" or the Berkeley "yacc"; whilst
-the "yacc" that comes with Solaris 7 has a "-p" flag to replace "yy" in
-various variable names with a specified prefix, to allow multiple
-yacc-built parsers in the same program, it doesn't replace "yy" in the
-"y.tab.h" file, so the lexical analyzer has no clue that "yylval" has
-been renamed to "wtap_lval". (What *were* they thinking?)
-
-You must therefore install GNU "make", "flex", and either "bison" or
-Berkeley "yacc" on systems that lack them.
Full installation instructions can be found in the INSTALL file.
diff --git a/acconfig.h b/acconfig.h
index a202da07a4..f08f72e3ec 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -10,5 +10,3 @@
#undef NEED_STRERROR_H
-/* Define this to use the wiretap library */
-#undef WITH_WIRETAP
diff --git a/aclocal.m4 b/aclocal.m4
index 5fd4db5b31..fba6b3a302 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4
+dnl aclocal.m4 generated automatically by aclocal 1.4a
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
@@ -183,6 +183,8 @@ dnl AM_INIT_AUTOMAKE(package,version, [no-define])
AC_DEFUN(AM_INIT_AUTOMAKE,
[AC_REQUIRE([AC_PROG_INSTALL])
+dnl We require 2.13 because we rely on SHELL being computed by configure.
+AC_PREREQ([2.13])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
VERSION=[$2]
diff --git a/config.h.in b/config.h.in
index 2d45d36077..2e51ea4df0 100644
--- a/config.h.in
+++ b/config.h.in
@@ -15,9 +15,6 @@
#undef NEED_STRERROR_H
-/* Define this to use the wiretap library */
-#undef WITH_WIRETAP
-
/* Define if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
diff --git a/configure b/configure
index 404517069b..9cffa43b1d 100755
--- a/configure
+++ b/configure
@@ -18,9 +18,6 @@ ac_help="$ac_help
ac_help="$ac_help
--disable-gtktest Do not try to compile and run a test GTK program"
ac_help="$ac_help
- --with-wiretap Include wiretap library.
- --without-wiretap Don't include wiretap library (default)"
-ac_help="$ac_help
--enable-ipv6 use ipv6 name resolution, if available. [default=yes]"
ac_help="$ac_help
--enable-snmp use SNMP library, if available. [default=yes]"
@@ -566,7 +563,7 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:570: checking for a BSD compatible install" >&5
+echo "configure:567: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -619,7 +616,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:623: checking whether build environment is sane" >&5
+echo "configure:620: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftestfile
@@ -676,7 +673,7 @@ test "$program_suffix" != NONE &&
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:680: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:677: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -703,6 +700,7 @@ else
fi
+
PACKAGE=ethereal
VERSION=0.6.3
@@ -722,7 +720,7 @@ EOF
missing_dir=`cd $ac_aux_dir && pwd`
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:726: checking for working aclocal" >&5
+echo "configure:724: checking for working aclocal" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -735,7 +733,7 @@ else
fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:739: checking for working autoconf" >&5
+echo "configure:737: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -748,7 +746,7 @@ else
fi
echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:752: checking for working automake" >&5
+echo "configure:750: checking for working automake" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -761,7 +759,7 @@ else
fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:765: checking for working autoheader" >&5
+echo "configure:763: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -774,7 +772,7 @@ else
fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:778: checking for working makeinfo" >&5
+echo "configure:776: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -795,7 +793,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:799: checking host system type" >&5
+echo "configure:797: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -819,7 +817,7 @@ echo "$ac_t""$host" 1>&6
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:823: checking for $ac_word" >&5
+echo "configure:821: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -849,7 +847,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:853: checking for $ac_word" >&5
+echo "configure:851: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -900,7 +898,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:904: checking for $ac_word" >&5
+echo "configure:902: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -932,7 +930,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:936: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:934: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -943,12 +941,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 947 "configure"
+#line 945 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -974,12 +972,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:978: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:976: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:983: checking whether we are using GNU C" >&5
+echo "configure:981: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -988,7 +986,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:990: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1007,7 +1005,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1011: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1009: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1041,7 +1039,7 @@ fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1045: checking for $ac_word" >&5
+echo "configure:1043: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1068,10 +1066,45 @@ else
echo "$ac_t""no" 1>&6
fi
+for ac_prog in 'bison -y' byacc
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1075: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_YACC="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+YACC="$ac_cv_prog_YACC"
+if test -n "$YACC"; then
+ echo "$ac_t""$YACC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
# If we're running gcc, add '-Wall' to CFLAGS.
echo $ac_n "checking to see if we can add '-Wall' to CFLAGS""... $ac_c" 1>&6
-echo "configure:1075: checking to see if we can add '-Wall' to CFLAGS" >&5
+echo "configure:1108: checking to see if we can add '-Wall' to CFLAGS" >&5
if test x$GCC != x ; then
CFLAGS="-Wall $CFLAGS"
echo "$ac_t""yes" 1>&6
@@ -1079,6 +1112,8 @@ else
echo "$ac_t""no" 1>&6
fi
+CFLAGS="$CFLAGS -Iwiretap"
+
# Create DATAFILE_DIR #define for config.h
DATAFILE_DIR=$sysconfdir
DATAFILE_DIR=`(
@@ -1097,7 +1132,7 @@ EOF
case "$host_os" in
solaris*)
echo $ac_n "checking for LD_LIBRARY_PATH""... $ac_c" 1>&6
-echo "configure:1101: checking for LD_LIBRARY_PATH" >&5
+echo "configure:1136: checking for LD_LIBRARY_PATH" >&5
if test x$LD_LIBRARY_PATH != x ; then
LIBS="$LIBS -R$LD_LIBRARY_PATH"
echo "$ac_t""yes -- added LD_LIBRARY_PATH to run-time linker path" 1>&6
@@ -1158,7 +1193,7 @@ fi
# Extract the first word of "gtk-config", so it can be a program name with args.
set dummy gtk-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1162: checking for $ac_word" >&5
+echo "configure:1197: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1191,9 +1226,9 @@ else
echo "$ac_t""no" 1>&6
fi
- min_gtk_version=1.0.0
+ min_gtk_version=1.2.0
echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6
-echo "configure:1197: checking for GTK - version >= $min_gtk_version" >&5
+echo "configure:1232: checking for GTK - version >= $min_gtk_version" >&5
no_gtk=""
if test "$GTK_CONFIG" = "no" ; then
no_gtk=yes
@@ -1216,7 +1251,7 @@ echo "configure:1197: checking for GTK - version >= $min_gtk_version" >&5
echo $ac_n "cross compiling; assumed OK... $ac_c"
else
cat > conftest.$ac_ext <<EOF
-#line 1220 "configure"
+#line 1255 "configure"
#include "confdefs.h"
#include <gtk/gtk.h>
@@ -1294,7 +1329,7 @@ main ()
}
EOF
-if { (eval echo configure:1298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -1328,7 +1363,7 @@ fi
CFLAGS="$CFLAGS $GTK_CFLAGS"
LIBS="$LIBS $GTK_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1332 "configure"
+#line 1367 "configure"
#include "confdefs.h"
#include <gtk/gtk.h>
@@ -1338,7 +1373,7 @@ int main() {
return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version));
; return 0; }
EOF
-if { (eval echo configure:1342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GTK or finding the wrong"
@@ -1379,7 +1414,7 @@ rm -f conftest*
# Evidently, some systems have pcap.h, etc. in */include/pcap
echo $ac_n "checking for extraneous pcap header directories""... $ac_c" 1>&6
-echo "configure:1383: checking for extraneous pcap header directories" >&5
+echo "configure:1418: checking for extraneous pcap header directories" >&5
found_pcap_dir=""
for pcap_dir in /usr/include/pcap /usr/local/include/pcap
do
@@ -1399,7 +1434,7 @@ fi
# Pcap checks
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1403: checking how to run the C preprocessor" >&5
+echo "configure:1438: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1414,13 +1449,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1418 "configure"
+#line 1453 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1424: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1459: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1431,13 +1466,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1435 "configure"
+#line 1470 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1441: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1476: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1448,13 +1483,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1452 "configure"
+#line 1487 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1458: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1493: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1480,17 +1515,17 @@ echo "$ac_t""$CPP" 1>&6
ac_safe=`echo "net/bpf.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for net/bpf.h""... $ac_c" 1>&6
-echo "configure:1484: checking for net/bpf.h" >&5
+echo "configure:1519: checking for net/bpf.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1489 "configure"
+#line 1524 "configure"
#include "confdefs.h"
#include <net/bpf.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1494: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1529: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1514,17 +1549,17 @@ fi
ac_safe=`echo "pcap.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for pcap.h""... $ac_c" 1>&6
-echo "configure:1518: checking for pcap.h" >&5
+echo "configure:1553: checking for pcap.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1523 "configure"
+#line 1558 "configure"
#include "confdefs.h"
#include <pcap.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1528: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1563: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1547,7 +1582,7 @@ else
fi
echo $ac_n "checking for pcap_open_offline in -lpcap""... $ac_c" 1>&6
-echo "configure:1551: checking for pcap_open_offline in -lpcap" >&5
+echo "configure:1586: checking for pcap_open_offline in -lpcap" >&5
ac_lib_var=`echo pcap'_'pcap_open_offline | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1555,7 +1590,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lpcap $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1559 "configure"
+#line 1594 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -1566,7 +1601,7 @@ int main() {
pcap_open_offline()
; return 0; }
EOF
-if { (eval echo configure:1570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -1595,38 +1630,6 @@ else
fi
-# Wiretap check
-echo $ac_n "checking whether to include wiretap library""... $ac_c" 1>&6
-echo "configure:1601: checking whether to include wiretap library" >&5
-# Check whether --with-wiretap or --without-wiretap was given.
-if test "${with_wiretap+set}" = set; then
- withval="$with_wiretap"
- case "$withval" in
- yes)
- echo "$ac_t""yes" 1>&6
- cat >> confdefs.h <<\EOF
-#define WITH_WIRETAP 1
-EOF
-
- WIRETAP_DIR="wiretap"
- if test x$WIRETAP_DIR != x ; then
- CFLAGS="$CFLAGS -Iwiretap"
- LIBWIRETAP_A="wiretap/libwiretap.a"
- SUBDIRS="$SUBDIRS wiretap"
- fi
- ;;
- *)
- echo "$ac_t""no" 1>&6
- LIBWIRETAP_A=""
- WIRETAP_DIR=""
- ;;
- esac
-else
- echo "$ac_t""no" 1>&6
-
-fi
-
-
# Check whether --enable-ipv6 or --disable-ipv6 was given.
@@ -1639,7 +1642,7 @@ fi
echo $ac_n "checking whether to enable ipv6 name resolution if available""... $ac_c" 1>&6
-echo "configure:1643: checking whether to enable ipv6 name resolution if available" >&5
+echo "configure:1646: checking whether to enable ipv6 name resolution if available" >&5
if test "x$enable_ipv6" = "xno" ; then
echo "$ac_t""no" 1>&6
else
@@ -1649,12 +1652,12 @@ else
v6lib=none
echo $ac_n "checking ipv6 stack type""... $ac_c" 1>&6
-echo "configure:1653: checking ipv6 stack type" >&5
+echo "configure:1656: checking ipv6 stack type" >&5
for i in v6d toshiba kame inria zeta linux; do
case $i in
v6d)
cat > conftest.$ac_ext <<EOF
-#line 1658 "configure"
+#line 1661 "configure"
#include "confdefs.h"
dnl
#include </usr/local/v6/include/sys/types.h>
@@ -1674,7 +1677,7 @@ rm -f conftest*
;;
toshiba)
cat > conftest.$ac_ext <<EOF
-#line 1678 "configure"
+#line 1681 "configure"
#include "confdefs.h"
dnl
#include <sys/param.h>
@@ -1694,7 +1697,7 @@ rm -f conftest*
;;
kame)
cat > conftest.$ac_ext <<EOF
-#line 1698 "configure"
+#line 1701 "configure"
#include "confdefs.h"
dnl
#include <netinet/in.h>
@@ -1714,7 +1717,7 @@ rm -f conftest*
;;
inria)
cat > conftest.$ac_ext <<EOF
-#line 1718 "configure"
+#line 1721 "configure"
#include "confdefs.h"
dnl
#include <netinet/in.h>
@@ -1732,7 +1735,7 @@ rm -f conftest*
;;
zeta)
cat > conftest.$ac_ext <<EOF
-#line 1736 "configure"
+#line 1739 "configure"
#include "confdefs.h"
dnl
#include <sys/param.h>
@@ -1781,12 +1784,12 @@ fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1785: checking for ANSI C header files" >&5
+echo "configure:1788: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1790 "configure"
+#line 1793 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -1794,7 +1797,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1801: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1811,7 +1814,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1815 "configure"
+#line 1818 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -1829,7 +1832,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1833 "configure"
+#line 1836 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -1850,7 +1853,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 1854 "configure"
+#line 1857 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1861,7 +1864,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:1865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -1888,17 +1891,17 @@ for ac_hdr in fcntl.h sys/ioctl.h sys/time.h unistd.h stdarg.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1892: checking for $ac_hdr" >&5
+echo "configure:1895: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1897 "configure"
+#line 1900 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1905: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1929,17 +1932,17 @@ for ac_hdr in sys/sockio.h sys/types.h netinet/in.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1933: checking for $ac_hdr" >&5
+echo "configure:1936: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1938 "configure"
+#line 1941 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1943: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1979,7 +1982,7 @@ fi
SNMP_A=''
SNMP_O=''
echo $ac_n "checking whether to use SNMP library if available""... $ac_c" 1>&6
-echo "configure:1983: checking whether to use SNMP library if available" >&5
+echo "configure:1986: checking whether to use SNMP library if available" >&5
if test "x$enable_snmp" = "xno" ; then
echo "$ac_t""no" 1>&6
else
@@ -1988,17 +1991,17 @@ else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1992: checking for $ac_hdr" >&5
+echo "configure:1995: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1997 "configure"
+#line 2000 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2002: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2025,7 +2028,7 @@ fi
done
echo $ac_n "checking for asn_parse_header in -lsnmp""... $ac_c" 1>&6
-echo "configure:2029: checking for asn_parse_header in -lsnmp" >&5
+echo "configure:2032: checking for asn_parse_header in -lsnmp" >&5
ac_lib_var=`echo snmp'_'asn_parse_header | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2033,7 +2036,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsnmp $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2037 "configure"
+#line 2040 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2044,7 +2047,7 @@ int main() {
asn_parse_header()
; return 0; }
EOF
-if { (eval echo configure:2048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2077,12 +2080,12 @@ fi
# for get_interface_list().
echo $ac_n "checking for sa_len in struct sockaddr""... $ac_c" 1>&6
-echo "configure:2081: checking for sa_len in struct sockaddr" >&5
+echo "configure:2084: checking for sa_len in struct sockaddr" >&5
if eval "test \"`echo '$''{'ac_cv_ethereal_struct_sa_len'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2086 "configure"
+#line 2089 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/socket.h>
@@ -2090,7 +2093,7 @@ int main() {
struct sockaddr s; s.sa_len;
; return 0; }
EOF
-if { (eval echo configure:2094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2097: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_ethereal_struct_sa_len=yes
else
@@ -2113,14 +2116,14 @@ fi
# We must know our byte order
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:2117: checking whether byte ordering is bigendian" >&5
+echo "configure:2120: checking whether byte ordering is bigendian" >&5
if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_bigendian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
cat > conftest.$ac_ext <<EOF
-#line 2124 "configure"
+#line 2127 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -2131,11 +2134,11 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:2135: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
# It does; now see whether it defined to BIG_ENDIAN or not.
cat > conftest.$ac_ext <<EOF
-#line 2139 "configure"
+#line 2142 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -2146,7 +2149,7 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:2150: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_bigendian=yes
else
@@ -2166,7 +2169,7 @@ if test "$cross_compiling" = yes; then
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 2170 "configure"
+#line 2173 "configure"
#include "confdefs.h"
main () {
/* Are we little or big endian? From Harbison&Steele. */
@@ -2179,7 +2182,7 @@ main () {
exit (u.c[sizeof (long) - 1] == 1);
}
EOF
-if { (eval echo configure:2183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_bigendian=no
else
@@ -2205,13 +2208,13 @@ fi
if test $ac_cv_prog_gcc = yes; then
echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:2209: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:2212: checking whether ${CC-cc} needs -traditional" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_pattern="Autoconf.*'x'"
cat > conftest.$ac_ext <<EOF
-#line 2215 "configure"
+#line 2218 "configure"
#include "confdefs.h"
#include <sgtty.h>
Autoconf TIOCGETP
@@ -2229,7 +2232,7 @@ rm -f conftest*
if test $ac_cv_prog_gcc_traditional = no; then
cat > conftest.$ac_ext <<EOF
-#line 2233 "configure"
+#line 2236 "configure"
#include "confdefs.h"
#include <termio.h>
Autoconf TCGETA
@@ -2251,12 +2254,12 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
fi
echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:2255: checking for socket" >&5
+echo "configure:2258: checking for socket" >&5
if eval "test \"`echo '$''{'ac_cv_func_socket'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2260 "configure"
+#line 2263 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char socket(); below. */
@@ -2279,7 +2282,7 @@ socket();
; return 0; }
EOF
-if { (eval echo configure:2283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_socket=yes"
else
@@ -2305,12 +2308,12 @@ fi
SNPRINTF_C=""
SNPRINTF_O=""
echo $ac_n "checking for snprintf""... $ac_c" 1>&6
-echo "configure:2309: checking for snprintf" >&5
+echo "configure:2312: checking for snprintf" >&5
if eval "test \"`echo '$''{'ac_cv_func_snprintf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2314 "configure"
+#line 2317 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char snprintf(); below. */
@@ -2333,7 +2336,7 @@ snprintf();
; return 0; }
EOF
-if { (eval echo configure:2337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_snprintf=yes"
else
@@ -2364,12 +2367,12 @@ fi
echo $ac_n "checking for strerror""... $ac_c" 1>&6
-echo "configure:2368: checking for strerror" >&5
+echo "configure:2371: checking for strerror" >&5
if eval "test \"`echo '$''{'ac_cv_func_strerror'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2373 "configure"
+#line 2376 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char strerror(); below. */
@@ -2392,7 +2395,7 @@ strerror();
; return 0; }
EOF
-if { (eval echo configure:2396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_strerror=yes"
else
@@ -2425,10 +2428,8 @@ fi
-if test x$WIRETAP_DIR != x ; then
- subdirs="$WIRETAP_DIR"
+subdirs="wiretap"
-fi
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@@ -2580,12 +2581,12 @@ s%@host_vendor@%$host_vendor%g
s%@host_os@%$host_os%g
s%@CC@%$CC%g
s%@RANLIB@%$RANLIB%g
+s%@YACC@%$YACC%g
s%@DATAFILE_DIR@%$DATAFILE_DIR%g
s%@GTK_CONFIG@%$GTK_CONFIG%g
s%@GTK_CFLAGS@%$GTK_CFLAGS%g
s%@GTK_LIBS@%$GTK_LIBS%g
s%@CPP@%$CPP%g
-s%@LIBWIRETAP_A@%$LIBWIRETAP_A%g
s%@SUBDIRS@%$SUBDIRS%g
s%@SNMP_A@%$SNMP_A%g
s%@SNMP_O@%$SNMP_O%g
@@ -2840,7 +2841,7 @@ if test "$no_recursion" != yes; then
esac
done
- for ac_config_dir in $WIRETAP_DIR; do
+ for ac_config_dir in wiretap; do
# Do not complain, so a configure script can configure whichever
# parts of a large source tree are present.
diff --git a/configure.in b/configure.in
index 7a583025cf..916bf848e0 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-# $Id: configure.in,v 1.27 1999/06/24 16:25:58 gram Exp $
+# $Id: configure.in,v 1.28 1999/07/07 22:51:36 gram Exp $
dnl Process this file with autoconf to produce a configure script.
AC_INIT(etypes.h)
@@ -10,6 +10,7 @@ AC_CANONICAL_HOST
dnl Checks for programs.
AC_PROG_CC
AC_PROG_RANLIB
+AC_PROG_YACC
# If we're running gcc, add '-Wall' to CFLAGS.
AC_MSG_CHECKING(to see if we can add '-Wall' to CFLAGS)
@@ -20,6 +21,8 @@ else
AC_MSG_RESULT(no)
fi
+CFLAGS="$CFLAGS -Iwiretap"
+
# Create DATAFILE_DIR #define for config.h
DATAFILE_DIR=$sysconfdir
DATAFILE_DIR=`(
@@ -45,7 +48,7 @@ case "$host_os" in
esac
# GTK checks
-AM_PATH_GTK(1.0.0, CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS",
+AM_PATH_GTK(1.2.0, CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS",
AC_MSG_ERROR(GTK+ distribution not found.))
# Evidently, some systems have pcap.h, etc. in */include/pcap
@@ -72,31 +75,6 @@ AC_CHECK_HEADER(net/bpf.h,, AC_MSG_ERROR(Header file net/bpf.h not found.))
AC_CHECK_HEADER(pcap.h,, AC_MSG_ERROR(Header file pcap.h not found.))
AC_CHECK_LIB(pcap, pcap_open_offline,, AC_MSG_ERROR(Library libpcap not found.))
-# Wiretap check
-AC_MSG_CHECKING(whether to include wiretap library)
-AC_ARG_WITH(wiretap,
-[ --with-wiretap Include wiretap library.
- --without-wiretap Don't include wiretap library (default)],
- [ case "$withval" in
- yes)
- AC_MSG_RESULT(yes)
- AC_DEFINE(WITH_WIRETAP)
- WIRETAP_DIR="wiretap"
- if test x$WIRETAP_DIR != x ; then
- CFLAGS="$CFLAGS -Iwiretap"
- LIBWIRETAP_A="wiretap/libwiretap.a"
- SUBDIRS="$SUBDIRS wiretap"
- fi
- ;;
- *)
- AC_MSG_RESULT(no)
- LIBWIRETAP_A=""
- WIRETAP_DIR=""
- ;;
- esac ],
- AC_MSG_RESULT(no)
-)
-AC_SUBST(LIBWIRETAP_A)
AC_SUBST(SUBDIRS)
dnl ipv6 check
@@ -178,7 +156,5 @@ AC_SUBST(STRERROR_C)
AC_SUBST(STRERROR_O)
AM_CONFIG_HEADER(config.h)
-if test x$WIRETAP_DIR != x ; then
- AC_CONFIG_SUBDIRS($WIRETAP_DIR)
-fi
+AC_CONFIG_SUBDIRS(wiretap)
AC_OUTPUT(Makefile)
diff --git a/dfilter-grammar.y b/dfilter-grammar.y
new file mode 100644
index 0000000000..83490243f8
--- /dev/null
+++ b/dfilter-grammar.y
@@ -0,0 +1,640 @@
+%{
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+
+#ifndef __GLIB_H__
+#include <glib.h>
+#endif
+
+#include <string.h> /* during testing */
+
+#ifndef _STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifndef __PROTO_H__
+#include "proto.h"
+#endif
+
+#ifndef __PACKET_H__
+#include "packet.h"
+#endif
+
+#ifndef __DFILTER_H__
+#include "dfilter.h"
+#endif
+
+#ifndef __RESOLV_H__
+#include "resolv.h"
+#endif
+
+void dfilter_yacc_init(void);
+static void dfilter_print_parse_tree(GNode *gnode);
+static GNode* dfilter_mknode_join(GNode *n1, enum node_type ntype, int operand, GNode *n2);
+static GNode* dfilter_mknode_unary(int operand, GNode *n2);
+static GNode* dfilter_mknode_numeric_variable(gint id);
+static GNode* dfilter_mknode_numeric_value(guint32 val);
+static GNode* dfilter_mknode_ether_value(char *a, char *b, char *c, char *d, char *e, char *f);
+static GNode* dfilter_mknode_ether_variable(gint id);
+static GNode* dfilter_mknode_ipv4_value(char *host);
+static GNode* dfilter_mknode_ipv4_variable(gint id);
+static GNode* dfilter_mknode_existence(gint id);
+static GNode* dfilter_mknode_bytes_value(GByteArray *barray);
+static GNode* dfilter_mknode_bytes_variable(gint id, gint offset, gint length);
+static GNode* dfilter_mknode_boolean_value(gint truth_value);
+static GNode* dfilter_mknode_boolean_variable(gint id);
+
+static guint32 string_to_value(char *s);
+
+/* space for dfilter_nodes */
+GMemChunk *gmc_dfilter_nodes = NULL;
+
+/* this is how we pass display filter tree (dfcode) back to calling routine */
+GNode *dfilter_tree = NULL;
+
+/* list of byte arrays we allocate during parse. We can traverse this list
+ * faster than the tree when we go back and free the byte arrays */
+GSList *dfilter_list_byte_arrays = NULL;
+
+%}
+
+%union {
+ gint operand; /* logical, relation, alternation */
+ gint variable;
+ GNode* node;
+ gchar* id;
+ GByteArray* bytes;
+}
+
+%type <node> statement expression relation
+%type <node> numeric_value numeric_variable
+%type <node> ether_value ether_variable
+%type <node> ipv4_value ipv4_variable
+%type <node> protocol_name
+%type <node> bytes_value bytes_variable
+%type <node> boolean_value boolean_variable
+
+%type <operand> numeric_relation
+%type <operand> ether_relation
+%type <operand> bytes_relation
+%type <operand> boolean_relation
+
+%type <bytes> byte_range
+%type <variable> any_variable_type
+%type <operand> exists_operand
+
+%token <variable> T_FT_UINT8
+%token <variable> T_FT_UINT16
+%token <variable> T_FT_UINT32
+%token <variable> T_FT_ETHER
+%token <variable> T_FT_IPv4
+%token <variable> T_FT_NONE
+%token <variable> T_FT_BYTES
+%token <variable> T_FT_BOOLEAN
+%token <variable> T_FT_STRING
+
+%token <id> T_VAL_ID
+
+%token <operand> TOK_AND TOK_OR TOK_NOT TOK_XOR
+%token <operand> TOK_EQ TOK_NE TOK_GT TOK_GE TOK_LT TOK_LE
+%token <operand> TOK_EXIST TOK_EXISTS
+%token <operand> TOK_TRUE TOK_FALSE
+
+%type <operand> type_eq
+%type <operand> type_ne
+%type <operand> type_gt
+%type <operand> type_ge
+%type <operand> type_lt
+%type <operand> type_le
+
+%left TOK_AND
+%left TOK_OR
+%left TOK_XOR
+%nonassoc TOK_NOT
+
+%%
+
+statement: expression
+ {
+ dfilter_tree = $1;
+ }
+ | /* NULL */ { dfilter_tree = NULL; }
+ ;
+
+expression: '(' expression ')' { $$ = $2; }
+ | expression TOK_AND expression { $$ = dfilter_mknode_join($1, logical, $2, $3); }
+ | expression TOK_OR expression { $$ = dfilter_mknode_join($1, logical, $2, $3); }
+ | TOK_NOT expression { $$ = dfilter_mknode_unary(TOK_NOT, $2); }
+ | relation { $$ = $1; }
+ | protocol_name { $$ = $1; }
+ ;
+
+relation: numeric_variable numeric_relation numeric_value
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | numeric_value numeric_relation numeric_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | numeric_variable numeric_relation numeric_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+
+ | ether_variable ether_relation ether_value
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | ether_value ether_relation ether_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | ether_variable ether_relation ether_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+
+
+ | ipv4_variable numeric_relation ipv4_value
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | ipv4_value numeric_relation ipv4_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | ipv4_variable numeric_relation ipv4_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+
+ | bytes_variable bytes_relation bytes_value
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | bytes_value bytes_relation bytes_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | bytes_variable bytes_relation bytes_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+
+ | boolean_variable boolean_relation boolean_value
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | boolean_value boolean_relation boolean_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+ | boolean_variable boolean_relation boolean_variable
+ {
+ $$ = dfilter_mknode_join($1, relation, $2, $3);
+ }
+
+ | exists_operand any_variable_type { $$ = dfilter_mknode_existence($2); }
+
+ ;
+
+
+numeric_value: T_VAL_ID { $$ = dfilter_mknode_numeric_value(string_to_value($1)); }
+ ;
+
+ether_value: T_VAL_ID ':' T_VAL_ID ':' T_VAL_ID ':' T_VAL_ID ':' T_VAL_ID ':' T_VAL_ID
+ {
+ $$ = dfilter_mknode_ether_value($1, $3, $5, $7, $9, $11);
+ g_free($1);
+ g_free($3);
+ g_free($5);
+ g_free($7);
+ g_free($9);
+ g_free($11);
+ }
+ ;
+
+ipv4_value: T_VAL_ID { $$ = dfilter_mknode_ipv4_value($1); }
+ ;
+
+bytes_value: numeric_variable
+ | byte_range { $$ = dfilter_mknode_bytes_value($1); }
+ ;
+
+byte_range: T_VAL_ID ':' T_VAL_ID
+ {
+ GByteArray *barray = g_byte_array_new();
+ guint8 val;
+ char *endptr;
+
+ dfilter_list_byte_arrays = g_slist_append(dfilter_list_byte_arrays, barray);
+ val = (guint8) strtoul($1, &endptr, 16);
+ g_byte_array_append(barray, &val, 1);
+ val = (guint8) strtoul($3, &endptr, 16);
+ $$ = g_byte_array_append(barray, &val, 1);
+ }
+
+ | byte_range ':' T_VAL_ID
+ {
+ guint8 val;
+ char *endptr;
+
+ val = (guint8) strtoul($3, &endptr, 16);
+ $$ = g_byte_array_append($1, &val, 1);
+ }
+ ;
+
+boolean_value: TOK_TRUE { $$ = dfilter_mknode_boolean_value($1); }
+ | TOK_FALSE { $$ = dfilter_mknode_boolean_value($1); }
+ ;
+
+
+numeric_variable: T_FT_UINT8 { $$ = dfilter_mknode_numeric_variable($1); }
+ | T_FT_UINT16 { $$ = dfilter_mknode_numeric_variable($1); }
+ | T_FT_UINT32 { $$ = dfilter_mknode_numeric_variable($1); }
+ ;
+
+ether_variable: T_FT_ETHER { $$ = dfilter_mknode_ether_variable($1); }
+ ;
+
+ipv4_variable: T_FT_IPv4 { $$ = dfilter_mknode_ipv4_variable($1); }
+ ;
+
+protocol_name: T_FT_NONE { $$ = dfilter_mknode_existence($1); }
+ ;
+
+bytes_variable: any_variable_type '[' T_VAL_ID ':' T_VAL_ID ']'
+ {
+ $$ = dfilter_mknode_bytes_variable($1, string_to_value($3), string_to_value($5));
+ }
+ | any_variable_type '[' T_VAL_ID ']'
+ {
+ $$ = dfilter_mknode_bytes_variable($1, string_to_value($3), 0);
+ }
+ ;
+
+boolean_variable: T_FT_BOOLEAN { $$ = dfilter_mknode_boolean_variable($1); }
+ ;
+
+any_variable_type: T_FT_UINT8 { $$ = $1; }
+ | T_FT_UINT16 { $$ = $1; }
+ | T_FT_UINT32 { $$ = $1; }
+ | T_FT_ETHER { $$ = $1; }
+ | T_FT_IPv4 { $$ = $1; }
+ | T_FT_NONE { $$ = $1; }
+ | T_FT_BYTES { $$ = $1; }
+ | T_FT_BOOLEAN { $$ = $1; }
+ | T_FT_STRING { $$ = $1; }
+ ;
+
+numeric_relation: type_eq { $$ = $1; }
+ | type_ne { $$ = $1; }
+ | type_gt { $$ = $1; }
+ | type_ge { $$ = $1; }
+ | type_lt { $$ = $1; }
+ | type_le { $$ = $1; }
+ ;
+
+ether_relation: type_eq { $$ = $1; }
+ | type_ne { $$ = $1; }
+ ;
+
+bytes_relation: type_eq { $$ = $1; }
+ | type_ne { $$ = $1; }
+ | type_gt { $$ = $1; }
+ | type_lt { $$ = $1; }
+ ;
+
+boolean_relation: type_eq { $$ = $1; }
+ | type_ne { $$ = $1; }
+ ;
+
+exists_operand: TOK_EXIST { $$ = $1; }
+ | TOK_EXISTS { $$ = $1; }
+ | '?' { $$ = TOK_EXIST; }
+ ;
+
+type_eq: TOK_EQ { $$ = $1; }
+ | '=' '=' { $$ = TOK_EQ; }
+ ;
+
+type_ne: TOK_NE { $$ = $1; }
+ | '!' '=' { $$ = TOK_NE; }
+ ;
+
+type_gt: TOK_GT { $$ = $1; }
+ | '>' { $$ = TOK_GT; }
+ ;
+
+type_ge: TOK_GE { $$ = $1; }
+ | '>' '=' { $$ = TOK_GE; }
+ ;
+
+type_lt: TOK_LT { $$ = $1; }
+ | '<' { $$ = TOK_LT; }
+ ;
+
+type_le: TOK_LE { $$ = $1; }
+ | '<' '=' { $$ = TOK_LE; }
+ ;
+
+
+%%
+
+void
+dfilter_yacc_init(void)
+{
+ if (gmc_dfilter_nodes)
+ g_mem_chunk_destroy(gmc_dfilter_nodes);
+
+ gmc_dfilter_nodes = g_mem_chunk_new("gmc_dfilter_nodes",
+ sizeof(dfilter_node), 50 * sizeof(dfilter_node),
+ G_ALLOC_ONLY);
+
+ if (dfilter_list_byte_arrays) {
+ /* clear the byte arrays */
+ g_slist_free(dfilter_list_byte_arrays);
+ }
+
+}
+
+void
+dfilter_yacc_cleanup(void)
+{
+ if (gmc_dfilter_nodes)
+ g_mem_chunk_destroy(gmc_dfilter_nodes);
+}
+
+
+static GNode*
+dfilter_mknode_join(GNode *n1, enum node_type ntype, int operand, GNode *n2)
+{
+ dfilter_node *node_root;
+ GNode *gnode_root;
+
+ node_root = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node_root->ntype = ntype;
+ node_root->elem_size = 0;
+ node_root->fill_array_func = NULL;
+ node_root->check_relation_func = NULL;
+ if (ntype == relation) {
+ node_root->value.relation = operand;
+ }
+ else if (ntype == logical) {
+ node_root->value.logical = operand;
+ }
+ else {
+ g_assert_not_reached();
+ }
+
+ gnode_root = g_node_new(node_root);
+ g_node_append(gnode_root, n1);
+ g_node_append(gnode_root, n2);
+
+ return gnode_root;
+}
+
+static GNode*
+dfilter_mknode_unary(int operand, GNode *n2)
+{
+ dfilter_node *node_root;
+ GNode *gnode_root;
+
+ node_root = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node_root->ntype = logical;
+ node_root->value.logical = operand;
+ node_root->elem_size = 0;
+ node_root->fill_array_func = NULL;
+ node_root->check_relation_func = NULL;
+
+ gnode_root = g_node_new(node_root);
+ g_node_append(gnode_root, n2);
+
+ return gnode_root;
+}
+
+
+static GNode*
+dfilter_mknode_numeric_variable(gint id)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = variable;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = fill_array_numeric_variable;
+ node->check_relation_func = check_relation_numeric;
+ node->value.variable = id;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_ether_variable(gint id)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = variable;
+ node->elem_size = sizeof(guint8) * 6;
+ node->fill_array_func = fill_array_ether_variable;
+ node->check_relation_func = check_relation_ether;
+ node->value.variable = id;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_ipv4_variable(gint id)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = variable;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = fill_array_numeric_variable; /* cheating ! */
+ node->check_relation_func = check_relation_numeric; /* cheating ! */
+ node->value.variable = id;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_bytes_variable(gint id, gint offset, gint length)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = variable;
+ /*node->elem_size = length * sizeof(guint8);*/
+ node->elem_size = sizeof(GByteArray*);
+ node->fill_array_func = fill_array_bytes_variable;
+ node->check_relation_func = check_relation_bytes;
+ node->value.variable = id;
+ node->offset = offset;
+ node->length = length;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_boolean_variable(gint id)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = variable;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = fill_array_boolean_variable; /* cheating ! */
+ node->check_relation_func = check_relation_boolean; /* cheating ! */
+ node->value.variable = id;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_numeric_value(guint32 val)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = numeric;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = fill_array_numeric_value;
+ node->check_relation_func = check_relation_numeric;
+ node->value.numeric = val;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_ether_value(char *a, char *b, char *c, char *d, char *e, char *f)
+{
+ dfilter_node *node;
+ GNode *gnode;
+ char *endptr;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = ether;
+ node->elem_size = sizeof(guint8) * 6;
+ node->fill_array_func = fill_array_ether_value;
+ node->check_relation_func = check_relation_ether;
+
+ node->value.ether[0] = (guint8) strtoul(a, &endptr, 16);
+ node->value.ether[1] = (guint8) strtoul(b, &endptr, 16);
+ node->value.ether[2] = (guint8) strtoul(c, &endptr, 16);
+ node->value.ether[3] = (guint8) strtoul(d, &endptr, 16);
+ node->value.ether[4] = (guint8) strtoul(e, &endptr, 16);
+ node->value.ether[5] = (guint8) strtoul(f, &endptr, 16);
+
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_ipv4_value(char *host)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = numeric;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = fill_array_numeric_value; /* cheating ! */
+ node->check_relation_func = check_relation_numeric; /* cheating ! */
+ node->value.numeric = get_host_ipaddr(host);
+ node->value.numeric = htonl(node->value.numeric);
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_bytes_value(GByteArray *barray)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = bytes;
+ /*node->elem_size = barray->len * sizeof(guint8);*/
+ node->elem_size = sizeof(GByteArray*);
+ node->fill_array_func = fill_array_bytes_value;
+ node->check_relation_func = check_relation_bytes;
+ node->value.bytes = barray;
+ node->offset = G_MAXINT;
+ node->length = barray->len;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static GNode*
+dfilter_mknode_boolean_value(gint truth_value)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = numeric;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = fill_array_boolean_value;
+ node->check_relation_func = check_relation_boolean;
+ node->value.boolean = truth_value == TOK_TRUE ? TRUE : FALSE;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
+
+static guint32
+string_to_value(char *s)
+{
+ char *endptr;
+ guint32 val;
+
+ val = strtoul(s, &endptr, 0);
+ /* I should probably check errno here */
+
+ return (guint32)val;
+}
+
+static GNode*
+dfilter_mknode_existence(gint id)
+{
+ dfilter_node *node;
+ GNode *gnode;
+
+ node = g_mem_chunk_alloc(gmc_dfilter_nodes);
+ node->ntype = existence;
+ node->elem_size = sizeof(guint32);
+ node->fill_array_func = NULL;
+ node->check_relation_func = NULL;
+ node->value.variable = id;
+ gnode = g_node_new(node);
+
+ return gnode;
+}
diff --git a/dfilter.c b/dfilter.c
new file mode 100644
index 0000000000..91d1bc57ab
--- /dev/null
+++ b/dfilter.c
@@ -0,0 +1,806 @@
+/* dfilter.c
+ * Routines for display filters
+ *
+ * $Id: dfilter.c,v 1.1 1999/07/07 22:51:37 gram Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifndef _STDIO_H
+#include <stdio.h>
+#endif
+
+#ifndef _STRING_H
+#include <string.h>
+#endif
+
+#ifndef __G_LIB_H__
+#include <glib.h>
+#endif
+
+#ifndef __PROTO_H__
+#include "proto.h"
+#endif
+
+#ifndef __DFILTER_H__
+#include "dfilter.h"
+#endif
+#include "dfilter-grammar.h"
+
+int yyparse(void); /* yacc entry-point */
+
+#define DFILTER_LEX_SYMBOL_OFFSET 1000
+#define DFILTER_LEX_ABBREV_OFFSET 2000
+
+#define DFILTER_LEX_SCOPE_ANY 0
+
+GScanner *scanner;
+
+/* Silly global variables used to pass parameter to check_relation_bytes() */
+int bytes_offset = 0;
+int bytes_length = 0;
+
+YYSTYPE yylval;
+/* in dfilter-grammar.y */
+extern GMemChunk *gmc_dfilter_nodes;
+extern GNode *dfilter_tree;
+extern GSList *dfilter_list_byte_arrays;
+
+static gboolean dfilter_apply_node(GNode *gnode, proto_tree *ptree, guint8 *pd);
+static gboolean check_relation(gint operand, GNode *a, GNode *b, proto_tree *ptree, guint8 *pd);
+static gboolean check_logical(gint operand, GNode *a, GNode *b, proto_tree *ptree, guint8 *pd);
+static GArray* get_values_from_ptree(dfilter_node *dnode, proto_tree *ptree, guint8 *pd);
+static GArray* get_values_from_dfilter(dfilter_node *dnode, GNode *gnode);
+static gboolean check_existence_in_ptree(dfilter_node *dnode, proto_tree *ptree);
+static void clear_byte_array(gpointer data, gpointer user_data);
+
+/* this is not so pretty. I need my own g_array "function" (macro) to
+ * retreive the pointer to the data stored in an array cell. I need this
+ * for type ether.. GArray makes it easy for me to store 6 bytes inside an array
+ * cell, but hard to retrieve it.
+ */
+#define g_array_index_ptr(a,s,i) (((guint8*) (a)->data) + (i*s))
+
+static const GScannerConfig dfilter_scanner_config =
+{
+ (
+ " \t\n"
+ ) /* cset_skip_characters */,
+
+ /* I wish I didn't have to start strings with numeric
+ digits, but if I don't, strings like MAC and IPv4
+ addresses get really hard to handle */
+ (
+ G_CSET_a_2_z
+ "_0123456789"
+ G_CSET_A_2_Z
+ ) /* cset_identifier_first */,
+ (
+ G_CSET_a_2_z
+ ".-_0123456789"
+ G_CSET_A_2_Z
+ ) /* cset_identifier_nth */,
+ ( "#\n" ) /* cpair_comment_single */,
+
+ FALSE /* case_sensitive */,
+
+ FALSE /* skip_comment_multi */,
+ FALSE /* skip_comment_single */,
+ TRUE /* scan_comment_multi */,
+ TRUE /* scan_identifier */,
+ TRUE /* scan_identifier_1char */,
+ FALSE /* scan_identifier_NULL */,
+ TRUE /* scan_symbols */,
+ TRUE /* scan_binary */,
+ TRUE /* scan_octal */,
+ TRUE /* scan_float */,
+ TRUE /* scan_hex */,
+ TRUE /* scan_hex_dollar */,
+ TRUE /* scan_string_sq */,
+ FALSE /* scan_string_dq */,
+ TRUE /* numbers_2_int */,
+ FALSE /* int_2_float */,
+ FALSE /* identifier_2_string */,
+ TRUE /* char_2_token */,
+ TRUE /* symbol_2_token */,
+ FALSE /* scope_0_fallback */,
+};
+
+typedef struct symtab_record {
+ int id;
+ char *token;
+} symtab_record;
+
+symtab_record operator_symtab[] = {
+ { TOK_AND, "and" },
+ { TOK_OR, "or" },
+ { TOK_NOT, "not" },
+ { TOK_XOR, "xor" },
+ { TOK_EQ, "eq" },
+ { TOK_NE, "ne" },
+ { TOK_GT, "gt" },
+ { TOK_GE, "ge" },
+ { TOK_LT, "lt" },
+ { TOK_LE, "le" },
+ { TOK_EXIST, "exist" },
+ { TOK_EXISTS, "exists" },
+ { TOK_TRUE, "true" },
+ { TOK_FALSE, "false" },
+ { 0, NULL }
+};
+
+
+void
+dfilter_init(void)
+{
+ int num_symbols, i, symbol;
+ char *s;
+ symtab_record *symrec;
+
+ scanner = g_scanner_new(&dfilter_scanner_config);
+ scanner->input_name = "Ethereal Display Filter";
+
+ g_scanner_freeze_symbol_table(scanner);
+
+ /* Add the header field and protocol abbrevs to the symbol table */
+ num_symbols = proto_registrar_n();
+ for (i=0; i < num_symbols; i++) {
+ s = proto_registrar_get_abbrev(i);
+ if (s) {
+ symbol = DFILTER_LEX_ABBREV_OFFSET + i;
+ g_scanner_scope_add_symbol(scanner,
+ DFILTER_LEX_SCOPE_ANY, s, GINT_TO_POINTER(symbol));
+ }
+ }
+
+ /* Add the operators to the symbol table */
+ for (symrec=operator_symtab; symrec->token != NULL; symrec++) {
+ symbol = DFILTER_LEX_SYMBOL_OFFSET + symrec->id;
+ g_scanner_scope_add_symbol(scanner, DFILTER_LEX_SCOPE_ANY,
+ symrec->token, GINT_TO_POINTER(symbol));
+ }
+ g_scanner_thaw_symbol_table(scanner);
+}
+
+int
+dfilter_compile(char *dfilter_text, GNode **p_dfcode)
+{
+ int retval;
+
+ g_assert(dfilter_text != NULL);
+ g_scanner_input_text(scanner, dfilter_text, strlen(dfilter_text));
+
+ if (dfilter_tree) {
+ /* clear tree */
+ dfilter_tree = NULL;
+ }
+
+ g_mem_chunk_reset(gmc_dfilter_nodes);
+
+ if (dfilter_list_byte_arrays) {
+ g_slist_foreach(dfilter_list_byte_arrays, clear_byte_array, NULL);
+ g_slist_free(dfilter_list_byte_arrays);
+ dfilter_list_byte_arrays = NULL;
+ }
+
+ retval = yyparse();
+ *p_dfcode = dfilter_tree;
+ return retval;
+}
+
+static void
+clear_byte_array(gpointer data, gpointer user_data)
+{
+ GByteArray *barray = data;
+
+ g_byte_array_free(barray, TRUE);
+}
+
+int
+yylex(void)
+{
+ guint token;
+
+ if (g_scanner_peek_next_token(scanner) == G_TOKEN_EOF) {
+ return 0;
+ }
+ else {
+ token = g_scanner_get_next_token(scanner);
+ }
+
+ /* Set the yacc-defined tokens back to their yacc-defined values */
+ if (token >= DFILTER_LEX_SYMBOL_OFFSET && token <= DFILTER_LEX_ABBREV_OFFSET) {
+ token -= DFILTER_LEX_SYMBOL_OFFSET;
+ yylval.operand = token;
+ }
+ /* Handle our dynamically-created list of header field abbrevs */
+ else if (token >= DFILTER_LEX_ABBREV_OFFSET) {
+ yylval.variable = token;
+ switch (proto_registrar_get_ftype(token - DFILTER_LEX_ABBREV_OFFSET)) {
+ case FT_UINT8:
+ case FT_VALS_UINT8:
+ token = T_FT_UINT8;
+ break;
+ case FT_UINT16:
+ case FT_VALS_UINT16:
+ token = T_FT_UINT16;
+ break;
+ case FT_UINT32:
+ case FT_VALS_UINT32:
+ case FT_VALS_UINT24:
+ token = T_FT_UINT32;
+ break;
+ case FT_ETHER:
+ token = T_FT_ETHER;
+ break;
+ case FT_IPv4:
+ token = T_FT_IPv4;
+ break;
+ case FT_NONE:
+ token = T_FT_NONE;
+ break;
+ case FT_BYTES:
+ token = T_FT_BYTES;
+ break;
+ case FT_BOOLEAN:
+ token = T_FT_BOOLEAN;
+ break;
+ default:
+ token = 0;
+ break;
+ }
+ }
+ /* unidentified strings. that's how I make numbers come in! */
+ else if (token == G_TOKEN_IDENTIFIER || token == G_TOKEN_IDENTIFIER_NULL) {
+ token = T_VAL_ID;
+ yylval.id = g_strdup(scanner->value.v_identifier);
+ }
+ else {
+ printf("(unknown) token = %d\n", token);
+ }
+
+ return token;
+}
+
+void
+yyerror(char *s)
+{
+ fprintf(stderr, "%s\n", s);
+}
+
+void
+dfilter_yyerror(char *fmt, ...)
+{
+ dfilter_tree = NULL;
+ yyerror(fmt);
+}
+
+gboolean
+dfilter_apply(GNode *dfcode, proto_tree *ptree, guint8* pd)
+{
+ gboolean retval;
+ retval = dfilter_apply_node(dfcode, ptree, pd);
+ return retval;
+}
+
+static gboolean
+dfilter_apply_node(GNode *gnode, proto_tree *ptree, guint8* pd)
+{
+ GNode *gnode_a, *gnode_b;
+ dfilter_node *dnode = (dfilter_node*) (gnode->data);
+
+ /* We'll get 2 NULLs if we don't have children */
+ gnode_a = g_node_nth_child(gnode, 0);
+ gnode_b = g_node_nth_child(gnode, 1);
+
+ switch(dnode->ntype) {
+ case variable:
+ /* the only time we'll see a 'variable' at this point is if the display filter
+ * checks the value of a single field: "tr.sr", for example. Inside a relation,
+ * the relation code will retrieve the value of the variable
+ */
+ g_assert(!gnode_a && !gnode_b);
+ g_assert_not_reached();
+ /*return check_single_variable(gnode, ptree, pd);*/
+
+ case logical:
+ return check_logical(dnode->value.logical, gnode_a, gnode_b, ptree, pd);
+
+ case relation:
+ g_assert(gnode_a && gnode_b);
+ return check_relation(dnode->value.relation, gnode_a, gnode_b, ptree, pd);
+
+ case alternation:
+ g_assert_not_reached();
+ /* not coded yet */
+
+ case numeric:
+ case ipv4:
+ case boolean:
+ case ether:
+ case ether_vendor:
+ case string:
+ case abs_time:
+ case bytes:
+ /* the only time we'll see these at this point is if the display filter
+ * is really wacky. Just return TRUE */
+ g_assert(!gnode_a && !gnode_b);
+ return TRUE;
+
+ case existence: /* checking the existence of a protocol or hf*/
+ g_assert(!gnode_a && !gnode_b);
+ return check_existence_in_ptree(dnode, ptree);
+ }
+
+ g_assert_not_reached();
+ return FALSE;
+}
+
+static gboolean
+check_logical(gint operand, GNode *a, GNode *b, proto_tree *ptree, guint8 *pd)
+{
+ switch(operand) {
+ case TOK_AND:
+ return (dfilter_apply_node(a, ptree, pd) && dfilter_apply_node(b, ptree, pd));
+ case TOK_OR:
+ return (dfilter_apply_node(a, ptree, pd) || dfilter_apply_node(b, ptree, pd));
+ case TOK_XOR:
+ return (dfilter_apply_node(a, ptree, pd) || dfilter_apply_node(b, ptree, pd));
+ case TOK_NOT:
+ return (!dfilter_apply_node(a, ptree, pd));
+ default:
+ g_assert_not_reached();
+ }
+ g_assert_not_reached();
+ return FALSE;
+}
+
+/* this is inefficient. I get arrays for both a and b that represent all the values present. That is,
+ * if a is bootp.option, e.g., i'll get an array showing all the bootp.option values in the protocol
+ * tree. Then I'll get an array for b, which more than likely is a single int, and then I'll compare
+ * them all. It makes my coding easier in the beginning, but I should change this to make it run
+ * faster.
+ */
+static gboolean
+check_relation(gint operand, GNode *a, GNode *b, proto_tree *ptree, guint8* pd)
+{
+ dfilter_node *node_a = (dfilter_node*) (a->data);
+ dfilter_node *node_b = (dfilter_node*) (b->data);
+ GArray *vals_a, *vals_b;
+ gboolean retval;
+
+
+ bytes_length = MIN(node_a->length, node_b->length);
+ bytes_offset = MIN(node_a->offset, node_b->offset);
+ if (node_a->ntype == variable)
+ vals_a = get_values_from_ptree(node_a, ptree, pd);
+ else
+ vals_a = get_values_from_dfilter(node_a, a);
+
+ if (node_b->ntype == variable)
+ vals_b = get_values_from_ptree(node_b, ptree, pd);
+ else
+ vals_b = get_values_from_dfilter(node_b, b);
+
+ retval = node_a->check_relation_func(operand, vals_a, vals_b);
+
+ g_array_free(vals_a, FALSE);
+ g_array_free(vals_b, FALSE);
+
+ return retval;
+}
+
+#if 0
+static gboolean
+check_single_variable(GNode *gnode, proto_tree *ptree, guint8* pd)
+{
+ dfilter_node *node = (dfilter_node*) (gnode->data);
+ GArray *vals;
+ gboolean retval;
+
+
+ bytes_length = node->length;
+ bytes_offset = node->offset;
+ vals = get_values_from_ptree(node, ptree, pd);
+
+ retval = node_a->check_relation_func(operand, vals_a, vals_b);
+
+ g_array_free(vals, FALSE);
+
+ return retval;
+}
+#endif
+
+static gboolean
+check_existence_in_ptree(dfilter_node *dnode, proto_tree *ptree)
+{
+ int target_field;
+ proto_tree *subtree;
+
+ target_field = dnode->value.variable - DFILTER_LEX_ABBREV_OFFSET;
+ /*subtree = proto_find_protocol(ptree, target_field);*/
+ subtree = proto_find_field(ptree, target_field);
+
+ if (subtree)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static GArray*
+get_values_from_ptree(dfilter_node *dnode, proto_tree *ptree, guint8 *pd)
+{
+ GArray *array;
+ int parent_protocol;
+ int target_field;
+ proto_tree *subtree = NULL; /* where the parent protocol's sub-tree starts */
+ proto_tree_search_info sinfo;
+
+ g_assert(dnode->elem_size > 0);
+ array = g_array_new(FALSE, FALSE, dnode->elem_size);
+
+ target_field = dnode->value.variable - DFILTER_LEX_ABBREV_OFFSET;
+
+ /* Find the proto_tree subtree where we should start searching.*/
+ if (proto_registrar_is_protocol(target_field)) {
+ subtree = proto_find_protocol(ptree, target_field);
+ }
+ else {
+ parent_protocol = proto_registrar_get_parent(target_field);
+ if (parent_protocol >= 0) {
+ subtree = proto_find_protocol(ptree, parent_protocol);
+ }
+ }
+
+ if (subtree) {
+ sinfo.target_field = target_field;
+ sinfo.result_array = array;
+ sinfo.packet_data = pd;
+ proto_get_field_values(subtree, dnode->fill_array_func, &sinfo);
+ }
+
+ return array;
+}
+
+static GArray*
+get_values_from_dfilter(dfilter_node *dnode, GNode *gnode)
+{
+ GArray *array;
+
+ g_assert(dnode->elem_size > 0);
+ array = g_array_new(FALSE, FALSE, dnode->elem_size);
+
+ g_node_traverse(gnode, G_IN_ORDER, G_TRAVERSE_ALL, -1, dnode->fill_array_func, array);
+/* dnode->fill_array_func(gnode, array);*/
+ return array;
+}
+
+gboolean fill_array_numeric_variable(GNode *gnode, gpointer data)
+{
+ proto_tree_search_info *sinfo = (proto_tree_search_info*)data;
+ field_info *fi = (field_info*) (gnode->data);
+
+ if (fi->hfinfo->id == sinfo->target_field) {
+ g_array_append_val(sinfo->result_array, fi->value.numeric);
+ }
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_ether_variable(GNode *gnode, gpointer data)
+{
+ proto_tree_search_info *sinfo = (proto_tree_search_info*)data;
+ field_info *fi = (field_info*) (gnode->data);
+
+ if (fi->hfinfo->id == sinfo->target_field) {
+ g_array_append_val(sinfo->result_array, fi->value.ether);
+ }
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_bytes_variable(GNode *gnode, gpointer data)
+{
+ proto_tree_search_info *sinfo = (proto_tree_search_info*)data;
+ field_info *fi = (field_info*) (gnode->data);
+ GByteArray *barray;
+
+ if (fi->hfinfo->id == sinfo->target_field) {
+ barray = g_byte_array_new();
+ /*dfilter_list_byte_arrays = g_slist_append(dfilter_list_byte_arrays, barray);*/
+ g_byte_array_append(barray, sinfo->packet_data + fi->start + bytes_offset, bytes_length);
+ g_array_append_val(sinfo->result_array, barray);
+ }
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_boolean_variable(GNode *gnode, gpointer data)
+{
+ proto_tree_search_info *sinfo = (proto_tree_search_info*)data;
+ field_info *fi = (field_info*) (gnode->data);
+
+ if (fi->hfinfo->id == sinfo->target_field) {
+ g_array_append_val(sinfo->result_array, fi->value.boolean);
+ }
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_numeric_value(GNode *gnode, gpointer data)
+{
+ GArray *array = (GArray*)data;
+ dfilter_node *dnode = (dfilter_node*) (gnode->data);
+
+ g_array_append_val(array, dnode->value.numeric);
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_ether_value(GNode *gnode, gpointer data)
+{
+ GArray *array = (GArray*)data;
+ dfilter_node *dnode = (dfilter_node*) (gnode->data);
+
+ g_array_append_val(array, dnode->value.ether);
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_bytes_value(GNode *gnode, gpointer data)
+{
+ GArray *array = (GArray*)data;
+ dfilter_node *dnode = (dfilter_node*) (gnode->data);
+ GByteArray *barray = dnode->value.bytes;
+
+ g_array_append_val(array, barray);
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+gboolean fill_array_boolean_value(GNode *gnode, gpointer data)
+{
+ GArray *array = (GArray*)data;
+ dfilter_node *dnode = (dfilter_node*) (gnode->data);
+
+ g_array_append_val(array, dnode->value.boolean);
+
+ return FALSE; /* FALSE = do not end traversal of GNode tree */
+}
+
+
+gboolean check_relation_numeric(gint operand, GArray *a, GArray *b)
+{
+ int i, j, len_a, len_b;
+ guint32 val_a;
+
+ len_a = a->len;
+ len_b = b->len;
+
+
+ switch(operand) {
+ case TOK_EQ:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a == g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_NE:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a != g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_GT:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a > g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_GE:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a >= g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_LT:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a < g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_LE:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a <= g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ default:
+ g_assert_not_reached();
+ }
+
+ g_assert_not_reached();
+ return FALSE;
+}
+
+
+gboolean check_relation_ether(gint operand, GArray *a, GArray *b)
+{
+ int i, j, len_a, len_b;
+ guint8* ptr_a;
+
+ len_a = a->len;
+ len_b = b->len;
+
+
+ switch(operand) {
+ case TOK_EQ:
+ for(i = 0; i < len_a; i++) {
+ ptr_a = g_array_index_ptr(a, 6, i);
+ for (j = 0; j < len_b; j++) {
+ if (memcmp(ptr_a, g_array_index_ptr(b, 6, j), 6) == 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_NE:
+ for(i = 0; i < len_a; i++) {
+ ptr_a = g_array_index_ptr(a, 6, i);
+ for (j = 0; j < len_b; j++) {
+ if (memcmp(ptr_a, g_array_index_ptr(b, 6, j), 6) != 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ g_assert_not_reached();
+ return FALSE;
+}
+
+gboolean check_relation_bytes(gint operand, GArray *a, GArray *b)
+{
+ int i, j, len_a, len_b;
+ GByteArray *ptr_a,*ptr_b;
+
+ len_a = a->len;
+ len_b = b->len;
+
+
+ switch(operand) {
+ case TOK_EQ:
+ for(i = 0; i < len_a; i++) {
+ ptr_a = g_array_index(a, GByteArray*, i);
+ for (j = 0; j < len_b; j++) {
+ ptr_b = g_array_index(b, GByteArray*, j);
+ if (memcmp(ptr_a->data, ptr_b->data, bytes_length) == 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_NE:
+ for(i = 0; i < len_a; i++) {
+ ptr_a = g_array_index(a, GByteArray*, i);
+ for (j = 0; j < len_b; j++) {
+ ptr_b = g_array_index(b, GByteArray*, j);
+ if (memcmp(ptr_a->data, ptr_b->data, bytes_length) != 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_GT:
+ for(i = 0; i < len_a; i++) {
+ ptr_a = g_array_index(a, GByteArray*, i);
+ for (j = 0; j < len_b; j++) {
+ ptr_b = g_array_index(b, GByteArray*, j);
+ if (memcmp(ptr_a->data, ptr_b->data, bytes_length) > 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_LT:
+ for(i = 0; i < len_a; i++) {
+ ptr_a = g_array_index(a, GByteArray*, i);
+ for (j = 0; j < len_b; j++) {
+ ptr_b = g_array_index(b, GByteArray*, j);
+ if (memcmp(ptr_a->data, ptr_b->data, bytes_length) < 0)
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ g_assert_not_reached();
+ return FALSE;
+}
+
+gboolean check_relation_boolean(gint operand, GArray *a, GArray *b)
+{
+ int i, j, len_a, len_b;
+ guint32 val_a;
+
+ len_a = a->len;
+ len_b = b->len;
+
+
+ switch(operand) {
+ case TOK_EQ:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a == g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ case TOK_NE:
+ for(i = 0; i < len_a; i++) {
+ val_a = g_array_index(a, guint32, i);
+ for (j = 0; j < len_b; j++) {
+ if (val_a != g_array_index(b, guint32, j))
+ return TRUE;
+ }
+ }
+ return FALSE;
+
+ default:
+ g_assert_not_reached();
+ }
+
+ g_assert_not_reached();
+ return FALSE;
+}
diff --git a/dfilter.h b/dfilter.h
new file mode 100644
index 0000000000..6a60af55ab
--- /dev/null
+++ b/dfilter.h
@@ -0,0 +1,105 @@
+/* dfilter.h
+ * Definitions for display filters
+ *
+ * $Id: dfilter.h,v 1.1 1999/07/07 22:51:37 gram Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __DFILTER_H__
+#define __DFILTER_H__
+
+void dfilter_init(void);
+void dfilter_cleanup(void);
+int dfilter_compile(char* dfilter_text, GNode** p_dfcode);
+gboolean dfilter_apply(GNode *dfcode, proto_tree *ptree, guint8* pd);
+
+/* Here we provide interfaces to make our scanner act and look like lex */
+int yylex(void);
+void yyerror(char *s);
+void dfilter_yyerror(char *fmt, ...);
+
+/* functions that dfilter-grammar.y needs during parsing*/
+gboolean check_relation_numeric(gint operand, GArray *a, GArray *b);
+gboolean check_relation_ether(gint operand, GArray *a, GArray *b);
+gboolean check_relation_bytes(gint operand, GArray *a, GArray *b);
+gboolean check_relation_boolean(gint operand, GArray *a, GArray *b);
+
+gboolean fill_array_numeric_value(GNode *gnode, gpointer data);
+gboolean fill_array_numeric_variable(GNode *gnode, gpointer data);
+gboolean fill_array_ether_value(GNode *gnode, gpointer data);
+gboolean fill_array_ether_variable(GNode *gnode, gpointer data);
+gboolean fill_array_bytes_value(GNode *gnode, gpointer data);
+gboolean fill_array_bytes_variable(GNode *gnode, gpointer data);
+gboolean fill_array_boolean_value(GNode *gnode, gpointer data);
+gboolean fill_array_boolean_variable(GNode *gnode, gpointer data);
+
+enum node_type {
+ relation, /* eq, ne, gt, ge, lt, le */
+ logical, /* and, or, not, xor */
+ variable, /* protocol or header field id */
+ existence, /* existence of a variable (protocol or hf) */
+ alternation, /* &, | */
+ boolean, /* true, false */
+ numeric, /* uint8, uint16, or uint32 value */
+ abs_time,
+ string,
+ ether,
+ ether_vendor,
+ bytes,
+ ipv4
+};
+
+typedef gboolean(*CheckRelationFunc) (gint operand, GArray *a, GArray *b);
+
+/* This struct is the parse tree node created by this grammary and used
+ * directly in the display filter routines to filter packets.
+ */
+typedef struct dfilter_node {
+ enum node_type ntype; /* from dfilter-grammar.h */
+ int elem_size; /* computed at dfilter parse time rather than
+ when finding elements for each packet. Saves time
+ in get_values_from_ptree() */
+ CheckRelationFunc check_relation_func;
+ GNodeTraverseFunc fill_array_func;
+
+ /* copied from proto.h */
+ union {
+ gint relation; /* if type == relation (eq, ne, gt, ge, lt, le) */
+ gint logical; /* if type == logical (and, or, not, xor) */
+ gint variable; /* if type == variable (protocol or header field abbrev) */
+ gint alternation; /* if type == alternation (& or |) */
+
+ gboolean boolean;
+ guint32 numeric;
+ struct timeval abs_time; /* the whole struct, not a pointer */
+ gchar *string;
+ guint8 ether[6];
+ GByteArray *bytes;
+ } value;
+
+ /* used for byte-ranges */
+ int offset;
+ int length;
+} dfilter_node;
+
+
+
+#endif /* ! __DFILTER_H__ */
diff --git a/doc/proto_tree b/doc/proto_tree
new file mode 100644
index 0000000000..4f20865272
--- /dev/null
+++ b/doc/proto_tree
@@ -0,0 +1,235 @@
+The Ethereal Protocol Tree
+==========================
+
+Up until version 0.6.3 of ethereal, the protocol tree that is displayed
+in the middle pane of the ethereal GUI had been created by having the
+protocol dissection routines add strings to a GTK+ tree. This GUI
+container was not easily manipulated; the print routines had to reach
+inside what should be an opaque structure and pull out the data. The
+tree of strings also did not lend itself to filtering on the data
+available in the tree.
+
+Mostly to solve the display filter problem, I decided to have the
+protocol dissection routines put their data into a logical tree instead
+of a GUI tree. This tree structure would provide a generic way for
+multiple routines, like the dissection routines, the display filter
+routines, and the print routines, to retrieve data about the protocol
+fields. The GUI routines would then be modified to draw the GUI tree
+based on the data in the logical tree. By structuring this logical tree
+well, with well-defined field types, ethereal can have a very powerful
+display filter option. No longer would display filters be limited to the
+ability of the BPF compiler (libpcap or wiretap), but would have access to the
+full range of C field types available within ethereal.
+
+The dissection routines are still passed a proto_tree pointer, but a
+proto_tree is no longer the same as a GtkTree. Now a proto_tree is a
+GNode, the N-way tree structure available within GLIB. Of course the
+protocol dissectors don't care what a proto_tree really is; they just
+pass the proto_tree pointer as an argument to the routines which allow
+them to add items and new branches to the tree.
+
+In packet_list_select_cb() you'll now find this:
+
+ if (protocol_tree)
+ proto_tree_free(protocol_tree);
+ protocol_tree = proto_tree_create_root();
+ dissect_packet(cf.pd, fd, protocol_tree);
+ proto_tree_draw(protocol_tree, tree_view);
+
+When a packet is selected in the packet-list pane, a new logical
+protocol tree (proto_tree) is created. The pointer to the proto_tree (in
+this case, 'protocol tree'), is passed to the top-level protocol
+dissector, and then the GUI tree is drawn via proto_tree_draw().
+
+Programming for the proto_tree
+==============================
+The logical proto_tree now needs to know detail information about the
+protocols and fields about which information will be collected from the
+dissection routines. No longer will is the data just a bunch of strings.
+Now the data will be typed so that searching and filtering on protocol
+header fields will be possible. This means that the for every protocol
+and field (which I also call "header fields", since they are fields in
+the protocol headers) which might be attached to a tree, some
+information is needed.
+
+Every dissector routine will need to register its protocols and fields
+with the central protocol routines (in proto.c). At first I thought I
+might keep all the protocol and field information about all the
+dissectors in one file, but decentralization seemed like a better idea.
+That one file would have gotten very large; one small change would have
+required a re-compilation of the entire file. Also, by allowing
+registration of protocols and fields at run-time, loadable modules of
+protocol dissectors (perhaps even user-supplied) is feasible.
+
+For every protocol or field that a dissector wants to register, a variable of
+type int needs to be used to keep track of the protocol. The IDs are
+needed for establishing parent/child relationships between protocols and
+fields, as well as associating data with a particular field so that it
+can be stored in the logical tree and displayed in the GUI protocol
+tree.
+
+Some dissectors will need to create branches within their tree to help
+organize header fields. These branches should be registered as header
+fields. Only true protocols should be registered as protocols. This is
+so that a display filter user interface knows how to distinguish
+protocols from fields.
+
+A protocol is registered with the name of the protocol and its
+abbreviation.
+
+Here is how the frame "protocol" is registered.
+
+ int proto_frame;
+
+ proto_frame = proto_register_protocol (
+ /* name */ "Frame",
+ /* abbrev */ "frame" );
+
+
+A header field is also registered with its name and abbreviation, but
+information about the its data type is needed. Some fields will use
+value_strings to represent their values, so the value_string
+is also passed. And of course the parent protocol for the field is indicated
+during registration.
+
+ int hf_frame_arrival_time;
+
+ hf_frame_arrival_time = proto_register_field (
+ /* name */ "Arrival Time",
+ /* abbrev */ "frame.time",
+ /* ftype */ FT_ABSOLUTE_TIME,
+ /* parent */ proto_frame,
+ /* vals[] */ NULL );
+
+The name can be used in any type of display, either in the GUI tree, or
+in a display filter UI. The abbreviation is used when representing a
+display filter as a string. For example, the following strings could be a
+valid display filter, depending upon the implementation of the display
+filter parser and engine.
+
+ frame[20:1] = 0x0a
+ frame.time > 'May 21, 1999 13:15:00'
+
+The field type come from an enum. Currently, enum ftenum is comprised
+of:
+
+/* field types */
+enum ftenum {
+ FT_NONE, /* used for protocol labels (thus no field type) */
+ FT_UINT8,
+ FT_UINT16,
+ FT_UINT32,
+ FT_ABSOLUTE_TIME,
+ FT_RELATIVE_TIME,
+ FT_STRING,
+ FT_ETHER,
+ FT_BYTES,
+ FT_IPv4,
+ FT_IPv6,
+ FT_IPXSERVER,
+ FT_VALS_UINT8,
+ FT_VALS_UINT16,
+ FT_VALS_UINT24,
+ FT_VALS_UINT32,
+ NUM_FIELD_TYPES /* last item number plus one */
+};
+
+Previously, the sequence needed within a dissector to add a new branch
+to the GUI tree was this:
+
+ item = proto_tree_add_item(....);
+ new_tree = proto_tree_new();
+ proto_item_add_subtree(item, new_tree, tree_type);
+
+With the new system, the call to proto_tree_new() is no longer needed,
+as proto_item_add_subtree creates the new tree for you. The change was
+necessary so that the proto_tree routines could maintain the
+parent/child relationship within the logical tree. But it has a nice
+side-effect of cleaning up the dissector code. The new method is like
+this:
+
+ item = proto_tree_add_item(....);
+ new_tree = proto_item_add_subtree(item, tree_type);
+
+There are now 4 functions that the programmer can use to add either
+protocol or field labels to the proto_tree:
+
+ proto_item*
+ proto_tree_add_item(tree, id, start, length, value);
+
+ proto_item*
+ proto_tree_add_item_format(tree, id, start, length,
+ value, format, ...);
+
+ proto_item*
+ proto_tree_add_item_hidden(tree, id, start, length, value);
+
+ proto_item*
+ proto_tree_add_text(tree, start, length, format, ...);
+
+The first function, proto_tree_add_item, is used when you wish to do no
+special formatting. The item added to the GUI tree will contain the name
+(as passed in the proto_register_*() function) and any value. If your
+field does have a value, it is passed after the length variable (notice
+the ellipsis in the function prototype).
+
+The second function, proto_tree_add_free_format(), is used when the
+dissector routines wants complete control over how the field and value
+will be represented on the GUI tree. The caller must pass include the
+name of the protocol or field; it is not added automatically as in
+proto_tree_add_item().
+
+The third function is used to add fields and values to a tree, but not
+show them on a GUI tree. The caller may want a value to be included in a
+tree so that the packet can be filtered on this field, but the
+representation of that field in the tree is not appropriate. An example
+is the token-ring routing information field (RIF). The best way to show the
+RIF in a GUI is by a sequence of ring and bridge numbers. Rings are
+3-digit hex numbers, and bridges are single hex digits:
+
+ RIF: 001-A-013-9-C0F-B-555
+
+In the case of RIF, the programmer should use a field with no value and
+use proto_tree_add_item_format() to build the above representation. The
+programmer can then add the ring and bridge values, one-by-one, with
+proto_tree_add_item_hidden() so that the user can then filter on or
+search for a particular ring or bridge. Here's a skeleton of how the
+programmer might code this.
+
+ char *rif;
+ rif = create_rif_string(...);
+
+ proto_tree_add_item_format(tree, hf_tr_rif_label,..., "RIF: %s", rif);
+
+ for(i = 0; i < num_rings; i++) {
+ proto_tree_add_item_hidden(tree, hf_tr_rif_ring, ..., ring[i]);
+ }
+ for(i = 0; i < num_rings - 1; i++) {
+ proto_tree_add_item_hidden(tree, hf_tr_rif_ring, ..., bridge[i]);
+ }
+
+The logical tree has these items:
+
+ hf_tr_rif_label, text="RIF: 001-A-013-9-C0F-B-555", value = NONE
+ hf_tr_rif_ring, hidden, value=0x001
+ hf_tr_rif_bridge, hidden, value=0xA
+ hf_tr_rif_ring, hidden, value=0x013
+ hf_tr_rif_bridge, hidden, value=0x9
+ hf_tr_rif_ring, hidden, value=0xC0F
+ hf_tr_rif_bridge, hidden, value=0xB
+ hf_tr_rif_ring, hidden, value=0x555
+
+GUI or print code will not display the hidden fields, but a display
+filter or "packet grep" routine will still see the values. The possible
+filter is then possible:
+
+ tr.rif_ring eq 0x013
+
+The fourth function, proto_tree_add_text(), is used to add a label to the GUI tree.
+It will contain no value, so it is not searchable in the display filter process.
+This function was needed in the transition from the old-style proto_tree to this
+new-style proto_tree so that ethereal would still decode all protocols w/o being
+able to filter on all protocols and fields. Otherwise we would have had to
+cripple ethereal's functionality while we converted all the old-style proto_tree
+calls to the new-style proto_tree calls.
+
diff --git a/ethereal.c b/ethereal.c
index 50994f566d..3f6a2f4183 100644
--- a/ethereal.c
+++ b/ethereal.c
@@ -1,6 +1,6 @@
/* ethereal.c
*
- * $Id: ethereal.c,v 1.47 1999/07/07 00:34:57 guy Exp $
+ * $Id: ethereal.c,v 1.48 1999/07/07 22:51:37 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -86,6 +86,7 @@
#include "follow.h"
#include "util.h"
#include "gtkpacket.h"
+#include "dfilter.h"
static void file_save_ok_cb(GtkWidget *w, GtkFileSelection *fs);
static void file_save_as_ok_cb(GtkWidget *w, GtkFileSelection *fs);
@@ -93,6 +94,7 @@ static void file_save_as_ok_cb(GtkWidget *w, GtkFileSelection *fs);
FILE *data_out_file = NULL;
packet_info pi;
capture_file cf;
+proto_tree *protocol_tree = NULL;
GtkWidget *file_sel, *packet_list, *tree_view, *byte_view, *prog_bar,
*info_bar;
GdkFont *m_r_font, *m_b_font;
@@ -303,14 +305,7 @@ follow_stream_cb( GtkWidget *w, gpointer data ) {
void
match_selected_cb(GtkWidget *w, gpointer data)
{
-#ifndef WITH_WIRETAP
- int i;
- unsigned char *c;
-#endif
char *buf = malloc(1024);
-#ifndef WITH_WIRETAP
- char *ptr;
-#endif
GtkWidget *filter_te = NULL;
if (w)
@@ -323,12 +318,7 @@ match_selected_cb(GtkWidget *w, gpointer data)
"view to be matched.");
return;
}
-
-#ifdef WITH_WIRETAP
- simple_dialog(ESD_TYPE_WARN, NULL,
- "This functionality currently unsupported with Wiretap");
- return;
-#else
+#if 0
switch (cf.lnk_t) {
case DLT_EN10MB :
c="ether";
@@ -337,10 +327,12 @@ match_selected_cb(GtkWidget *w, gpointer data)
c="fddi";
break;
default :
+#endif
simple_dialog(ESD_TYPE_WARN, NULL,
"Unsupported frame type format. Only Ethernet and FDDI\n"
"frame formats are supported.");
return;
+#if 0
}
sprintf(buf, "("); ptr = buf+strlen(buf);
@@ -364,7 +356,6 @@ match_selected_cb(GtkWidget *w, gpointer data)
}
sprintf(ptr, "))");
-#endif
if( cf.dfilter != NULL ) {
/* get rid of this one */
@@ -382,6 +373,7 @@ match_selected_cb(GtkWidget *w, gpointer data)
g_free( cf.dfilter );
cf.dfilter = NULL;
}
+#endif
}
/* Open a file */
@@ -549,28 +541,30 @@ file_print_cmd_cb(GtkWidget *widget, gpointer data) {
/* What to do when a list item is selected/unselected */
void
packet_list_select_cb(GtkWidget *w, gint row, gint col, gpointer evt) {
- GList *l;
if (!sync_mode) {
-#ifdef WITH_WIRETAP
if (cf.wth) return;
-#else
- if (cf.pfh) return;
-#endif
}
blank_packetinfo();
gtk_text_freeze(GTK_TEXT(byte_view));
gtk_text_set_point(GTK_TEXT(byte_view), 0);
gtk_text_forward_delete(GTK_TEXT(byte_view),
- gtk_text_get_length(GTK_TEXT(byte_view)));
- l = g_list_nth(cf.plist, row);
- if (l) {
- fd = (frame_data *) l->data;
- fseek(cf.fh, fd->file_off, SEEK_SET);
- fread(cf.pd, sizeof(guint8), fd->cap_len, cf.fh);
- dissect_packet(cf.pd, fd, (proto_tree*)tree_view);
- packet_hex_print(GTK_TEXT(byte_view), cf.pd, fd->cap_len, -1, -1);
- }
+ gtk_text_get_length(GTK_TEXT(byte_view)));
+
+ /* get the frame data struct pointer for this frame */
+ fd = (frame_data *) gtk_clist_get_row_data(GTK_CLIST(w), row);
+ fseek(cf.fh, fd->file_off, SEEK_SET);
+ fread(cf.pd, sizeof(guint8), fd->cap_len, cf.fh);
+
+ /* create the logical protocol tree */
+ if (protocol_tree)
+ proto_tree_free(protocol_tree);
+ protocol_tree = proto_tree_create_root();
+ dissect_packet(cf.pd, fd, protocol_tree);
+
+ /* display the GUI protocol tree and hex dump */
+ proto_tree_draw(protocol_tree, tree_view);
+ packet_hex_print(GTK_TEXT(byte_view), cf.pd, fd->cap_len, -1, -1);
gtk_text_thaw(GTK_TEXT(byte_view));
}
@@ -642,11 +636,12 @@ sigusr2_handler(int sig) {
signal(SIGUSR2, sigusr2_handler);
}
+/* call initialization routines at program startup time */
static void
ethereal_proto_init(void) {
-
+ proto_init();
init_dissect_udp();
-
+ dfilter_init();
}
static void
@@ -703,14 +698,11 @@ main(int argc, char *argv[])
/* Initialize the capture file struct */
cf.plist = NULL;
-#ifdef WITH_WIRETAP
cf.wth = NULL;
-#else
- cf.pfh = NULL;
-#endif
cf.fh = NULL;
cf.dfilter = NULL;
cf.cfilter = NULL;
+ cf.dfcode = NULL;
cf.iface = NULL;
cf.save_file = NULL;
cf.user_saved = 0;
@@ -725,16 +717,12 @@ main(int argc, char *argv[])
/* Assemble the compile-time options */
snprintf(comp_info_str, 256,
#ifdef GTK_MAJOR_VERSION
- "GTK+ %d.%d.%d and %s", GTK_MAJOR_VERSION, GTK_MINOR_VERSION,
- GTK_MICRO_VERSION,
-#else
- "GTK+ (version unknown) and %s",
-#endif
-#ifdef WITH_WIRETAP
- "wiretap");
+ "GTK+ %d.%d.%d", GTK_MAJOR_VERSION, GTK_MINOR_VERSION,
+ GTK_MICRO_VERSION
#else
- "libpcap");
+ "GTK+ (version unknown)"
#endif
+ );
/* Now get our args */
while ((opt = getopt(argc, argv, "b:B:c:f:Fhi:km:nP:Qr:Ss:t:T:w:v")) != EOF) {
diff --git a/ethertype.c b/ethertype.c
index e9ad98e2f0..a7455fc5e6 100644
--- a/ethertype.c
+++ b/ethertype.c
@@ -2,7 +2,7 @@
* Routines for calling the right protocol for the ethertype.
* This is called by both packet-eth.c (Ethernet II) and packet-llc.c (SNAP)
*
- * $Id: ethertype.c,v 1.15 1999/06/22 22:02:11 gram Exp $
+ * $Id: ethertype.c,v 1.16 1999/07/07 22:51:38 gram Exp $
*
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
@@ -38,10 +38,7 @@
#include "packet.h"
#include "etypes.h"
-gchar *
-ethertype_to_str(guint16 etype, const char *fmt)
-{
- static const value_string etype_vals[] = {
+const value_string etype_vals[] = {
{ETHERTYPE_IP, "IP" },
{ETHERTYPE_IPv6, "IPv6" },
{ETHERTYPE_ARP, "ARP" },
@@ -53,13 +50,10 @@ ethertype_to_str(guint16 etype, const char *fmt)
{ETHERTYPE_CDP, "CDP" }, /* Cisco Discovery Protocol */
{ETHERTYPE_TRAIN, "Netmon Train" },
{ETHERTYPE_LOOP, "Loopback" }, /* Ethernet Loopback */
- {ETHERTYPE_PPPOED, "PPPoE Discovery"},
- {ETHERTYPE_PPPOES, "PPPoE Session" },
+ {ETHERTYPE_PPPOED, "PPPoE Discovery"},
+ {ETHERTYPE_PPPOES, "PPPoE Session" },
{0, NULL } };
- return val_to_str(etype, etype_vals, fmt);
-}
-
void
capture_ethertype(guint16 etype, int offset,
const u_char *pd, guint32 cap_len, packet_counts *ld)
@@ -77,11 +71,10 @@ capture_ethertype(guint16 etype, int offset,
void
ethertype(guint16 etype, int offset,
const u_char *pd, frame_data *fd, proto_tree *tree, proto_tree
- *fh_tree)
+ *fh_tree, int item_id)
{
if (tree) {
- proto_tree_add_item(fh_tree, offset - 2, 2, "Type: %s (0x%04x)",
- ethertype_to_str(etype, "Unknown"), etype);
+ proto_tree_add_item(fh_tree, item_id, offset - 2, 2, etype);
}
switch (etype) {
case ETHERTYPE_IP:
@@ -115,12 +108,12 @@ ethertype(guint16 etype, int offset,
dissect_data(pd, offset, fd, tree);
if (check_col(fd, COL_PROTOCOL)) { col_add_fstr(fd, COL_PROTOCOL, "LOOP"); }
break;
- case ETHERTYPE_PPPOED:
- dissect_pppoed(pd, offset, fd, tree);
- break;
- case ETHERTYPE_PPPOES:
- dissect_pppoes(pd, offset, fd, tree);
- break;
+ case ETHERTYPE_PPPOED:
+ dissect_pppoed(pd, offset, fd, tree);
+ break;
+ case ETHERTYPE_PPPOES:
+ dissect_pppoes(pd, offset, fd, tree);
+ break;
default:
dissect_data(pd, offset, fd, tree);
if (check_col(fd, COL_PROTOCOL)) { col_add_fstr(fd, COL_PROTOCOL, "0x%04x", etype); }
diff --git a/file.c b/file.c
index 24670409c5..5ccd43d3aa 100644
--- a/file.c
+++ b/file.c
@@ -1,7 +1,7 @@
/* file.c
* File I/O routines
*
- * $Id: file.c,v 1.33 1999/06/22 22:02:11 gram Exp $
+ * $Id: file.c,v 1.34 1999/07/07 22:51:38 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -29,9 +29,7 @@
#include <gtk/gtk.h>
-#ifdef WITH_WIRETAP
#include <pcap.h>
-#endif
#include <stdio.h>
#include <unistd.h>
@@ -67,6 +65,7 @@
#include "packet.h"
#include "file.h"
#include "util.h"
+#include "dfilter.h"
#include "packet-ncp.h"
@@ -83,13 +82,11 @@ guint cap_input_id, tail_timeout_id;
static guint32 firstsec, firstusec;
static guint32 lastsec, lastusec;
-#ifdef WITH_WIRETAP
+/* Used when applying a display filter */
+static proto_tree *dfilter_proto_tree = NULL;
+
static void wtap_dispatch_cb(u_char *, const struct wtap_pkthdr *, int,
const u_char *);
-#else
-static void pcap_dispatch_cb(u_char *, const struct pcap_pkthdr *,
- const u_char *);
-#endif
static void init_col_widths(capture_file *);
static void set_col_widths(capture_file *);
@@ -98,10 +95,6 @@ static gint tail_timeout_cb(gpointer);
int
open_cap_file(char *fname, capture_file *cf) {
-#ifndef WITH_WIRETAP
- guint32 magic[2];
- char err_str[PCAP_ERRBUF_SIZE];
-#endif
struct stat cf_stat;
/* First, make sure the file is valid */
@@ -117,24 +110,13 @@ open_cap_file(char *fname, capture_file *cf) {
fseek(cf->fh, 0L, SEEK_END);
cf->f_len = ftell(cf->fh);
-#ifndef WITH_WIRETAP
- fseek(cf->fh, 0L, SEEK_SET);
- fread(magic, sizeof(guint32), 2, cf->fh);
- fseek(cf->fh, 0L, SEEK_SET);
-#endif
fclose(cf->fh);
cf->fh = NULL;
/* set the file name beacuse we need it to set the follow stream filter */
cf->filename = g_strdup( fname );
/* Next, find out what type of file we're dealing with */
-#ifdef WITH_WIRETAP
cf->cd_t = WTAP_FILE_UNKNOWN;
-#else
- cf->cd_t = CD_UNKNOWN;
- cf->lnk_t = DLT_NULL;
- cf->swap = 0;
-#endif
cf->count = 0;
cf->drops = 0;
cf->esec = 0;
@@ -143,16 +125,8 @@ open_cap_file(char *fname, capture_file *cf) {
firstsec = 0, firstusec = 0;
lastsec = 0, lastusec = 0;
-#ifndef WITH_WIRETAP
- if (magic[0] == PCAP_MAGIC || magic[0] == SWAP32(PCAP_MAGIC)) {
-
- /* Pcap/Tcpdump file */
- cf->pfh = pcap_open_offline(fname, err_str);
- if (cf->pfh == NULL) {
-#else
cf->wth = wtap_open_offline(fname);
if (cf->wth == NULL) {
-#endif
/* XXX - we assume that, because we were able to open it above,
this must have failed because it's not a capture file in
@@ -160,47 +134,16 @@ open_cap_file(char *fname, capture_file *cf) {
return (OPEN_CAP_FILE_UNKNOWN_FORMAT);
}
-#ifndef WITH_WIRETAP
if (cf->dfilter) {
- if (pcap_compile(cf->pfh, &cf->fcode, cf->dfilter, 1, 0) < 0) {
+ dfilter_compile(cf->dfilter, &cf->dfcode);
+/* if (wtap_offline_filter(cf->wth, cf->dfilter) < 0) {
simple_dialog(ESD_TYPE_WARN, NULL, "Unable to parse filter string "
"\"%s\".", cf->dfilter);
- } else if (pcap_setfilter(cf->pfh, &cf->fcode) < 0) {
- simple_dialog(ESD_TYPE_WARN, NULL, "Can't install filter.");
- }
- }
-
- cf->fh = pcap_file(cf->pfh);
- cf->swap = pcap_is_swapped(cf->pfh);
- if ((cf->swap && BYTE_ORDER == BIG_ENDIAN) ||
- (!cf->swap && BYTE_ORDER == LITTLE_ENDIAN)) {
- /* Data is big-endian */
- cf->cd_t = CD_PCAP_BE;
- } else {
- cf->cd_t = CD_PCAP_LE;
- }
- cf->vers = ( ((pcap_major_version(cf->pfh) & 0x0000ffff) << 16) |
- pcap_minor_version(cf->pfh) );
- cf->snap = pcap_snapshot(cf->pfh);
- cf->lnk_t = pcap_datalink(cf->pfh);
- } else if (ntohl(magic[0]) == SNOOP_MAGIC_1 && ntohl(magic[1]) == SNOOP_MAGIC_2) {
- return (OPEN_CAP_FILE_UNKNOWN_FORMAT);
- }
-
- if (cf->cd_t == CD_UNKNOWN)
- return (OPEN_CAP_FILE_UNKNOWN_FORMAT);
-#else
- if (cf->dfilter) {
- if (wtap_offline_filter(cf->wth, cf->dfilter) < 0) {
- simple_dialog(ESD_TYPE_WARN, NULL, "Unable to parse filter string "
- "\"%s\".", cf->dfilter);
- }
+ }*/
}
cf->fh = wtap_file(cf->wth);
cf->cd_t = wtap_file_type(cf->wth);
cf->snap = wtap_snapshot_length(cf->wth);
-#endif
-
return (0);
}
@@ -217,17 +160,10 @@ close_cap_file(capture_file *cf, void *w, guint context) {
fclose(cf->fh);
cf->fh = NULL;
}
-#ifdef WITH_WIRETAP
if (cf->wth) {
wtap_close(cf->wth);
cf->wth = NULL;
}
-#else
- if (cf->pfh) {
- pcap_close(cf->pfh);
- cf->pfh = NULL;
- }
-#endif
if (cf->plist) {
g_list_foreach(cf->plist, free_packets_cb, NULL);
g_list_free(cf->plist);
@@ -258,7 +194,7 @@ load_cap_file(char *fname, capture_file *cf) {
close_cap_file(cf, info_bar, file_ctx);
- /* Initialize protocol-specific variables */
+ /* Initialize protocol-speficic variables */
ncp_init_protocol();
if ((name_ptr = (gchar *) strrchr(fname, '/')) == NULL)
@@ -272,22 +208,15 @@ load_cap_file(char *fname, capture_file *cf) {
timeout = gtk_timeout_add(250, file_progress_cb, (gpointer) &cf);
err = open_cap_file(fname, cf);
-#ifdef WITH_WIRETAP
if ((err == 0) && (cf->cd_t != WTAP_FILE_UNKNOWN)) {
-#else
- if ((err == 0) && (cf->cd_t != CD_UNKNOWN)) {
-#endif
+
+ if (dfilter_proto_tree)
+
gtk_clist_freeze(GTK_CLIST(packet_list));
init_col_widths(cf);
-#ifdef WITH_WIRETAP
wtap_loop(cf->wth, 0, wtap_dispatch_cb, (u_char *) cf);
wtap_close(cf->wth);
cf->wth = NULL;
-#else
- pcap_loop(cf->pfh, 0, pcap_dispatch_cb, (u_char *) cf);
- pcap_close(cf->pfh);
- cf->pfh = NULL;
-#endif
cf->fh = fopen(fname, "r");
set_col_widths(cf);
@@ -360,22 +289,13 @@ cap_file_input_cb (gpointer data, gint source, GdkInputCondition condition) {
/* process data until end of file and stop capture (restore menu items) */
gtk_clist_freeze(GTK_CLIST(packet_list));
init_col_widths(cf);
-#ifdef WITH_WIRETAP
wtap_loop(cf->wth, 0, wtap_dispatch_cb, (u_char *) cf);
-#else
- pcap_loop(cf->pfh, 0, pcap_dispatch_cb, (u_char *) cf);
-#endif
set_col_widths(cf);
gtk_clist_thaw(GTK_CLIST(packet_list));
-#ifdef WITH_WIRETAP
wtap_close(cf->wth);
cf->wth = NULL;
-#else
- pcap_close(cf->pfh);
- cf->pfh = NULL;
-#endif
#ifdef USE_ITEM
set_menu_sensitivity("/File/Open...", TRUE);
set_menu_sensitivity("/File/Close", TRUE);
@@ -400,11 +320,7 @@ cap_file_input_cb (gpointer data, gint source, GdkInputCondition condition) {
gtk_clist_freeze(GTK_CLIST(packet_list));
init_col_widths(cf);
-#ifdef WITH_WIRETAP
wtap_loop(cf->wth, 0, wtap_dispatch_cb, (u_char *) cf);
-#else
- pcap_loop(cf->pfh, 0, pcap_dispatch_cb, (u_char *) cf);
-#endif
set_col_widths(cf);
gtk_clist_thaw(GTK_CLIST(packet_list));
@@ -432,11 +348,7 @@ tail_timeout_cb(gpointer data) {
gtk_clist_freeze(GTK_CLIST(packet_list));
init_col_widths(cf);
-#ifdef WITH_WIRETAP
wtap_loop(cf->wth, 0, wtap_dispatch_cb, (u_char *) cf);
-#else
- pcap_loop(cf->pfh, 0, pcap_dispatch_cb, (u_char *) cf);
-#endif
set_col_widths(cf);
gtk_clist_thaw(GTK_CLIST(packet_list));
@@ -459,13 +371,9 @@ tail_cap_file(char *fname, capture_file *cf) {
/* Initialize protocol-speficic variables */
ncp_init_protocol();
-
+
err = open_cap_file(fname, cf);
-#ifdef WITH_WIRETAP
if ((err == 0) && (cf->cd_t != WTAP_FILE_UNKNOWN)) {
-#else
- if ((err == 0) && (cf->cd_t != CD_UNKNOWN)) {
-#endif
#ifdef USE_ITEM
set_menu_sensitivity("/File/Open...", FALSE);
@@ -593,7 +501,7 @@ change_time_format_in_packet_list(frame_data *fdata, capture_file *cf)
static void
add_packet_to_packet_list(frame_data *fdata, capture_file *cf, const u_char *buf)
{
- gint i, row, col_width;
+ gint i, col_width, row;
compute_time_stamps(fdata, cf);
@@ -609,19 +517,19 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf, const u_char *buf
if (col_width > fdata->cinfo->col_width[i])
fdata->cinfo->col_width[i] = col_width;
}
- row = gtk_clist_append(GTK_CLIST(packet_list), fdata->cinfo->col_data);
+ if (fdata->passed_dfilter) {
+ row = gtk_clist_append(GTK_CLIST(packet_list), fdata->cinfo->col_data);
+ gtk_clist_set_row_data(GTK_CLIST(packet_list), row, fdata);
+ }
fdata->cinfo = NULL;
}
static void
-#ifdef WITH_WIRETAP
wtap_dispatch_cb(u_char *user, const struct wtap_pkthdr *phdr, int offset,
-#else
-pcap_dispatch_cb(u_char *user, const struct pcap_pkthdr *phdr,
-#endif
const u_char *buf) {
frame_data *fdata;
capture_file *cf = (capture_file *) user;
+ proto_tree *protocol_tree = NULL;
while (gtk_events_pending())
gtk_main_iteration();
@@ -635,60 +543,23 @@ pcap_dispatch_cb(u_char *user, const struct pcap_pkthdr *phdr,
fdata->pkt_len = phdr->len;
fdata->cap_len = phdr->caplen;
-#ifdef WITH_WIRETAP
fdata->file_off = offset;
fdata->lnk_t = phdr->pkt_encap;
-#else
- fdata->file_off = ftell(pcap_file(cf->pfh)) - phdr->caplen;
-#endif
fdata->abs_secs = phdr->ts.tv_sec;
fdata->abs_usecs = phdr->ts.tv_usec;
+ fdata->cinfo = NULL;
- add_packet_to_packet_list(fdata, cf, buf);
-}
-
-static void
-filter_packets_cb(gpointer data, gpointer user_data)
-{
- frame_data *fd = data;
- capture_file *cf = user_data;
-
- cf->cur = fd;
- cf->count++;
-
- fseek(cf->fh, fd->file_off, SEEK_SET);
- fread(cf->pd, sizeof(guint8), fd->cap_len, cf->fh);
-
- add_packet_to_packet_list(fd, cf, cf->pd);
-}
-
-void
-filter_packets(capture_file *cf)
-{
- /* Freeze the packet list while we redo it, so we don't get any
- screen updates while it happens. */
- gtk_clist_freeze(GTK_CLIST(packet_list));
-
- /* Clear it out. */
- gtk_clist_clear(GTK_CLIST(packet_list));
-
- /*
- * Iterate through the list of packets, calling a routine
- * to run the filter on the packet, see if it matches, and
- * put it in the display list if so.
- *
- * XXX - we don't yet have anything to run a filter on a packet;
- * this code awaits the arrival of display filter code.
- */
- firstsec = 0;
- firstusec = 0;
- lastsec = 0;
- lastusec = 0;
- cf->count = 0;
- g_list_foreach(cf->plist, filter_packets_cb, cf);
+ /* Apply the display filter */
+ if (cf->dfcode) {
+ protocol_tree = proto_tree_create_root();
+ dissect_packet(buf, fdata, protocol_tree);
+ fdata->passed_dfilter = dfilter_apply(cf->dfcode, protocol_tree, buf);
+ }
+ else {
+ fdata->passed_dfilter = TRUE;
+ }
- /* Unfreeze the packet list. */
- gtk_clist_thaw(GTK_CLIST(packet_list));
+ add_packet_to_packet_list(fdata, cf, buf);
}
static void
diff --git a/file.h b/file.h
index 1da016cc40..9662204a21 100644
--- a/file.h
+++ b/file.h
@@ -1,7 +1,7 @@
/* file.h
* Definitions for file structures and routines
*
- * $Id: file.h,v 1.17 1999/06/22 22:02:12 gram Exp $
+ * $Id: file.h,v 1.18 1999/07/07 22:51:39 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -29,31 +29,8 @@
#include <sys/types.h>
#include <sys/time.h>
-#ifdef WITH_WIRETAP
- #include <wtap.h>
- #include <pcap.h>
-#else
- #include <pcap.h>
-
- /* Data file formats */
- #define CD_UNKNOWN 0
- #define CD_WIRE 1
- #define CD_SNOOP 2
- #define CD_PCAP_BE 3
- #define CD_PCAP_LE 4
- #define CD_NA_UNCOMPR 5
-
- /* Data file magic info */
- #define SNOOP_MAGIC_1 0x736e6f6f /* 'snoop' in ASCII */
- #define SNOOP_MAGIC_2 0x70000000
- #define PCAP_MAGIC 0xa1b2c3d4
-
- /* Data file format versions we can handle */
- #define SNOOP_MIN_VERSION 2
- #define SNOOP_MAX_VERSION 2
-
- /* Link types (removed in favor of the DLT_* defines from bpf.h */
-#endif
+#include <wtap.h>
+#include <pcap.h>
typedef struct bpf_program bpf_prog;
@@ -61,14 +38,8 @@ typedef struct _capture_file {
FILE *fh; /* Capture file */
gchar *filename; /* filename */
long f_len; /* File length */
-#ifndef WITH_WIRETAP
- int swap; /* Swap data bytes? */
-#endif
guint16 cd_t; /* Capture data type */
guint32 vers; /* Version. For tcpdump minor is appended to major */
-#ifndef WITH_WIRETAP
- guint32 lnk_t; /* Network link type */
-#endif
guint32 count; /* Packet count */
guint32 drops; /* Dropped packets */
guint32 esec; /* Elapsed seconds */
@@ -77,14 +48,11 @@ typedef struct _capture_file {
gchar *iface; /* Interface */
gchar *save_file; /* File that user saved capture to */
gint user_saved;/* Was capture file saved by user yet? */
-#ifdef WITH_WIRETAP
- wtap *wth; /* Wiretap session */
-#else
- pcap_t *pfh; /* Pcap session */
-#endif
+ wtap *wth; /* Wiretap session */
gchar *dfilter; /* Display filter string */
gchar *cfilter; /* Capture filter string */
- bpf_prog fcode; /* Compiled filter program */
+ bpf_prog fcode; /* Compiled capture filter program */
+ GNode *dfcode; /* Compiled display filter program */
/* XXX - I'm cheating for now. I'll hardcode 65536 here until I re-arrange
* more header files so that ethereal.h is split up into two files, a
* generic header and a gtk+-speficic header (or the gtk+ definitions are
@@ -97,25 +65,6 @@ typedef struct _capture_file {
column_info cinfo; /* Column formatting information */
} capture_file;
-/* Taken from RFC 1761 */
-
-#ifndef WITH_WIRETAP
-typedef struct _snoop_file_hdr {
- guint32 magic1;
- guint32 magic2;
- guint32 vers;
- guint32 s_lnk_t;
-} snoop_file_hdr;
-
-typedef struct _snoop_frame_hdr {
- guint32 orig_len;
- guint32 inc_len;
- guint32 pr_len;
- guint32 drops;
- guint32 secs;
- guint32 usecs;
-} snoop_frame_hdr;
-#endif
/*
* "open_cap_file()" can return:
diff --git a/follow.c b/follow.c
index 006b62dd2a..cce5ffafca 100644
--- a/follow.c
+++ b/follow.c
@@ -1,6 +1,6 @@
/* follow.c
*
- * $Id: follow.c,v 1.9 1999/07/07 01:41:15 guy Exp $
+ * $Id: follow.c,v 1.10 1999/07/07 22:51:39 gram Exp $
*
* Copyright 1998 Mike Hall <mlh@io.com>
*
@@ -39,6 +39,7 @@
# include <sys/types.h>
#endif
+#include <glib.h>
#include "ethereal.h"
#include "packet.h"
#include "follow.h"
diff --git a/gtkpacket.c b/gtkpacket.c
index 35b3c34130..2b81e5d6d7 100644
--- a/gtkpacket.c
+++ b/gtkpacket.c
@@ -1,7 +1,7 @@
/* gtkpacket.c
* Routines for GTK+ packet display
*
- * $Id: gtkpacket.c,v 1.5 1999/05/01 05:39:06 gram Exp $
+ * $Id: gtkpacket.c,v 1.6 1999/07/07 22:51:39 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -54,6 +54,9 @@
extern GtkWidget *byte_view;
extern GdkFont *m_r_font, *m_b_font;
+static void
+proto_tree_draw_node(GNode *node, gpointer data);
+
void
packet_hex_print(GtkText *bv, guint8 *pd, gint len, gint bstart, gint blen) {
gint i = 0, j, k, cur;
@@ -136,49 +139,53 @@ set_item_style(GtkWidget *widget, gpointer dummy)
gtk_widget_set_style(widget, item_style);
}
-proto_item *
-proto_tree_add_item(proto_tree *tree, gint start, gint len,
- gchar *format, ...) {
- GtkWidget *ti;
- va_list ap;
- gchar label_str[256];
-
- if (!tree)
- return(NULL);
-
- va_start(ap, format);
- vsnprintf(label_str, 256, format, ap);
- ti = gtk_tree_item_new_with_label(label_str);
- gtk_container_foreach(GTK_CONTAINER(ti), set_item_style, NULL);
- gtk_object_set_data(GTK_OBJECT(ti), E_TREEINFO_START_KEY, (gpointer) start);
- gtk_object_set_data(GTK_OBJECT(ti), E_TREEINFO_LEN_KEY, (gpointer) len);
- gtk_tree_append(GTK_TREE(tree), ti);
- gtk_widget_show(ti);
-
- return (proto_item*) ti;
-}
-
void
-proto_item_set_len(proto_item *ti, gint len)
+proto_tree_draw(proto_tree *protocol_tree, GtkWidget *tree_view)
{
- gtk_object_set_data(GTK_OBJECT(ti), E_TREEINFO_LEN_KEY, (gpointer) len);
+ g_node_children_foreach((GNode*) protocol_tree, G_TRAVERSE_ALL,
+ proto_tree_draw_node, tree_view);
}
-void
-proto_item_add_subtree(proto_item *ti, proto_tree *subtree, gint idx) {
- static gint tree_type[NUM_TREE_TYPES];
-
- gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), GTK_WIDGET(subtree));
- if (tree_type[idx])
- gtk_tree_item_expand(GTK_TREE_ITEM(ti));
- gtk_signal_connect(GTK_OBJECT(ti), "expand", (GtkSignalFunc) expand_tree,
- (gpointer) &tree_type[idx]);
- gtk_signal_connect(GTK_OBJECT(ti), "collapse", (GtkSignalFunc) collapse_tree,
- (gpointer) &tree_type[idx]);
-}
-
-proto_tree*
-proto_tree_new(void)
+static void
+proto_tree_draw_node(GNode *node, gpointer data)
{
- return (proto_tree*) gtk_tree_new();
+ GtkWidget *tree_view = (GtkWidget*) data;
+ field_info *fi = (field_info*) (node->data);
+ GtkWidget *ti, *subtree;
+ gchar label_str[ITEM_LABEL_LENGTH];
+ gchar *label_ptr;
+ static gint tree_type[NUM_TREE_TYPES];
+
+ if (!fi->visible)
+ return;
+
+ /* was a free format label produced? */
+ if (fi->representation) {
+ label_ptr = fi->representation;
+ }
+ else { /* no, make a generic label */
+ label_ptr = label_str;
+ proto_item_fill_label(fi, label_str);
+ }
+
+ ti = gtk_tree_item_new_with_label(label_ptr);
+ gtk_container_foreach(GTK_CONTAINER(ti), set_item_style, NULL);
+ gtk_object_set_data(GTK_OBJECT(ti), E_TREEINFO_START_KEY, (gpointer) fi->start);
+ gtk_object_set_data(GTK_OBJECT(ti), E_TREEINFO_LEN_KEY, (gpointer) fi->length);
+ gtk_tree_append(GTK_TREE(tree_view), ti);
+ gtk_widget_show(ti);
+
+ if (g_node_n_children(node) > 0) {
+ subtree = gtk_tree_new();
+ gtk_tree_item_set_subtree(GTK_TREE_ITEM(ti), GTK_WIDGET(subtree));
+ if (tree_type[fi->tree_type])
+ gtk_tree_item_expand(GTK_TREE_ITEM(ti));
+ gtk_signal_connect(GTK_OBJECT(ti), "expand", (GtkSignalFunc) expand_tree,
+ (gpointer) &tree_type[fi->tree_type]);
+ gtk_signal_connect(GTK_OBJECT(ti), "collapse", (GtkSignalFunc) collapse_tree,
+ (gpointer) &tree_type[fi->tree_type]);
+
+ g_node_children_foreach(node, G_TRAVERSE_ALL,
+ proto_tree_draw_node, subtree);
+ }
}
diff --git a/gtkpacket.h b/gtkpacket.h
index 6ffe649fa7..3344aa9fe3 100644
--- a/gtkpacket.h
+++ b/gtkpacket.h
@@ -1,7 +1,7 @@
/* gtkpacket.h
* Definitions for GTK+ packet display structures and routines
*
- * $Id: gtkpacket.h,v 1.1 1999/03/23 03:14:35 gram Exp $
+ * $Id: gtkpacket.h,v 1.2 1999/07/07 22:51:39 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -32,4 +32,6 @@ void packet_hex_print(GtkText *, guint8 *, gint, gint, gint);
#define E_TREEINFO_START_KEY "tree_info_start"
#define E_TREEINFO_LEN_KEY "tree_info_len"
+void proto_tree_draw(proto_tree *protocol_tree, GtkWidget *tree_view);
+
#endif
diff --git a/menu.c b/menu.c
index d908eab9c7..647e57a9e8 100644
--- a/menu.c
+++ b/menu.c
@@ -1,7 +1,7 @@
/* menu.c
* Menu routines
*
- * $Id: menu.c,v 1.22 1999/06/24 16:25:59 gram Exp $
+ * $Id: menu.c,v 1.23 1999/07/07 22:51:40 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -213,10 +213,9 @@ menus_init(void) {
set_menu_sensitivity("/Edit/Find", FALSE);
set_menu_sensitivity("/Tools/Graph", FALSE);
set_menu_sensitivity("/Tools/Summary", FALSE);
-#ifdef WITH_WIRETAP
+
set_menu_sensitivity("/Tools/Follow TCP Stream", FALSE);
set_menu_sensitivity("/Display/Match Selected", FALSE);
-#endif
#else
factory = gtk_menu_factory_new(GTK_MENU_FACTORY_MENU_BAR);
@@ -235,10 +234,10 @@ menus_init(void) {
set_menu_sensitivity("<Main>/Edit/Find", FALSE);
set_menu_sensitivity("<Main>/Tools/Graph", FALSE);
set_menu_sensitivity("<Main>/Tools/Summary", FALSE);
-#ifdef WITH_WIRETAP
+
set_menu_sensitivity("<Main>/Tools/Follow TCP Stream", FALSE);
set_menu_sensitivity("<Main>/Display/Match Selected", FALSE);
-#endif
+
if ((mp = gtk_menu_factory_find(factory, "<Main>/Help")) != NULL) {
gtk_menu_item_right_justify((GtkMenuItem *) mp->widget);
}
diff --git a/packet-aarp.c b/packet-aarp.c
index ba53ade473..053ab0b3ba 100644
--- a/packet-aarp.c
+++ b/packet-aarp.c
@@ -96,29 +96,28 @@ dissect_aarp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (tree) {
if ((op_str = match_strval(ea.op, op_vals)))
- ti = proto_tree_add_item(tree, offset, 28, op_str);
+ ti = proto_tree_add_text(tree, offset, 28, op_str);
else
- ti = proto_tree_add_item(tree, offset, 28,
+ ti = proto_tree_add_text(tree, offset, 28,
"Unknown AARP (opcode 0x%04x)", ea.op);
- aarp_tree = proto_tree_new();
- proto_item_add_subtree(ti, aarp_tree, ETT_AARP);
- proto_tree_add_item(aarp_tree, offset, 2,
+ aarp_tree = proto_item_add_subtree(ti, ETT_AARP);
+ proto_tree_add_text(aarp_tree, offset, 2,
"Hardware type: 0x%04x", ea.htype);
- proto_tree_add_item(aarp_tree, offset + 2, 2,
+ proto_tree_add_text(aarp_tree, offset + 2, 2,
"Protocol type: 0x%04x", ea.ptype);
- proto_tree_add_item(aarp_tree, offset + 4, 1,
+ proto_tree_add_text(aarp_tree, offset + 4, 1,
"Hardware size: 0x%02x", ea.halen);
- proto_tree_add_item(aarp_tree, offset + 5, 1,
+ proto_tree_add_text(aarp_tree, offset + 5, 1,
"Protocol size: 0x%02x", ea.palen);
- proto_tree_add_item(aarp_tree, offset + 6, 2,
+ proto_tree_add_text(aarp_tree, offset + 6, 2,
"Opcode: 0x%04x (%s)", ea.op, op_str ? op_str : "Unknown");
- proto_tree_add_item(aarp_tree, offset + 8, 6,
+ proto_tree_add_text(aarp_tree, offset + 8, 6,
"Sender ether: %s", ether_to_str((guint8 *) ea.hsaddr));
- proto_tree_add_item(aarp_tree, offset + 14, 4,
+ proto_tree_add_text(aarp_tree, offset + 14, 4,
"Sender ID: %s", atalkid_to_str((guint8 *) ea.psaddr));
- proto_tree_add_item(aarp_tree, offset + 18, 6,
+ proto_tree_add_text(aarp_tree, offset + 18, 6,
"Target ether: %s", ether_to_str((guint8 *) ea.hdaddr));
- proto_tree_add_item(aarp_tree, offset + 24, 4,
+ proto_tree_add_text(aarp_tree, offset + 24, 4,
"Target ID: %s", atalkid_to_str((guint8 *) ea.pdaddr));
}
diff --git a/packet-arp.c b/packet-arp.c
index 18f79261ef..b3ddf2149d 100644
--- a/packet-arp.c
+++ b/packet-arp.c
@@ -1,7 +1,7 @@
/* packet-arp.c
* Routines for ARP packet disassembly
*
- * $Id: packet-arp.c,v 1.13 1999/05/11 08:21:39 guy Exp $
+ * $Id: packet-arp.c,v 1.14 1999/07/07 22:51:40 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -216,30 +216,29 @@ dissect_arp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (tree) {
if ((op_str = match_strval(ar_op, op_vals)))
- ti = proto_tree_add_item(tree, offset, 8 + 2*ar_hln + 2*ar_pln,
+ ti = proto_tree_add_text(tree, offset, 8 + 2*ar_hln + 2*ar_pln,
op_str);
else
- ti = proto_tree_add_item(tree, offset, 8 + 2*ar_hln + 2*ar_pln,
+ ti = proto_tree_add_text(tree, offset, 8 + 2*ar_hln + 2*ar_pln,
"Unknown ARP (opcode 0x%04x)", ar_op);
- arp_tree = proto_tree_new();
- proto_item_add_subtree(ti, arp_tree, ETT_ARP);
- proto_tree_add_item(arp_tree, offset + AR_HRD, 2,
+ arp_tree = proto_item_add_subtree(ti, ETT_ARP);
+ proto_tree_add_text(arp_tree, offset + AR_HRD, 2,
"Hardware type: %s", arphrdtype_to_str(ar_hrd, "Unknown (0x%04x)"));
- proto_tree_add_item(arp_tree, offset + AR_PRO, 2,
- "Protocol type: %s", ethertype_to_str(ar_pro, "Unknown (0x%04x)"));
- proto_tree_add_item(arp_tree, offset + AR_HLN, 1,
+ proto_tree_add_text(arp_tree, offset + AR_PRO, 2,
+ "Protocol type: %s", val_to_str(ar_pro, etype_vals, "Unknown (0x%04x)"));
+ proto_tree_add_text(arp_tree, offset + AR_HLN, 1,
"Hardware size: %d", ar_hln);
- proto_tree_add_item(arp_tree, offset + AR_PLN, 1,
+ proto_tree_add_text(arp_tree, offset + AR_PLN, 1,
"Protocol size: %d", ar_pln);
- proto_tree_add_item(arp_tree, offset + AR_OP, 2,
+ proto_tree_add_text(arp_tree, offset + AR_OP, 2,
"Opcode: 0x%04x (%s)", ar_op, op_str ? op_str : "Unknown");
- proto_tree_add_item(arp_tree, sha_offset, ar_hln,
+ proto_tree_add_text(arp_tree, sha_offset, ar_hln,
"Sender hardware address: %s", sha_str);
- proto_tree_add_item(arp_tree, spa_offset, ar_pln,
+ proto_tree_add_text(arp_tree, spa_offset, ar_pln,
"Sender protocol address: %s", spa_str);
- proto_tree_add_item(arp_tree, tha_offset, ar_hln,
+ proto_tree_add_text(arp_tree, tha_offset, ar_hln,
"Target hardware address: %s", tha_str);
- proto_tree_add_item(arp_tree, tpa_offset, ar_pln,
+ proto_tree_add_text(arp_tree, tpa_offset, ar_pln,
"Target protocol address: %s", tpa_str);
}
}
diff --git a/packet-atalk.c b/packet-atalk.c
index fbc4527d81..726d91cde4 100644
--- a/packet-atalk.c
+++ b/packet-atalk.c
@@ -91,19 +91,18 @@ dissect_ddp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
val_to_str(ddp.type, op_vals, "Unknown DDP protocol (%02x)"));
if (tree) {
- ti = proto_tree_add_item(tree, offset, 13, "Datagram Delivery Protocol");
- ddp_tree = proto_tree_new();
- proto_item_add_subtree(ti, ddp_tree, ETT_IP);
- proto_tree_add_item(ddp_tree, offset, 1, "Hop count: %d", ddp_hops(ddp.hops_len));
- proto_tree_add_item(ddp_tree, offset, 2, "Datagram length: %d", ddp_len(ddp.hops_len));
- proto_tree_add_item(ddp_tree, offset + 2, 2, "Checksum: %d",ddp.sum);
- proto_tree_add_item(ddp_tree, offset + 4, 2, "Destination Net: %d",ddp.dnet);
- proto_tree_add_item(ddp_tree, offset + 6, 2, "Source Net: %d",ddp.snet);
- proto_tree_add_item(ddp_tree, offset + 8, 1, "Destination Node: %d",ddp.dnode);
- proto_tree_add_item(ddp_tree, offset + 9, 1, "Source Node: %d",ddp.snode);
- proto_tree_add_item(ddp_tree, offset + 10, 1, "Destination Socket: %d",ddp.dport);
- proto_tree_add_item(ddp_tree, offset + 11, 1, "Source Socket: %d",ddp.sport);
- proto_tree_add_item(ddp_tree, offset + 12, 1, "Type: %d",ddp.type);
+ ti = proto_tree_add_text(tree, offset, 13, "Datagram Delivery Protocol");
+ ddp_tree = proto_item_add_subtree(ti, ETT_IP);
+ proto_tree_add_text(ddp_tree, offset, 1, "Hop count: %d", ddp_hops(ddp.hops_len));
+ proto_tree_add_text(ddp_tree, offset, 2, "Datagram length: %d", ddp_len(ddp.hops_len));
+ proto_tree_add_text(ddp_tree, offset + 2, 2, "Checksum: %d",ddp.sum);
+ proto_tree_add_text(ddp_tree, offset + 4, 2, "Destination Net: %d",ddp.dnet);
+ proto_tree_add_text(ddp_tree, offset + 6, 2, "Source Net: %d",ddp.snet);
+ proto_tree_add_text(ddp_tree, offset + 8, 1, "Destination Node: %d",ddp.dnode);
+ proto_tree_add_text(ddp_tree, offset + 9, 1, "Source Node: %d",ddp.snode);
+ proto_tree_add_text(ddp_tree, offset + 10, 1, "Destination Socket: %d",ddp.dport);
+ proto_tree_add_text(ddp_tree, offset + 11, 1, "Source Socket: %d",ddp.sport);
+ proto_tree_add_text(ddp_tree, offset + 12, 1, "Type: %d",ddp.type);
}
offset += 13;
diff --git a/packet-bootp.c b/packet-bootp.c
index c6046b96fb..19fcf4f4dc 100644
--- a/packet-bootp.c
+++ b/packet-bootp.c
@@ -2,7 +2,7 @@
* Routines for BOOTP/DHCP packet disassembly
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-bootp.c,v 1.16 1999/03/23 03:14:35 gram Exp $
+ * $Id: packet-bootp.c,v 1.17 1999/07/07 22:51:40 gram Exp $
*
* The information used comes from:
* RFC 2132: DHCP Options and BOOTP Vendor Extensions
@@ -174,7 +174,7 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
}
}
i = i - voff;
- proto_tree_add_item(bp_tree, voff, i, "Padding");
+ proto_tree_add_text(bp_tree, voff, i, "Padding");
consumed = i;
return consumed;
@@ -182,7 +182,7 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
case 21:
/* one IP address pair */
if (vlen == 8) {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s/%s", code, text,
ip_to_str((guint8*)&pd[voff+2]),
ip_to_str((guint8*)&pd[voff+6]));
@@ -190,12 +190,11 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
/* > 1 IP address pair. Let's make a sub-tree */
else {
- vti = proto_tree_add_item(bp_tree, voff,
+ vti = proto_tree_add_text(bp_tree, voff,
consumed, "Option %d: %s", code, text);
- v_tree = proto_tree_new();
- proto_item_add_subtree(vti, v_tree, ETT_BOOTP_OPTION);
+ v_tree = proto_item_add_subtree(vti, ETT_BOOTP_OPTION);
for (i = voff + 2; i < voff + consumed; i += 8) {
- proto_tree_add_item(v_tree, i, 8, "IP Address/Mask: %s/%s",
+ proto_tree_add_text(v_tree, i, 8, "IP Address/Mask: %s/%s",
ip_to_str((guint8*)&pd[i]),
ip_to_str((guint8*)&pd[i+4]));
}
@@ -206,7 +205,7 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
case 33:
/* one IP address pair */
if (vlen == 8) {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s/%s", code, text,
ip_to_str((guint8*)&pd[voff+2]),
ip_to_str((guint8*)&pd[voff+6]));
@@ -214,12 +213,11 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
/* > 1 IP address pair. Let's make a sub-tree */
else {
- vti = proto_tree_add_item(bp_tree, voff,
+ vti = proto_tree_add_text(bp_tree, voff,
consumed, "Option %d: %s", code, text);
- v_tree = proto_tree_new();
- proto_item_add_subtree(vti, v_tree, ETT_BOOTP_OPTION);
+ v_tree = proto_item_add_subtree(vti, ETT_BOOTP_OPTION);
for (i = voff + 2; i < voff + consumed; i += 8) {
- proto_tree_add_item(v_tree, i, 8,
+ proto_tree_add_text(v_tree, i, 8,
"Destination IP Address/Router: %s/%s",
ip_to_str((guint8*)&pd[i]),
ip_to_str((guint8*)&pd[i+4]));
@@ -229,14 +227,14 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
/* Vendor-Specific Info */
case 43:
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s", code, text);
break;
/* NetBIOS-over-TCP/IP Node Type */
case 46:
byte = pd[voff+2];
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s", code, text,
val_to_str(byte, nbnt_vals,
"Unknown (0x%02x)"));
@@ -251,24 +249,23 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
else {
i = 0;
}
- proto_tree_add_item(bp_tree, voff, 3, "Option %d: %s = DHCP %s",
+ proto_tree_add_text(bp_tree, voff, 3, "Option %d: %s = DHCP %s",
code, text, opt53_text[i]);
break;
/* Parameter Request List */
case 55:
- vti = proto_tree_add_item(bp_tree, voff,
+ vti = proto_tree_add_text(bp_tree, voff,
vlen + 2, "Option %d: %s", code, text);
- v_tree = proto_tree_new();
- proto_item_add_subtree(vti, v_tree, ETT_BOOTP_OPTION);
+ v_tree = proto_item_add_subtree(vti, ETT_BOOTP_OPTION);
for (i = 0; i < vlen; i++) {
byte = pd[voff+2+i];
if (byte < NUM_OPT_INFOS) {
- proto_tree_add_item(v_tree, voff+2+i, 1, "%d = %s",
+ proto_tree_add_text(v_tree, voff+2+i, 1, "%d = %s",
byte, opt[byte].text);
}
else {
- proto_tree_add_item(vti, voff+2+i, 1,
+ proto_tree_add_text(vti, voff+2+i, 1,
"Unknown Option Code: %d", byte);
}
}
@@ -280,29 +277,28 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
guess that the first is the hwtype, and the last 6 are
the hw addr */
if (vlen == 7) {
- vti = proto_tree_add_item(bp_tree, voff,
+ vti = proto_tree_add_text(bp_tree, voff,
consumed, "Option %d: %s", code, text);
- v_tree = proto_tree_new();
- proto_item_add_subtree(vti, v_tree, ETT_BOOTP_OPTION);
- proto_tree_add_item(v_tree, voff+2, 1,
+ v_tree = proto_item_add_subtree(vti, ETT_BOOTP_OPTION);
+ proto_tree_add_text(v_tree, voff+2, 1,
"Hardware type: %s",
arphrdtype_to_str(pd[voff+2],
"Unknown (0x%02x)"));
- proto_tree_add_item(v_tree, voff+3, 6,
+ proto_tree_add_text(v_tree, voff+3, 6,
"Client hardware address: %s",
arphrdaddr_to_str((guint8*)&pd[voff+3],
6, pd[voff+2]));
}
/* otherwise, it's opaque data */
else {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s (%d bytes)", code, text, vlen);
}
break;
/* End Option */
case 255:
- proto_tree_add_item(bp_tree, voff, 1, "End Option");
+ proto_tree_add_text(bp_tree, voff, 1, "End Option");
consumed = 1;
return consumed;
@@ -323,19 +319,18 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
case ipv4:
/* one IP address */
if (vlen == 4) {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s", code, text,
ip_to_str((guint8*)&pd[voff+2]));
}
/* > 1 IP addresses. Let's make a sub-tree */
else {
- vti = proto_tree_add_item(bp_tree, voff,
+ vti = proto_tree_add_text(bp_tree, voff,
consumed, "Option %d: %s", code, text);
- v_tree = proto_tree_new();
- proto_item_add_subtree(vti, v_tree, ETT_BOOTP_OPTION);
+ v_tree = proto_item_add_subtree(vti, ETT_BOOTP_OPTION);
for (i = voff + 2; i < voff + consumed; i += 4) {
- proto_tree_add_item(v_tree, i, 4, "IP Address: %s",
+ proto_tree_add_text(v_tree, i, 4, "IP Address: %s",
ip_to_str((guint8*)&pd[i]));
}
}
@@ -345,12 +340,12 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
/* Fix for non null-terminated string supplied by
* John Lines <John.Lines@aeat.co.uk>
*/
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %.*s", code, text, vlen, &pd[voff+2]);
break;
case opaque:
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s (%d bytes)",
code, text, vlen);
break;
@@ -358,43 +353,42 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
case val_u_short:
/* one IP address */
if (vlen == 2) {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %d", code, text,
pntohs(&pd[voff+2]));
}
/* > 1 u_short */
else {
- vti = proto_tree_add_item(bp_tree, voff,
+ vti = proto_tree_add_text(bp_tree, voff,
consumed, "Option %d: %s", code, text);
- v_tree = proto_tree_new();
- proto_item_add_subtree(vti, v_tree, ETT_BOOTP_OPTION);
+ v_tree = proto_item_add_subtree(vti, ETT_BOOTP_OPTION);
for (i = voff + 2; i < voff + consumed; i += 2) {
- proto_tree_add_item(v_tree, i, 4, "Value: %d",
+ proto_tree_add_text(v_tree, i, 4, "Value: %d",
pntohs(&pd[i]));
}
}
break;
case val_u_long:
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %d", code, text,
pntohl(&pd[voff+2]));
break;
case val_u_byte:
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %d", code, text, pd[voff+2]);
break;
case toggle:
i = pd[voff+2];
if (i != 0 && i != 1) {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = Invalid Value %d", code, text,
pd[voff+2]);
}
else {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s", code, text,
pd[voff+2] == 0 ? "Disabled" : "Enabled");
}
@@ -403,12 +397,12 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
case yes_no:
i = pd[voff+2];
if (i != 0 && i != 1) {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = Invalid Value %d", code, text,
pd[voff+2]);
}
else {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s", code, text,
pd[voff+2] == 0 ? "No" : "Yes");
}
@@ -416,7 +410,7 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
case time_in_secs:
time_secs = pntohl(&pd[voff+2]);
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s = %s", code, text,
((time_secs == 0xffffffff) ?
"infinity" :
@@ -424,12 +418,12 @@ bootp_option(const u_char *pd, proto_tree *bp_tree, int voff, int eoff)
break;
default:
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Option %d: %s (%d bytes)", code, text, vlen);
}
}
else {
- proto_tree_add_item(bp_tree, voff, consumed,
+ proto_tree_add_text(bp_tree, voff, consumed,
"Unknown Option Code: %d (%d bytes)", code, vlen);
}
@@ -458,66 +452,65 @@ dissect_bootp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Bootstrap Protocol");
- bp_tree = proto_tree_new();
- proto_item_add_subtree(ti, bp_tree, ETT_BOOTP);
+ bp_tree = proto_item_add_subtree(ti, ETT_BOOTP);
- proto_tree_add_item(bp_tree, offset, 1, pd[offset] == 1 ?
+ proto_tree_add_text(bp_tree, offset, 1, pd[offset] == 1 ?
"Boot Request" : "Boot Reply");
- proto_tree_add_item(bp_tree, offset + 1, 1,
+ proto_tree_add_text(bp_tree, offset + 1, 1,
"Hardware type: %s",
arphrdtype_to_str(pd[offset+1], "Unknown (0x%02x)"));
- proto_tree_add_item(bp_tree, offset + 2, 1,
+ proto_tree_add_text(bp_tree, offset + 2, 1,
"Hardware address length: %d", pd[offset+2]);
- proto_tree_add_item(bp_tree, offset + 3, 1,
+ proto_tree_add_text(bp_tree, offset + 3, 1,
"Hops: %d", pd[offset+3]);
- proto_tree_add_item(bp_tree, offset + 4, 4,
+ proto_tree_add_text(bp_tree, offset + 4, 4,
"Transaction ID: 0x%08x", pntohl(&pd[offset+4]));
- proto_tree_add_item(bp_tree, offset + 8, 2,
+ proto_tree_add_text(bp_tree, offset + 8, 2,
"Seconds elapsed: %d", pntohs(&pd[offset+8]));
- proto_tree_add_item(bp_tree, offset + 10, 2,
+ proto_tree_add_text(bp_tree, offset + 10, 2,
"Broadcast flag: %d", pd[offset+10] & 1);
- proto_tree_add_item(bp_tree, offset + 12, 4,
+ proto_tree_add_text(bp_tree, offset + 12, 4,
"Client IP address: %s", ip_to_str((guint8*)&pd[offset+12]));
- proto_tree_add_item(bp_tree, offset + 16, 4,
+ proto_tree_add_text(bp_tree, offset + 16, 4,
"Your (client) IP address: %s", ip_to_str((guint8*)&pd[offset+16]));
- proto_tree_add_item(bp_tree, offset + 20, 4,
+ proto_tree_add_text(bp_tree, offset + 20, 4,
"Next server IP address: %s", ip_to_str((guint8*)&pd[offset+20]));
- proto_tree_add_item(bp_tree, offset + 24, 4,
+ proto_tree_add_text(bp_tree, offset + 24, 4,
"Relay agent IP address: %s", ip_to_str((guint8*)&pd[offset+24]));
- proto_tree_add_item(bp_tree, offset + 28, pd[offset+2],
+ proto_tree_add_text(bp_tree, offset + 28, pd[offset+2],
"Client hardware address: %s",
arphrdaddr_to_str((guint8*)&pd[offset+28],
pd[offset+2], pd[offset+1]));
/* The server host name is optional */
if (pd[offset+44]) {
- proto_tree_add_item(bp_tree, offset + 44, 64,
+ proto_tree_add_text(bp_tree, offset + 44, 64,
"Server host name: %s", &pd[offset+44]);
}
else {
- proto_tree_add_item(bp_tree, offset + 44, 64,
+ proto_tree_add_text(bp_tree, offset + 44, 64,
"Server host name not given");
}
/* Boot file */
if (pd[offset+108]) {
- proto_tree_add_item(bp_tree, offset + 108, 128,
+ proto_tree_add_text(bp_tree, offset + 108, 128,
"Boot file name: %s", &pd[offset+108]);
}
else {
- proto_tree_add_item(bp_tree, offset + 108, 128,
+ proto_tree_add_text(bp_tree, offset + 108, 128,
"Boot file name not given");
}
if (pntohl(&pd[offset+236]) == 0x63825363) {
- proto_tree_add_item(bp_tree, offset + 236, 4,
+ proto_tree_add_text(bp_tree, offset + 236, 4,
"Magic cookie: (OK)");
}
else {
- proto_tree_add_item(bp_tree, offset + 236, 4,
+ proto_tree_add_text(bp_tree, offset + 236, 4,
"Magic cookie: %s",
ip_to_str((guint8*)&pd[offset+236]));
}
diff --git a/packet-cdp.c b/packet-cdp.c
index 45e1fb13cc..8874e048e2 100644
--- a/packet-cdp.c
+++ b/packet-cdp.c
@@ -2,7 +2,7 @@
* Routines for the disassembly of the "Cisco Discovery Protocol"
* (c) Copyright Hannes R. Boehm <hannes@boehm.org>
*
- * $Id: packet-cdp.c,v 1.8 1999/03/23 03:14:36 gram Exp $
+ * $Id: packet-cdp.c,v 1.9 1999/07/07 22:51:41 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -66,16 +66,15 @@ dissect_cdp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
col_add_str(fd, COL_INFO, "Cisco Discovery Protocol");
if(tree){
- ti = proto_tree_add_item(tree, offset, (fd->cap_len - offset),
+ ti = proto_tree_add_text(tree, offset, (fd->cap_len - offset),
"Cisco Discovery Protocol");
- cdp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cdp_tree, ETT_CDP);
+ cdp_tree = proto_item_add_subtree(ti, ETT_CDP);
/* CDP header */
cdp_hdr = (e_cdp_hdr *) &pd[offset];
- proto_tree_add_item(cdp_tree, offset, 1, "Version: %d", cdp_hdr->version);
- proto_tree_add_item(cdp_tree, offset+1, 1, "Flags (unknown)");
- proto_tree_add_item(cdp_tree, offset+2, 2, "TTL (unknown)");
+ proto_tree_add_text(cdp_tree, offset, 1, "Version: %d", cdp_hdr->version);
+ proto_tree_add_text(cdp_tree, offset+1, 1, "Flags (unknown)");
+ proto_tree_add_text(cdp_tree, offset+2, 2, "TTL (unknown)");
offset+=4;
/* CVS -> exit here
@@ -91,7 +90,7 @@ dissect_cdp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
offset+=length + 4;
break;
case 1: /* ??? Chassis ID */
- proto_tree_add_item(cdp_tree, offset + 4,
+ proto_tree_add_text(cdp_tree, offset + 4,
length - 4, "Chassis ID: %s", &pd[offset+4] );
offset+=length;
break;
@@ -102,7 +101,7 @@ dissect_cdp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
offset+=4;
break;
case 3: /* ??? Port */
- proto_tree_add_item(cdp_tree, offset + 4,
+ proto_tree_add_text(cdp_tree, offset + 4,
length - 4, "Sent through Interface: %s", &pd[offset+4] );
offset+=length;
break;
@@ -117,13 +116,13 @@ dissect_cdp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
stringmem = malloc(length);
memset(stringmem, '\0', length);
memcpy(stringmem, &pd[offset+4], length - 4 );
- proto_tree_add_item(cdp_tree, offset + 4, length - 4,
+ proto_tree_add_text(cdp_tree, offset + 4, length - 4,
"Platform: %s", stringmem );
free(stringmem);
offset+=length;
break;
case 0x01cc: /* ??? Mgmt Addr */
- proto_tree_add_item(cdp_tree, offset + 4, length,
+ proto_tree_add_text(cdp_tree, offset + 4, length,
"Mgmt IP: %s",
ip_to_str(&pd[offset+4]) );
offset+=length + 4;
@@ -136,11 +135,11 @@ dissect_cdp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
*/
/*
- proto_tree_add_item(cdp_tree, offset + TLV_TYPE,
+ proto_tree_add_text(cdp_tree, offset + TLV_TYPE,
2, "Type: %d", type);
- proto_tree_add_item(cdp_tree, offset + TLV_LENGTH,
+ proto_tree_add_text(cdp_tree, offset + TLV_LENGTH,
2, "Length: %d", length);
- proto_tree_add_item(cdp_tree, offset + 4,
+ proto_tree_add_text(cdp_tree, offset + 4,
length - 4, "Data");
*/
@@ -179,7 +178,7 @@ add_multi_line_string_to_tree(proto_tree *tree, gint start, gint len,
line_len = strlen(p);
data_len = line_len;
}
- proto_tree_add_item(tree, start, data_len, "%s%.*s", prefix,
+ proto_tree_add_text(tree, start, data_len, "%s%.*s", prefix,
line_len, p);
if (q == NULL)
break;
diff --git a/packet-data.c b/packet-data.c
index bf546baadc..f28300f16a 100644
--- a/packet-data.c
+++ b/packet-data.c
@@ -2,7 +2,7 @@
* Routines for raw data (default case)
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-data.c,v 1.8 1999/03/23 03:14:36 gram Exp $
+ * $Id: packet-data.c,v 1.9 1999/07/07 22:51:41 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -35,12 +35,21 @@
#include <glib.h>
#include "packet.h"
+int proto_data = -1;
+
void
dissect_data(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (fd->cap_len > offset && tree) {
- proto_tree_add_item(tree, offset, END_OF_FRAME,
- "Data (%d bytes)", END_OF_FRAME);
+ proto_tree_add_item_format(tree, proto_data, offset,
+ END_OF_FRAME, NULL, "Data (%d bytes)", END_OF_FRAME);
}
}
+void
+proto_register_data(void)
+{
+ proto_data = proto_register_protocol (
+ /* name */ "Data",
+ /* abbrev */ "data" );
+}
diff --git a/packet-dns.c b/packet-dns.c
index 4a087fde4d..66eec34107 100644
--- a/packet-dns.c
+++ b/packet-dns.c
@@ -1,7 +1,7 @@
/* packet-dns.c
* Routines for DNS packet disassembly
*
- * $Id: packet-dns.c,v 1.18 1999/05/27 05:35:07 guy Exp $
+ * $Id: packet-dns.c,v 1.19 1999/07/07 22:51:41 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -416,18 +416,17 @@ dissect_dns_query(const u_char *dns_data_ptr, const u_char *pd, int offset,
class_name = dns_class_name(class);
long_type_name = dns_long_type_name(type);
- tq = proto_tree_add_item(dns_tree, offset, len, "%s: type %s, class %s",
+ tq = proto_tree_add_text(dns_tree, offset, len, "%s: type %s, class %s",
name, type_name, class_name);
- q_tree = proto_tree_new();
- proto_item_add_subtree(tq, q_tree, ETT_DNS_QD);
+ q_tree = proto_item_add_subtree(tq, ETT_DNS_QD);
- proto_tree_add_item(q_tree, offset, name_len, "Name: %s", name);
+ proto_tree_add_text(q_tree, offset, name_len, "Name: %s", name);
offset += name_len;
- proto_tree_add_item(q_tree, offset, 2, "Type: %s", long_type_name);
+ proto_tree_add_text(q_tree, offset, 2, "Type: %s", long_type_name);
offset += 2;
- proto_tree_add_item(q_tree, offset, 2, "Class: %s", class_name);
+ proto_tree_add_text(q_tree, offset, 2, "Class: %s", class_name);
offset += 2;
return dptr - data_start;
@@ -441,18 +440,17 @@ add_rr_to_tree(proto_item *trr, int rr_type, int offset, const char *name,
{
proto_tree *rr_tree;
- rr_tree = proto_tree_new();
- proto_item_add_subtree(trr, rr_tree, rr_type);
- proto_tree_add_item(rr_tree, offset, namelen, "Name: %s", name);
+ rr_tree = proto_item_add_subtree(trr, rr_type);
+ proto_tree_add_text(rr_tree, offset, namelen, "Name: %s", name);
offset += namelen;
- proto_tree_add_item(rr_tree, offset, 2, "Type: %s", type_name);
+ proto_tree_add_text(rr_tree, offset, 2, "Type: %s", type_name);
offset += 2;
- proto_tree_add_item(rr_tree, offset, 2, "Class: %s", class_name);
+ proto_tree_add_text(rr_tree, offset, 2, "Class: %s", class_name);
offset += 2;
- proto_tree_add_item(rr_tree, offset, 4, "Time to live: %s",
+ proto_tree_add_text(rr_tree, offset, 4, "Time to live: %s",
time_secs_to_str(ttl));
offset += 4;
- proto_tree_add_item(rr_tree, offset, 2, "Data length: %u", data_len);
+ proto_tree_add_text(rr_tree, offset, 2, "Data length: %u", data_len);
return rr_tree;
}
@@ -494,14 +492,14 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
switch (type) {
case T_A:
- trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_text(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, addr %s",
name, type_name, class_name,
ip_to_str((guint8 *)dptr));
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, 4, "Addr: %s",
+ proto_tree_add_text(rr_tree, offset, 4, "Addr: %s",
ip_to_str((guint8 *)dptr));
break;
@@ -511,13 +509,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
int ns_name_len;
ns_name_len = get_dns_name(dns_data_ptr, dptr, ns_name, sizeof(ns_name));
- trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_text(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, ns %s",
name, type_name, class_name, ns_name);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, ns_name_len, "Name server: %s", ns_name);
+ proto_tree_add_text(rr_tree, offset, ns_name_len, "Name server: %s", ns_name);
}
break;
@@ -527,13 +525,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
int cname_len;
cname_len = get_dns_name(dns_data_ptr, dptr, cname, sizeof(cname));
- trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_text(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, cname %s",
name, type_name, class_name, cname);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, cname_len, "Primary name: %s", cname);
+ proto_tree_add_text(rr_tree, offset, cname_len, "Primary name: %s", cname);
}
break;
@@ -552,42 +550,42 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
rrptr = dptr;
mname_len = get_dns_name(dns_data_ptr, rrptr, mname, sizeof(mname));
rrptr += mname_len;
- trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_text(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, mname %s",
name, type_name, class_name, mname);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, mname_len, "Primary name server: %s",
+ proto_tree_add_text(rr_tree, offset, mname_len, "Primary name server: %s",
mname);
offset += mname_len;
rname_len = get_dns_name(dns_data_ptr, rrptr, rname, sizeof(rname));
- proto_tree_add_item(rr_tree, offset, rname_len, "Responsible authority's mailbox: %s",
+ proto_tree_add_text(rr_tree, offset, rname_len, "Responsible authority's mailbox: %s",
rname);
rrptr += rname_len;
offset += rname_len;
serial = pntohl(rrptr);
- proto_tree_add_item(rr_tree, offset, 4, "Serial number: %u",
+ proto_tree_add_text(rr_tree, offset, 4, "Serial number: %u",
serial);
rrptr += 4;
offset += 4;
refresh = pntohl(rrptr);
- proto_tree_add_item(rr_tree, offset, 4, "Refresh interval: %s",
+ proto_tree_add_text(rr_tree, offset, 4, "Refresh interval: %s",
time_secs_to_str(refresh));
rrptr += 4;
offset += 4;
retry = pntohl(rrptr);
- proto_tree_add_item(rr_tree, offset, 4, "Retry interval: %s",
+ proto_tree_add_text(rr_tree, offset, 4, "Retry interval: %s",
time_secs_to_str(retry));
rrptr += 4;
offset += 4;
expire = pntohl(rrptr);
- proto_tree_add_item(rr_tree, offset, 4, "Expiration limit: %s",
+ proto_tree_add_text(rr_tree, offset, 4, "Expiration limit: %s",
time_secs_to_str(expire));
rrptr += 4;
offset += 4;
minimum = pntohl(rrptr);
- proto_tree_add_item(rr_tree, offset, 4, "Minimum TTL: %s",
+ proto_tree_add_text(rr_tree, offset, 4, "Minimum TTL: %s",
time_secs_to_str(minimum));
}
break;
@@ -598,13 +596,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
int pname_len;
pname_len = get_dns_name(dns_data_ptr, dptr, pname, sizeof(pname));
- trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_text(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s, ptr %s",
name, type_name, class_name, pname);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, pname_len, "Domain name: %s", pname);
+ proto_tree_add_text(rr_tree, offset, pname_len, "Domain name: %s", pname);
break;
}
break;
@@ -612,13 +610,13 @@ dissect_dns_answer(const u_char *dns_data_ptr, const u_char *pd, int offset,
/* TODO: parse more record types */
default:
- trr = proto_tree_add_item(dns_tree, offset, (dptr - data_start) + data_len,
+ trr = proto_tree_add_text(dns_tree, offset, (dptr - data_start) + data_len,
"%s: type %s, class %s",
name, type_name, class_name);
rr_tree = add_rr_to_tree(trr, ETT_DNS_RR, offset, name, name_len,
long_type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, data_len, "Data");
+ proto_tree_add_text(rr_tree, offset, data_len, "Data");
}
dptr += data_len;
@@ -635,9 +633,8 @@ dissect_query_records(const u_char *dns_data_ptr, int count, const u_char *pd,
proto_item *ti;
start_off = cur_off;
- ti = proto_tree_add_item(dns_tree, start_off, 0, "Queries");
- qatree = proto_tree_new();
- proto_item_add_subtree(ti, qatree, ETT_DNS_QRY);
+ ti = proto_tree_add_text(dns_tree, start_off, 0, "Queries");
+ qatree = proto_item_add_subtree(ti, ETT_DNS_QRY);
while (count-- > 0)
cur_off += dissect_dns_query(dns_data_ptr, pd, cur_off, qatree);
proto_item_set_len(ti, cur_off - start_off);
@@ -657,9 +654,8 @@ dissect_answer_records(const u_char *dns_data_ptr, int count,
proto_item *ti;
start_off = cur_off;
- ti = proto_tree_add_item(dns_tree, start_off, 0, name);
- qatree = proto_tree_new();
- proto_item_add_subtree(ti, qatree, ETT_DNS_ANS);
+ ti = proto_tree_add_text(dns_tree, start_off, 0, name);
+ qatree = proto_item_add_subtree(ti, ETT_DNS_ANS);
while (count-- > 0)
cur_off += dissect_dns_answer(dns_data_ptr, pd, cur_off, qatree);
proto_item_set_len(ti, cur_off - start_off);
@@ -710,13 +706,12 @@ dissect_dns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, 4,
+ ti = proto_tree_add_text(tree, offset, 4,
(flags & F_RESPONSE) ? "DNS response" : "DNS query");
- dns_tree = proto_tree_new();
- proto_item_add_subtree(ti, dns_tree, ETT_DNS);
+ dns_tree = proto_item_add_subtree(ti, ETT_DNS);
- proto_tree_add_item(dns_tree, offset + DNS_ID, 2, "Transaction ID: 0x%04x",
+ proto_tree_add_text(dns_tree, offset + DNS_ID, 2, "Transaction ID: 0x%04x",
id);
strcpy(buf, val_to_str(flags & F_OPCODE, opcode_vals, "Unknown operation"));
@@ -726,47 +721,46 @@ dissect_dns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
strcat(buf, val_to_str(flags & F_RCODE, rcode_vals,
"Unknown error"));
}
- tf = proto_tree_add_item(dns_tree, offset + DNS_FLAGS, 2, "Flags: 0x%04x (%s)",
+ tf = proto_tree_add_text(dns_tree, offset + DNS_FLAGS, 2, "Flags: 0x%04x (%s)",
flags, buf);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_DNS_FLAGS);
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_DNS_FLAGS);
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_RESPONSE,
2*8, "Response", "Query"));
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_enumerated_bitfield(flags, F_OPCODE,
2*8, opcode_vals, "%s"));
if (flags & F_RESPONSE) {
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_AUTHORITATIVE,
2*8,
"Server is an authority for domain",
"Server isn't an authority for domain"));
}
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_TRUNCATED,
2*8,
"Message is truncated",
"Message is not truncated"));
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_RECDESIRED,
2*8,
"Do query recursively",
"Don't do query recursively"));
if (flags & F_RESPONSE) {
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_boolean_bitfield(flags, F_RECAVAIL,
2*8,
"Server can do recursive queries",
"Server can't do recursive queries"));
- proto_tree_add_item(field_tree, offset + DNS_FLAGS, 2, "%s",
+ proto_tree_add_text(field_tree, offset + DNS_FLAGS, 2, "%s",
decode_enumerated_bitfield(flags, F_RCODE,
2*8, rcode_vals, "%s"));
}
- proto_tree_add_item(dns_tree, offset + DNS_QUEST, 2, "Questions: %d", quest);
- proto_tree_add_item(dns_tree, offset + DNS_ANS, 2, "Answer RRs: %d", ans);
- proto_tree_add_item(dns_tree, offset + DNS_AUTH, 2, "Authority RRs: %d", auth);
- proto_tree_add_item(dns_tree, offset + DNS_ADD, 2, "Additional RRs: %d", add);
+ proto_tree_add_text(dns_tree, offset + DNS_QUEST, 2, "Questions: %d", quest);
+ proto_tree_add_text(dns_tree, offset + DNS_ANS, 2, "Answer RRs: %d", ans);
+ proto_tree_add_text(dns_tree, offset + DNS_AUTH, 2, "Authority RRs: %d", auth);
+ proto_tree_add_text(dns_tree, offset + DNS_ADD, 2, "Additional RRs: %d", add);
cur_off = offset + DNS_HDRLEN;
diff --git a/packet-eth.c b/packet-eth.c
index ea018989ac..9ee7489bcd 100644
--- a/packet-eth.c
+++ b/packet-eth.c
@@ -1,7 +1,7 @@
/* packet-eth.c
* Routines for ethernet packet disassembly
*
- * $Id: packet-eth.c,v 1.9 1999/03/23 03:14:37 gram Exp $
+ * $Id: packet-eth.c,v 1.10 1999/07/07 22:51:42 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -36,6 +36,17 @@
#include "etypes.h"
#include "resolv.h"
+extern const value_string etype_vals[];
+
+/* protocols and header fields */
+int proto_eth = -1;
+int hf_eth_dst = -1;
+int hf_eth_dst_vendor = -1;
+int hf_eth_src = -1;
+int hf_eth_src_vendor = -1;
+int hf_eth_len = -1;
+int hf_eth_type = -1;
+
#define IEEE_802_3_MAX_LEN 1500
/* These are the Netware-ish names for the different Ethernet frame types.
@@ -135,32 +146,36 @@ dissect_eth(const u_char *pd, frame_data *fd, proto_tree *tree) {
if (check_col(fd, COL_INFO))
col_add_str(fd, COL_INFO, "802.3");
if (tree) {
- ti = proto_tree_add_item(tree, 0, offset,
- "IEEE 802.3 %s", (ethhdr_type == ETHERNET_802_3 ? "Raw " : ""));
-
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_IEEE8023);
- proto_tree_add_item(fh_tree, 0, 6, "Destination: %s (%s)",
- ether_to_str((guint8 *) &pd[0]),
- get_ether_name((u_char *) &pd[0]));
- proto_tree_add_item(fh_tree, 6, 6, "Source: %s (%s)",
- ether_to_str((guint8 *) &pd[6]),
- get_ether_name((u_char *)&pd[6]));
- proto_tree_add_item(fh_tree, 12, 2, "Length: %d", length);
+
+ ti = proto_tree_add_item_format(tree, proto_eth, 0, offset,
+ NULL, "IEEE 802.3 %s", (ethhdr_type == ETHERNET_802_3 ? "Raw " : ""));
+
+ fh_tree = proto_item_add_subtree(ti, ETT_IEEE8023);
+
+ proto_tree_add_item(fh_tree, hf_eth_dst, 0, 6, &pd[0]);
+ proto_tree_add_item_hidden(fh_tree, hf_eth_dst_vendor, 0, 3, &pd[0]);
+ proto_tree_add_item(fh_tree, hf_eth_src, 6, 6, &pd[6]);
+ proto_tree_add_item_hidden(fh_tree, hf_eth_src_vendor, 6, 3, &pd[6]);
+ proto_tree_add_item(fh_tree, hf_eth_len, 12, 2, length);
}
} else {
ethhdr_type = ETHERNET_II;
if (tree) {
- ti = proto_tree_add_item(tree, 0, 14, "Ethernet II");
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_ETHER2);
- proto_tree_add_item(fh_tree, 0, 6, "Destination: %s (%s)",
- ether_to_str((guint8 *) &pd[0]),
- get_ether_name((u_char *)&pd[0]));
- proto_tree_add_item(fh_tree, 6, 6, "Source: %s (%s)",
- ether_to_str((guint8 *) &pd[6]),
- get_ether_name((u_char *)&pd[6]));
+
+ ti = proto_tree_add_item_format(tree, proto_eth, 0, 14, NULL,
+ "Ethernet II");
+
+ fh_tree = proto_item_add_subtree(ti, ETT_ETHER2);
+
+ proto_tree_add_item_format(fh_tree, hf_eth_dst, 0, 6, &pd[0],
+ "Destination: %s (%s)", ether_to_str((guint8 *) &pd[0]),
+ get_ether_name((u_char *) &pd[0]));
+
+ proto_tree_add_item_format(fh_tree, hf_eth_src, 6, 6, &pd[6],
+ "Source: %s (%s)", ether_to_str((guint8 *) &pd[6]),
+ get_ether_name((u_char *) &pd[6]));
+
}
}
@@ -172,8 +187,58 @@ dissect_eth(const u_char *pd, frame_data *fd, proto_tree *tree) {
dissect_llc(pd, offset, fd, tree);
break;
case ETHERNET_II:
- ethertype(etype, offset, pd, fd, tree, fh_tree);
+ ethertype(etype, offset, pd, fd, tree, fh_tree, hf_eth_type);
break;
}
}
+void
+proto_register_eth(void)
+{
+ proto_eth = proto_register_protocol (
+ /* name */ "Ethernet",
+ /* abbrev */ "eth" );
+
+ hf_eth_dst = proto_register_field (
+ /* name */ "Destination",
+ /* abbrev */ "eth.dst",
+ /* ftype */ FT_ETHER,
+ /* parent */ proto_eth,
+ /* vals[] */ NULL );
+
+ hf_eth_src = proto_register_field (
+ /* name */ "Source",
+ /* abbrev */ "eth.src",
+ /* ftype */ FT_ETHER,
+ /* parent */ proto_eth,
+ /* vals[] */ NULL );
+
+ hf_eth_dst_vendor = proto_register_field (
+ /* name */ "Destination Hardware Vendor",
+ /* abbrev */ "eth.dst_vendor",
+ /* ftype */ FT_ETHER_VENDOR,
+ /* parent */ proto_eth,
+ /* vals[] */ NULL );
+
+ hf_eth_src_vendor = proto_register_field (
+ /* name */ "Source Hardware Vendor",
+ /* abbrev */ "eth.src_vendor",
+ /* ftype */ FT_ETHER_VENDOR,
+ /* parent */ proto_eth,
+ /* vals[] */ NULL );
+
+ hf_eth_len = proto_register_field (
+ /* name */ "Length",
+ /* abbrev */ "eth.len",
+ /* ftype */ FT_UINT16,
+ /* parent */ proto_eth,
+ /* vals[] */ NULL );
+
+ /* registered here but handled in ethertype.c */
+ hf_eth_type = proto_register_field (
+ /* name */ "Type",
+ /* abbrev */ "eth.type",
+ /* ftype */ FT_VALS_UINT16,
+ /* parent */ proto_eth,
+ /* vals[] */ VALS(etype_vals) );
+}
diff --git a/packet-fddi.c b/packet-fddi.c
index d11f3c1f98..147922af73 100644
--- a/packet-fddi.c
+++ b/packet-fddi.c
@@ -3,7 +3,7 @@
*
* Laurent Deniel <deniel@worldnet.fr>
*
- * $Id: packet-fddi.c,v 1.11 1999/03/23 03:14:37 gram Exp $
+ * $Id: packet-fddi.c,v 1.12 1999/07/07 22:51:42 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -37,6 +37,13 @@
#include "packet.h"
#include "resolv.h"
+int proto_fddi = -1;
+int hf_fddi_fc = -1;
+int hf_fddi_dst = -1;
+int hf_fddi_dst_vendor = -1;
+int hf_fddi_src = -1;
+int hf_fddi_src_vendor = -1;
+
/* FDDI Frame Control values */
#define FDDI_FC_VOID 0x00 /* Void frame */
@@ -128,6 +135,17 @@ static void get_mac_addr(u_char *swapped_addr, const u_char *addr)
}
}
+static void
+swap_mac_addr(u_char *swapped_addr, const u_char *orig_addr)
+{
+ int i;
+
+ for (i = 0; i < 6; i++) {
+ swapped_addr[i] = swaptab[orig_addr[i]];
+ }
+}
+
+
void
capture_fddi(const u_char *pd, guint32 cap_len, packet_counts *ld) {
int offset = 0, fc;
@@ -162,7 +180,6 @@ capture_fddi(const u_char *pd, guint32 cap_len, packet_counts *ld) {
case FDDI_FC_LLC_ASYNC + 15 :
capture_llc(pd, offset, cap_len, ld);
return;
-
default :
ld->other++;
return;
@@ -177,6 +194,7 @@ void dissect_fddi(const u_char *pd, frame_data *fd, proto_tree *tree)
proto_tree *fh_tree;
proto_item *ti;
u_char src[6], dst[6];
+ u_char src_swapped[6], dst_swapped[6];
if (fd->cap_len < FDDI_HEADER_SIZE) {
dissect_data(pd, offset, fd, tree);
@@ -206,20 +224,28 @@ void dissect_fddi(const u_char *pd, frame_data *fd, proto_tree *tree)
offset = FDDI_HEADER_SIZE;
if (tree) {
- ti = proto_tree_add_item(tree, 0, offset,
- "FDDI %s",
- (fc >= FDDI_FC_LLC_ASYNC_MIN && fc <= FDDI_FC_LLC_ASYNC_MAX) ?
+ ti = proto_tree_add_item_format(tree, proto_fddi, 0, offset, NULL,
+ "Fiber Distributed Data Interface, %s",
+ (fc >= FDDI_FC_LLC_ASYNC_MIN && fc <= FDDI_FC_LLC_ASYNC_MAX) ?
"Async LLC" : "unsupported FC");
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_FDDI);
- proto_tree_add_item(fh_tree, FDDI_P_FC, 1, "Frame Control: 0x%02x", fc);
- proto_tree_add_item(fh_tree, FDDI_P_DHOST, 6, "Destination: %s (%s)",
- ether_to_str(dst), get_ether_name(dst));
- proto_tree_add_item(fh_tree, FDDI_P_SHOST, 6, "Source: %s (%s)",
- ether_to_str(src), get_ether_name(src));
- }
+ swap_mac_addr(dst_swapped, (u_char*)&pd[FDDI_P_DHOST]);
+ swap_mac_addr(src_swapped, (u_char*)&pd[FDDI_P_SHOST]);
+ fh_tree = proto_item_add_subtree(ti, ETT_FDDI);
+ proto_tree_add_item(fh_tree, hf_fddi_fc, FDDI_P_FC, 1, fc);
+ proto_tree_add_item(fh_tree, hf_fddi_dst, FDDI_P_DHOST, 6, dst);
+ proto_tree_add_item_hidden(fh_tree, hf_fddi_dst_vendor, FDDI_P_DHOST, 3, dst);
+ proto_tree_add_item(fh_tree, hf_fddi_src, FDDI_P_SHOST, 6, src);
+ proto_tree_add_item_hidden(fh_tree, hf_fddi_src_vendor, FDDI_P_SHOST, 3, src);
+
+ /* hide some bit-swapped mac address fields in the proto_tree, just in case */
+ proto_tree_add_item_hidden(fh_tree, hf_fddi_dst, FDDI_P_DHOST, 6, dst_swapped);
+ proto_tree_add_item_hidden(fh_tree, hf_fddi_dst, FDDI_P_SHOST, 6, src_swapped);
+ proto_tree_add_item_hidden(fh_tree, hf_fddi_dst_vendor, FDDI_P_DHOST, 3, dst_swapped);
+ proto_tree_add_item_hidden(fh_tree, hf_fddi_src_vendor, FDDI_P_SHOST, 3, src_swapped);
+
+ }
switch (fc) {
/* From now, only 802.2 SNAP (Async. LCC frame) is supported */
@@ -248,5 +274,47 @@ void dissect_fddi(const u_char *pd, frame_data *fd, proto_tree *tree)
return;
} /* fc */
-
} /* dissect_fddi */
+
+void
+proto_register_fddi(void)
+{
+ proto_fddi = proto_register_protocol (
+ /* name */ "Fiber Distributed Data Interface",
+ /* abbrev */ "fddi" );
+
+ hf_fddi_fc = proto_register_field (
+ /* name */ "Frame Control",
+ /* abbrev */ "fddi.fc",
+ /* ftype */ FT_UINT8,
+ /* parent */ proto_fddi,
+ /* vals[] */ NULL );
+
+ hf_fddi_dst = proto_register_field (
+ /* name */ "Destination",
+ /* abbrev */ "fddi.dst",
+ /* ftype */ FT_ETHER,
+ /* parent */ proto_fddi,
+ /* vals[] */ NULL );
+
+ hf_fddi_src = proto_register_field (
+ /* name */ "Source",
+ /* abbrev */ "fddi.src",
+ /* ftype */ FT_ETHER,
+ /* parent */ proto_fddi,
+ /* vals[] */ NULL );
+
+ hf_fddi_dst_vendor = proto_register_field (
+ /* name */ "Destination Hardware Vendor",
+ /* abbrev */ "fddi.dst_vendor",
+ /* ftype */ FT_ETHER_VENDOR,
+ /* parent */ proto_fddi,
+ /* vals[] */ NULL );
+
+ hf_fddi_src_vendor = proto_register_field (
+ /* name */ "Source Hardware Vendor",
+ /* abbrev */ "fddi.src_vendor",
+ /* ftype */ FT_ETHER_VENDOR,
+ /* parent */ proto_fddi,
+ /* vals[] */ NULL );
+}
diff --git a/packet-ftp.c b/packet-ftp.c
index a8feed5afd..7dddacd7a3 100644
--- a/packet-ftp.c
+++ b/packet-ftp.c
@@ -2,7 +2,7 @@
* Routines for ftp packet dissection
* Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
*
- * $Id: packet-ftp.c,v 1.3 1999/05/13 01:05:11 sharpe Exp $
+ * $Id: packet-ftp.c,v 1.4 1999/07/07 22:51:43 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -92,23 +92,22 @@ dissect_ftp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"File Transfer Protocol");
- ftp_tree = proto_tree_new();
- proto_item_add_subtree(ti, ftp_tree, ETT_FTP);
+ ftp_tree = proto_item_add_subtree(ti, ETT_FTP);
if (pi.match_port == pi.destport) { /* Request */
- proto_tree_add_item(ftp_tree, offset, i1, "Request: %s", rr);
+ proto_tree_add_text(ftp_tree, offset, i1, "Request: %s", rr);
- proto_tree_add_item(ftp_tree, offset + i1 + 1, END_OF_FRAME, "Request Arg: %s", rd);
+ proto_tree_add_text(ftp_tree, offset + i1 + 1, END_OF_FRAME, "Request Arg: %s", rd);
}
else {
- proto_tree_add_item(ftp_tree, offset, i1, "Response: %s", rr);
+ proto_tree_add_text(ftp_tree, offset, i1, "Response: %s", rr);
- proto_tree_add_item(ftp_tree, offset + i1 + 1, END_OF_FRAME, "Response Arg: %s", rd);
+ proto_tree_add_text(ftp_tree, offset + i1 + 1, END_OF_FRAME, "Response Arg: %s", rd);
}
}
@@ -130,7 +129,7 @@ dissect_ftpdata(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"File Transfer Protocol Data");
}
diff --git a/packet-giop.c b/packet-giop.c
index 7db6594b2c..376afe8cba 100644
--- a/packet-giop.c
+++ b/packet-giop.c
@@ -3,7 +3,7 @@
*
* Laurent Deniel <deniel@worldnet.fr>
*
- * $Id: packet-giop.c,v 1.2 1999/03/23 03:14:37 gram Exp $
+ * $Id: packet-giop.c,v 1.3 1999/07/07 22:51:43 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -258,27 +258,26 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- ti = proto_tree_add_item(tree, offset,
+ ti = proto_tree_add_text(tree, offset,
GIOP_HEADER_SIZE + message_size,
"General Inter-ORB Protocol");
- clnp_tree = proto_tree_new();
- proto_item_add_subtree(ti, clnp_tree, ETT_GIOP);
- proto_tree_add_item(clnp_tree, offset, 4,
+ clnp_tree = proto_item_add_subtree(ti, ETT_GIOP);
+ proto_tree_add_text(clnp_tree, offset, 4,
"Magic number: %s", GIOP_MAGIC);
- proto_tree_add_item(clnp_tree, offset + 4, 2,
+ proto_tree_add_text(clnp_tree, offset + 4, 2,
"Version: %d.%d",
header.GIOP_version.major,
header.GIOP_version.minor);
switch(minor_version) {
case 1 :
- proto_tree_add_item(clnp_tree, offset + 6, 1,
+ proto_tree_add_text(clnp_tree, offset + 6, 1,
"Flags: 0x%02x (%s%s)",
header.flags,
(big_endian) ? "little" : "big",
(header.flags & 0x02) ? " fragment" : "");
break;
case 0 :
- proto_tree_add_item(clnp_tree, offset + 6, 1,
+ proto_tree_add_text(clnp_tree, offset + 6, 1,
"Byte ordering: %s endian",
(big_endian) ? "little" : "big");
break;
@@ -286,7 +285,7 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
break;
} /* minor_version */
- proto_tree_add_item(clnp_tree, offset + 7, 1,
+ proto_tree_add_text(clnp_tree, offset + 7, 1,
"Message type: %s",
(header.message_type == Request) ? "Request" :
(header.message_type == Reply) ? "Reply" :
@@ -297,7 +296,7 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
(header.message_type == MessageError) ? "MessageError" :
(header.message_type == Fragment) ? "Fragment" : "?");
- proto_tree_add_item(clnp_tree, offset + 8, 4,
+ proto_tree_add_text(clnp_tree, offset + 8, 4,
"Message size: %d", message_size);
} /* tree */
@@ -332,12 +331,12 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(context_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(context_id),
"Context id: %d", context_id);
- proto_tree_add_item(clnp_tree, offset + sizeof(context_id),
+ proto_tree_add_text(clnp_tree, offset + sizeof(context_id),
sizeof(sequence_length),
"Sequence length: %d", sequence_length);
- proto_tree_add_item(clnp_tree,
+ proto_tree_add_text(clnp_tree,
offset +
sizeof(context_id) + sizeof(sequence_length),
sequence_length,
@@ -367,13 +366,13 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
request_id = (big_endian)? pntohl(&request_1_1.request_id) :
pletohl(&request_1_1.request_id);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(request_id),
"Request id: %d", request_id);
- proto_tree_add_item(clnp_tree, offset + sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset + sizeof(request_id),
sizeof(request_1_1.response_expected),
"Response expected: %d",
response_expected);
- proto_tree_add_item(clnp_tree, offset + sizeof(request_id) +
+ proto_tree_add_text(clnp_tree, offset + sizeof(request_id) +
sizeof(request_1_1.response_expected),
3,
"Reserved");
@@ -387,9 +386,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
request_id = (big_endian)? pntohl(&request_1_0.request_id) :
pletohl(&request_1_0.request_id);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(request_id),
"Request id: %d", request_id);
- proto_tree_add_item(clnp_tree, offset + sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset + sizeof(request_id),
sizeof(request_1_0.response_expected),
"Response expected: %d",
response_expected);
@@ -412,9 +411,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
pntohl(&pd[offset]) : pletohl(&pd[offset]);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset, sizeof(sequence_length),
"Object key length: %d", sequence_length);
- proto_tree_add_item(clnp_tree, offset + sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset + sizeof(sequence_length),
sequence_length,
"Object key: %s",
print_object_key(sequence_length,
@@ -435,13 +434,13 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset, sizeof(sequence_length),
"Operation length: %d", sequence_length);
- proto_tree_add_item(clnp_tree, offset + sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset + sizeof(sequence_length),
sequence_length,
"Operation: %s",
&pd[offset+sizeof(sequence_length)]);
- proto_tree_add_item(clnp_tree, offset +
+ proto_tree_add_text(clnp_tree, offset +
sizeof(sequence_length)+ sequence_length,
message_size - END_OF_GIOP_MESSAGE -
sizeof(sequence_length) - sequence_length,
@@ -466,9 +465,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
pntohl(&reply.reply_status) : pletohl(&reply.reply_status);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(request_id),
"Request id: %d", request_id);
- proto_tree_add_item(clnp_tree, offset + sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset + sizeof(request_id),
sizeof(reply_status),
"Reply status: %s",
reply_status == NO_EXCEPTION ? "no exception" :
@@ -504,9 +503,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset, sizeof(sequence_length),
"Exception length: %d", sequence_length);
- proto_tree_add_item(clnp_tree, offset + sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset + sizeof(sequence_length),
sequence_length,
"Exception id: %s",
&pd[offset+sizeof(sequence_length)]);
@@ -522,9 +521,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
pletohl(&pd[offset+sizeof(minor_code_value)]);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(minor_code_value),
+ proto_tree_add_text(clnp_tree, offset, sizeof(minor_code_value),
"Minor code value: %d", minor_code_value);
- proto_tree_add_item(clnp_tree, offset + sizeof(minor_code_value),
+ proto_tree_add_text(clnp_tree, offset + sizeof(minor_code_value),
sizeof(completion_status),
"Completion Status: %d",
completion_status);
@@ -543,9 +542,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset, sizeof(sequence_length),
"Exception length: %d", sequence_length);
- proto_tree_add_item(clnp_tree, offset + sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset + sizeof(sequence_length),
sequence_length,
"Exception id: %s",
&pd[offset+sizeof(sequence_length)]);
@@ -563,9 +562,9 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree && sequence_length) {
- proto_tree_add_item(clnp_tree, offset, sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset, sizeof(sequence_length),
"Exception member length: %d", sequence_length);
- proto_tree_add_item(clnp_tree, offset + sizeof(sequence_length),
+ proto_tree_add_text(clnp_tree, offset + sizeof(sequence_length),
sequence_length,
"Exception member: %s",
&pd[offset+sizeof(sequence_length)]);
@@ -577,7 +576,7 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
else {
if (tree) {
- proto_tree_add_item(clnp_tree, offset,
+ proto_tree_add_text(clnp_tree, offset,
message_size - END_OF_GIOP_MESSAGE,
"Reply body: <not shown>");
}
@@ -597,13 +596,13 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
pletohl(&pd[offset+sizeof(request_id)]);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(request_id),
"Request id: %d", request_id);
- proto_tree_add_item(clnp_tree, offset + sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset + sizeof(request_id),
sizeof(sequence_length),
"Object key length: %d", sequence_length);
offset += sizeof(request_id) + sizeof(sequence_length);
- proto_tree_add_item(clnp_tree,
+ proto_tree_add_text(clnp_tree,
offset,
sequence_length,
"Object key: %s",
@@ -626,14 +625,14 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
pntohl(&locate_rep.locate_status) : pletohl(&locate_rep.locate_status);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(request_id),
"Request id: %d", request_id);
- proto_tree_add_item(clnp_tree, offset + sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset + sizeof(request_id),
sizeof(locate_status),
"Locate status: %d", locate_status);
offset += sizeof(request_id) + sizeof(locate_status);
if (locate_status == OBJECT_FORWARD) {
- proto_tree_add_item(clnp_tree, offset,
+ proto_tree_add_text(clnp_tree, offset,
message_size - END_OF_GIOP_MESSAGE,
"Locate reply body: <not shown>");
}
@@ -655,7 +654,7 @@ void dissect_giop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
pntohl(&pd[offset]) : pletohl(&pd[offset]);
if (tree) {
- proto_tree_add_item(clnp_tree, offset, sizeof(request_id),
+ proto_tree_add_text(clnp_tree, offset, sizeof(request_id),
"Request id: %d", request_id);
}
diff --git a/packet-gre.c b/packet-gre.c
index c03d8ddcbf..b56ebdc2a9 100644
--- a/packet-gre.c
+++ b/packet-gre.c
@@ -2,7 +2,7 @@
* Routines for the Generic Routing Encapsulation (GRE) protocol
* Brad Robel-Forrest <brad.robel-forrest@watchguard.com>
*
- * $Id: packet-gre.c,v 1.1 1999/06/11 15:30:37 gram Exp $
+ * $Id: packet-gre.c,v 1.2 1999/07/07 22:51:43 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -80,38 +80,36 @@ dissect_gre(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (type == GRE_PPP) {
is_ppp = 1;
- ti = proto_tree_add_item(tree, offset, calc_len(flags_and_ver, 1),
+ ti = proto_tree_add_text(tree, offset, calc_len(flags_and_ver, 1),
"Generic Routing Encapsulation (PPP)");
- gre_tree = proto_tree_new();
- proto_item_add_subtree(ti, gre_tree, ETT_GRE);
+ gre_tree = proto_item_add_subtree(ti, ETT_GRE);
add_flags_and_ver(gre_tree, flags_and_ver, offset, 1);
}
else {
is_ppp = 0;
- ti = proto_tree_add_item(tree, offset, calc_len(flags_and_ver, 1),
+ ti = proto_tree_add_text(tree, offset, calc_len(flags_and_ver, 1),
"Generic Routing Encapsulation");
- gre_tree = proto_tree_new();
- proto_item_add_subtree(ti, gre_tree, ETT_GRE);
+ gre_tree = proto_item_add_subtree(ti, ETT_GRE);
add_flags_and_ver(gre_tree, flags_and_ver, offset, 0);
}
offset += sizeof(flags_and_ver);
- proto_tree_add_item(gre_tree, offset, sizeof(type),
+ proto_tree_add_text(gre_tree, offset, sizeof(type),
"Protocol Type: %s (%#04x)",
val_to_str(type, typevals, "Unknown"), type);
offset += sizeof(type);
if (flags_and_ver & GH_B_C || flags_and_ver & GH_B_R) {
guint16 checksum = pntohs(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(checksum),
+ proto_tree_add_text(gre_tree, offset, sizeof(checksum),
"Checksum: %u", checksum);
offset += sizeof(checksum);
}
if (flags_and_ver & GH_B_C || flags_and_ver & GH_B_R) {
guint16 rtoffset = pntohs(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(rtoffset),
+ proto_tree_add_text(gre_tree, offset, sizeof(rtoffset),
"Offset: %u", rtoffset);
offset += sizeof(rtoffset);
}
@@ -122,18 +120,18 @@ dissect_gre(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
guint16 callid;
paylen = pntohs(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(paylen),
+ proto_tree_add_text(gre_tree, offset, sizeof(paylen),
"Payload length: %u", paylen);
offset += sizeof(paylen);
callid = pntohs(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(callid),
+ proto_tree_add_text(gre_tree, offset, sizeof(callid),
"Call ID: %u", callid);
offset += sizeof(callid);
}
else {
guint32 key = pntohl(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(key),
+ proto_tree_add_text(gre_tree, offset, sizeof(key),
"Key: %u", key);
offset += sizeof(key);
}
@@ -141,25 +139,25 @@ dissect_gre(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (flags_and_ver & GH_B_S) {
guint32 seqnum = pntohl(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(seqnum),
+ proto_tree_add_text(gre_tree, offset, sizeof(seqnum),
"Sequence number: %u", seqnum);
offset += sizeof(seqnum);
}
if (is_ppp && flags_and_ver & GH_P_A) {
guint32 acknum = pntohl(pd + offset);
- proto_tree_add_item(gre_tree, offset, sizeof(acknum),
+ proto_tree_add_text(gre_tree, offset, sizeof(acknum),
"Acknowledgement number: %u", acknum);
offset += sizeof(acknum);
}
if (flags_and_ver & GH_B_R) {
- proto_tree_add_item(gre_tree, offset, sizeof(guint16),
+ proto_tree_add_text(gre_tree, offset, sizeof(guint16),
"Address family: %u", pntohs(pd + offset));
offset += sizeof(guint16);
- proto_tree_add_item(gre_tree, offset, 1,
+ proto_tree_add_text(gre_tree, offset, 1,
"SRE offset: %u", pd[offset++]);
- proto_tree_add_item(gre_tree, offset, 1,
+ proto_tree_add_text(gre_tree, offset, 1,
"SRE length: %u", pd[offset++]);
}
@@ -193,44 +191,43 @@ add_flags_and_ver(proto_tree *tree, guint16 flags_and_ver, int offset, int is_pp
proto_tree * fv_tree;
int nbits = sizeof(flags_and_ver) * 8;
- ti = proto_tree_add_item(tree, offset, 2,
+ ti = proto_tree_add_text(tree, offset, 2,
"Flags and version: %#08x", flags_and_ver);
- fv_tree = proto_tree_new();
- proto_item_add_subtree(ti, fv_tree, ETT_GRE_FLAGS);
+ fv_tree = proto_item_add_subtree(ti, ETT_GRE_FLAGS);
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_boolean_bitfield(flags_and_ver, GH_B_C, nbits,
"Checksum", "No checksum"));
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_boolean_bitfield(flags_and_ver, GH_B_R, nbits,
"Routing", "No routing"));
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_boolean_bitfield(flags_and_ver, GH_B_K, nbits,
"Key", "No key"));
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_boolean_bitfield(flags_and_ver, GH_B_S, nbits,
"Sequence number", "No sequence number"));
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_boolean_bitfield(flags_and_ver, GH_B_s, nbits,
"Strict source route", "No strict source route"));
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_numeric_bitfield(flags_and_ver, GH_B_RECUR, nbits,
"Recursion control: %u"));
if (is_ppp) {
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_boolean_bitfield(flags_and_ver, GH_P_A, nbits,
"Acknowledgment number", "No acknowledgment number"));
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_numeric_bitfield(flags_and_ver, GH_P_FLAGS, nbits,
"Flags: %u"));
}
else {
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_numeric_bitfield(flags_and_ver, GH_R_FLAGS, nbits,
"Flags: %u"));
}
- proto_tree_add_item(fv_tree, offset, sizeof(flags_and_ver), "%s",
+ proto_tree_add_text(fv_tree, offset, sizeof(flags_and_ver), "%s",
decode_numeric_bitfield(flags_and_ver, GH_B_VER, nbits,
"Version: %u"));
}
diff --git a/packet-http.c b/packet-http.c
index b229c7ae89..53c7fac1a9 100644
--- a/packet-http.c
+++ b/packet-http.c
@@ -3,7 +3,7 @@
*
* Guy Harris <guy@netapp.com>
*
- * $Id: packet-http.c,v 1.3 1999/03/30 04:41:01 guy Exp $
+ * $Id: packet-http.c,v 1.4 1999/07/07 22:51:43 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -70,10 +70,9 @@ void dissect_http(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Hypertext Transfer Protocol");
- http_tree = proto_tree_new();
- proto_item_add_subtree(ti, http_tree, ETT_HTTP);
+ http_tree = proto_item_add_subtree(ti, ETT_HTTP);
while (data < dataend) {
/*
@@ -160,14 +159,14 @@ void dissect_http(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
/*
* Put this line.
*/
- proto_tree_add_item(http_tree, offset, linelen, "%s",
+ proto_tree_add_text(http_tree, offset, linelen, "%s",
format_text(data, linelen));
offset += linelen;
data = lineend;
}
if (data < dataend) {
- proto_tree_add_item(http_tree, offset, END_OF_FRAME,
+ proto_tree_add_text(http_tree, offset, END_OF_FRAME,
"Data (%d bytes)", END_OF_FRAME);
}
}
diff --git a/packet-icmpv6.c b/packet-icmpv6.c
index b34186b270..182522ebf3 100644
--- a/packet-icmpv6.c
+++ b/packet-icmpv6.c
@@ -1,7 +1,7 @@
/* packet-icmpv6.c
* Routines for ICMPv6 packet disassembly
*
- * $Id: packet-icmpv6.c,v 1.2 1999/03/29 02:24:29 gram Exp $
+ * $Id: packet-icmpv6.c,v 1.3 1999/07/07 22:51:44 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -79,9 +79,8 @@ again:
len = opt->nd_opt_len << 3;
/* !!! specify length */
- ti = proto_tree_add_item(tree, offset, len, "ICMPv6 options");
- icmp6opt_tree = proto_tree_new();
- proto_item_add_subtree(ti, icmp6opt_tree, ETT_ICMPv6OPT);
+ ti = proto_tree_add_text(tree, offset, len, "ICMPv6 options");
+ icmp6opt_tree = proto_item_add_subtree(ti, ETT_ICMPv6OPT);
switch (opt->nd_opt_type) {
case ND_OPT_SOURCE_LINKADDR:
@@ -104,10 +103,10 @@ again:
break;
}
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_hdr, nd_opt_type), 1,
"Type: 0x%02x (%s)", opt->nd_opt_type, typename);
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_hdr, nd_opt_len), 1,
"Length: %d bytes (0x%02x)", opt->nd_opt_len << 3, opt->nd_opt_len);
@@ -128,7 +127,7 @@ again:
t[i * 3 - 1] = ':';
sprintf(&t[i * 3], "%02x", p[i] & 0xff);
}
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + sizeof(*opt), len, "Link-layer address: %s", t);
break;
}
@@ -136,37 +135,36 @@ again:
{
struct nd_opt_prefix_info *pi = (struct nd_opt_prefix_info *)opt;
int flagoff;
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_prefix_info, nd_opt_pi_prefix_len),
1, "Prefix length: %d", pi->nd_opt_pi_prefix_len);
flagoff = offsetof(struct nd_opt_prefix_info, nd_opt_pi_flags_reserved);
- tf = proto_tree_add_item(icmp6opt_tree, flagoff, 1, "Flags: 0x%02x",
+ tf = proto_tree_add_text(icmp6opt_tree, flagoff, 1, "Flags: 0x%02x",
pntohl(&pi->nd_opt_pi_flags_reserved));
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_ICMPv6FLAG);
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_ICMPv6FLAG);
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pi->nd_opt_pi_flags_reserved,
0x80, 8, "Onlink", "Not onlink"));
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pi->nd_opt_pi_flags_reserved,
0x40, 8, "Auto", "Not auto"));
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_prefix_info, nd_opt_pi_valid_time),
4, "Valid lifetime: 0x%08x",
pntohl(&pi->nd_opt_pi_valid_time));
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_prefix_info, nd_opt_pi_preferred_time),
4, "Preferred lifetime: 0x%08x",
pntohl(&pi->nd_opt_pi_preferred_time));
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_prefix_info, nd_opt_pi_prefix),
16, "Prefix: %s", ip6_to_str(&pi->nd_opt_pi_prefix));
break;
}
case ND_OPT_REDIRECTED_HEADER:
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + 8, (opt->nd_opt_len << 3) - 8, "Redirected packet");
/* tiny sanity check */
if ((pd[offset + 8] & 0xf0) == 0x60)
@@ -177,7 +175,7 @@ again:
case ND_OPT_MTU:
{
struct nd_opt_mtu *pi = (struct nd_opt_mtu *)opt;
- proto_tree_add_item(icmp6opt_tree,
+ proto_tree_add_text(icmp6opt_tree,
offset + offsetof(struct nd_opt_mtu, nd_opt_mtu_mtu), 4,
"MTU: %d", pi->nd_opt_mtu_mtu);
break;
@@ -332,20 +330,19 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if (tree) {
/* !!! specify length */
- ti = proto_tree_add_item(tree, offset, len,
+ ti = proto_tree_add_text(tree, offset, len,
"ICMPv6");
- icmp6_tree = proto_tree_new();
- proto_item_add_subtree(ti, icmp6_tree, ETT_ICMPv6);
+ icmp6_tree = proto_item_add_subtree(ti, ETT_ICMPv6);
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_type), 1,
"Type: 0x%02x (%s)", dp->icmp6_type, typename);
if (codename) {
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_code), 1,
"Code: 0x%02x (%s)", dp->icmp6_code, codename);
}
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_cksum), 2,
"Checksum: 0x%04x", (guint16)htons(dp->icmp6_cksum));
@@ -361,7 +358,7 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
break;
case ICMP6_PACKET_TOO_BIG:
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_mtu), 4,
"MTU: %d", pntohl(&dp->icmp6_mtu));
/* tiny sanity check */
@@ -372,7 +369,7 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
break;
case ICMP6_PARAM_PROB:
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_pptr), 4,
"Problem pointer: 0x%04x", pntohl(&dp->icmp6_pptr));
/* tiny sanity check */
@@ -384,10 +381,10 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
break;
case ICMP6_ECHO_REQUEST:
case ICMP6_ECHO_REPLY:
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_id), 2,
"ID: 0x%04x", (guint16)ntohs(dp->icmp6_id));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_seq), 2,
"Sequence: 0x%04x", (guint16)ntohs(dp->icmp6_seq));
dissect_data(pd, offset + sizeof(*dp), fd, icmp6_tree);
@@ -395,11 +392,11 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case ICMP6_MEMBERSHIP_QUERY:
case ICMP6_MEMBERSHIP_REPORT:
case ICMP6_MEMBERSHIP_REDUCTION:
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_hdr, icmp6_maxdelay), 2,
"Maximum response delay: %d",
(guint16)ntohs(dp->icmp6_maxdelay));
- proto_tree_add_item(icmp6_tree, offset + sizeof(*dp), 16,
+ proto_tree_add_text(icmp6_tree, offset + sizeof(*dp), 16,
"Multicast Address: %s",
ip6_to_str((struct e_in6_addr *)(dp + 1)));
break;
@@ -412,30 +409,29 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
int flagoff;
guint32 ra_flags;
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_router_advert, nd_ra_curhoplimit),
1, "Cur hop limit: %d", ra->nd_ra_curhoplimit);
flagoff = offset + offsetof(struct nd_router_advert, nd_ra_flags_reserved);
ra_flags = pntohl(&pd[flagoff]);
- tf = proto_tree_add_item(icmp6_tree, flagoff, 4, "Flags: 0x%08x", ra_flags);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_ICMPv6FLAG);
- proto_tree_add_item(field_tree, flagoff, 4, "%s",
+ tf = proto_tree_add_text(icmp6_tree, flagoff, 4, "Flags: 0x%08x", ra_flags);
+ field_tree = proto_item_add_subtree(tf, ETT_ICMPv6FLAG);
+ proto_tree_add_text(field_tree, flagoff, 4, "%s",
decode_boolean_bitfield(ra_flags,
0x80000000, 32, "Managed", "Not managed"));
- proto_tree_add_item(field_tree, flagoff, 4, "%s",
+ proto_tree_add_text(field_tree, flagoff, 4, "%s",
decode_boolean_bitfield(ra_flags,
0x40000000, 32, "Other", "Not other"));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_router_advert, nd_ra_router_lifetime),
2, "Router lifetime: %d",
(guint16)ntohs(ra->nd_ra_router_lifetime));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_router_advert, nd_ra_reachable), 4,
"Reachable time: %d", pntohl(&ra->nd_ra_reachable));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_router_advert, nd_ra_retransmit), 4,
"Retrans time: %d", pntohl(&ra->nd_ra_retransmit));
dissect_icmpv6opt(pd, offset + sizeof(struct nd_router_advert), fd, icmp6_tree);
@@ -445,7 +441,7 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
{
struct nd_neighbor_solicit *ns = (struct nd_neighbor_solicit *)dp;
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_neighbor_solicit, nd_ns_target), 16,
#ifdef INET6
"Target: %s (%s)",
@@ -467,22 +463,21 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
flagoff = offset + offsetof(struct nd_neighbor_advert, nd_na_flags_reserved);
na_flags = pntohl(&pd[flagoff]);
- tf = proto_tree_add_item(icmp6_tree, flagoff, 4, "Flags: 0x%08x", na_flags);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_ICMPv6FLAG);
- proto_tree_add_item(field_tree, flagoff, 4, "%s",
+ tf = proto_tree_add_text(icmp6_tree, flagoff, 4, "Flags: 0x%08x", na_flags);
+ field_tree = proto_item_add_subtree(tf, ETT_ICMPv6FLAG);
+ proto_tree_add_text(field_tree, flagoff, 4, "%s",
decode_boolean_bitfield(na_flags,
0x80000000, 32, "Router", "Not router"));
- proto_tree_add_item(field_tree, flagoff, 4, "%s",
+ proto_tree_add_text(field_tree, flagoff, 4, "%s",
decode_boolean_bitfield(na_flags,
0x40000000, 32, "Solicited", "Not adverted"));
- proto_tree_add_item(field_tree, flagoff, 4, "%s",
+ proto_tree_add_text(field_tree, flagoff, 4, "%s",
decode_boolean_bitfield(na_flags,
0x20000000, 32, "Override", "Not override"));
targetoff = offset + offsetof(struct nd_neighbor_advert, nd_na_target);
na_target_p = (struct e_in6_addr*) &pd[targetoff];
- proto_tree_add_item(icmp6_tree, targetoff, 16,
+ proto_tree_add_text(icmp6_tree, targetoff, 16,
#ifdef INET6
"Target: %s (%s)",
get_hostname6(na_target_p),
@@ -498,7 +493,7 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
{
struct nd_redirect *rd = (struct nd_redirect *)dp;
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_redirect, nd_rd_target), 16,
#ifdef INET6
"Target: %s (%s)",
@@ -508,7 +503,7 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
#endif
ip6_to_str(&rd->nd_rd_target));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct nd_redirect, nd_rd_dst), 16,
#ifdef INET6
"Destination: %s (%s)",
@@ -525,36 +520,35 @@ dissect_icmpv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
{
struct icmp6_router_renum *rr = (struct icmp6_router_renum *)dp;
int flagoff;
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_router_renum, rr_seqnum), 4,
/*"Sequence number: 0x%08x", (u_int32_t)htonl(rr->rr_seqnum));*/
"Sequence number: 0x%08x", pntohl(&rr->rr_seqnum));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_router_renum, rr_segnum), 1,
"Segment number: 0x%02x", rr->rr_segnum);
flagoff = offset + offsetof(struct icmp6_router_renum, rr_segnum) + 1;
- tf = proto_tree_add_item(icmp6_tree, flagoff, 4, "Flags: 0x%08x",
+ tf = proto_tree_add_text(icmp6_tree, flagoff, 4, "Flags: 0x%08x",
pd[flagoff]);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_ICMPv6FLAG);
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_ICMPv6FLAG);
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pd[flagoff], 0x80, 8,
"Test command", "Not test command"));
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pd[flagoff], 0x40, 8,
"Result requested", "Result not requested"));
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pd[flagoff], 0x20, 8,
"All interfaces", "Not all interfaces"));
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pd[flagoff], 0x10, 8,
"Site specific", "Not site specific"));
- proto_tree_add_item(field_tree, flagoff, 1, "%s",
+ proto_tree_add_text(field_tree, flagoff, 1, "%s",
decode_boolean_bitfield(pd[flagoff], 0x08, 8,
"Processed previously", "Complete result"));
- proto_tree_add_item(icmp6_tree,
+ proto_tree_add_text(icmp6_tree,
offset + offsetof(struct icmp6_router_renum, rr_segnum), 2,
"Max delay: 0x%04x", pntohs(&rr->rr_maxdelay));
dissect_data(pd, offset + sizeof(*rr), fd, tree); /*XXX*/
diff --git a/packet-ip.c b/packet-ip.c
index 67574c3f18..3d7585ff84 100644
--- a/packet-ip.c
+++ b/packet-ip.c
@@ -1,7 +1,7 @@
/* packet-ip.c
* Routines for IP and miscellaneous IP protocol packet disassembly
*
- * $Id: packet-ip.c,v 1.26 1999/06/21 16:20:18 gram Exp $
+ * $Id: packet-ip.c,v 1.27 1999/07/07 22:51:44 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -47,6 +47,14 @@
#endif
extern packet_info pi;
+
+int proto_ip = -1;
+int hf_ip_version = -1;
+int hf_ip_hdr_len = -1;
+int hf_ip_tos = -1;
+int hf_ip_tos_precedence = -1;
+int hf_ip_dst = -1;
+int hf_ip_src = -1;
/* ICMP structs and definitions */
typedef struct _e_icmp {
@@ -236,29 +244,28 @@ dissect_ipopt_security(proto_tree *opt_tree, const char *name,
{IPSEC_RESERVED8, "Reserved" },
{0, NULL } };
- tf = proto_tree_add_item(opt_tree, offset, optlen, "%s:", name);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_IP_OPTION_SEC);
+ tf = proto_tree_add_text(opt_tree, offset, optlen, "%s:", name);
+ field_tree = proto_item_add_subtree(tf, ETT_IP_OPTION_SEC);
offset += 2;
val = pntohs(opd);
- proto_tree_add_item(field_tree, offset, 2,
+ proto_tree_add_text(field_tree, offset, 2,
"Security: %s", val_to_str(val, secl_vals, "Unknown (0x%x)"));
offset += 2;
opd += 2;
val = pntohs(opd);
- proto_tree_add_item(field_tree, offset, 2,
+ proto_tree_add_text(field_tree, offset, 2,
"Compartments: %d", val);
offset += 2;
opd += 2;
- proto_tree_add_item(field_tree, offset, 2,
+ proto_tree_add_text(field_tree, offset, 2,
"Handling restrictions: %c%c", opd[0], opd[1]);
offset += 2;
opd += 2;
- proto_tree_add_item(field_tree, offset, 3,
+ proto_tree_add_text(field_tree, offset, 3,
"Transmission control code: %c%c%c", opd[0], opd[1], opd[2]);
}
@@ -272,16 +279,15 @@ dissect_ipopt_route(proto_tree *opt_tree, const char *name,
int optoffset = 0;
struct in_addr addr;
- tf = proto_tree_add_item(opt_tree, offset, optlen, "%s (%d bytes)", name,
+ tf = proto_tree_add_text(opt_tree, offset, optlen, "%s (%d bytes)", name,
optlen);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_IP_OPTION_ROUTE);
+ field_tree = proto_item_add_subtree(tf, ETT_IP_OPTION_ROUTE);
optoffset += 2; /* skip past type and length */
optlen -= 2; /* subtract size of type and length */
ptr = *opd;
- proto_tree_add_item(field_tree, offset + optoffset, 1,
+ proto_tree_add_text(field_tree, offset + optoffset, 1,
"Pointer: %d%s", ptr,
((ptr < 4) ? " (points before first address)" :
((ptr & 3) ? " (points to middle of address)" : "")));
@@ -292,7 +298,7 @@ dissect_ipopt_route(proto_tree *opt_tree, const char *name,
while (optlen > 0) {
if (optlen < 4) {
- proto_tree_add_item(field_tree, offset, optlen,
+ proto_tree_add_text(field_tree, offset, optlen,
"(suboption would go past end of option)");
break;
}
@@ -300,7 +306,7 @@ dissect_ipopt_route(proto_tree *opt_tree, const char *name,
/* Avoids alignment problems on many architectures. */
memcpy((char *)&addr, (char *)opd, sizeof(addr));
- proto_tree_add_item(field_tree, offset + optoffset, 4,
+ proto_tree_add_text(field_tree, offset + optoffset, 4,
"%s%s",
((addr.s_addr == 0) ? "-" : (char *)get_hostname(addr.s_addr)),
((optoffset == ptr) ? " <- (current)" : ""));
@@ -314,7 +320,7 @@ static void
dissect_ipopt_sid(proto_tree *opt_tree, const char *name, const u_char *opd,
int offset, guint optlen)
{
- proto_tree_add_item(opt_tree, offset, optlen,
+ proto_tree_add_text(opt_tree, offset, optlen,
"%s: %d", name, pntohs(opd));
return;
}
@@ -337,15 +343,14 @@ dissect_ipopt_timestamp(proto_tree *opt_tree, const char *name, const u_char *op
struct in_addr addr;
guint ts;
- tf = proto_tree_add_item(opt_tree, offset, optlen, "%s:", name);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_IP_OPTION_TIMESTAMP);
+ tf = proto_tree_add_text(opt_tree, offset, optlen, "%s:", name);
+ field_tree = proto_item_add_subtree(tf, ETT_IP_OPTION_TIMESTAMP);
optoffset += 2; /* skip past type and length */
optlen -= 2; /* subtract size of type and length */
ptr = *opd;
- proto_tree_add_item(field_tree, offset + optoffset, 1,
+ proto_tree_add_text(field_tree, offset + optoffset, 1,
"Pointer: %d%s", ptr,
((ptr < 5) ? " (points before first address)" :
(((ptr - 1) & 3) ? " (points to middle of address)" : "")));
@@ -355,10 +360,10 @@ dissect_ipopt_timestamp(proto_tree *opt_tree, const char *name, const u_char *op
ptr--; /* ptr is 1-origin */
flg = *opd;
- proto_tree_add_item(field_tree, offset + optoffset, 1,
+ proto_tree_add_text(field_tree, offset + optoffset, 1,
"Overflow: %d", flg >> 4);
flg &= 0xF;
- proto_tree_add_item(field_tree, offset + optoffset, 1,
+ proto_tree_add_text(field_tree, offset + optoffset, 1,
"Flag: %s", val_to_str(flg, flag_vals, "Unknown (0x%x)"));
optoffset++;
opd++;
@@ -367,7 +372,7 @@ dissect_ipopt_timestamp(proto_tree *opt_tree, const char *name, const u_char *op
while (optlen > 0) {
if (flg == IPOPT_TS_TSANDADDR) {
if (optlen < 4) {
- proto_tree_add_item(field_tree, offset + optoffset, optlen,
+ proto_tree_add_text(field_tree, offset + optoffset, optlen,
"(suboption would go past end of option)");
break;
}
@@ -376,7 +381,7 @@ dissect_ipopt_timestamp(proto_tree *opt_tree, const char *name, const u_char *op
opd += 4;
optlen -= 4;
if (optlen < 4) {
- proto_tree_add_item(field_tree, offset + optoffset, optlen,
+ proto_tree_add_text(field_tree, offset + optoffset, optlen,
"(suboption would go past end of option)");
break;
}
@@ -384,14 +389,14 @@ dissect_ipopt_timestamp(proto_tree *opt_tree, const char *name, const u_char *op
memcpy((char *)&addr, (char *)opd, sizeof(addr));
opd += 4;
optlen -= 4;
- proto_tree_add_item(field_tree, offset, 8,
+ proto_tree_add_text(field_tree, offset, 8,
"Address = %s, time stamp = %u",
((addr.s_addr == 0) ? "-" : (char *)get_hostname(addr.s_addr)),
ts);
optoffset += 8;
} else {
if (optlen < 4) {
- proto_tree_add_item(field_tree, offset + optoffset, optlen,
+ proto_tree_add_text(field_tree, offset + optoffset, optlen,
"(suboption would go past end of option)");
break;
}
@@ -399,7 +404,7 @@ dissect_ipopt_timestamp(proto_tree *opt_tree, const char *name, const u_char *op
ts = pntohl(opd);
opd += 4;
optlen -= 4;
- proto_tree_add_item(field_tree, offset + optoffset, 4,
+ proto_tree_add_text(field_tree, offset + optoffset, 4,
"Time stamp = %u", ts);
optoffset += 4;
}
@@ -483,7 +488,7 @@ dissect_ip_tcp_options(proto_tree *opt_tree, const u_char *opd, int offset,
break;
}
if (optp == &opttab[nopts]) {
- proto_tree_add_item(opt_tree, offset, 1, "Unknown");
+ proto_tree_add_text(opt_tree, offset, 1, "Unknown");
/* We don't know how long this option is, so we don't know how much
of it to skip, so we just bail. */
return;
@@ -494,7 +499,7 @@ dissect_ip_tcp_options(proto_tree *opt_tree, const u_char *opd, int offset,
if (length == 0) {
/* Bogus - packet must at least include option code byte and
length byte! */
- proto_tree_add_item(opt_tree, offset, 1,
+ proto_tree_add_text(opt_tree, offset, 1,
"%s (length byte past end of header)", optp->name);
return;
}
@@ -503,25 +508,25 @@ dissect_ip_tcp_options(proto_tree *opt_tree, const u_char *opd, int offset,
if (len < 2) {
/* Bogus - option length is too short to include option code and
option length. */
- proto_tree_add_item(opt_tree, offset, 2,
+ proto_tree_add_text(opt_tree, offset, 2,
"%s (with too-short option length = %u bytes)", optp->name, 2);
return;
} else if (len - 2 > length) {
/* Bogus - option goes past the end of the header. */
- proto_tree_add_item(opt_tree, offset, length,
+ proto_tree_add_text(opt_tree, offset, length,
"%s (option goes past end of header)", optp->name);
return;
} else if (optp->len_type == FIXED_LENGTH && len != optp->optlen) {
/* Bogus - option length isn't what it's supposed to be for this
option. */
- proto_tree_add_item(opt_tree, offset, len,
+ proto_tree_add_text(opt_tree, offset, len,
"%s (with option length = %u bytes; should be %u)", optp->name,
len, optp->optlen);
return;
} else if (optp->len_type == VARIABLE_LENGTH && len < optp->optlen) {
/* Bogus - option length is less than what it's supposed to be for
this option. */
- proto_tree_add_item(opt_tree, offset, len,
+ proto_tree_add_text(opt_tree, offset, len,
"%s (with option length = %u bytes; should be >= %u)", optp->name,
len, optp->optlen);
return;
@@ -531,7 +536,7 @@ dissect_ip_tcp_options(proto_tree *opt_tree, const u_char *opd, int offset,
(*optp->dissect)(opt_tree, optp->name, opd, offset, len);
} else {
/* Option has no data, hence no dissector. */
- proto_tree_add_item(opt_tree, offset, len, "%s", optp->name);
+ proto_tree_add_text(opt_tree, offset, len, "%s", optp->name);
}
len -= 2; /* subtract size of type and length */
offset += 2 + len;
@@ -539,7 +544,7 @@ dissect_ip_tcp_options(proto_tree *opt_tree, const u_char *opd, int offset,
opd += len;
length -= len;
} else {
- proto_tree_add_item(opt_tree, offset, 1, "%s", optp->name);
+ proto_tree_add_text(opt_tree, offset, 1, "%s", optp->name);
offset += 1;
}
if (opt == eol)
@@ -547,20 +552,14 @@ dissect_ip_tcp_options(proto_tree *opt_tree, const u_char *opd, int offset,
}
}
-void
-dissect_ip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
- e_ip iph;
- proto_tree *ip_tree, *field_tree;
- proto_item *ti, *tf;
- gchar tos_str[32];
- guint hlen, optlen;
- static const value_string proto_vals[] = { {IP_PROTO_ICMP, "ICMP"},
- {IP_PROTO_IGMP, "IGMP"},
- {IP_PROTO_TCP, "TCP" },
- {IP_PROTO_UDP, "UDP" },
- {IP_PROTO_OSPF, "OSPF"},
- {0, NULL } };
- static const value_string precedence_vals[] = {
+static const value_string proto_vals[] = { {IP_PROTO_ICMP, "ICMP"},
+ {IP_PROTO_IGMP, "IGMP"},
+ {IP_PROTO_TCP, "TCP" },
+ {IP_PROTO_UDP, "UDP" },
+ {IP_PROTO_OSPF, "OSPF"},
+ {0, NULL } };
+
+static const value_string precedence_vals[] = {
{ IPTOS_PREC_ROUTINE, "routine" },
{ IPTOS_PREC_PRIORITY, "priority" },
{ IPTOS_PREC_IMMEDIATE, "immediate" },
@@ -570,6 +569,24 @@ dissect_ip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
{ IPTOS_PREC_INTERNETCONTROL, "internetwork control" },
{ IPTOS_PREC_NETCONTROL, "network control" },
{ 0, NULL } };
+
+static const value_string iptos_vals[] = {
+ { IPTOS_NONE, "None" },
+ { IPTOS_LOWCOST, "Minimize cost" },
+ { IPTOS_RELIABILITY, "Maximize reliability" },
+ { IPTOS_THROUGHPUT, "Maximize throughput" },
+ { IPTOS_LOWDELAY, "Minimize delay" },
+ { IPTOS_SECURITY, "Maximize security" },
+ { 0, NULL }
+};
+
+void
+dissect_ip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
+ e_ip iph;
+ proto_tree *ip_tree, *field_tree;
+ proto_item *ti, *tf;
+ gchar tos_str[32];
+ guint hlen, optlen;
int advance;
guint8 nxt;
@@ -637,68 +654,65 @@ dissect_ip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
break;
}
- ti = proto_tree_add_item(tree, offset, hlen, "Internet Protocol");
- ip_tree = proto_tree_new();
- proto_item_add_subtree(ti, ip_tree, ETT_IP);
- proto_tree_add_item(ip_tree, offset, 1, "Version: %d", hi_nibble(iph.ip_v_hl));
- proto_tree_add_item(ip_tree, offset, 1, "Header length: %d bytes", hlen);
- tf = proto_tree_add_item(ip_tree, offset + 1, 1, "Type of service: 0x%02x (%s)",
- iph.ip_tos, tos_str);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_IP_TOS);
- proto_tree_add_item(field_tree, offset + 1, 1, "%s",
- decode_enumerated_bitfield(iph.ip_tos, IPTOS_PREC_MASK,
- sizeof (iph.ip_tos)*8, precedence_vals,
- "%s precedence"));
- proto_tree_add_item(field_tree, offset + 1, 1, "%s",
+ ti = proto_tree_add_item(tree, proto_ip, offset, hlen, NULL);
+ ip_tree = proto_item_add_subtree(ti, ETT_IP);
+
+ proto_tree_add_item(ip_tree, hf_ip_version, offset, 1, hi_nibble(iph.ip_v_hl));
+ proto_tree_add_item_format(ip_tree, hf_ip_hdr_len, offset, 1, hlen,
+ "Header length: %d bytes", hlen);
+ tf = proto_tree_add_item_format(ip_tree, hf_ip_tos, offset + 1, 1, iph.ip_tos,
+ "Type of service: 0x%02x (%s)", iph.ip_tos,
+ val_to_str( IPTOS_TOS(iph.ip_tos), iptos_vals, "Unknown") );
+
+ field_tree = proto_item_add_subtree(tf, ETT_IP_TOS);
+ proto_tree_add_item_format(field_tree, hf_ip_tos_precedence, offset + 1, 1,
+ iph.ip_tos & IPTOS_PREC_MASK, decode_enumerated_bitfield(iph.ip_tos, IPTOS_PREC_MASK,
+ sizeof (iph.ip_tos)*8, precedence_vals, "%s precedence"));
+
+ proto_tree_add_text(field_tree, offset + 1, 1, "%s",
decode_boolean_bitfield(iph.ip_tos, IPTOS_LOWDELAY,
sizeof (iph.ip_tos)*8, "low delay", "normal delay"));
- proto_tree_add_item(field_tree, offset + 1, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 1, 1, "%s",
decode_boolean_bitfield(iph.ip_tos, IPTOS_THROUGHPUT,
sizeof (iph.ip_tos)*8, "high throughput", "normal throughput"));
- proto_tree_add_item(field_tree, offset + 1, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 1, 1, "%s",
decode_boolean_bitfield(iph.ip_tos, IPTOS_RELIABILITY,
sizeof (iph.ip_tos)*8, "high reliability", "normal reliability"));
- proto_tree_add_item(field_tree, offset + 1, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 1, 1, "%s",
decode_boolean_bitfield(iph.ip_tos, IPTOS_LOWCOST,
sizeof (iph.ip_tos)*8, "low cost", "normal cost"));
- proto_tree_add_item(ip_tree, offset + 2, 2, "Total length: %d", iph.ip_len);
- proto_tree_add_item(ip_tree, offset + 4, 2, "Identification: 0x%04x",
+ proto_tree_add_text(ip_tree, offset + 2, 2, "Total length: %d", iph.ip_len);
+ proto_tree_add_text(ip_tree, offset + 4, 2, "Identification: 0x%04x",
iph.ip_id);
- tf = proto_tree_add_item(ip_tree, offset + 6, 2, "Flags: 0x%x",
+ tf = proto_tree_add_text(ip_tree, offset + 6, 2, "Flags: 0x%x",
(iph.ip_off & (IP_DF|IP_MF)) >> 12);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_IP_OFF);
- proto_tree_add_item(field_tree, offset + 6, 2, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_IP_OFF);
+ proto_tree_add_text(field_tree, offset + 6, 2, "%s",
decode_boolean_bitfield(iph.ip_off >> 8, IP_DF >> 8, 8, "don't fragment",
"may fragment"));
- proto_tree_add_item(field_tree, offset + 6, 2, "%s",
+ proto_tree_add_text(field_tree, offset + 6, 2, "%s",
decode_boolean_bitfield(iph.ip_off >> 8, IP_MF >> 8, 8, "more fragments",
"last fragment"));
- proto_tree_add_item(ip_tree, offset + 6, 2, "Fragment offset: %d",
+ proto_tree_add_text(ip_tree, offset + 6, 2, "Fragment offset: %d",
iph.ip_off & IP_OFFSET);
- proto_tree_add_item(ip_tree, offset + 8, 1, "Time to live: %d",
+ proto_tree_add_text(ip_tree, offset + 8, 1, "Time to live: %d",
iph.ip_ttl);
- proto_tree_add_item(ip_tree, offset + 9, 1, "Protocol: %s",
+ proto_tree_add_text(ip_tree, offset + 9, 1, "Protocol: %s",
val_to_str(iph.ip_p, proto_vals, "Unknown (0x%x)"));
- proto_tree_add_item(ip_tree, offset + 10, 2, "Header checksum: 0x%04x",
+ proto_tree_add_text(ip_tree, offset + 10, 2, "Header checksum: 0x%04x",
iph.ip_sum);
- proto_tree_add_item(ip_tree, offset + 12, 4, "Source address: %s (%s)",
- get_hostname(iph.ip_src),
- ip_to_str((guint8 *) &iph.ip_src));
- proto_tree_add_item(ip_tree, offset + 16, 4, "Destination address: %s (%s)",
- get_hostname(iph.ip_dst),
- ip_to_str((guint8 *) &iph.ip_dst));
+
+ proto_tree_add_item(ip_tree, hf_ip_src, offset + 12, 4, iph.ip_src);
+ proto_tree_add_item(ip_tree, hf_ip_dst, offset + 16, 4, iph.ip_dst);
/* Decode IP options, if any. */
if (hlen > sizeof (e_ip)) {
/* There's more than just the fixed-length header. Decode the
options. */
optlen = hlen - sizeof (e_ip); /* length of options, in bytes */
- tf = proto_tree_add_item(ip_tree, offset + 20, optlen,
+ tf = proto_tree_add_text(ip_tree, offset + 20, optlen,
"Options: (%d bytes)", optlen);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_IP_OPTIONS);
+ field_tree = proto_item_add_subtree(tf, ETT_IP_OPTIONS);
dissect_ip_tcp_options(field_tree, &pd[offset + 20], offset + 20, optlen,
ipopts, N_IP_OPTS, IPOPT_END);
}
@@ -882,17 +896,16 @@ dissect_icmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
col_add_str(fd, COL_PROTOCOL, "ICMP");
if (check_col(fd, COL_INFO))
col_add_str(fd, COL_INFO, type_str);
-
+
if (tree) {
- ti = proto_tree_add_item(tree, offset, 4,
+ ti = proto_tree_add_text(tree, offset, 4,
"Internet Control Message Protocol");
- icmp_tree = proto_tree_new();
- proto_item_add_subtree(ti, icmp_tree, ETT_ICMP);
- proto_tree_add_item(icmp_tree, offset, 1, "Type: %d (%s)",
+ icmp_tree = proto_item_add_subtree(ti, ETT_ICMP);
+ proto_tree_add_text(icmp_tree, offset, 1, "Type: %d (%s)",
ih.icmp_type, type_str);
- proto_tree_add_item(icmp_tree, offset + 1, 1, "Code: %d %s",
+ proto_tree_add_text(icmp_tree, offset + 1, 1, "Code: %d %s",
ih.icmp_code, code_str);
- proto_tree_add_item(icmp_tree, offset + 2, 2, "Checksum: 0x%04x",
+ proto_tree_add_text(icmp_tree, offset + 2, 2, "Checksum: 0x%04x",
ih.icmp_cksum);
/* Decode the second 4 bytes of the packet. */
@@ -905,30 +918,30 @@ dissect_icmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
case ICMP_IREQREPLY:
case ICMP_MASKREQ:
case ICMP_MASKREPLY:
- proto_tree_add_item(icmp_tree, offset + 4, 2, "Identifier: 0x%04x",
+ proto_tree_add_text(icmp_tree, offset + 4, 2, "Identifier: 0x%04x",
pntohs(&pd[offset + 4]));
- proto_tree_add_item(icmp_tree, offset + 6, 2, "Sequence number: %u",
+ proto_tree_add_text(icmp_tree, offset + 6, 2, "Sequence number: %u",
pntohs(&pd[offset + 6]));
break;
case ICMP_RTRADVERT:
num_addrs = pd[offset + 4];
- proto_tree_add_item(icmp_tree, offset + 4, 1, "Number of addresses: %u",
+ proto_tree_add_text(icmp_tree, offset + 4, 1, "Number of addresses: %u",
num_addrs);
addr_entry_size = pd[offset + 5];
- proto_tree_add_item(icmp_tree, offset + 5, 1, "Address entry size: %u",
+ proto_tree_add_text(icmp_tree, offset + 5, 1, "Address entry size: %u",
addr_entry_size);
- proto_tree_add_item(icmp_tree, offset + 6, 2, "Lifetime: %s",
+ proto_tree_add_text(icmp_tree, offset + 6, 2, "Lifetime: %s",
time_secs_to_str(pntohs(&pd[offset + 6])));
break;
case ICMP_PARAMPROB:
- proto_tree_add_item(icmp_tree, offset + 4, 1, "Pointer: %u",
+ proto_tree_add_text(icmp_tree, offset + 4, 1, "Pointer: %u",
pd[offset + 4]);
break;
case ICMP_REDIRECT:
- proto_tree_add_item(icmp_tree, offset + 4, 4, "Gateway address: %s",
+ proto_tree_add_text(icmp_tree, offset + 4, 4, "Gateway address: %s",
ip_to_str((guint8 *)&pd[offset + 4]));
break;
}
@@ -956,10 +969,10 @@ dissect_icmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
case ICMP_RTRADVERT:
if (addr_entry_size == 2) {
for (i = 0; i < num_addrs; i++) {
- proto_tree_add_item(icmp_tree, offset + 8 + (i*8), 4,
+ proto_tree_add_text(icmp_tree, offset + 8 + (i*8), 4,
"Router address: %s",
ip_to_str((guint8 *)&pd[offset + 8 + (i*8)]));
- proto_tree_add_item(icmp_tree, offset + 12 + (i*8), 4,
+ proto_tree_add_text(icmp_tree, offset + 12 + (i*8), 4,
"Preference level: %d", pntohl(&pd[offset + 12 + (i*8)]));
}
} else
@@ -968,19 +981,19 @@ dissect_icmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
case ICMP_TSTAMP:
case ICMP_TSTAMPREPLY:
- proto_tree_add_item(icmp_tree, offset + 8, 4, "Originate timestamp: %u",
+ proto_tree_add_text(icmp_tree, offset + 8, 4, "Originate timestamp: %u",
pntohl(&pd[offset + 8]));
- proto_tree_add_item(icmp_tree, offset + 12, 4, "Originate timestamp: %u",
+ proto_tree_add_text(icmp_tree, offset + 12, 4, "Originate timestamp: %u",
pntohl(&pd[offset + 12]));
- proto_tree_add_item(icmp_tree, offset + 16, 4, "Receive timestamp: %u",
+ proto_tree_add_text(icmp_tree, offset + 16, 4, "Receive timestamp: %u",
pntohl(&pd[offset + 16]));
- proto_tree_add_item(icmp_tree, offset + 20, 4, "Transmit timestamp: %u",
+ proto_tree_add_text(icmp_tree, offset + 20, 4, "Transmit timestamp: %u",
pntohl(&pd[offset + 20]));
break;
case ICMP_MASKREQ:
case ICMP_MASKREPLY:
- proto_tree_add_item(icmp_tree, offset + 8, 4, "Address mask: %s (0x%8x)",
+ proto_tree_add_text(icmp_tree, offset + 8, 4, "Address mask: %s (0x%8x)",
ip_to_str((guint8 *)&pd[offset + 8]), pntohl(&pd[offset + 8]));
break;
}
@@ -1033,21 +1046,69 @@ dissect_igmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
col_add_str(fd, COL_PROTOCOL, "IGMP");
if (check_col(fd, COL_INFO))
col_add_str(fd, COL_INFO, type_str);
-
if (tree) {
- ti = proto_tree_add_item(tree, offset, 4,
+ ti = proto_tree_add_text(tree, offset, 4,
"Internet Group Management Protocol");
- igmp_tree = proto_tree_new();
- proto_item_add_subtree(ti, igmp_tree, ETT_IGMP);
- proto_tree_add_item(igmp_tree, offset, 1, "Version: %d",
+ igmp_tree = proto_item_add_subtree(ti, ETT_IGMP);
+ proto_tree_add_text(igmp_tree, offset, 1, "Version: %d",
hi_nibble(ih.igmp_v_t));
- proto_tree_add_item(igmp_tree, offset , 1, "Type: %d (%s)",
+ proto_tree_add_text(igmp_tree, offset , 1, "Type: %d (%s)",
lo_nibble(ih.igmp_v_t), type_str);
- proto_tree_add_item(igmp_tree, offset + 1, 1, "Unused: 0x%02x",
+ proto_tree_add_text(igmp_tree, offset + 1, 1, "Unused: 0x%02x",
ih.igmp_unused);
- proto_tree_add_item(igmp_tree, offset + 2, 2, "Checksum: 0x%04x",
+ proto_tree_add_text(igmp_tree, offset + 2, 2, "Checksum: 0x%04x",
ih.igmp_cksum);
- proto_tree_add_item(igmp_tree, offset + 4, 4, "Group address: %s",
+ proto_tree_add_text(igmp_tree, offset + 4, 4, "Group address: %s",
ip_to_str((guint8 *) &ih.igmp_gaddr));
}
}
+
+void
+proto_register_ip(void)
+{
+ proto_ip = proto_register_protocol (
+ /* name */ "Internet Protocol",
+ /* abbrev */ "ip" );
+
+ hf_ip_version = proto_register_field (
+ /* name */ "Version",
+ /* abbrev */ "ip.version",
+ /* ftype */ FT_UINT8,
+ /* parent */ proto_ip,
+ /* vals[] */ NULL );
+
+ hf_ip_hdr_len = proto_register_field (
+ /* name */ "Header Length",
+ /* abbrev */ "ip.hdr_len",
+ /* ftype */ FT_UINT8,
+ /* parent */ proto_ip,
+ /* vals[] */ NULL );
+
+ hf_ip_tos = proto_register_field (
+ /* name */ "Type of Service",
+ /* abbrev */ "ip.tos",
+ /* ftype */ FT_UINT8,
+ /* parent */ proto_ip,
+ /* vals[] */ NULL );
+
+ hf_ip_tos_precedence = proto_register_field (
+ /* name */ "Precedence",
+ /* abbrev */ "ip.tos_precedence",
+ /* ftype */ FT_VALS_UINT8,
+ /* parent */ proto_ip,
+ /* vals[] */ VALS(precedence_vals) );
+
+ hf_ip_dst = proto_register_field (
+ /* name */ "Destination",
+ /* abbrev */ "ip.dst",
+ /* ftype */ FT_IPv4,
+ /* parent */ proto_ip,
+ /* vals[] */ NULL );
+
+ hf_ip_src = proto_register_field (
+ /* name */ "Source",
+ /* abbrev */ "ip.src",
+ /* ftype */ FT_IPv4,
+ /* parent */ proto_ip,
+ /* vals[] */ NULL );
+}
diff --git a/packet-ipsec.c b/packet-ipsec.c
index 5d74f133ad..c4b54e4e5f 100644
--- a/packet-ipsec.c
+++ b/packet-ipsec.c
@@ -1,7 +1,7 @@
/* packet-ipsec.c
* Routines for IPsec packet disassembly
*
- * $Id: packet-ipsec.c,v 1.1 1999/03/29 02:21:34 gram Exp $
+ * $Id: packet-ipsec.c,v 1.2 1999/07/07 22:51:45 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -85,19 +85,18 @@ dissect_ah(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if (tree) {
/* !!! specify length */
- ti = proto_tree_add_item(tree, offset, advance, "Authentication Header");
- ah_tree = proto_tree_new();
- proto_item_add_subtree(ti, ah_tree, ETT_AH);
+ ti = proto_tree_add_text(tree, offset, advance, "Authentication Header");
+ ah_tree = proto_item_add_subtree(ti, ETT_AH);
- proto_tree_add_item(ah_tree, offset + offsetof(struct newah, ah_nxt), 1,
+ proto_tree_add_text(ah_tree, offset + offsetof(struct newah, ah_nxt), 1,
"Next Header: %d", ah.ah_nxt);
- proto_tree_add_item(ah_tree, offset + offsetof(struct newah, ah_len), 1,
+ proto_tree_add_text(ah_tree, offset + offsetof(struct newah, ah_len), 1,
"Length: %d", ah.ah_len << 2);
- proto_tree_add_item(ah_tree, offset + offsetof(struct newah, ah_spi), 4,
+ proto_tree_add_text(ah_tree, offset + offsetof(struct newah, ah_spi), 4,
"SPI: %08x", (guint32)ntohl(ah.ah_spi));
- proto_tree_add_item(ah_tree, offset + offsetof(struct newah, ah_seq), 4,
+ proto_tree_add_text(ah_tree, offset + offsetof(struct newah, ah_seq), 4,
"Sequence?: %08x", (guint32)ntohl(ah.ah_seq));
- proto_tree_add_item(ah_tree, offset + sizeof(ah), (ah.ah_len - 1) << 2,
+ proto_tree_add_text(ah_tree, offset + sizeof(ah), (ah.ah_len - 1) << 2,
"ICV");
}
@@ -130,12 +129,11 @@ dissect_esp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
* (ie none)
*/
if(tree) {
- ti = proto_tree_add_item(tree, 0, 0, "Encapsulated Security Payload");
- esp_tree = proto_tree_new();
- proto_item_add_subtree(ti, esp_tree, ETT_ESP);
- proto_tree_add_item(esp_tree, offset + offsetof(struct newesp, esp_spi), 4,
+ ti = proto_tree_add_text(tree, 0, 0, "Encapsulated Security Payload");
+ esp_tree = proto_item_add_subtree(ti, ETT_ESP);
+ proto_tree_add_text(esp_tree, offset + offsetof(struct newesp, esp_spi), 4,
"SPI: %08x", (guint32)ntohl(esp.esp_spi));
- proto_tree_add_item(esp_tree, offset + offsetof(struct newesp, esp_seq), 4,
+ proto_tree_add_text(esp_tree, offset + offsetof(struct newesp, esp_seq), 4,
"Sequence?: %08x", (guint32)ntohl(esp.esp_seq));
}
}
diff --git a/packet-ipv6.c b/packet-ipv6.c
index 99e1867cbd..991a54462c 100644
--- a/packet-ipv6.c
+++ b/packet-ipv6.c
@@ -1,7 +1,7 @@
/* packet-ipv6.c
* Routines for IPv6 packet disassembly
*
- * $Id: packet-ipv6.c,v 1.8 1999/04/09 13:32:31 gram Exp $
+ * $Id: packet-ipv6.c,v 1.9 1999/07/07 22:51:45 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -85,12 +85,11 @@ dissect_dstopts(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if (tree) {
/* !!! specify length */
- ti = proto_tree_add_item(tree, offset, len,
+ ti = proto_tree_add_text(tree, offset, len,
"Destination Option Header");
- dstopt_tree = proto_tree_new();
- proto_item_add_subtree(ti, dstopt_tree, ETT_IPv6);
+ dstopt_tree = proto_item_add_subtree(ti, ETT_IPv6);
- proto_tree_add_item(dstopt_tree,
+ proto_tree_add_text(dstopt_tree,
offset + offsetof(struct ip6_dest, ip6d_len), 1,
"Length: %d (%d bytes)", dstopt.ip6d_len, len);
@@ -125,38 +124,37 @@ dissect_ipv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (tree) {
/* !!! specify length */
- ti = proto_tree_add_item(tree, offset, 40, "Internet Protocol Version 6");
- ipv6_tree = proto_tree_new();
- proto_item_add_subtree(ti, ipv6_tree, ETT_IPv6);
+ ti = proto_tree_add_text(tree, offset, 40, "Internet Protocol Version 6");
+ ipv6_tree = proto_item_add_subtree(ti, ETT_IPv6);
/* !!! warning: version also contains 4 Bit priority */
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_vfc), 1,
"Version: %d", ipv6.ip6_vfc >> 4);
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_flow), 4,
"Traffic class: 0x%02x", (ntohl(ipv6.ip6_flow) >> 20) & 0xff);
/* there should be no alignment problems for ip6_flow, since it's the first
guint32 in the ipv6 struct */
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_flow), 4,
"Flowlabel: 0x%05x", ntohl(ipv6.ip6_flow & IPV6_FLOWLABEL_MASK));
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_plen), 2,
"Payload Length: %d", ntohs(ipv6.ip6_plen));
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_nxt), 1,
"Next Header: %d", ipv6.ip6_nxt);
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_hlim), 1,
"Hop limit: %d", ipv6.ip6_hlim);
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_src), 16,
#ifdef INET6
"Source address: %s (%s)",
@@ -166,7 +164,7 @@ dissect_ipv6(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
#endif
ip6_to_str(&ipv6.ip6_src));
- proto_tree_add_item(ipv6_tree,
+ proto_tree_add_text(ipv6_tree,
offset + offsetof(struct ip6_hdr, ip6_dst), 16,
#ifdef INET6
"Destination address: %s (%s)",
diff --git a/packet-ipx.c b/packet-ipx.c
index 440dad378b..3d5d3d5411 100644
--- a/packet-ipx.c
+++ b/packet-ipx.c
@@ -2,7 +2,7 @@
* Routines for NetWare's IPX
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-ipx.c,v 1.20 1999/05/10 20:51:36 gram Exp $
+ * $Id: packet-ipx.c,v 1.21 1999/07/07 22:51:45 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -223,30 +223,29 @@ dissect_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
ipx_checksum = pntohs(&pd[offset]);
ipx_hops = pd[offset+4];
- ti = proto_tree_add_item(tree, offset, 30,
+ ti = proto_tree_add_text(tree, offset, 30,
"Internetwork Packet Exchange");
- ipx_tree = proto_tree_new();
- proto_item_add_subtree(ti, ipx_tree, ETT_IPX);
- proto_tree_add_item(ipx_tree, offset, 2, "Checksum: 0x%04x",
+ ipx_tree = proto_item_add_subtree(ti, ETT_IPX);
+ proto_tree_add_text(ipx_tree, offset, 2, "Checksum: 0x%04x",
ipx_checksum);
- proto_tree_add_item(ipx_tree, offset+2, 2, "Length: %d bytes",
+ proto_tree_add_text(ipx_tree, offset+2, 2, "Length: %d bytes",
ipx_length);
- proto_tree_add_item(ipx_tree, offset+4, 1, "Transport Control: %d hops",
+ proto_tree_add_text(ipx_tree, offset+4, 1, "Transport Control: %d hops",
ipx_hops);
- proto_tree_add_item(ipx_tree, offset+5, 1, "Packet Type: %s",
+ proto_tree_add_text(ipx_tree, offset+5, 1, "Packet Type: %s",
ipx_packet_type(ipx_type));
- proto_tree_add_item(ipx_tree, offset+6, 4, "Destination Network: %s",
+ proto_tree_add_text(ipx_tree, offset+6, 4, "Destination Network: %s",
str_dnet);
- proto_tree_add_item(ipx_tree, offset+10, 6, "Destination Node: %s",
+ proto_tree_add_text(ipx_tree, offset+10, 6, "Destination Node: %s",
ether_to_str(ipx_dnode));
- proto_tree_add_item(ipx_tree, offset+16, 2,
+ proto_tree_add_text(ipx_tree, offset+16, 2,
"Destination Socket: %s (0x%04X)", port_text(ipx_dsocket),
ipx_dsocket);
- proto_tree_add_item(ipx_tree, offset+18, 4, "Source Network: %s",
+ proto_tree_add_text(ipx_tree, offset+18, 4, "Source Network: %s",
str_snet);
- proto_tree_add_item(ipx_tree, offset+22, 6, "Source Node: %s",
+ proto_tree_add_text(ipx_tree, offset+22, 6, "Source Node: %s",
ether_to_str(ipx_snode));
- proto_tree_add_item(ipx_tree, offset+28, 2,
+ proto_tree_add_text(ipx_tree, offset+28, 2,
"Source Socket: %s (0x%04X)", port_text(ipx_ssocket), ipx_ssocket);
}
offset += 30;
@@ -257,8 +256,11 @@ dissect_ipx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
break;
case 17: /* NCP */
+ /* Is the destination node 00:00:00:00:00:01 ? */
if (pntohl(ipx_dnode) == 0 && pntohs(ipx_dnode + 4) == 1)
nw_server_address = pntohl(ipx_dnet);
+
+ /* Is the source node 00:00:00:00:00:01 ? */
else if (pntohl(ipx_snode) == 0 && pntohs(ipx_snode + 4) == 1)
nw_server_address = pntohl(ipx_snet);
else
@@ -344,31 +346,30 @@ dissect_spx(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
col_add_str(fd, COL_INFO, "SPX");
if (tree) {
- ti = proto_tree_add_item(tree, offset, 12, "Sequenced Packet Exchange");
- spx_tree = proto_tree_new();
- proto_item_add_subtree(ti, spx_tree, ETT_SPX);
+ ti = proto_tree_add_text(tree, offset, 12, "Sequenced Packet Exchange");
+ spx_tree = proto_item_add_subtree(ti, ETT_SPX);
- proto_tree_add_item(spx_tree, offset, 1,
+ proto_tree_add_text(spx_tree, offset, 1,
"Connection Control: %s (0x%02X)",
spx_conn_ctrl(pd[offset]), pd[offset]);
- proto_tree_add_item(spx_tree, offset+1, 1,
+ proto_tree_add_text(spx_tree, offset+1, 1,
"Datastream Type: %s (0x%02X)",
spx_datastream(pd[offset+1]), pd[offset+1]);
- proto_tree_add_item(spx_tree, offset+2, 2,
+ proto_tree_add_text(spx_tree, offset+2, 2,
"Source Connection ID: %d", pntohs( &pd[offset+2] ) );
- proto_tree_add_item(spx_tree, offset+4, 2,
+ proto_tree_add_text(spx_tree, offset+4, 2,
"Destination Connection ID: %d", pntohs( &pd[offset+4] ) );
- proto_tree_add_item(spx_tree, offset+6, 2,
+ proto_tree_add_text(spx_tree, offset+6, 2,
"Sequence Number: %d", pntohs( &pd[offset+6] ) );
- proto_tree_add_item(spx_tree, offset+8, 2,
+ proto_tree_add_text(spx_tree, offset+8, 2,
"Acknowledgment Number: %d", pntohs( &pd[offset+8] ) );
- proto_tree_add_item(spx_tree, offset+10, 2,
+ proto_tree_add_text(spx_tree, offset+10, 2,
"Allocation Number: %d", pntohs( &pd[offset+10] ) );
offset += 12;
@@ -405,17 +406,16 @@ dissect_ipxrip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"IPX Routing Information Protocol");
- rip_tree = proto_tree_new();
- proto_item_add_subtree(ti, rip_tree, ETT_IPXRIP);
+ rip_tree = proto_item_add_subtree(ti, ETT_IPXRIP);
if (operation < 2) {
- proto_tree_add_item(rip_tree, offset, 2,
+ proto_tree_add_text(rip_tree, offset, 2,
"RIP packet type: %s", rip_type[operation]);
}
else {
- proto_tree_add_item(rip_tree, offset, 2, "Unknown RIP packet type");
+ proto_tree_add_text(rip_tree, offset, 2, "Unknown RIP packet type");
}
for (cursor = offset + 2; cursor < fd->cap_len; cursor += 8) {
@@ -424,14 +424,14 @@ dissect_ipxrip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
route.ticks = pntohs(&pd[cursor+6]);
if (operation == IPX_RIP_REQUEST - 1) {
- proto_tree_add_item(rip_tree, cursor, 8,
+ proto_tree_add_text(rip_tree, cursor, 8,
"Route Vector: %s, %d hop%s, %d tick%s",
ipxnet_to_string((guint8*)&route.network),
route.hops, route.hops == 1 ? "" : "s",
route.ticks, route.ticks == 1 ? "" : "s");
}
else {
- proto_tree_add_item(rip_tree, cursor, 8,
+ proto_tree_add_text(rip_tree, cursor, 8,
"Route Vector: %s, %d hop%s, %d tick%s (%d ms)",
ipxnet_to_string((guint8*)&route.network),
route.hops, route.hops == 1 ? "" : "s",
@@ -527,16 +527,15 @@ dissect_sap(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Service Advertising Protocol");
- sap_tree = proto_tree_new();
- proto_item_add_subtree(ti, sap_tree, ETT_IPXSAP);
+ sap_tree = proto_item_add_subtree(ti, ETT_IPXSAP);
if (query.query_type < 4) {
- proto_tree_add_item(sap_tree, offset, 2, sap_type[query.query_type - 1]);
+ proto_tree_add_text(sap_tree, offset, 2, sap_type[query.query_type - 1]);
}
else {
- proto_tree_add_item(sap_tree, offset, 2,
+ proto_tree_add_text(sap_tree, offset, 2,
"Unknown SAP Packet Type %d", query.query_type);
}
@@ -551,26 +550,25 @@ dissect_sap(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
server.server_port = pntohs(&pd[cursor+60]);
server.intermediate_network = pntohs(&pd[cursor+62]);
- ti = proto_tree_add_item(sap_tree, cursor+2, 48,
+ ti = proto_tree_add_text(sap_tree, cursor+2, 48,
"Server Name: %s", server.server_name);
- s_tree = proto_tree_new();
- proto_item_add_subtree(ti, s_tree, ETT_IPXSAP_SERVER);
+ s_tree = proto_item_add_subtree(ti, ETT_IPXSAP_SERVER);
- proto_tree_add_item(s_tree, cursor, 2, "Server Type: %s (0x%04X)",
+ proto_tree_add_text(s_tree, cursor, 2, "Server Type: %s (0x%04X)",
server_type(server.server_type), server.server_type);
- proto_tree_add_item(s_tree, cursor+50, 4, "Network: %s",
+ proto_tree_add_text(s_tree, cursor+50, 4, "Network: %s",
ipxnet_to_string((guint8*)&pd[cursor+50]));
- proto_tree_add_item(s_tree, cursor+54, 6, "Node: %s",
+ proto_tree_add_text(s_tree, cursor+54, 6, "Node: %s",
ether_to_str((guint8*)&pd[cursor+54]));
- proto_tree_add_item(s_tree, cursor+60, 2, "Socket: %s (0x%04X)",
+ proto_tree_add_text(s_tree, cursor+60, 2, "Socket: %s (0x%04X)",
port_text(server.server_port), server.server_port);
- proto_tree_add_item(s_tree, cursor+62, 2,
+ proto_tree_add_text(s_tree, cursor+62, 2,
"Intermediate Networks: %d",
server.intermediate_network);
}
}
else { /* queries */
- proto_tree_add_item(sap_tree, offset+2, 2, "Server Type: %s (0x%04X)",
+ proto_tree_add_text(sap_tree, offset+2, 2, "Server Type: %s (0x%04X)",
server_type(query.server_type), query.server_type);
}
}
diff --git a/packet-isakmp.c b/packet-isakmp.c
index 3db149a2d0..0effcdbb1c 100644
--- a/packet-isakmp.c
+++ b/packet-isakmp.c
@@ -2,7 +2,7 @@
* Routines for the Internet Security Association and Key Management Protocol (ISAKMP)
* Brad Robel-Forrest <brad.robel-forrest@watchguard.com>
*
- * $Id: packet-isakmp.c,v 1.3 1999/07/06 06:10:31 guy Exp $
+ * $Id: packet-isakmp.c,v 1.4 1999/07/07 22:51:46 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -287,30 +287,29 @@ void dissect_isakmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
proto_item * ti;
proto_tree * isakmp_tree;
- ti = proto_tree_add_item(tree, offset, len,
+ ti = proto_tree_add_text(tree, offset, len,
"Internet Security Association and Key Management Protocol");
- isakmp_tree = proto_tree_new();
- proto_item_add_subtree(ti, isakmp_tree, ETT_ISAKMP);
+ isakmp_tree = proto_item_add_subtree(ti, ETT_ISAKMP);
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->icookie),
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->icookie),
"Initiator cookie");
offset += sizeof(hdr->icookie);
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->rcookie),
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->rcookie),
"Responder cookie");
offset += sizeof(hdr->rcookie);
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload);
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->version),
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->version),
"Version: %u.%u",
hi_nibble(hdr->version), lo_nibble(hdr->version));
offset += sizeof(hdr->version);
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->exch_type),
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->exch_type),
"Exchange type: %s (%u)",
exchtype2str(hdr->exch_type), hdr->exch_type);
offset += sizeof(hdr->exch_type);
@@ -319,26 +318,25 @@ void dissect_isakmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
proto_item * fti;
proto_tree * ftree;
- fti = proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->flags), "Flags");
- ftree = proto_tree_new();
- proto_item_add_subtree(fti, ftree, ETT_ISAKMP_FLAGS);
+ fti = proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->flags), "Flags");
+ ftree = proto_item_add_subtree(fti, ETT_ISAKMP_FLAGS);
- proto_tree_add_item(ftree, offset, 1, "%s",
+ proto_tree_add_text(ftree, offset, 1, "%s",
decode_boolean_bitfield(hdr->flags, E_FLAG, sizeof(hdr->flags)*8,
"Encryption", "No encryption"));
- proto_tree_add_item(ftree, offset, 1, "%s",
+ proto_tree_add_text(ftree, offset, 1, "%s",
decode_boolean_bitfield(hdr->flags, C_FLAG, sizeof(hdr->flags)*8,
"Commit", "No commit"));
- proto_tree_add_item(ftree, offset, 1, "%s",
+ proto_tree_add_text(ftree, offset, 1, "%s",
decode_boolean_bitfield(hdr->flags, A_FLAG, sizeof(hdr->flags)*8,
"Authentication", "No authentication"));
offset += sizeof(hdr->flags);
}
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->message_id), "Message ID");
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->message_id), "Message ID");
offset += sizeof(hdr->message_id);
- proto_tree_add_item(isakmp_tree, offset, sizeof(hdr->length),
+ proto_tree_add_text(isakmp_tree, offset, sizeof(hdr->length),
"Length: %u", len);
offset += sizeof(hdr->length);
@@ -360,26 +358,26 @@ dissect_sa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
guint16 length = pntohs(&hdr->length);
guint32 doi = pntohl(&hdr->doi);
guint32 situation = pntohl(&hdr->situation);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Security Association payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Security Association payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(doi),
+ proto_tree_add_text(ntree, offset, sizeof(doi),
"Domain of interpretation: %s (%u)",
doitype2str(doi), doi);
offset += sizeof(doi);
- proto_tree_add_item(ntree, offset, sizeof(situation),
+ proto_tree_add_text(ntree, offset, sizeof(situation),
"Situation: %s (%u)",
situation2str(situation), situation);
offset += sizeof(situation);
@@ -398,40 +396,40 @@ dissect_proposal(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
struct proposal_hdr * hdr = (struct proposal_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Proposal payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Proposal payload");
+ proto_tree * ntree;
guint8 i;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(hdr->proposal_num),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->proposal_num),
"Proposal number: %u", hdr->proposal_num);
offset += sizeof(hdr->proposal_num);
- proto_tree_add_item(ntree, offset, sizeof(hdr->protocol_id),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->protocol_id),
"Protocol ID: %s (%u)",
proto2str(hdr->protocol_id), hdr->protocol_id);
offset += sizeof(hdr->protocol_id);
- proto_tree_add_item(ntree, offset, sizeof(hdr->spi_size),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->spi_size),
"SPI size: %u", hdr->spi_size);
offset += sizeof(hdr->spi_size);
if (hdr->spi_size) {
- proto_tree_add_item(ntree, offset, hdr->spi_size, "SPI");
+ proto_tree_add_text(ntree, offset, hdr->spi_size, "SPI");
offset += hdr->spi_size;
}
- proto_tree_add_item(ntree, offset, sizeof(hdr->num_transforms),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->num_transforms),
"Number of transforms: %u", hdr->num_transforms);
offset += sizeof(hdr->num_transforms);
@@ -451,25 +449,25 @@ dissect_transform(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
struct trans_hdr * hdr = (struct trans_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Transform payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Transform payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(hdr->transform_num),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->transform_num),
"Transform number: %u", hdr->transform_num);
offset += sizeof(hdr->transform_num);
- proto_tree_add_item(ntree, offset, sizeof(hdr->transform_id),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->transform_id),
"Transform ID: %s (%u)",
trans2str(hdr->transform_id), hdr->transform_id);
offset += sizeof(hdr->transform_id) + sizeof(hdr->reserved2);
@@ -480,7 +478,7 @@ dissect_transform(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
guint16 val_len = pntohs(pd + offset + 2);
if (pd[offset] & 0xf0) {
- proto_tree_add_item(ntree, offset, 4,
+ proto_tree_add_text(ntree, offset, 4,
"%s (%u): %s (%u)",
atttype2str(type), type,
value2str(type, val_len), val_len);
@@ -490,7 +488,7 @@ dissect_transform(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
else {
guint16 pack_len = 4 + val_len;
- proto_tree_add_item(ntree, offset, pack_len,
+ proto_tree_add_text(ntree, offset, pack_len,
"%s (%u): %s",
atttype2str(type), type,
num2str(pd + offset + 4, val_len));
@@ -510,21 +508,21 @@ dissect_key_exch(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
struct ke_hdr * hdr = (struct ke_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Key Exchange payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Key Exchange payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Key Exchange Data");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Key Exchange Data");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -538,45 +536,45 @@ dissect_id(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct id_hdr * hdr = (struct id_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Identification payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Identification payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(hdr->id_type),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->id_type),
"ID type: %s (%u)", id2str(hdr->id_type), hdr->id_type);
offset += sizeof(hdr->id_type);
- proto_tree_add_item(ntree, offset, sizeof(hdr->protocol_id),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->protocol_id),
"Protocol ID: %u", hdr->protocol_id);
offset += sizeof(hdr->protocol_id);
- proto_tree_add_item(ntree, offset, sizeof(hdr->port),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->port),
"Port: %u", pntohs(&hdr->port));
offset += sizeof(hdr->port);
switch (hdr->id_type) {
case 1:
case 4:
- proto_tree_add_item(ntree, offset, length-sizeof(*hdr),
+ proto_tree_add_text(ntree, offset, length-sizeof(*hdr),
"Identification data: %s", ip_to_str(pd+offset));
break;
case 2:
case 3:
- proto_tree_add_item(ntree, offset, length-sizeof(*hdr),
+ proto_tree_add_text(ntree, offset, length-sizeof(*hdr),
"Identification data: %s", (char *)(pd+offset));
break;
default:
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Identification Data");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Identification Data");
}
offset += (length - sizeof(*hdr));
@@ -591,25 +589,25 @@ dissect_cert(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct cert_hdr * hdr = (struct cert_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Certificate payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Certificate payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(hdr->cert_enc),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->cert_enc),
"Certificate encoding: %u", hdr->cert_enc);
offset += sizeof(hdr->cert_enc);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Certificate Data");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Certificate Data");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -623,25 +621,25 @@ dissect_certreq(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
struct certreq_hdr * hdr = (struct certreq_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Certificate Request payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Certificate Request payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(hdr->cert_type),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->cert_type),
"Certificate type: %u", hdr->cert_type);
offset += sizeof(hdr->cert_type);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Certificate Authority");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Certificate Authority");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -655,21 +653,21 @@ dissect_hash(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct hash_hdr * hdr = (struct hash_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Hash payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Hash payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Hash Data");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Hash Data");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -683,21 +681,21 @@ dissect_sig(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct sig_hdr * hdr = (struct sig_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Signature payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Signature payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Signature Data");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Signature Data");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -711,21 +709,21 @@ dissect_nonce(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct nonce_hdr * hdr = (struct nonce_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Nonce payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Nonce payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Nonce Data");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Nonce Data");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -741,44 +739,44 @@ dissect_notif(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
guint16 length = pntohs(&hdr->length);
guint32 doi = pntohl(&hdr->doi);
guint16 msgtype = pntohs(&hdr->msgtype);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Notification payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Notification payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(doi),
+ proto_tree_add_text(ntree, offset, sizeof(doi),
"Domain of Interpretation: %s (%u)", doitype2str(doi), doi);
offset += sizeof(doi);
- proto_tree_add_item(ntree, offset, sizeof(hdr->protocol_id),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->protocol_id),
"Protocol ID: %s (%u)",
proto2str(hdr->protocol_id), hdr->protocol_id);
offset += sizeof(hdr->protocol_id);
- proto_tree_add_item(ntree, offset, sizeof(hdr->spi_size),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->spi_size),
"SPI size: %u", hdr->spi_size);
offset += sizeof(hdr->spi_size);
- proto_tree_add_item(ntree, offset, sizeof(msgtype),
+ proto_tree_add_text(ntree, offset, sizeof(msgtype),
"Message type: %s (%u)", msgtype2str(msgtype), msgtype);
offset += sizeof(msgtype);
if (hdr->spi_size) {
- proto_tree_add_item(ntree, offset, hdr->spi_size, "Security Parameter Index");
+ proto_tree_add_text(ntree, offset, hdr->spi_size, "Security Parameter Index");
offset += hdr->spi_size;
}
if (length - sizeof(*hdr)) {
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr) - hdr->spi_size,
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr) - hdr->spi_size,
"Notification Data");
offset += (length - sizeof(*hdr) - hdr->spi_size);
}
@@ -796,40 +794,40 @@ dissect_delete(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
guint16 length = pntohs(&hdr->length);
guint32 doi = pntohl(&hdr->doi);
guint16 num_spis = pntohs(&hdr->num_spis);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Delete payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Delete payload");
+ proto_tree * ntree;
guint16 i;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, sizeof(doi),
+ proto_tree_add_text(ntree, offset, sizeof(doi),
"Domain of Interpretation: %s (%u)", doitype2str(doi), doi);
offset += sizeof(doi);
- proto_tree_add_item(ntree, offset, sizeof(hdr->protocol_id),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->protocol_id),
"Protocol ID: %s (%u)",
proto2str(hdr->protocol_id), hdr->protocol_id);
offset += sizeof(hdr->protocol_id);
- proto_tree_add_item(ntree, offset, sizeof(hdr->spi_size),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->spi_size),
"SPI size: %u", hdr->spi_size);
offset += sizeof(hdr->spi_size);
- proto_tree_add_item(ntree, offset, num_spis,
+ proto_tree_add_text(ntree, offset, num_spis,
"Number of SPIs: %u", num_spis);
offset += sizeof(hdr->num_spis);
for (i = 0; i < num_spis; ++i) {
- proto_tree_add_item(ntree, offset, hdr->spi_size,
+ proto_tree_add_text(ntree, offset, hdr->spi_size,
"SPI (%d)", i);
offset += hdr->spi_size;
}
@@ -845,21 +843,21 @@ dissect_vid(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct vid_hdr * hdr = (struct vid_hdr *)(pd + offset);
guint16 length = pntohs(&hdr->length);
- proto_item * ti = proto_tree_add_item(tree, offset, length, "Vendor ID payload");
- proto_tree * ntree = proto_tree_new();
+ proto_item * ti = proto_tree_add_text(tree, offset, length, "Vendor ID payload");
+ proto_tree * ntree;
- proto_item_add_subtree(ti, ntree, ETT_ISAKMP_PAYLOAD);
+ ntree = proto_item_add_subtree(ti, ETT_ISAKMP_PAYLOAD);
- proto_tree_add_item(ntree, offset, sizeof(hdr->next_payload),
+ proto_tree_add_text(ntree, offset, sizeof(hdr->next_payload),
"Next payload: %s (%u)",
payloadtype2str(hdr->next_payload), hdr->next_payload);
offset += sizeof(hdr->next_payload) * 2;
- proto_tree_add_item(ntree, offset, sizeof(length),
+ proto_tree_add_text(ntree, offset, sizeof(length),
"Length: %u", length);
offset += sizeof(length);
- proto_tree_add_item(ntree, offset, length - sizeof(*hdr), "Vendor ID");
+ proto_tree_add_text(ntree, offset, length - sizeof(*hdr), "Vendor ID");
offset += (length - sizeof(*hdr));
if (hdr->next_payload < NUM_LOAD_TYPES)
@@ -1035,10 +1033,10 @@ num2str(const guint8 *pd, guint16 len) {
snprintf(numstr, NUMSTR_LEN, "%u", pntohs(pd));
break;
case 3:
- snprintf(numstr, NUMSTR_LEN, "%u", pntohl(pd) & 0x0fff);
+ snprintf(numstr, NUMSTR_LEN, "%lu", pntohl(pd) & 0x0fff);
break;
case 4:
- snprintf(numstr, NUMSTR_LEN, "%u", pntohl(pd));
+ snprintf(numstr, NUMSTR_LEN, "%lu", pntohl(pd));
break;
default:
snprintf(numstr, NUMSTR_LEN, "<too big>");
diff --git a/packet-llc.c b/packet-llc.c
index e339e3f0d0..3aba7cb71e 100644
--- a/packet-llc.c
+++ b/packet-llc.c
@@ -1,8 +1,8 @@
/* packet-llc.c
* Routines for IEEE 802.2 LLC layer
- * Gilbert Ramirez <gram@verdict.uthscsa.edu>
+ * Gilbert Ramirez <gramirez@tivoli.com>
*
- * $Id: packet-llc.c,v 1.14 1999/03/23 03:14:39 gram Exp $
+ * $Id: packet-llc.c,v 1.15 1999/07/07 22:51:46 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -34,64 +34,105 @@
#include <glib.h>
#include "packet.h"
+
+int proto_llc = -1;
+int hf_llc_dsap = -1;
+int hf_llc_ssap = -1;
+int hf_llc_ctrl = -1;
+int hf_llc_type = -1;
+int hf_llc_oui = -1;
typedef void (capture_func_t)(const u_char *, int, guint32, packet_counts *);
typedef void (dissect_func_t)(const u_char *, int, frame_data *, proto_tree *);
+/* The SAP info is split into two tables, one value_string table and one table of sap_info. This is
+ * so that the value_string can be used in the header field registration.
+ */
struct sap_info {
guint8 sap;
capture_func_t *capture_func;
dissect_func_t *dissect_func;
- char *text;
};
-static struct sap_info saps[] = {
- { 0x00, NULL, NULL, "NULL LSAP" },
- { 0x02, NULL, NULL, "LLC Sub-Layer Management Individual" },
- { 0x03, NULL, NULL, "LLC Sub-Layer Management Group" },
- { 0x04, NULL, NULL, "SNA Path Control Individual" },
- { 0x05, NULL, NULL, "SNA Path Control Group" },
- { 0x06, capture_ip, dissect_ip, "TCP/IP" },
- { 0x08, NULL, NULL, "SNA" },
- { 0x0C, NULL, NULL, "SNA" },
- { 0x42, NULL, NULL, "Spanning Tree BPDU" },
- { 0x7F, NULL, NULL, "ISO 802.2" },
- { 0x80, NULL, NULL, "XNS" },
- { 0xAA, NULL, NULL, "SNAP" },
- /*{ 0xBA, NULL, dissect_vines, "Banyan Vines" },
- { 0xBC, NULL, dissect_vines, "Banyan Vines" },*/
- { 0xBA, NULL, NULL, "Banyan Vines" },
- { 0xBC, NULL, NULL, "Banyan Vines" },
- { 0xE0, NULL, dissect_ipx, "NetWare" },
- { 0xF0, NULL, NULL, "NetBIOS" },
- { 0xF4, NULL, NULL, "IBM Net Management Individual" },
- { 0xF5, NULL, NULL, "IBM Net Management Group" },
- { 0xF8, NULL, NULL, "Remote Program Load" },
- { 0xFC, NULL, NULL, "Remote Program Load" },
- { 0xFE, NULL, dissect_osi, "ISO Network Layer" },
- { 0xFF, NULL, NULL, "Global LSAP" },
- { 0x00, NULL, NULL, NULL }
+static const value_string sap_vals[] = {
+ { 0x00, "NULL LSAP" },
+ { 0x02, "LLC Sub-Layer Management Individual" },
+ { 0x03, "LLC Sub-Layer Management Group" },
+ { 0x04, "SNA Path Control Individual" },
+ { 0x05, "SNA Path Control Group" },
+ { 0x06, "TCP/IP" },
+ { 0x08, "SNA" },
+ { 0x0C, "SNA" },
+ { 0x42, "Spanning Tree BPDU" },
+ { 0x7F, "ISO 802.2" },
+ { 0x80, "XNS" },
+ { 0xAA, "SNAP" },
+ { 0xBA, "Banyan Vines" },
+ { 0xBC, "Banyan Vines" },
+ { 0xE0, "NetWare" },
+ { 0xF0, "NetBIOS" },
+ { 0xF4, "IBM Net Management Individual" },
+ { 0xF5, "IBM Net Management Group" },
+ { 0xF8, "Remote Program Load" },
+ { 0xFC, "Remote Program Load" },
+ { 0xFE, "ISO Network Layer" },
+ { 0xFF, "Global LSAP" },
+ { 0x00, NULL }
};
+static struct sap_info saps[] = {
+ { 0x00, NULL, NULL },
+ { 0x02, NULL, NULL },
+ { 0x03, NULL, NULL },
+ { 0x04, NULL, NULL },
+ { 0x05, NULL, NULL },
+ { 0x06, capture_ip, dissect_ip },
+ { 0x08, NULL, NULL },
+ { 0x0C, NULL, NULL },
+ { 0x42, NULL, NULL },
+ { 0x7F, NULL, NULL },
+ { 0x80, NULL, NULL },
+ { 0xAA, NULL, NULL },
+ { 0xBA, NULL, NULL },
+ { 0xBC, NULL, NULL },
+ { 0xE0, NULL, dissect_ipx },
+ { 0xF0, NULL, NULL },
+ { 0xF4, NULL, NULL },
+ { 0xF5, NULL, NULL },
+ { 0xF8, NULL, NULL },
+ { 0xFC, NULL, NULL },
+ { 0xFE, NULL, dissect_osi },
+ { 0xFF, NULL, NULL },
+ { 0x00, NULL, NULL}
+};
-static char*
-sap_text(u_char sap) {
- int i=0;
+static const value_string llc_ctrl_vals[] = {
+ { 0, "Information Transfer" },
+ { 1, "Supervisory" },
+ { 2, "Unknown" },
+ { 3, "Unnumbered Information" },
+ { 0, NULL }
+};
- while (saps[i].text != NULL) {
- if (saps[i].sap == sap) {
- return saps[i].text;
- }
- i++;
- }
- return "Unknown";
-}
+static const value_string llc_oui_vals[] = {
+ { 0x000000, "Encapsulated Ethernet" },
+/*
+http://www.cisco.com/univercd/cc/td/doc/product/software/ios113ed/113ed_cr/ibm_r/brprt1/brsrb.htm
+*/
+ { 0x0000f8, "Cisco 90-Compatible" },
+ { 0x0000c0, "Cisco" },
+ { 0x0080c2, "Bridged Frame-Relay" }, /* RFC 2427 */
+ { 0, NULL }
+};
static capture_func_t *
sap_capture_func(u_char sap) {
int i=0;
- while (saps[i].text != NULL) {
+ /* look for the second record where sap == 0, which should
+ * be the last record
+ */
+ while (saps[i].sap > 0 || i == 0) {
if (saps[i].sap == sap) {
return saps[i].capture_func;
}
@@ -104,7 +145,10 @@ static dissect_func_t *
sap_dissect_func(u_char sap) {
int i=0;
- while (saps[i].text != NULL) {
+ /* look for the second record where sap == 0, which should
+ * be the last record
+ */
+ while (saps[i].sap > 0 || i == 0) {
if (saps[i].sap == sap) {
return saps[i].dissect_func;
}
@@ -113,20 +157,6 @@ sap_dissect_func(u_char sap) {
return dissect_data;
}
-static char*
-llc_org(const u_char *ptr) {
-
- unsigned long org = (ptr[0] << 16) | (ptr[1] << 8) | ptr[2];
- char *llc_org[1] = {
- "Encapsulated Ethernet"};
-
- if (org > 0) {
- return "Unknown";
- }
- else {
- return llc_org[org];
- }
-}
void
capture_llc(const u_char *pd, int offset, guint32 cap_len, packet_counts *ld) {
@@ -166,11 +196,6 @@ dissect_llc(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
int is_snap;
dissect_func_t *dissect;
- /* LLC Strings */
- char *llc_ctrl[4] = {
- "Information Transfer", "Supervisory",
- "", "Unnumbered Information" };
-
is_snap = (pd[offset] == 0xAA) && (pd[offset+1] == 0xAA);
if (check_col(fd, COL_PROTOCOL)) {
@@ -178,16 +203,11 @@ dissect_llc(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, (is_snap ? 8 : 3),
- "Logical-Link Control");
- llc_tree = proto_tree_new();
- proto_item_add_subtree(ti, llc_tree, ETT_LLC);
- proto_tree_add_item(llc_tree, offset, 1, "DSAP: %s (0x%02X)",
- sap_text(pd[offset]), pd[offset]);
- proto_tree_add_item(llc_tree, offset+1, 1, "SSAP: %s (0x%02X)",
- sap_text(pd[offset+1]), pd[offset+1]);
- proto_tree_add_item(llc_tree, offset+2, 1, "Control: %s",
- llc_ctrl[pd[offset+2] & 3]);
+ ti = proto_tree_add_item(tree, proto_llc, offset, (is_snap ? 8 : 3), NULL);
+ llc_tree = proto_item_add_subtree(ti, ETT_LLC);
+ proto_tree_add_item(llc_tree, hf_llc_dsap, offset, 1, pd[offset]);
+ proto_tree_add_item(llc_tree, hf_llc_ssap, offset+1, 1, pd[offset+1]);
+ proto_tree_add_item(llc_tree, hf_llc_ctrl, offset+2, 1, pd[offset+2] & 3);
}
if (is_snap) {
@@ -195,18 +215,18 @@ dissect_llc(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
col_add_str(fd, COL_INFO, "802.2 LLC (SNAP)");
}
if (tree) {
- proto_tree_add_item(llc_tree, offset+3, 3,
- "Organization Code: %s (%02X-%02X-%02X)",
- llc_org(&pd[offset+3]),
- pd[offset+3], pd[offset+4], pd[offset+5]);
+ proto_tree_add_item(llc_tree, hf_llc_oui, offset+3, 3,
+ pd[offset+3] << 16 | pd[offset+4] << 8 | pd[offset+5]);
}
- etype = (pd[offset+6] << 8) | pd[offset+7];
+ etype = pntohs(&pd[offset+6]);
offset += 8;
- ethertype(etype, offset, pd, fd, tree, llc_tree);
+ /* w/o even checking, assume OUI is ethertype */
+ ethertype(etype, offset, pd, fd, tree, llc_tree, hf_llc_type);
}
else {
if (check_col(fd, COL_INFO)) {
- col_add_fstr(fd, COL_INFO, "802.2 LLC (%s)", sap_text(pd[offset]));
+ col_add_fstr(fd, COL_INFO, "802.2 LLC (%s)",
+ val_to_str(pd[offset], sap_vals, "%02x"));
}
dissect = sap_dissect_func(pd[offset]);
@@ -223,3 +243,21 @@ dissect_llc(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
}
+
+void
+proto_register_llc(void)
+{
+ const hf_register_info hf[] = {
+ { "DSAP", "llc.dsap", &hf_llc_dsap, FT_VALS_UINT8, VALS(sap_vals) },
+ { "SSAP", "llc.ssap", &hf_llc_ssap, FT_VALS_UINT8, VALS(sap_vals) },
+ { "Control", "llc.control", &hf_llc_ctrl, FT_VALS_UINT8, VALS(llc_ctrl_vals) },
+
+ /* registered here but handled in ethertype.c */
+ { "Type", "llc.type", &hf_llc_type, FT_VALS_UINT16, VALS(etype_vals) },
+
+ { "Organization Code", "llc.oui", &hf_llc_oui, FT_VALS_UINT24, VALS(llc_oui_vals) }
+ };
+
+ proto_llc = proto_register_protocol ("Logical-Link Control", "llc" );
+ proto_register_field_array(proto_llc, hf, array_length(hf));
+}
diff --git a/packet-lpd.c b/packet-lpd.c
index b1164b611f..e4718488fb 100644
--- a/packet-lpd.c
+++ b/packet-lpd.c
@@ -2,7 +2,7 @@
* Routines for LPR and LPRng packet disassembly
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-lpd.c,v 1.7 1999/03/23 03:14:39 gram Exp $
+ * $Id: packet-lpd.c,v 1.8 1999/07/07 22:51:47 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -93,18 +93,17 @@ dissect_lpd(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, fd->cap_len - offset,
+ ti = proto_tree_add_text(tree, offset, fd->cap_len - offset,
"Line Printer Daemon Protocol");
- lpd_tree = proto_tree_new();
- proto_item_add_subtree(ti, lpd_tree, ETT_LPD);
+ lpd_tree = proto_item_add_subtree(ti, ETT_LPD);
if (lpr_packet_type == request) {
if (pd[offset] <= 9) {
- proto_tree_add_item(lpd_tree, offset, 1,
+ proto_tree_add_text(lpd_tree, offset, 1,
lpd_client_code[pd[offset]]);
}
else {
- proto_tree_add_item(lpd_tree, offset, 1,
+ proto_tree_add_text(lpd_tree, offset, 1,
lpd_client_code[0]);
}
printer = g_strdup(&pd[offset+1]);
@@ -113,14 +112,14 @@ dissect_lpd(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if (printer[fd->cap_len - offset - 2] == 0x0a) {
printer[fd->cap_len - offset - 2] = 0;
}
- proto_tree_add_item(lpd_tree, offset+1, fd->cap_len - (offset+1),
+ proto_tree_add_text(lpd_tree, offset+1, fd->cap_len - (offset+1),
/*"Printer/options: %s", &pd[offset+1]);*/
"Printer/options: %s", printer);
g_free(printer);
}
else {
if (pd[offset] <= 3) {
- proto_tree_add_item(lpd_tree, offset, 2, "Response: %s",
+ proto_tree_add_text(lpd_tree, offset, 2, "Response: %s",
lpd_server_code[pd[offset]]);
}
else {
@@ -130,13 +129,13 @@ dissect_lpd(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
while (fd->cap_len > curr_offset) {
newline = strchr(line_pos, '\n');
if (!newline) {
- proto_tree_add_item(lpd_tree, curr_offset,
+ proto_tree_add_text(lpd_tree, curr_offset,
fd->cap_len - offset, "Text: %s", line_pos);
break;
}
*newline = 0;
substr_len = strlen(line_pos);
- proto_tree_add_item(lpd_tree, curr_offset, substr_len + 1,
+ proto_tree_add_text(lpd_tree, curr_offset, substr_len + 1,
"Text: %s", line_pos);
curr_offset += substr_len + 1;
line_pos = newline + 1;
diff --git a/packet-nbipx.c b/packet-nbipx.c
index b3543003c5..8a2b973f40 100644
--- a/packet-nbipx.c
+++ b/packet-nbipx.c
@@ -2,7 +2,7 @@
* Routines for NetBIOS over IPX packet disassembly
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-nbipx.c,v 1.7 1999/05/10 19:01:32 gram Exp $
+ * $Id: packet-nbipx.c,v 1.8 1999/07/07 22:51:47 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -141,18 +141,17 @@ nbipx_ns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, 68,
+ ti = proto_tree_add_text(tree, offset, 68,
"NetBIOS over IPX");
- nbipx_tree = proto_tree_new();
- proto_item_add_subtree(ti, nbipx_tree, ETT_NBIPX);
+ nbipx_tree = proto_item_add_subtree(ti, ETT_NBIPX);
if (header.packet_type <= 1) {
- proto_tree_add_item(nbipx_tree, offset+33, 1,
+ proto_tree_add_text(nbipx_tree, offset+33, 1,
"Packet Type: %s (%02X)", packet_type[header.packet_type],
header.packet_type);
}
else {
- proto_tree_add_item(nbipx_tree, offset+33, 1,
+ proto_tree_add_text(nbipx_tree, offset+33, 1,
"Packet Type: Unknown (%02X)", header.packet_type);
}
@@ -161,22 +160,22 @@ nbipx_ns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
rtr_offset = offset + (i << 2);
memcpy(&header.router[i], &pd[rtr_offset], 4);
if (header.router[i] != 0) {
- proto_tree_add_item(nbipx_tree, rtr_offset, 4, "IPX Network: %s",
+ proto_tree_add_text(nbipx_tree, rtr_offset, 4, "IPX Network: %s",
ipxnet_to_string((guint8*)&header.router[i]));
}
}
- proto_tree_add_item(nbipx_tree, offset+32, 1, "Name Type: %02X",
+ proto_tree_add_text(nbipx_tree, offset+32, 1, "Name Type: %02X",
header.name_type);
if (nbipx == NETBIOS_NETWARE) {
- proto_tree_add_item(nbipx_tree, offset+name_offset, 16,
+ proto_tree_add_text(nbipx_tree, offset+name_offset, 16,
"Name String: %s", header.name);
}
else {
- proto_tree_add_item(nbipx_tree, offset+name_offset, 16,
+ proto_tree_add_text(nbipx_tree, offset+name_offset, 16,
"Group Name String: %s", header.name);
- proto_tree_add_item(nbipx_tree, offset+52, 16,
+ proto_tree_add_text(nbipx_tree, offset+52, 16,
"Node Name String: %s", header.node_name);
}
diff --git a/packet-nbns.c b/packet-nbns.c
index 0bf84e3ff8..c44de19a97 100644
--- a/packet-nbns.c
+++ b/packet-nbns.c
@@ -4,7 +4,7 @@
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
* Much stuff added by Guy Harris <guy@netapp.com>
*
- * $Id: packet-nbns.c,v 1.21 1999/06/01 20:40:34 guy Exp $
+ * $Id: packet-nbns.c,v 1.22 1999/07/07 22:51:47 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -303,18 +303,17 @@ dissect_nbns_query(const u_char *nbns_data_ptr, const u_char *pd, int offset,
type_name = nbns_type_name(type);
class_name = dns_class_name(class);
- tq = proto_tree_add_item(nbns_tree, offset, len, "%s: type %s, class %s",
+ tq = proto_tree_add_text(nbns_tree, offset, len, "%s: type %s, class %s",
name, type_name, class_name);
- q_tree = proto_tree_new();
- proto_item_add_subtree(tq, q_tree, ETT_NBNS_QD);
+ q_tree = proto_item_add_subtree(tq, ETT_NBNS_QD);
- proto_tree_add_item(q_tree, offset, name_len, "Name: %s", name);
+ proto_tree_add_text(q_tree, offset, name_len, "Name: %s", name);
offset += name_len;
- proto_tree_add_item(q_tree, offset, 2, "Type: %s", type_name);
+ proto_tree_add_text(q_tree, offset, 2, "Type: %s", type_name);
offset += 2;
- proto_tree_add_item(q_tree, offset, 2, "Class: %s", class_name);
+ proto_tree_add_text(q_tree, offset, 2, "Class: %s", class_name);
offset += 2;
return dptr - data_start;
@@ -347,49 +346,48 @@ nbns_add_nbns_flags(proto_tree *nbns_tree, int offset, u_short flags,
strcat(buf, val_to_str(flags & F_RCODE, rcode_vals,
"Unknown error"));
}
- tf = proto_tree_add_item(nbns_tree, offset, 2,
+ tf = proto_tree_add_text(nbns_tree, offset, 2,
"Flags: 0x%04x (%s)", flags, buf);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_NBNS_FLAGS);
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_NBNS_FLAGS);
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, F_RESPONSE,
2*8, "Response", "Query"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_enumerated_bitfield(flags, F_OPCODE,
2*8, opcode_vals, "%s"));
if (flags & F_RESPONSE) {
- proto_tree_add_item(field_tree, offset, 2,
+ proto_tree_add_text(field_tree, offset, 2,
"%s",
decode_boolean_bitfield(flags, F_AUTHORITATIVE,
2*8,
"Server is an authority for domain",
"Server isn't an authority for domain"));
}
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, F_TRUNCATED,
2*8,
"Message is truncated",
"Message is not truncated"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, F_RECDESIRED,
2*8,
"Do query recursively",
"Don't do query recursively"));
if (flags & F_RESPONSE) {
- proto_tree_add_item(field_tree, offset, 2,
+ proto_tree_add_text(field_tree, offset, 2,
"%s",
decode_boolean_bitfield(flags, F_RECAVAIL,
2*8,
"Server can do recursive queries",
"Server can't do recursive queries"));
}
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, F_BROADCAST,
2*8,
"Broadcast packet",
"Not a broadcast packet"));
if (flags & F_RESPONSE && !is_wack) {
- proto_tree_add_item(field_tree, offset, 2,
+ proto_tree_add_text(field_tree, offset, 2,
"%s",
decode_enumerated_bitfield(flags, F_RCODE,
2*8,
@@ -418,16 +416,15 @@ nbns_add_nb_flags(proto_tree *rr_tree, int offset, u_short flags)
strcat(buf, "group");
else
strcat(buf, "unique");
- tf = proto_tree_add_item(rr_tree, offset, 2, "Flags: 0x%x (%s)", flags,
+ tf = proto_tree_add_text(rr_tree, offset, 2, "Flags: 0x%x (%s)", flags,
buf);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_NBNS_NB_FLAGS);
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_NBNS_NB_FLAGS);
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, NB_FLAGS_G,
2*8,
"Group name",
"Unique name"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_enumerated_bitfield(flags, NB_FLAGS_ONT,
2*8, nb_flags_ont_vals, "%s"));
}
@@ -460,34 +457,33 @@ nbns_add_name_flags(proto_tree *rr_tree, int offset, u_short flags)
strcat(buf, ", active");
if (flags & NAME_FLAGS_PRM)
strcat(buf, ", permanent node name");
- tf = proto_tree_add_item(rr_tree, offset, 2, "Name flags: 0x%x (%s)",
+ tf = proto_tree_add_text(rr_tree, offset, 2, "Name flags: 0x%x (%s)",
flags, buf);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_NBNS_NAME_FLAGS);
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ field_tree = proto_item_add_subtree(tf, ETT_NBNS_NAME_FLAGS);
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, NAME_FLAGS_G,
2*8,
"Group name",
"Unique name"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_enumerated_bitfield(flags, NAME_FLAGS_ONT,
2*8, name_flags_ont_vals, "%s"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, NAME_FLAGS_DRG,
2*8,
"Name is being deregistered",
"Name is not being deregistered"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, NAME_FLAGS_CNF,
2*8,
"Name is in conflict",
"Name is not in conflict"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, NAME_FLAGS_ACT,
2*8,
"Name is active",
"Name is not active"));
- proto_tree_add_item(field_tree, offset, 2, "%s",
+ proto_tree_add_text(field_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, NAME_FLAGS_PRM,
2*8,
"Permanent node name",
@@ -530,7 +526,7 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
switch (type) {
case T_NB: /* "NB" record */
- trr = proto_tree_add_item(nbns_tree, offset,
+ trr = proto_tree_add_text(nbns_tree, offset,
(dptr - data_start) + data_len,
"%s: type %s, class %s",
name, type_name, class_name);
@@ -543,7 +539,7 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
* same type of RR data as other T_NB
* responses. */
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
@@ -554,7 +550,7 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
data_len -= 2;
} else {
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
@@ -565,11 +561,11 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
data_len -= 2;
if (data_len < 4) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 4,
+ proto_tree_add_text(rr_tree, offset, 4,
"Addr: %s",
ip_to_str((guint8 *)dptr));
dptr += 4;
@@ -585,7 +581,7 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
char nbname[16+4+1]; /* 4 for [<last char>] */
u_short name_flags;
- trr = proto_tree_add_item(nbns_tree, offset,
+ trr = proto_tree_add_text(nbns_tree, offset,
(dptr - data_start) + data_len,
"%s: type %s, class %s",
name, type_name, class_name);
@@ -593,32 +589,32 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
name_len, type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
if (data_len < 1) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
num_names = *dptr;
dptr += 1;
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of names: %u", num_names);
offset += 1;
while (num_names != 0) {
if (data_len < 16) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
goto out;
}
memcpy(nbname, dptr, 16);
dptr += 16;
canonicalize_netbios_name(nbname);
- proto_tree_add_item(rr_tree, offset, 16,
+ proto_tree_add_text(rr_tree, offset, 16,
"Name: %s", nbname);
offset += 16;
data_len -= 16;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
goto out;
}
@@ -632,11 +628,11 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
}
if (data_len < 6) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 6,
+ proto_tree_add_text(rr_tree, offset, 6,
"Unit ID: %s",
ether_to_str((guint8 *)dptr));
dptr += 6;
@@ -644,181 +640,181 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
data_len -= 6;
if (data_len < 1) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 1,
+ proto_tree_add_text(rr_tree, offset, 1,
"Jumpers: 0x%x", *dptr);
dptr += 1;
offset += 1;
data_len -= 1;
if (data_len < 1) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 1,
+ proto_tree_add_text(rr_tree, offset, 1,
"Test result: 0x%x", *dptr);
dptr += 1;
offset += 1;
data_len -= 1;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Version number: 0x%x", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Period of statistics: 0x%x", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of CRCs: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of alignment errors: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of collisions: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of send aborts: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 4) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 4,
+ proto_tree_add_text(rr_tree, offset, 4,
"Number of good sends: %u", pntohl(dptr));
dptr += 4;
offset += 4;
data_len -= 4;
if (data_len < 4) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 4,
+ proto_tree_add_text(rr_tree, offset, 4,
"Number of good receives: %u", pntohl(dptr));
dptr += 4;
offset += 4;
data_len -= 4;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of retransmits: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of no resource conditions: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of command blocks: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Number of pending sessions: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Max number of pending sessions: %u", pntohs(dptr));
dptr += 2;
offset += 2;
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Max total sessions possible: %u", pntohs(dptr));
dptr += 2;
offset += 2;
data_len -= 2;
if (data_len < 2) {
- proto_tree_add_item(rr_tree, offset,
+ proto_tree_add_text(rr_tree, offset,
data_len, "(incomplete entry)");
break;
}
- proto_tree_add_item(rr_tree, offset, 2,
+ proto_tree_add_text(rr_tree, offset, 2,
"Session data packet size: %u", pntohs(dptr));
dptr += 2;
offset += 2;
@@ -828,14 +824,14 @@ dissect_nbns_answer(const u_char *nbns_data_ptr, const u_char *pd, int offset,
break;
default:
- trr = proto_tree_add_item(nbns_tree, offset,
+ trr = proto_tree_add_text(nbns_tree, offset,
(dptr - data_start) + data_len,
"%s: type %s, class %s",
name, type_name, class_name);
rr_tree = add_rr_to_tree(trr, ETT_NBNS_RR, offset, name,
name_len, type_name, class_name, ttl, data_len);
offset += (dptr - data_start);
- proto_tree_add_item(rr_tree, offset, data_len, "Data");
+ proto_tree_add_text(rr_tree, offset, data_len, "Data");
break;
}
dptr += data_len;
@@ -852,9 +848,8 @@ dissect_query_records(const u_char *nbns_data_ptr, int count, const u_char *pd,
proto_item *ti;
start_off = cur_off;
- ti = proto_tree_add_item(nbns_tree, start_off, 0, "Queries");
- qatree = proto_tree_new();
- proto_item_add_subtree(ti, qatree, ETT_NBNS_QRY);
+ ti = proto_tree_add_text(nbns_tree, start_off, 0, "Queries");
+ qatree = proto_item_add_subtree(ti, ETT_NBNS_QRY);
while (count-- > 0)
cur_off += dissect_nbns_query(nbns_data_ptr, pd, cur_off, qatree);
proto_item_set_len(ti, cur_off - start_off);
@@ -873,9 +868,8 @@ dissect_answer_records(const u_char *nbns_data_ptr, int count,
proto_item *ti;
start_off = cur_off;
- ti = proto_tree_add_item(nbns_tree, start_off, 0, name);
- qatree = proto_tree_new();
- proto_item_add_subtree(ti, qatree, ETT_NBNS_ANS);
+ ti = proto_tree_add_text(nbns_tree, start_off, 0, name);
+ qatree = proto_item_add_subtree(ti, ETT_NBNS_ANS);
while (count-- > 0)
cur_off += dissect_nbns_answer(nbns_data_ptr, pd, cur_off,
qatree, opcode);
@@ -912,25 +906,24 @@ dissect_nbns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"NetBIOS Name Service");
- nbns_tree = proto_tree_new();
- proto_item_add_subtree(ti, nbns_tree, ETT_NBNS);
+ nbns_tree = proto_item_add_subtree(ti, ETT_NBNS);
- proto_tree_add_item(nbns_tree, offset + NBNS_ID, 2,
+ proto_tree_add_text(nbns_tree, offset + NBNS_ID, 2,
"Transaction ID: 0x%04X", id);
nbns_add_nbns_flags(nbns_tree, offset + NBNS_FLAGS, flags, 0);
- proto_tree_add_item(nbns_tree, offset + NBNS_QUEST, 2,
+ proto_tree_add_text(nbns_tree, offset + NBNS_QUEST, 2,
"Questions: %d",
quest);
- proto_tree_add_item(nbns_tree, offset + NBNS_ANS, 2,
+ proto_tree_add_text(nbns_tree, offset + NBNS_ANS, 2,
"Answer RRs: %d",
ans);
- proto_tree_add_item(nbns_tree, offset + NBNS_AUTH, 2,
+ proto_tree_add_text(nbns_tree, offset + NBNS_AUTH, 2,
"Authority RRs: %d",
auth);
- proto_tree_add_item(nbns_tree, offset + NBNS_ADD, 2,
+ proto_tree_add_text(nbns_tree, offset + NBNS_ADD, 2,
"Additional RRs: %d",
add);
@@ -1052,25 +1045,24 @@ dissect_nbdgm(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, header.dgm_length,
+ ti = proto_tree_add_text(tree, offset, header.dgm_length,
"NetBIOS Datagram Service");
- nbdgm_tree = proto_tree_new();
- proto_item_add_subtree(ti, nbdgm_tree, ETT_NBDGM);
+ nbdgm_tree = proto_item_add_subtree(ti, ETT_NBDGM);
- proto_tree_add_item(nbdgm_tree, offset, 1, "Message Type: %s",
+ proto_tree_add_text(nbdgm_tree, offset, 1, "Message Type: %s",
message[message_index]);
- proto_tree_add_item(nbdgm_tree, offset+1, 1, "More fragments follow: %s",
+ proto_tree_add_text(nbdgm_tree, offset+1, 1, "More fragments follow: %s",
yesno[header.flags.more]);
- proto_tree_add_item(nbdgm_tree, offset+1, 1, "This is first fragment: %s",
+ proto_tree_add_text(nbdgm_tree, offset+1, 1, "This is first fragment: %s",
yesno[header.flags.first]);
- proto_tree_add_item(nbdgm_tree, offset+1, 1, "Node Type: %s",
+ proto_tree_add_text(nbdgm_tree, offset+1, 1, "Node Type: %s",
node[header.flags.node_type]);
- proto_tree_add_item(nbdgm_tree, offset+2, 2, "Datagram ID: 0x%04X",
+ proto_tree_add_text(nbdgm_tree, offset+2, 2, "Datagram ID: 0x%04X",
header.dgm_id);
- proto_tree_add_item(nbdgm_tree, offset+4, 4, "Source IP: %s",
+ proto_tree_add_text(nbdgm_tree, offset+4, 4, "Source IP: %s",
ip_to_str((guint8 *)&header.src_ip));
- proto_tree_add_item(nbdgm_tree, offset+8, 2, "Source Port: %d",
+ proto_tree_add_text(nbdgm_tree, offset+8, 2, "Source Port: %d",
header.src_port);
}
@@ -1081,9 +1073,9 @@ dissect_nbdgm(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
header.msg_type == 0x11 || header.msg_type == 0x12) {
if (tree) {
- proto_tree_add_item(nbdgm_tree, offset, 2,
+ proto_tree_add_text(nbdgm_tree, offset, 2,
"Datagram length: %d bytes", header.dgm_length);
- proto_tree_add_item(nbdgm_tree, offset+2, 2,
+ proto_tree_add_text(nbdgm_tree, offset+2, 2,
"Packet offset: %d bytes", header.pkt_offset);
}
@@ -1094,7 +1086,7 @@ dissect_nbdgm(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
len = get_nbns_name(&pd[offset], pd, offset, name);
if (tree) {
- proto_tree_add_item(nbdgm_tree, offset, len, "Source name: %s",
+ proto_tree_add_text(nbdgm_tree, offset, len, "Source name: %s",
name);
}
offset += len;
@@ -1104,7 +1096,7 @@ dissect_nbdgm(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
len = get_nbns_name(&pd[offset], pd, offset, name);
if (tree) {
- proto_tree_add_item(nbdgm_tree, offset, len, "Destination name: %s",
+ proto_tree_add_text(nbdgm_tree, offset, len, "Destination name: %s",
name);
}
offset += len;
@@ -1115,7 +1107,7 @@ dissect_nbdgm(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
}
else if (header.msg_type == 0x13) {
if (tree) {
- proto_tree_add_item(nbdgm_tree, offset, 1, "Error code: %s",
+ proto_tree_add_text(nbdgm_tree, offset, 1, "Error code: %s",
val_to_str(header.error_code, error_codes, "Unknown (0x%x)"));
}
}
@@ -1125,7 +1117,7 @@ dissect_nbdgm(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
len = get_nbns_name(&pd[offset], pd, offset, name);
if (tree) {
- proto_tree_add_item(nbdgm_tree, offset, len, "Destination name: %s",
+ proto_tree_add_text(nbdgm_tree, offset, len, "Destination name: %s",
name);
}
}
@@ -1192,22 +1184,20 @@ dissect_nbss_packet(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
length += 65536;
if (tree) {
- ti = proto_tree_add_item(tree, offset, length + 4,
+ ti = proto_tree_add_text(tree, offset, length + 4,
"NetBIOS Session Service");
- nbss_tree = proto_tree_new();
- proto_item_add_subtree(ti, nbss_tree, ETT_NBSS);
+ nbss_tree = proto_item_add_subtree(ti, ETT_NBSS);
- proto_tree_add_item(nbss_tree, offset, 1, "Message Type: %s",
+ proto_tree_add_text(nbss_tree, offset, 1, "Message Type: %s",
val_to_str(msg_type, message_types, "Unknown (%x)"));
}
offset += 1;
if (tree) {
- tf = proto_tree_add_item(nbss_tree, offset, 1, "Flags: 0x%04x", flags);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_NBSS_FLAGS);
- proto_tree_add_item(field_tree, offset, 1, "%s",
+ tf = proto_tree_add_text(nbss_tree, offset, 1, "Flags: 0x%04x", flags);
+ field_tree = proto_item_add_subtree(tf, ETT_NBSS_FLAGS);
+ proto_tree_add_text(field_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, NBSS_FLAGS_E,
8, "Add 65536 to length", "Add 0 to length"));
}
@@ -1215,7 +1205,7 @@ dissect_nbss_packet(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
offset += 1;
if (tree) {
- proto_tree_add_item(nbss_tree, offset, 2, "Length: %u", length);
+ proto_tree_add_text(nbss_tree, offset, 2, "Length: %u", length);
}
offset += 2;
@@ -1225,35 +1215,35 @@ dissect_nbss_packet(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
case SESSION_REQUEST:
len = get_nbns_name(&pd[offset], pd, offset, name);
if (tree)
- proto_tree_add_item(nbss_tree, offset, len,
+ proto_tree_add_text(nbss_tree, offset, len,
"Called name: %s", name);
offset += len;
len = get_nbns_name(&pd[offset], pd, offset, name);
if (tree)
- proto_tree_add_item(nbss_tree, offset, len,
+ proto_tree_add_text(nbss_tree, offset, len,
"Calling name: %s", name);
break;
case NEGATIVE_SESSION_RESPONSE:
if (tree)
- proto_tree_add_item(nbss_tree, offset, 1,
+ proto_tree_add_text(nbss_tree, offset, 1,
"Error code: %s",
val_to_str(pd[offset], error_codes, "Unknown (%x)"));
break;
case RETARGET_SESSION_RESPONSE:
if (tree)
- proto_tree_add_item(nbss_tree, offset, 4,
+ proto_tree_add_text(nbss_tree, offset, 4,
"Retarget IP address: %s",
ip_to_str((guint8 *)&pd[offset]));
offset += 4;
if (tree)
- proto_tree_add_item(nbss_tree, offset, 2,
+ proto_tree_add_text(nbss_tree, offset, 2,
"Retarget port: %u", pntohs(&pd[offset]));
break;
diff --git a/packet-ncp.c b/packet-ncp.c
index ebca85db9b..ca376c09a6 100644
--- a/packet-ncp.c
+++ b/packet-ncp.c
@@ -2,7 +2,7 @@
* Routines for NetWare Core Protocol
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-ncp.c,v 1.15 1999/05/26 21:46:07 gram Exp $
+ * $Id: packet-ncp.c,v 1.16 1999/07/07 22:51:48 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -60,9 +60,10 @@ parse_ncp_svc_fields(const u_char *pd, proto_tree *ncp_tree, int offset,
/* Hash functions */
-gint ncp_equal (const gpointer v, const gpointer v2);
-guint ncp_hash (const gpointer v);
+gint ncp_equal (gconstpointer v, gconstpointer v2);
+guint ncp_hash (gconstpointer v);
+int ncp_packet_init_count = 200;
/* The information in this module comes from:
NetWare LAN Analysis, Second Edition
@@ -343,7 +344,7 @@ GMemChunk *ncp_request_keys = NULL;
GMemChunk *ncp_request_records = NULL;
/* Hash Functions */
-gint ncp_equal (const gpointer v, const gpointer v2)
+gint ncp_equal (gconstpointer v, gconstpointer v2)
{
struct ncp_request_key *val1 = (struct ncp_request_key*)v;
struct ncp_request_key *val2 = (struct ncp_request_key*)v2;
@@ -362,7 +363,7 @@ gint ncp_equal (const gpointer v, const gpointer v2)
return 0;
}
-guint ncp_hash (const gpointer v)
+guint ncp_hash (gconstpointer v)
{
struct ncp_request_key *ncp_key = (struct ncp_request_key*)v;
#if defined(DEBUG_NCP_HASH)
@@ -393,10 +394,10 @@ ncp_init_protocol(void)
ncp_request_hash = g_hash_table_new(ncp_hash, ncp_equal);
ncp_request_keys = g_mem_chunk_new("ncp_request_keys",
sizeof(struct ncp_request_key),
- 1000 * sizeof(struct ncp_request_key), G_ALLOC_AND_FREE);
+ ncp_packet_init_count * sizeof(struct ncp_request_key), G_ALLOC_AND_FREE);
ncp_request_records = g_mem_chunk_new("ncp_request_records",
sizeof(struct ncp_request_val),
- 1000 * sizeof(struct ncp_request_val), G_ALLOC_AND_FREE);
+ ncp_packet_init_count * sizeof(struct ncp_request_val), G_ALLOC_AND_FREE);
}
static struct ncp2222_record *
@@ -448,22 +449,21 @@ dissect_ncp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
nw_ncp_type = header.type;
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"NetWare Core Protocol");
- ncp_tree = proto_tree_new();
- proto_item_add_subtree(ti, ncp_tree, ETT_NCP);
+ ncp_tree = proto_item_add_subtree(ti, ETT_NCP);
- proto_tree_add_item(ncp_tree, offset, 2,
+ proto_tree_add_text(ncp_tree, offset, 2,
"Type: %s", val_to_str( header.type,
request_reply_values, "Unknown (%04X)"));
- proto_tree_add_item(ncp_tree, offset+2, 1,
+ proto_tree_add_text(ncp_tree, offset+2, 1,
"Sequence Number: %d", header.sequence);
- proto_tree_add_item(ncp_tree, offset+3, 3,
+ proto_tree_add_text(ncp_tree, offset+3, 3,
"Connection Number: %d", nw_connection);
- proto_tree_add_item(ncp_tree, offset+4, 1,
+ proto_tree_add_text(ncp_tree, offset+4, 1,
"Task Number: %d", header.task);
}
@@ -508,16 +508,16 @@ dissect_ncp_request(const u_char *pd, int offset, frame_data *fd,
}
if (ncp_tree) {
- proto_tree_add_item(ncp_tree, offset+6, 1,
+ proto_tree_add_text(ncp_tree, offset+6, 1,
"Function Code: 0x%02X (%s)",
request.function, description);
if (ncp_request) {
if (ncp_request->submask == SUBFUNC) {
- proto_tree_add_item(ncp_tree, offset+7, 2,
+ proto_tree_add_text(ncp_tree, offset+7, 2,
"Packet Length: %d bytes", pntohs(&pd[offset+7]));
- proto_tree_add_item(ncp_tree, offset+9, 1,
+ proto_tree_add_text(ncp_tree, offset+9, 1,
"Subfunction Code: 0x%02x", pd[offset+9]);
offset += 7 + 3;
}
@@ -526,10 +526,9 @@ dissect_ncp_request(const u_char *pd, int offset, frame_data *fd,
}
if (ncp_request->req) {
- ti = proto_tree_add_item(ncp_tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(ncp_tree, offset, END_OF_FRAME,
"NCP Request Packet");
- field_tree = proto_tree_new();
- proto_item_add_subtree(ti, field_tree, ETT_NCP_REQUEST_FIELDS);
+ field_tree = proto_item_add_subtree(ti, ETT_NCP_REQUEST_FIELDS);
parse_ncp_svc_fields(pd, field_tree, offset, ncp_request->req);
}
@@ -596,26 +595,25 @@ dissect_ncp_reply(const u_char *pd, int offset, frame_data *fd,
/* A completion code of 0 always means OK. Other values have different
* meanings */
if (ncp_request) {
- proto_tree_add_item(ncp_tree, offset+6, 1,
+ proto_tree_add_text(ncp_tree, offset+6, 1,
"Completion Code: 0x%02x (%s)", reply.completion_code,
ncp_completion_code(reply.completion_code, ncp_request->family));
}
else {
- proto_tree_add_item(ncp_tree, offset+6, 1,
+ proto_tree_add_text(ncp_tree, offset+6, 1,
"Completion Code: 0x%02x (%s)", reply.completion_code,
reply.completion_code == 0 ? "OK" : "Unknown");
}
- proto_tree_add_item(ncp_tree, offset+7, 1,
+ proto_tree_add_text(ncp_tree, offset+7, 1,
"Connection Status: %d", reply.connection_state);
if (ncp_request) {
if (ncp_request->rep) {
- ti = proto_tree_add_item(ncp_tree, offset+8, END_OF_FRAME,
+ ti = proto_tree_add_text(ncp_tree, offset+8, END_OF_FRAME,
"NCP Reply Packet");
- field_tree = proto_tree_new();
- proto_item_add_subtree(ti, field_tree, ETT_NCP_REPLY_FIELDS);
+ field_tree = proto_item_add_subtree(ti, ETT_NCP_REPLY_FIELDS);
parse_ncp_svc_fields(pd, field_tree, offset+8, ncp_request->rep);
}
@@ -637,20 +635,20 @@ parse_ncp_svc_fields(const u_char *pd, proto_tree *ncp_tree, int offset,
switch(rec->type) {
case nbeshort:
field_length = 2;
- proto_tree_add_item(ncp_tree, field_offset,
+ proto_tree_add_text(ncp_tree, field_offset,
field_length, rec->description, pntohs(&pd[field_offset]));
break;
case nasciile:
field_length = pd[field_offset];
- proto_tree_add_item(ncp_tree, field_offset,
+ proto_tree_add_text(ncp_tree, field_offset,
field_length + 1, rec->description, field_length,
&pd[field_offset+1]);
break;
case nhex:
field_length = rec->length;
- proto_tree_add_item(ncp_tree, field_offset,
+ proto_tree_add_text(ncp_tree, field_offset,
field_length, rec->description);
break;
diff --git a/packet-nntp.c b/packet-nntp.c
index 7aabb1382e..d4fd4900aa 100644
--- a/packet-nntp.c
+++ b/packet-nntp.c
@@ -2,7 +2,7 @@
* Routines for nntp packet dissection
* Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
*
- * $Id: packet-nntp.c,v 1.1 1999/04/06 02:02:11 guy Exp $
+ * $Id: packet-nntp.c,v 1.2 1999/07/07 22:51:49 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -77,10 +77,9 @@ dissect_nntp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Network News Transfer Protocol");
- nntp_tree = proto_tree_new();
- proto_item_add_subtree(ti, nntp_tree, ETT_NNTP);
+ nntp_tree = proto_item_add_subtree(ti, ETT_NNTP);
/*
* Show the request or response as text, a line at a time.
@@ -100,7 +99,7 @@ dissect_nntp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
/*
* Put this line.
*/
- proto_tree_add_item(nntp_tree, offset, linelen, "%s",
+ proto_tree_add_text(nntp_tree, offset, linelen, "%s",
format_text(data, linelen));
offset += linelen;
data = lineend;
diff --git a/packet-null.c b/packet-null.c
index bfc7b9944e..bb5f53c12a 100644
--- a/packet-null.c
+++ b/packet-null.c
@@ -1,7 +1,7 @@
/* packet-null.c
* Routines for null packet disassembly
*
- * $Id: packet-null.c,v 1.7 1999/03/23 03:14:41 gram Exp $
+ * $Id: packet-null.c,v 1.8 1999/07/07 22:51:49 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -36,6 +36,11 @@
#include <sys/socket.h>
#include "packet.h"
+
+int proto_null = -1;
+int hf_null_next = -1;
+int hf_null_len = -1;
+int hf_null_family = -1;
/* Null/loopback structs and definitions */
@@ -100,12 +105,11 @@ dissect_null( const u_char *pd, frame_data *fd, proto_tree *tree ) {
/* populate a tree in the second pane with the status of the link
layer (ie none) */
if(tree) {
- ti = proto_tree_add_item(tree, 0, 4, "Null/Loopback" );
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_NULL);
- proto_tree_add_item(fh_tree, 0, 1, "Next: %02x", nh.null_next);
- proto_tree_add_item(fh_tree, 1, 1, "Length: %02x", nh.null_len);
- proto_tree_add_item(fh_tree, 2, 2, "Family: %04x", nh.null_family);
+ ti = proto_tree_add_item(tree, proto_null, 0, 4, NULL);
+ fh_tree = proto_item_add_subtree(ti, ETT_NULL);
+ proto_tree_add_item(fh_tree, hf_null_next, 0, 1, nh.null_next);
+ proto_tree_add_item(fh_tree, hf_null_len, 1, 1, nh.null_len);
+ proto_tree_add_item(fh_tree, hf_null_family, 2, 2, nh.null_family);
}
/*
@@ -132,3 +136,32 @@ dissect_null( const u_char *pd, frame_data *fd, proto_tree *tree ) {
break;
}
}
+
+void
+proto_register_null(void)
+{
+ proto_null = proto_register_protocol (
+ /* name */ "Null/Loopback",
+ /* abbrev */ "null" );
+
+ hf_null_next = proto_register_field (
+ /* name */ "Next",
+ /* abbrev */ "null.next",
+ /* ftype */ FT_UINT8,
+ /* parent */ proto_null,
+ /* vals[] */ NULL );
+
+ hf_null_len = proto_register_field (
+ /* name */ "Length",
+ /* abbrev */ "null.len",
+ /* ftype */ FT_UINT8,
+ /* parent */ proto_null,
+ /* vals[] */ NULL );
+
+ hf_null_family = proto_register_field (
+ /* name */ "Family",
+ /* abbrev */ "null.family",
+ /* ftype */ FT_UINT16,
+ /* parent */ proto_null,
+ /* vals[] */ NULL );
+}
diff --git a/packet-osi.c b/packet-osi.c
index 50ecd382b6..933811b1ee 100644
--- a/packet-osi.c
+++ b/packet-osi.c
@@ -1,7 +1,7 @@
/* packet-osi.c
* Routines for ISO/OSI network and transport protocol packet disassembly
*
- * $Id: packet-osi.c,v 1.6 1999/03/23 03:14:41 gram Exp $
+ * $Id: packet-osi.c,v 1.7 1999/07/07 22:51:49 gram Exp $
* Laurent Deniel <deniel@worldnet.fr>
*
* Ethereal - Network traffic analyzer
@@ -245,18 +245,17 @@ static int osi_decode_DR(const u_char *pd, int offset,
src_ref, dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (DR)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
- proto_tree_add_item(cotp_tree, offset + 4, 2,
+ proto_tree_add_text(cotp_tree, offset + 4, 2,
"Source reference: 0x%04x", src_ref);
- proto_tree_add_item(cotp_tree, offset + 6, 1,
+ proto_tree_add_text(cotp_tree, offset + 6, 1,
"Cause: %s", str);
}
@@ -338,63 +337,62 @@ static int osi_decode_DT(const u_char *pd, int offset,
(fragment)? "(fragment)" : "");
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (DT)", tpdu);
if (li != LI_NORMAL_DT_CLASS_01)
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
switch (li) {
case LI_NORMAL_DT_WITH_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"TPDU number: 0x%02x (%s)",
tpdu_nr,
(fragment)? "fragment":"complete");
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NDT, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NDT + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NDT + 2, length,
"Checksum: 0x%04x", checksum);
break;
case LI_NORMAL_DT_WITHOUT_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"TPDU number: 0x%02x (%s)",
tpdu_nr,
(fragment)? "fragment":"complete");
break;
case LI_EXTENDED_DT_WITH_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"TPDU number: 0x%08x (%s)",
tpdu_nr,
(fragment)? "fragment":"complete");
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EDT, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EDT + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EDT + 2, length,
"Checksum: 0x%04x", checksum);
break;
case LI_EXTENDED_DT_WITHOUT_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"TPDU number: 0x%08x (%s)",
tpdu_nr,
(fragment)? "fragment":"complete");
break;
case LI_NORMAL_DT_CLASS_01 :
- proto_tree_add_item(cotp_tree, offset + 2, 1,
+ proto_tree_add_text(cotp_tree, offset + 2, 1,
"TPDU number: 0x%02x (%s)",
tpdu_nr,
(fragment)? "fragment":"complete");
@@ -473,49 +471,48 @@ static int osi_decode_ED(const u_char *pd, int offset,
col_add_fstr(fd, COL_INFO, "ED TPDU (%d) dst-ref: 0x%04x", tpdu_nr, dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (ED)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
switch (li) {
case LI_NORMAL_DT_WITH_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"TPDU number: 0x%02x", tpdu_nr);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NDT, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NDT + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NDT + 2, length,
"Checksum: 0x%04x", checksum);
break;
case LI_NORMAL_DT_WITHOUT_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"TPDU number: 0x%02x", tpdu_nr);
break;
case LI_EXTENDED_DT_WITH_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"TPDU number: 0x%02x", tpdu_nr);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EDT, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EDT + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EDT + 2, length,
"Checksum: 0x%04x", checksum);
break;
case LI_EXTENDED_DT_WITHOUT_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"TPDU number: 0x%02x", tpdu_nr);
break;
}
@@ -556,25 +553,24 @@ static int osi_decode_RJ(const u_char *pd, int offset,
col_add_fstr(fd, COL_INFO, "RJ TPDU (%d) dst-ref: 0x%04x", tpdu_nr, dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (RJ)", tpdu);
if (li == LI_NORMAL_RJ)
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"Credit: %d", cdt);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
if (li == LI_NORMAL_RJ)
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"Your TPDU number: 0x%02x", tpdu_nr);
else {
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"Your TPDU number: 0x%02x", tpdu_nr);
- proto_tree_add_item(cotp_tree, offset + 8, 2,
+ proto_tree_add_text(cotp_tree, offset + 8, 2,
"Credit: 0x%02x", credit);
}
}
@@ -645,19 +641,18 @@ static int osi_decode_CC(const u_char *pd, int offset,
dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (%s)", tpdu,
(tpdu == CR_TPDU) ? "CR" : "CC");
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
- proto_tree_add_item(cotp_tree, offset + 4, 2,
+ proto_tree_add_text(cotp_tree, offset + 4, 2,
"Source reference: 0x%04x", src_ref);
- proto_tree_add_item(cotp_tree, offset + 6, 1,
+ proto_tree_add_text(cotp_tree, offset + 6, 1,
"Class option: 0x%02x", class_option);
}
@@ -672,26 +667,26 @@ static int osi_decode_CC(const u_char *pd, int offset,
case VP_CHECKSUM :
length = pd[offset + P_VAR_PART_CC + i + 1];
checksum = EXTRACT_SHORT(&pd[offset + P_VAR_PART_CC + i + 2]);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"Checksum: 0x%04x", checksum);
i += length + 2;
break;
case VP_SRC_TSAP :
length = pd[offset + P_VAR_PART_CC + i + 1];
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (src-tsap)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"Calling TSAP: 0x%s",
print_tsap(&pd[offset + P_VAR_PART_CC + i + 2],
@@ -700,13 +695,13 @@ static int osi_decode_CC(const u_char *pd, int offset,
break;
case VP_DST_TSAP :
length = pd[offset + P_VAR_PART_CC + i + 1];
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (dst-tsap)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"Called TSAP: 0x%s",
print_tsap(&pd[offset + P_VAR_PART_CC + i + 2],
@@ -716,13 +711,13 @@ static int osi_decode_CC(const u_char *pd, int offset,
case VP_TPDU_SIZE :
length = pd[offset + P_VAR_PART_CC + i + 1];
c1 = pd[offset + P_VAR_PART_CC + i + 2] & 0x0F;
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (tpdu-size)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"TPDU size: %d", 2 << c1);
i += length + 2;
@@ -730,45 +725,45 @@ static int osi_decode_CC(const u_char *pd, int offset,
case VP_OPT_SEL :
length = pd[offset + P_VAR_PART_CC + i + 1];
c1 = pd[offset + P_VAR_PART_CC + i + 2] & 0x0F;
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (options)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
if (class_option == 1) {
if (c1 & 0x8)
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Use of network expedited data");
else
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Non use of network expedited data");
if (c1 & 0x4)
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Use of Receipt confirmation");
else
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Use of explicit AK variant");
} else if (class_option == 4) {
if (c1 & 0x2)
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Use 16 bit checksum ");
else
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Non-use 16 bit checksum in class 4");
}
if (c1 & 0x1)
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Use of transport expedited data transfer\n");
else
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 1,
"Non-use of transport expedited data transfer");
i += length + 2;
@@ -776,13 +771,13 @@ static int osi_decode_CC(const u_char *pd, int offset,
case VP_ACK_TIME :
length = pd[offset + P_VAR_PART_CC + i + 1];
s = EXTRACT_SHORT(&pd[offset + P_VAR_PART_CC + i + 2]);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (ack time)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"Ack time (ms): %d", s);
i += length + 2;
@@ -793,22 +788,22 @@ static int osi_decode_CC(const u_char *pd, int offset,
t2 = EXTRACT_LONG(&pd[offset + P_VAR_PART_CC + i + 4]);
t3 = EXTRACT_LONG(&pd[offset + P_VAR_PART_CC + i + 7]);
t4 = EXTRACT_LONG(&pd[offset + P_VAR_PART_CC + i + 10]);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (throughput)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 4,
"Target value / calling-called: %d o/s", t1);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 6, 4,
"Minimum / calling-called: %d o/s", t2);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 10, 4,
"Target value / called-calling: %d o/s", t3);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 14, 4,
"Minimum / called-calling: %d o/s", t4);
i += length + 2;
@@ -819,22 +814,22 @@ static int osi_decode_CC(const u_char *pd, int offset,
s2 = EXTRACT_SHORT(&pd[offset + P_VAR_PART_CC + i + 4]);
s3 = EXTRACT_SHORT(&pd[offset + P_VAR_PART_CC + i + 6]);
s4 = EXTRACT_SHORT(&pd[offset + P_VAR_PART_CC + i + 8]);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (transit delay)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, 2,
"Target value / calling-called: %d ms", s1);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 4, 2,
"Minimum / calling-called: %d ms", s2);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 6, 2,
"Target value / called-calling: %d ms", s3);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 8, 2,
"Minimum / called-calling: %d ms", s4);
i += length + 2;
@@ -842,13 +837,13 @@ static int osi_decode_CC(const u_char *pd, int offset,
case VP_PRIORITY :
length = pd[offset + P_VAR_PART_CC + i + 1];
s = EXTRACT_SHORT(&pd[offset + P_VAR_PART_CC + i + 2]);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i, 1,
"Parameter code: 0x%02x (priority)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"Priority: %d", s);
i += length + 2;
@@ -861,13 +856,13 @@ static int osi_decode_CC(const u_char *pd, int offset,
case VP_PROTO_CLASS :
default : /* no decoding */
length = pd[offset + P_VAR_PART_CC + i + 1];
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 0, 1,
"Parameter code: 0x%02x", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_CC + i + 2, length,
"Parameter value: <not shown>");
i += length + 2;
@@ -918,25 +913,24 @@ static int osi_decode_DC(const u_char *pd, int offset,
dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (DC)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
- proto_tree_add_item(cotp_tree, offset + 4, 2,
+ proto_tree_add_text(cotp_tree, offset + 4, 2,
"Source reference: 0x%04x", src_ref);
if (code) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_DC + 0, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_DC + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_DC + 2, 2,
"Checksum: 0x%04x", checksum);
}
@@ -972,18 +966,17 @@ static int osi_decode_AK(const u_char *pd, int offset,
tpdu_nr, dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (AK)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"Credit: %d", cdt);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"Your TPDU number: 0x%02x", tpdu_nr);
}
@@ -993,13 +986,13 @@ static int osi_decode_AK(const u_char *pd, int offset,
length = pd[offset + P_VAR_PART_NAK + i + 1];
checksum = EXTRACT_SHORT(&pd[offset + P_VAR_PART_NAK + i + 2]);
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 0, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 2, 2,
"Checksum: 0x%04x", checksum);
}
@@ -1012,22 +1005,22 @@ static int osi_decode_AK(const u_char *pd, int offset,
r_seq_nr = EXTRACT_SHORT(&pd[offset + P_VAR_PART_NAK + i + 6]);
r_cdt = EXTRACT_SHORT(&pd[offset + P_VAR_PART_NAK + i + 8]);
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 0, 1,
"Parameter code: 0x%02x (flow control)",
code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 2, 4,
"Lower window edge: 0x%08x",
r_lower_window_edge);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 6, 2,
"Sequence number: 0x%04x",
r_seq_nr);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 8, 2,
"Credit: 0x%04x",
r_cdt);
@@ -1038,13 +1031,13 @@ static int osi_decode_AK(const u_char *pd, int offset,
length = pd[offset + P_VAR_PART_NAK + i + 1];
seq_nr = EXTRACT_SHORT(&pd[offset + P_VAR_PART_NAK + i + 2]);
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 0, 1,
"Parameter code: 0x%02x (seq number)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 2, 2,
"Sequence number: 0x%04x", seq_nr);
}
@@ -1053,13 +1046,13 @@ static int osi_decode_AK(const u_char *pd, int offset,
default :
length = pd[offset + P_VAR_PART_NAK + i + 1];
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 0, 1,
"Parameter code: 0x%02x (unknown)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_NAK + i + 2, length,
"Parameter value: <not shown>");
}
@@ -1079,18 +1072,17 @@ static int osi_decode_AK(const u_char *pd, int offset,
tpdu_nr, dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (AK)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"Your TPDU number: 0x%08x", tpdu_nr);
- proto_tree_add_item(cotp_tree, offset + 8, 2,
+ proto_tree_add_text(cotp_tree, offset + 8, 2,
"Credit: 0x%04x", cdt_in_ak);
}
@@ -1100,13 +1092,13 @@ static int osi_decode_AK(const u_char *pd, int offset,
length = pd[offset + P_VAR_PART_EAK + i + 1];
checksum = EXTRACT_SHORT(&pd[offset + P_VAR_PART_EAK + i + 2]);
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 0, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 2, 2,
"Checksum: 0x%04x", checksum);
}
@@ -1119,22 +1111,22 @@ static int osi_decode_AK(const u_char *pd, int offset,
r_seq_nr = EXTRACT_SHORT(&pd[offset + P_VAR_PART_EAK + i + 6]);
r_cdt = EXTRACT_SHORT(&pd[offset + P_VAR_PART_EAK + i + 8]);
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 0, 1,
"Parameter code: 0x%02x (flow control)",
code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 2, 4,
"Lower window edge: 0x%08x",
r_lower_window_edge);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 6, 2,
"Sequence number: 0x%04x",
r_seq_nr);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 8, 2,
"Credit: 0x%04x",
r_cdt);
@@ -1145,13 +1137,13 @@ static int osi_decode_AK(const u_char *pd, int offset,
length = pd[offset + P_VAR_PART_EAK + i + 1];
seq_nr = EXTRACT_SHORT(&pd[offset + P_VAR_PART_EAK + i + 2]);
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 0, 1,
"Parameter code: 0x%02x (seq number)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 2, 2,
"Sequence number: 0x%04x", seq_nr);
}
@@ -1160,13 +1152,13 @@ static int osi_decode_AK(const u_char *pd, int offset,
default :
length = pd[offset + P_VAR_PART_EAK + i + 1];
if (tree) {
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 0, 1,
"Parameter code: 0x%02x (unknown)", code);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 1, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree,
+ proto_tree_add_text(cotp_tree,
offset + P_VAR_PART_EAK + i + 2, length,
"Parameter value: <not shown>");
}
@@ -1232,43 +1224,42 @@ static int osi_decode_EA(const u_char *pd, int offset,
col_add_fstr(fd, COL_INFO, "EA TPDU (%d) dst-ref: 0x%04x", tpdu_nr, dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (EA)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
switch (li) {
case LI_NORMAL_EA_WITH_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"Your TPDU number: 0x%02x", tpdu_nr);
- proto_tree_add_item(cotp_tree, offset + 5, 1,
+ proto_tree_add_text(cotp_tree, offset + 5, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree, offset + 6, 1,
+ proto_tree_add_text(cotp_tree, offset + 6, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree, offset + 7, 2,
+ proto_tree_add_text(cotp_tree, offset + 7, 2,
"Checksum: 0x%04x", checksum);
break;
case LI_NORMAL_EA_WITHOUT_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"Your TPDU number: 0x%02x", tpdu_nr);
break;
case LI_EXTENDED_EA_WITH_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"Your TPDU number: 0x%08x", tpdu_nr);
- proto_tree_add_item(cotp_tree, offset + 8, 1,
+ proto_tree_add_text(cotp_tree, offset + 8, 1,
"Parameter code: 0x%02x (checksum)", code);
- proto_tree_add_item(cotp_tree, offset + 9, 1,
+ proto_tree_add_text(cotp_tree, offset + 9, 1,
"Parameter length: 0x%02x", length);
- proto_tree_add_item(cotp_tree, offset + 10, 2,
+ proto_tree_add_text(cotp_tree, offset + 10, 2,
"Checksum: 0x%04x", checksum);
break;
case LI_EXTENDED_EA_WITHOUT_CHECKSUM :
- proto_tree_add_item(cotp_tree, offset + 4, 4,
+ proto_tree_add_text(cotp_tree, offset + 4, 4,
"Your TPDU number: 0x%08x", tpdu_nr);
break;
default :
@@ -1318,16 +1309,15 @@ static int osi_decode_ER(const u_char *pd, int offset,
col_add_fstr(fd, COL_INFO, "ER TPDU dst-ref: 0x%04x", dst_ref);
if (tree) {
- ti = proto_tree_add_item(tree, offset, li + 1, "ISO COTP");
- cotp_tree = proto_tree_new();
- proto_item_add_subtree(ti, cotp_tree, ETT_COTP);
- proto_tree_add_item(cotp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, li + 1, "ISO COTP");
+ cotp_tree = proto_item_add_subtree(ti, ETT_COTP);
+ proto_tree_add_text(cotp_tree, offset, 1,
"Length indicator: %d", li);
- proto_tree_add_item(cotp_tree, offset + 1, 1,
+ proto_tree_add_text(cotp_tree, offset + 1, 1,
"TPDU code: Ox%x (ER)", tpdu);
- proto_tree_add_item(cotp_tree, offset + 2, 2,
+ proto_tree_add_text(cotp_tree, offset + 2, 2,
"Destination reference: 0x%04x", dst_ref);
- proto_tree_add_item(cotp_tree, offset + 4, 1,
+ proto_tree_add_text(cotp_tree, offset + 4, 1,
"Reject cause: %s", str);
}
@@ -1456,29 +1446,28 @@ void dissect_clnp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
/* fixed part decoding */
if (tree) {
- ti = proto_tree_add_item(tree, offset, clnp.cnf_hdr_len, "ISO CLNP");
- clnp_tree = proto_tree_new();
- proto_item_add_subtree(ti, clnp_tree, ETT_CLNP);
- proto_tree_add_item(clnp_tree, offset, 1,
+ ti = proto_tree_add_text(tree, offset, clnp.cnf_hdr_len, "ISO CLNP");
+ clnp_tree = proto_item_add_subtree(ti, ETT_CLNP);
+ proto_tree_add_text(clnp_tree, offset, 1,
"Protocol identifier: 0x%02x", clnp.cnf_proto_id);
- proto_tree_add_item(clnp_tree, offset + 1, 1,
+ proto_tree_add_text(clnp_tree, offset + 1, 1,
"Length: %d", clnp.cnf_hdr_len);
- proto_tree_add_item(clnp_tree, offset + 2, 1,
+ proto_tree_add_text(clnp_tree, offset + 2, 1,
"Version: %d", clnp.cnf_vers);
- proto_tree_add_item(clnp_tree, offset + 3, 1,
+ proto_tree_add_text(clnp_tree, offset + 3, 1,
"TTL: %d (%d secs)",
clnp.cnf_ttl, clnp.cnf_ttl / 2);
- proto_tree_add_item(clnp_tree, offset + 4, 1,
+ proto_tree_add_text(clnp_tree, offset + 4, 1,
"Type code: 0x%02x (%s%s%s%s)",
clnp.cnf_type,
(clnp.cnf_type & CNF_SEG_OK) ? "S " : "",
(clnp.cnf_type & CNF_MORE_SEGS) ? "M " : "",
(clnp.cnf_type & CNF_ERR_OK) ? "E " : "",
(clnp.cnf_type & CNF_TYPE) == DT_NPDU ? "DT" : "ER");
- proto_tree_add_item(clnp_tree, offset + 5, 2,
+ proto_tree_add_text(clnp_tree, offset + 5, 2,
"PDU segment length: %d",
EXTRACT_SHORT(&clnp.cnf_seglen_msb));
- proto_tree_add_item(clnp_tree, offset + 7, 2,
+ proto_tree_add_text(clnp_tree, offset + 7, 2,
"Checksum: 0x%04x",
EXTRACT_SHORT(&clnp.cnf_cksum_msb));
} /* tree */
@@ -1498,14 +1487,14 @@ void dissect_clnp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
src_len = pd[offset + dst_len + 1];
if (tree) {
- proto_tree_add_item(clnp_tree, offset, 1,
+ proto_tree_add_text(clnp_tree, offset, 1,
"Destination address length: 0x%02x", dst_len);
- proto_tree_add_item(clnp_tree, offset + 1 , dst_len,
+ proto_tree_add_text(clnp_tree, offset + 1 , dst_len,
"Destination address: %s",
print_nsap(&pd[offset + 1], dst_len));
- proto_tree_add_item(clnp_tree, offset + 1 + dst_len, 1,
+ proto_tree_add_text(clnp_tree, offset + 1 + dst_len, 1,
"Source address length: 0x%02x", src_len);
- proto_tree_add_item(clnp_tree, offset + dst_len + 2, src_len,
+ proto_tree_add_text(clnp_tree, offset + dst_len + 2, src_len,
"Source address: %s",
print_nsap(&pd[offset + dst_len + 2], src_len));
}
@@ -1525,13 +1514,13 @@ void dissect_clnp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
struct clnp_segment seg;
memcpy(&seg, &pd[offset], sizeof(seg));
- proto_tree_add_item(clnp_tree, offset, 2,
+ proto_tree_add_text(clnp_tree, offset, 2,
"Data unit identifier: 0x%04x",
EXTRACT_SHORT(&pd[offset]));
- proto_tree_add_item(clnp_tree, offset + 2 , 2,
+ proto_tree_add_text(clnp_tree, offset + 2 , 2,
"Segment offset: 0x%04x",
EXTRACT_SHORT(&pd[offset + 2]));
- proto_tree_add_item(clnp_tree, offset + 4 , 2,
+ proto_tree_add_text(clnp_tree, offset + 4 , 2,
"Total length: 0x%04x",
EXTRACT_SHORT(&pd[offset + 4]));
@@ -1541,7 +1530,7 @@ void dissect_clnp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
if (tree) {
/* To do : decode options */
- proto_tree_add_item(clnp_tree, offset,
+ proto_tree_add_text(clnp_tree, offset,
clnp.cnf_hdr_len + first_offset - offset,
"Options/Data: <not shown>");
}
diff --git a/packet-ospf.c b/packet-ospf.c
index 77e0095918..f4fd8b2584 100644
--- a/packet-ospf.c
+++ b/packet-ospf.c
@@ -2,7 +2,7 @@
* Routines for OSPF packet disassembly
* (c) Copyright Hannes R. Boehm <hannes@boehm.org>
*
- * $Id: packet-ospf.c,v 1.10 1999/03/23 03:14:42 gram Exp $
+ * $Id: packet-ospf.c,v 1.11 1999/07/07 22:51:50 gram Exp $
*
* At this time, this module is able to analyze OSPF
* packets as specified in RFC2328. MOSPF (RFC1584) and other
@@ -80,49 +80,47 @@ dissect_ospf(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, ntohs(ospfh.length), "Open Shortest Path First");
- ospf_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_tree, ETT_OSPF);
+ ti = proto_tree_add_text(tree, offset, ntohs(ospfh.length), "Open Shortest Path First");
+ ospf_tree = proto_item_add_subtree(ti, ETT_OSPF);
- ti = proto_tree_add_item(ospf_tree, offset, OSPF_HEADER_LENGTH, "OSPF Header");
- ospf_header_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_header_tree, ETT_OSPF_HDR);
+ ti = proto_tree_add_text(ospf_tree, offset, OSPF_HEADER_LENGTH, "OSPF Header");
+ ospf_header_tree = proto_item_add_subtree(ti, ETT_OSPF_HDR);
- proto_tree_add_item(ospf_header_tree, offset, 1, "OSPF Version: %d", ospfh.version);
- proto_tree_add_item(ospf_header_tree, offset + 1 , 1, "OSPF Packet Type: %d (%s)",
+ proto_tree_add_text(ospf_header_tree, offset, 1, "OSPF Version: %d", ospfh.version);
+ proto_tree_add_text(ospf_header_tree, offset + 1 , 1, "OSPF Packet Type: %d (%s)",
ospfh.packet_type,
(packet_type != NULL ?
packet_type :
"Unknown"));
- proto_tree_add_item(ospf_header_tree, offset + 2 , 2, "Packet Length: %d",
+ proto_tree_add_text(ospf_header_tree, offset + 2 , 2, "Packet Length: %d",
ntohs(ospfh.length));
- proto_tree_add_item(ospf_header_tree, offset + 4 , 4, "Source OSPF Router ID: %s",
+ proto_tree_add_text(ospf_header_tree, offset + 4 , 4, "Source OSPF Router ID: %s",
ip_to_str((guint8 *) &(ospfh.routerid)));
if (!(ospfh.area)) {
- proto_tree_add_item(ospf_header_tree, offset + 8 , 4, "Area ID: Backbone");
+ proto_tree_add_text(ospf_header_tree, offset + 8 , 4, "Area ID: Backbone");
} else {
- proto_tree_add_item(ospf_header_tree, offset + 8 , 4, "Area ID: %s", ip_to_str((guint8 *) &(ospfh.area)));
+ proto_tree_add_text(ospf_header_tree, offset + 8 , 4, "Area ID: %s", ip_to_str((guint8 *) &(ospfh.area)));
}
- proto_tree_add_item(ospf_header_tree, offset + 12 , 2, "Packet Checksum: 0x%x",
+ proto_tree_add_text(ospf_header_tree, offset + 12 , 2, "Packet Checksum: 0x%x",
ntohs(ospfh.checksum));
switch( ntohs(ospfh.auth_type) ) {
case OSPF_AUTH_NONE:
- proto_tree_add_item(ospf_header_tree, offset + 14 , 2, "Auth Type: none");
- proto_tree_add_item(ospf_header_tree, offset + 16 , 8, "Auth Data (none)");
+ proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type: none");
+ proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data (none)");
break;
case OSPF_AUTH_SIMPLE:
- proto_tree_add_item(ospf_header_tree, offset + 14 , 2, "Auth Type: simple");
+ proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type: simple");
strncpy(auth_data, (char *) &ospfh.auth_data, 8);
- proto_tree_add_item(ospf_header_tree, offset + 16 , 8, "Auth Data: %s", auth_data);
+ proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data: %s", auth_data);
break;
case OSPF_AUTH_CRYPT:
- proto_tree_add_item(ospf_header_tree, offset + 14 , 2, "Auth Type: crypt");
- proto_tree_add_item(ospf_header_tree, offset + 16 , 8, "Auth Data (crypt)");
+ proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type: crypt");
+ proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data (crypt)");
break;
default:
- proto_tree_add_item(ospf_header_tree, offset + 14 , 2, "Auth Type (unknown)");
- proto_tree_add_item(ospf_header_tree, offset + 16 , 8, "Auth Data (unknown)");
+ proto_tree_add_text(ospf_header_tree, offset + 14 , 2, "Auth Type (unknown)");
+ proto_tree_add_text(ospf_header_tree, offset + 16 , 8, "Auth Data (unknown)");
}
}
@@ -163,13 +161,12 @@ dissect_ospf_hello(const u_char *pd, int offset, frame_data *fd, proto_tree *tre
memcpy(&ospfhello, &pd[offset], sizeof(e_ospf_hello));
if (tree) {
- ti = proto_tree_add_item(tree, offset, (fd->cap_len - offset) , "OSPF Hello Packet");
- ospf_hello_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_hello_tree, ETT_OSPF_HELLO);
+ ti = proto_tree_add_text(tree, offset, (fd->cap_len - offset) , "OSPF Hello Packet");
+ ospf_hello_tree = proto_item_add_subtree(ti, ETT_OSPF_HELLO);
- proto_tree_add_item(ospf_hello_tree, offset , 4, "Network Mask: %s", ip_to_str((guint8 *) &ospfhello.network_mask));
- proto_tree_add_item(ospf_hello_tree, offset + 4, 2, "Hello Interval: %d seconds", ntohs(ospfhello.hellointervall));
+ proto_tree_add_text(ospf_hello_tree, offset , 4, "Network Mask: %s", ip_to_str((guint8 *) &ospfhello.network_mask));
+ proto_tree_add_text(ospf_hello_tree, offset + 4, 2, "Hello Interval: %d seconds", ntohs(ospfhello.hellointervall));
/* ATTENTION !!! no check for length of options string */
options_offset=0;
@@ -194,18 +191,18 @@ dissect_ospf_hello(const u_char *pd, int offset, frame_data *fd, proto_tree *tre
options_offset+=3;
}
- proto_tree_add_item(ospf_hello_tree, offset + 6, 1, "Options: %d (%s)", ospfhello.options, options);
- proto_tree_add_item(ospf_hello_tree, offset + 7, 1, "Router Priority: %d", ospfhello.priority);
- proto_tree_add_item(ospf_hello_tree, offset + 8, 4, "Router Dead Interval: %ld seconds", (long)ntohl(ospfhello.dead_interval));
- proto_tree_add_item(ospf_hello_tree, offset + 12, 4, "Designated Router: %s", ip_to_str((guint8 *) &ospfhello.drouter));
- proto_tree_add_item(ospf_hello_tree, offset + 16, 4, "Backup Designated Router: %s", ip_to_str((guint8 *) &ospfhello.bdrouter));
+ proto_tree_add_text(ospf_hello_tree, offset + 6, 1, "Options: %d (%s)", ospfhello.options, options);
+ proto_tree_add_text(ospf_hello_tree, offset + 7, 1, "Router Priority: %d", ospfhello.priority);
+ proto_tree_add_text(ospf_hello_tree, offset + 8, 4, "Router Dead Interval: %ld seconds", (long)ntohl(ospfhello.dead_interval));
+ proto_tree_add_text(ospf_hello_tree, offset + 12, 4, "Designated Router: %s", ip_to_str((guint8 *) &ospfhello.drouter));
+ proto_tree_add_text(ospf_hello_tree, offset + 16, 4, "Backup Designated Router: %s", ip_to_str((guint8 *) &ospfhello.bdrouter));
offset+=20;
while(((int)(fd->cap_len - offset)) >= 4){
printf("%d", fd->cap_len - offset);
ospfneighbor=(guint32 *) &pd[offset];
- proto_tree_add_item(ospf_hello_tree, offset, 4, "Active Neighbor: %s", ip_to_str((guint8 *) ospfneighbor));
+ proto_tree_add_text(ospf_hello_tree, offset, 4, "Active Neighbor: %s", ip_to_str((guint8 *) ospfneighbor));
offset+=4;
}
}
@@ -225,11 +222,10 @@ dissect_ospf_db_desc(const u_char *pd, int offset, frame_data *fd, proto_tree *t
memcpy(&ospf_dbd, &pd[offset], sizeof(e_ospf_dbd));
if (tree) {
- ti = proto_tree_add_item(tree, offset, (fd->cap_len - offset) , "OSPF DB Description");
- ospf_db_desc_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_db_desc_tree, ETT_OSPF_DESC);
+ ti = proto_tree_add_text(tree, offset, (fd->cap_len - offset) , "OSPF DB Description");
+ ospf_db_desc_tree = proto_item_add_subtree(ti, ETT_OSPF_DESC);
- proto_tree_add_item(ospf_db_desc_tree, offset, 2, "Interface MTU: %d", ntohs(ospf_dbd.interface_mtu) );
+ proto_tree_add_text(ospf_db_desc_tree, offset, 2, "Interface MTU: %d", ntohs(ospf_dbd.interface_mtu) );
options_offset=0;
@@ -254,7 +250,7 @@ dissect_ospf_db_desc(const u_char *pd, int offset, frame_data *fd, proto_tree *t
options_offset+=3;
}
- proto_tree_add_item(ospf_db_desc_tree, offset + 2 , 1, "Options: %d (%s)", ospf_dbd.options, options );
+ proto_tree_add_text(ospf_db_desc_tree, offset + 2 , 1, "Options: %d (%s)", ospf_dbd.options, options );
flags_offset=0;
@@ -271,8 +267,8 @@ dissect_ospf_db_desc(const u_char *pd, int offset, frame_data *fd, proto_tree *t
flags_offset+=3;
}
- proto_tree_add_item(ospf_db_desc_tree, offset + 3 , 1, "Flags: %d (%s)", ospf_dbd.flags, flags );
- proto_tree_add_item(ospf_db_desc_tree, offset + 4 , 4, "DD Sequence: %ld", (long)ntohl(ospf_dbd.dd_sequence) );
+ proto_tree_add_text(ospf_db_desc_tree, offset + 3 , 1, "Flags: %d (%s)", ospf_dbd.flags, flags );
+ proto_tree_add_text(ospf_db_desc_tree, offset + 4 , 4, "DD Sequence: %ld", (long)ntohl(ospf_dbd.dd_sequence) );
}
/* LS Headers will be processed here */
/* skip to the end of DB-Desc header */
@@ -296,39 +292,38 @@ dissect_ospf_ls_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
while( ((int) ( fd->cap_len - offset)) >= OSPF_LS_REQ_LENGTH ){
memcpy(&ospf_lsr, &pd[offset], sizeof(e_ospf_ls_req));
- ti = proto_tree_add_item(tree, offset, OSPF_LS_REQ_LENGTH, "Link State Request");
- ospf_lsr_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_lsr_tree, ETT_OSPF_LSR);
+ ti = proto_tree_add_text(tree, offset, OSPF_LS_REQ_LENGTH, "Link State Request");
+ ospf_lsr_tree = proto_item_add_subtree(ti, ETT_OSPF_LSR);
switch( ntohl( ospf_lsr.ls_type ) ){
case OSPF_LSTYPE_ROUTER:
- proto_tree_add_item(ospf_lsr_tree, offset, 4, "LS Type: Router-LSA (%ld)",
+ proto_tree_add_text(ospf_lsr_tree, offset, 4, "LS Type: Router-LSA (%ld)",
(long)ntohl( ospf_lsr.ls_type ) );
break;
case OSPF_LSTYPE_NETWORK:
- proto_tree_add_item(ospf_lsr_tree, offset, 4, "LS Type: Network-LSA (%ld)",
+ proto_tree_add_text(ospf_lsr_tree, offset, 4, "LS Type: Network-LSA (%ld)",
(long)ntohl( ospf_lsr.ls_type ) );
break;
case OSPF_LSTYPE_SUMMERY:
- proto_tree_add_item(ospf_lsr_tree, offset, 4, "LS Type: Summary-LSA (IP network) (%ld)",
+ proto_tree_add_text(ospf_lsr_tree, offset, 4, "LS Type: Summary-LSA (IP network) (%ld)",
(long)ntohl( ospf_lsr.ls_type ) );
break;
case OSPF_LSTYPE_ASBR:
- proto_tree_add_item(ospf_lsr_tree, offset, 4, "LS Type: Summary-LSA (ASBR) (%ld)",
+ proto_tree_add_text(ospf_lsr_tree, offset, 4, "LS Type: Summary-LSA (ASBR) (%ld)",
(long)ntohl( ospf_lsr.ls_type ) );
break;
case OSPF_LSTYPE_ASEXT:
- proto_tree_add_item(ospf_lsr_tree, offset, 4, "LS Type: AS-External-LSA (ASBR) (%ld)",
+ proto_tree_add_text(ospf_lsr_tree, offset, 4, "LS Type: AS-External-LSA (ASBR) (%ld)",
(long)ntohl( ospf_lsr.ls_type ) );
break;
default:
- proto_tree_add_item(ospf_lsr_tree, offset, 4, "LS Type: %ld (unknown)",
+ proto_tree_add_text(ospf_lsr_tree, offset, 4, "LS Type: %ld (unknown)",
(long)ntohl( ospf_lsr.ls_type ) );
}
- proto_tree_add_item(ospf_lsr_tree, offset + 4, 4, "Link State ID : %s",
+ proto_tree_add_text(ospf_lsr_tree, offset + 4, 4, "Link State ID : %s",
ip_to_str((guint8 *) &(ospf_lsr.ls_id)));
- proto_tree_add_item(ospf_lsr_tree, offset + 8, 4, "Advertising Router : %s",
+ proto_tree_add_text(ospf_lsr_tree, offset + 8, 4, "Advertising Router : %s",
ip_to_str((guint8 *) &(ospf_lsr.adv_router)));
offset+=12;
@@ -346,11 +341,10 @@ dissect_ospf_ls_upd(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
memcpy(&upd_hdr, &pd[offset], sizeof(e_ospf_lsa_upd_hdr));
if (tree) {
- ti = proto_tree_add_item(tree, offset, (fd->cap_len - offset) , "LS Update Packet");
- ospf_lsa_upd_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_lsa_upd_tree, ETT_OSPF_LSA_UPD);
+ ti = proto_tree_add_text(tree, offset, (fd->cap_len - offset) , "LS Update Packet");
+ ospf_lsa_upd_tree = proto_item_add_subtree(ti, ETT_OSPF_LSA_UPD);
- proto_tree_add_item(ospf_lsa_upd_tree, offset, 4, "Nr oF LSAs: %ld", (long)ntohl(upd_hdr.lsa_nr) );
+ proto_tree_add_text(ospf_lsa_upd_tree, offset, 4, "Nr oF LSAs: %ld", (long)ntohl(upd_hdr.lsa_nr) );
}
/* skip to the beginning of the first LSA */
offset+=4; /* the LS Upd PAcket contains only a 32 bit #LSAs field */
@@ -427,29 +421,28 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
if (tree) {
if(disassemble_body){
- ti = proto_tree_add_item(tree, offset, ntohs(lsa_hdr.length),
+ ti = proto_tree_add_text(tree, offset, ntohs(lsa_hdr.length),
"%s (Type: %d)", lsa_type, lsa_hdr.ls_type);
} else {
- ti = proto_tree_add_item(tree, offset, OSPF_LSA_HEADER_LENGTH, "LSA Header");
+ ti = proto_tree_add_text(tree, offset, OSPF_LSA_HEADER_LENGTH, "LSA Header");
}
- ospf_lsa_tree = proto_tree_new();
- proto_item_add_subtree(ti, ospf_lsa_tree, ETT_OSPF_LSA);
+ ospf_lsa_tree = proto_item_add_subtree(ti, ETT_OSPF_LSA);
- proto_tree_add_item(ospf_lsa_tree, offset, 2, "LS Age: %d seconds", ntohs(lsa_hdr.ls_age));
- proto_tree_add_item(ospf_lsa_tree, offset + 2, 1, "Options: %d ", lsa_hdr.options);
- proto_tree_add_item(ospf_lsa_tree, offset + 3, 1, "LSA Type: %d (%s)", lsa_hdr.ls_type, lsa_type);
+ proto_tree_add_text(ospf_lsa_tree, offset, 2, "LS Age: %d seconds", ntohs(lsa_hdr.ls_age));
+ proto_tree_add_text(ospf_lsa_tree, offset + 2, 1, "Options: %d ", lsa_hdr.options);
+ proto_tree_add_text(ospf_lsa_tree, offset + 3, 1, "LSA Type: %d (%s)", lsa_hdr.ls_type, lsa_type);
- proto_tree_add_item(ospf_lsa_tree, offset + 4, 4, "Linke State ID: %s ",
+ proto_tree_add_text(ospf_lsa_tree, offset + 4, 4, "Linke State ID: %s ",
ip_to_str((guint8 *) &(lsa_hdr.ls_id)));
- proto_tree_add_item(ospf_lsa_tree, offset + 8, 4, "Advertising Router: %s ",
+ proto_tree_add_text(ospf_lsa_tree, offset + 8, 4, "Advertising Router: %s ",
ip_to_str((guint8 *) &(lsa_hdr.adv_router)));
- proto_tree_add_item(ospf_lsa_tree, offset + 12, 4, "LS Sequence Number: 0x%04lx ",
+ proto_tree_add_text(ospf_lsa_tree, offset + 12, 4, "LS Sequence Number: 0x%04lx ",
(unsigned long)ntohl(lsa_hdr.ls_seq));
- proto_tree_add_item(ospf_lsa_tree, offset + 16, 2, "LS Checksum: %d ", ntohs(lsa_hdr.ls_checksum));
+ proto_tree_add_text(ospf_lsa_tree, offset + 16, 2, "LS Checksum: %d ", ntohs(lsa_hdr.ls_checksum));
- proto_tree_add_item(ospf_lsa_tree, offset + 18, 2, "Length: %d ", ntohs(lsa_hdr.length));
+ proto_tree_add_text(ospf_lsa_tree, offset + 18, 2, "Length: %d ", ntohs(lsa_hdr.length));
if(!disassemble_body){
return OSPF_LSA_HEADER_LENGTH;
@@ -463,8 +456,8 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
memcpy(&router_lsa, &pd[offset], sizeof(e_ospf_router_lsa));
/* again: flags should be secified in detail */
- proto_tree_add_item(ospf_lsa_tree, offset, 1, "Flags: 0x%02x ", router_lsa.flags);
- proto_tree_add_item(ospf_lsa_tree, offset + 2, 2, "Nr. of Links: %d ",
+ proto_tree_add_text(ospf_lsa_tree, offset, 1, "Flags: 0x%02x ", router_lsa.flags);
+ proto_tree_add_text(ospf_lsa_tree, offset + 2, 2, "Nr. of Links: %d ",
ntohs(router_lsa.nr_links));
offset += 4;
/* router_lsa.nr_links links follow
@@ -496,17 +489,17 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
link_id="unknown link id";
}
- proto_tree_add_item(ospf_lsa_tree, offset, 4, "%s: %s", link_id,
+ proto_tree_add_text(ospf_lsa_tree, offset, 4, "%s: %s", link_id,
ip_to_str((guint8 *) &(router_data.link_id)));
/* link_data should be specified in detail (e.g. network mask) (depends on link type)*/
- proto_tree_add_item(ospf_lsa_tree, offset + 4, 4, "Link Data: %s",
+ proto_tree_add_text(ospf_lsa_tree, offset + 4, 4, "Link Data: %s",
ip_to_str((guint8 *) &(router_data.link_data)));
- proto_tree_add_item(ospf_lsa_tree, offset + 8, 1, "Link Type: %d - %s",
+ proto_tree_add_text(ospf_lsa_tree, offset + 8, 1, "Link Type: %d - %s",
router_data.link_type, link_type);
- proto_tree_add_item(ospf_lsa_tree, offset + 9, 1, "Nr. of TOS metrics: %d", router_data.nr_tos);
- proto_tree_add_item(ospf_lsa_tree, offset + 10, 2, "TOS 0 metric: %d", ntohs( router_data.tos0_metric ));
+ proto_tree_add_text(ospf_lsa_tree, offset + 9, 1, "Nr. of TOS metrics: %d", router_data.nr_tos);
+ proto_tree_add_text(ospf_lsa_tree, offset + 10, 2, "TOS 0 metric: %d", ntohs( router_data.tos0_metric ));
offset += 12;
@@ -517,7 +510,7 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
for(tos_counter = 1 ; link_counter <= ntohs(router_data.nr_tos); tos_counter++){
memcpy(&tos_data, &pd[offset], sizeof(e_ospf_router_metric));
- proto_tree_add_item(ospf_lsa_tree, offset, 1, "TOS: %d, Metric: %d",
+ proto_tree_add_text(ospf_lsa_tree, offset, 1, "TOS: %d, Metric: %d",
tos_data.tos, ntohs(tos_data.metric));
offset += 4;
}
@@ -525,13 +518,13 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
break;
case(OSPF_LSTYPE_NETWORK):
memcpy(&network_lsa, &pd[offset], sizeof(e_ospf_network_lsa));
- proto_tree_add_item(ospf_lsa_tree, offset, 4, "Netmask: %s",
+ proto_tree_add_text(ospf_lsa_tree, offset, 4, "Netmask: %s",
ip_to_str((guint8 *) &(network_lsa.network_mask)));
offset += 4;
while( ((int) (fd->cap_len - offset)) >= 4){
attached_router = (guint32 *) &pd[offset];
- proto_tree_add_item(ospf_lsa_tree, offset, 4, "Attached Router: %s",
+ proto_tree_add_text(ospf_lsa_tree, offset, 4, "Attached Router: %s",
ip_to_str((guint8 *) attached_router));
offset += 4;
}
@@ -540,22 +533,22 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
/* Type 3 and 4 LSAs have the same format */
case(OSPF_LSTYPE_ASBR):
memcpy(&summary_lsa, &pd[offset], sizeof(e_ospf_summary_lsa));
- proto_tree_add_item(ospf_lsa_tree, offset, 4, "Netmask: %s",
+ proto_tree_add_text(ospf_lsa_tree, offset, 4, "Netmask: %s",
ip_to_str((guint8 *) &(summary_lsa.network_mask)));
/* returns only the TOS 0 metric (even if there are more TOS metrics) */
break;
case(OSPF_LSTYPE_ASEXT):
memcpy(&summary_lsa, &pd[offset], sizeof(e_ospf_summary_lsa));
- proto_tree_add_item(ospf_lsa_tree, offset, 4, "Netmask: %s",
+ proto_tree_add_text(ospf_lsa_tree, offset, 4, "Netmask: %s",
ip_to_str((guint8 *) &(summary_lsa.network_mask)));
/* asext_lsa = (e_ospf_asexternal_lsa *) &pd[offset + 4]; */
memcpy(&asext_lsa, &pd[offset + 4], sizeof(asext_lsa));
if( (asext_lsa.options & 128) == 128 ) { /* check wether or not E bit is set */
- proto_tree_add_item(ospf_lsa_tree, offset, 1,
+ proto_tree_add_text(ospf_lsa_tree, offset, 1,
"External Type: Type 2 (metric is larger than any other link state path)");
} else {
- proto_tree_add_item(ospf_lsa_tree, offset + 4, 1,
+ proto_tree_add_text(ospf_lsa_tree, offset + 4, 1,
"External Type: Type 1 (metric is specified in the same units as interface cost)");
}
/* the metric field of a AS-external LAS is specified in 3 bytes -> not well aligned */
@@ -565,15 +558,15 @@ dissect_ospf_lsa(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
/* erase the leading 8 bits (the dont belong to the metric */
asext_metric = ntohl(asext_metric) & 0x00ffffff ;
- proto_tree_add_item(ospf_lsa_tree, offset + 5, 3,"Metric: %d", asext_metric);
- proto_tree_add_item(ospf_lsa_tree, offset + 8, 4,"Forwarding Address: %s",
+ proto_tree_add_text(ospf_lsa_tree, offset + 5, 3,"Metric: %d", asext_metric);
+ proto_tree_add_text(ospf_lsa_tree, offset + 8, 4,"Forwarding Address: %s",
ip_to_str((guint8 *) &(asext_lsa.gateway)));
- proto_tree_add_item(ospf_lsa_tree, offset + 12, 4,"External Route Tag: %ld", (long)ntohl(asext_lsa.external_tag));
+ proto_tree_add_text(ospf_lsa_tree, offset + 12, 4,"External Route Tag: %ld", (long)ntohl(asext_lsa.external_tag));
break;
default:
/* unknown LSA type */
- proto_tree_add_item(ospf_lsa_tree, offset, (fd->cap_len - offset), "Unknown LSA Type");
+ proto_tree_add_text(ospf_lsa_tree, offset, (fd->cap_len - offset), "Unknown LSA Type");
}
}
/* return the length of this LSA */
diff --git a/packet-pop.c b/packet-pop.c
index 8b8af7836d..6a0485b2bd 100644
--- a/packet-pop.c
+++ b/packet-pop.c
@@ -2,7 +2,7 @@
* Routines for pop packet dissection
* Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
*
- * $Id: packet-pop.c,v 1.3 1999/05/13 01:05:11 sharpe Exp $
+ * $Id: packet-pop.c,v 1.4 1999/07/07 22:51:50 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -81,23 +81,22 @@ dissect_pop(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Post Office Protocol");
- pop_tree = proto_tree_new();
- proto_item_add_subtree(ti, pop_tree, ETT_POP);
+ pop_tree = proto_item_add_subtree(ti, ETT_POP);
if (pi.match_port == pi.destport) { /* Request */
- proto_tree_add_item(pop_tree, offset, i1, "Request: %s", rr);
+ proto_tree_add_text(pop_tree, offset, i1, "Request: %s", rr);
- proto_tree_add_item(pop_tree, offset + i1 + 1, END_OF_FRAME, "Request Arg: %s", rd);
+ proto_tree_add_text(pop_tree, offset + i1 + 1, END_OF_FRAME, "Request Arg: %s", rd);
}
else {
- proto_tree_add_item(pop_tree, offset, i1, "Response: %s", rr);
+ proto_tree_add_text(pop_tree, offset, i1, "Response: %s", rr);
- proto_tree_add_item(pop_tree, offset + i1 + 1, END_OF_FRAME, "Response Arg: %s", rd);
+ proto_tree_add_text(pop_tree, offset + i1 + 1, END_OF_FRAME, "Response Arg: %s", rd);
}
}
diff --git a/packet-ppp.c b/packet-ppp.c
index a96217f9cc..4dc8cc2c1e 100644
--- a/packet-ppp.c
+++ b/packet-ppp.c
@@ -1,7 +1,7 @@
/* packet-ppp.c
* Routines for ppp packet disassembly
*
- * $Id: packet-ppp.c,v 1.11 1999/06/11 15:30:39 gram Exp $
+ * $Id: packet-ppp.c,v 1.12 1999/07/07 22:51:50 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -207,14 +207,13 @@ dissect_ipcp( const u_char *pd, int offset, frame_data *fd, proto_tree *tree ) {
val_to_str(ipcpcode, cp_vals, "Unknown"));
if(tree) {
- ti = proto_tree_add_item(tree, 0+offset, 4, "IP Control Protocol" );
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_IPCP);
- proto_tree_add_item(fh_tree, 0+offset, 1, "Code: %s (0x%02x)",
+ ti = proto_tree_add_text(tree, 0+offset, 4, "IP Control Protocol" );
+ fh_tree = proto_item_add_subtree(ti, ETT_IPCP);
+ proto_tree_add_text(fh_tree, 0+offset, 1, "Code: %s (0x%02x)",
val_to_str(ipcpcode, cp_vals, "Unknown"), ipcpcode);
- proto_tree_add_item(fh_tree, 1+offset, 1, "Identifier: 0x%02x",
+ proto_tree_add_text(fh_tree, 1+offset, 1, "Identifier: 0x%02x",
ipcpid);
- proto_tree_add_item(fh_tree, 2+offset, 2, "Length: %d",
+ proto_tree_add_text(fh_tree, 2+offset, 2, "Length: %d",
optionslength);
}
@@ -244,14 +243,13 @@ dissect_lcp( const u_char *pd, int offset, frame_data *fd, proto_tree *tree ) {
val_to_str(lcpcode, lcp_vals, "Unknown"));
if(tree) {
- ti = proto_tree_add_item(tree, 0+offset, 4, "Link Control Protocol" );
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_LCP);
- proto_tree_add_item(fh_tree, 0+offset, 1, "Code: %s (0x%02x)",
+ ti = proto_tree_add_text(tree, 0+offset, 4, "Link Control Protocol" );
+ fh_tree = proto_item_add_subtree(ti, ETT_LCP);
+ proto_tree_add_text(fh_tree, 0+offset, 1, "Code: %s (0x%02x)",
val_to_str(lcpcode, lcp_vals, "Unknown"), lcpcode);
- proto_tree_add_item(fh_tree, 1+offset, 1, "Identifier: 0x%02x",
+ proto_tree_add_text(fh_tree, 1+offset, 1, "Identifier: 0x%02x",
lcpid);
- proto_tree_add_item(fh_tree, 2+offset, 2, "Length: %d",
+ proto_tree_add_text(fh_tree, 2+offset, 2, "Length: %d",
optionslength);
}
@@ -276,10 +274,9 @@ dissect_payload_ppp( const u_char *pd, int offset, frame_data *fd, proto_tree *t
/* populate a tree in the second pane with the status of the link
layer (ie none) */
if(tree) {
- ti = proto_tree_add_item(tree, 0+offset, 2, "Point-to-Point Protocol" );
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_PPP);
- proto_tree_add_item(fh_tree, 0+offset, 2, "Protocol: %s (0x%04x)",
+ ti = proto_tree_add_text(tree, 0+offset, 2, "Point-to-Point Protocol" );
+ fh_tree = proto_item_add_subtree(ti, ETT_PPP);
+ proto_tree_add_text(fh_tree, 0+offset, 2, "Protocol: %s (0x%04x)",
val_to_str(ph.ppp_prot, ppp_vals, "Unknown"), ph.ppp_prot);
}
@@ -347,12 +344,11 @@ dissect_ppp( const u_char *pd, frame_data *fd, proto_tree *tree ) {
/* populate a tree in the second pane with the status of the link
layer (ie none) */
if(tree) {
- ti = proto_tree_add_item(tree, 0, 4, "Point-to-Point Protocol" );
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_PPP);
- proto_tree_add_item(fh_tree, 0, 1, "Address: %02x", ph.ppp_addr);
- proto_tree_add_item(fh_tree, 1, 1, "Control: %02x", ph.ppp_ctl);
- proto_tree_add_item(fh_tree, 2, 2, "Protocol: %s (0x%04x)",
+ ti = proto_tree_add_text(tree, 0, 4, "Point-to-Point Protocol" );
+ fh_tree = proto_item_add_subtree(ti, ETT_PPP);
+ proto_tree_add_text(fh_tree, 0, 1, "Address: %02x", ph.ppp_addr);
+ proto_tree_add_text(fh_tree, 1, 1, "Control: %02x", ph.ppp_ctl);
+ proto_tree_add_text(fh_tree, 2, 2, "Protocol: %s (0x%04x)",
val_to_str(ph.ppp_prot, ppp_vals, "Unknown"), ph.ppp_prot);
}
diff --git a/packet-pppoe.c b/packet-pppoe.c
index 9da3f40a05..f15551e681 100644
--- a/packet-pppoe.c
+++ b/packet-pppoe.c
@@ -1,7 +1,7 @@
/* packet-arp.c
* Routines for ARP packet disassembly
*
- * $Id: packet-pppoe.c,v 1.1 1999/06/11 15:30:39 gram Exp $
+ * $Id: packet-pppoe.c,v 1.2 1999/07/07 22:51:51 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -101,9 +101,8 @@ dissect_pppoe_tags(const u_char *pd, int offset, frame_data *fd, proto_tree *tre
/* Start Decoding Here. */
if (tree) {
- ti = proto_tree_add_item(tree,offset,payload_length,"PPPoE Tags");
- pppoe_tree = proto_tree_new();
- proto_item_add_subtree(ti, pppoe_tree, ETT_PPPOED_TAGS);
+ ti = proto_tree_add_text(tree,offset,payload_length,"PPPoE Tags");
+ pppoe_tree = proto_item_add_subtree(ti, ETT_PPPOED_TAGS);
tagstart = offset;
while(tagstart <= payload_length-2 ) {
@@ -111,7 +110,7 @@ dissect_pppoe_tags(const u_char *pd, int offset, frame_data *fd, proto_tree *tre
poe_tag = pntohs(&pd[tagstart]);
poe_tag_length = pntohs(&pd[tagstart + 2]);
- proto_tree_add_item(pppoe_tree,tagstart,4,
+ proto_tree_add_text(pppoe_tree,tagstart,4,
"Tag: %s", pppoetag_to_str(poe_tag,"Unknown (0x%02x)"));
switch(poe_tag) {
@@ -123,13 +122,13 @@ dissect_pppoe_tags(const u_char *pd, int offset, frame_data *fd, proto_tree *tre
/* tag value should be interpreted as a utf-8 unterminated string.*/
if(poe_tag_length > 0 ) {
/* really should do some limit checking here. :( */
- proto_tree_add_item(pppoe_tree,tagstart+4,poe_tag_length,
+ proto_tree_add_text(pppoe_tree,tagstart+4,poe_tag_length,
" String Data: %s", format_text(&pd[tagstart+4],poe_tag_length ));
}
break;
default:
if(poe_tag_length > 0 ) {
- proto_tree_add_item(pppoe_tree,tagstart+4,poe_tag_length,
+ proto_tree_add_text(pppoe_tree,tagstart+4,poe_tag_length,
" Binary Data: (%d bytes)", poe_tag_length );
}
}
@@ -168,18 +167,17 @@ dissect_pppoed(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
if (tree) {
- ti = proto_tree_add_item(tree,offset,pppoe_length+6,"PPPoE Discovery");
- pppoe_tree = proto_tree_new();
- proto_item_add_subtree(ti, pppoe_tree, ETT_PPPOED);
- proto_tree_add_item(pppoe_tree,offset,1,
+ ti = proto_tree_add_text(tree,offset,pppoe_length+6,"PPPoE Discovery");
+ pppoe_tree = proto_item_add_subtree(ti, ETT_PPPOED);
+ proto_tree_add_text(pppoe_tree,offset,1,
"Version: %d", pppoe_ver);
- proto_tree_add_item(pppoe_tree,offset,1,
+ proto_tree_add_text(pppoe_tree,offset,1,
"Type: %d", pppoe_type);
- proto_tree_add_item(pppoe_tree,offset+1,1,
+ proto_tree_add_text(pppoe_tree,offset+1,1,
"Code: %s", pppoecode_to_str(pppoe_code,"Unknown (0x%02x)"));
- proto_tree_add_item(pppoe_tree,offset+2,2,
+ proto_tree_add_text(pppoe_tree,offset+2,2,
"Session ID: %04x", pppoe_session_id);
- proto_tree_add_item(pppoe_tree,offset+4,2,
+ proto_tree_add_text(pppoe_tree,offset+4,2,
"Payload Length: %d", pppoe_length);
}
dissect_pppoe_tags(pd,offset+6,fd,tree,offset+6+pppoe_length);
@@ -213,18 +211,17 @@ dissect_pppoes(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
if (tree) {
- ti = proto_tree_add_item(tree,offset,pppoe_length+6,"PPPoE Session");
- pppoe_tree = proto_tree_new();
- proto_item_add_subtree(ti, pppoe_tree, ETT_PPPOED);
- proto_tree_add_item(pppoe_tree,offset,1,
+ ti = proto_tree_add_text(tree,offset,pppoe_length+6,"PPPoE Session");
+ pppoe_tree = proto_item_add_subtree(ti, ETT_PPPOED);
+ proto_tree_add_text(pppoe_tree,offset,1,
"Version: %d", pppoe_ver);
- proto_tree_add_item(pppoe_tree,offset,1,
+ proto_tree_add_text(pppoe_tree,offset,1,
"Type: %d", pppoe_type);
- proto_tree_add_item(pppoe_tree,offset+1,1,
+ proto_tree_add_text(pppoe_tree,offset+1,1,
"Code: %s", pppoecode_to_str(pppoe_code,"Unknown (0x%02x)"));
- proto_tree_add_item(pppoe_tree,offset+2,2,
+ proto_tree_add_text(pppoe_tree,offset+2,2,
"Session ID: %04x", pppoe_session_id);
- proto_tree_add_item(pppoe_tree,offset+4,2,
+ proto_tree_add_text(pppoe_tree,offset+4,2,
"Payload Length: %d", pppoe_length);
}
/* dissect_ppp is apparently done as a 'top level' dissector,
diff --git a/packet-pptp.c b/packet-pptp.c
index 06bfea9a09..10a6c3f619 100644
--- a/packet-pptp.c
+++ b/packet-pptp.c
@@ -2,7 +2,7 @@
* Routines for the Point-to-Point Tunnelling Protocol (PPTP)
* Brad Robel-Forrest <brad.robel-forrest@watchguard.com>
*
- * $Id: packet-pptp.c,v 1.1 1999/06/11 15:30:39 gram Exp $
+ * $Id: packet-pptp.c,v 1.2 1999/07/07 22:51:51 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -391,28 +391,27 @@ dissect_pptp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
proto_item * ti;
proto_tree * pptp_tree;
- ti = proto_tree_add_item(tree, offset, len, "PPTP Control Channel");
- pptp_tree = proto_tree_new();
- proto_item_add_subtree(ti, pptp_tree, ETT_PPTP);
+ ti = proto_tree_add_text(tree, offset, len, "PPTP Control Channel");
+ pptp_tree = proto_item_add_subtree(ti, ETT_PPTP);
- proto_tree_add_item(pptp_tree, offset, sizeof(hdr->len),
+ proto_tree_add_text(pptp_tree, offset, sizeof(hdr->len),
"Length: %u", len);
offset += sizeof(hdr->len);
msg_type = pntohs(&hdr->type);
- proto_tree_add_item(pptp_tree, offset, sizeof(hdr->type),
+ proto_tree_add_text(pptp_tree, offset, sizeof(hdr->type),
"Message type: %s (%u)", msgtype2str(msg_type), msg_type);
offset += sizeof(hdr->type);
- proto_tree_add_item(pptp_tree, offset, sizeof(hdr->cookie),
+ proto_tree_add_text(pptp_tree, offset, sizeof(hdr->cookie),
"Cookie: %#08x", pntohl(&hdr->cookie));
offset += sizeof(hdr->cookie);
- proto_tree_add_item(pptp_tree, offset, sizeof(hdr->cntrl_type),
+ proto_tree_add_text(pptp_tree, offset, sizeof(hdr->cntrl_type),
"Control type: %s (%u)", cntrltype2str(cntrl_type), cntrl_type);
offset += sizeof(hdr->cntrl_type);
- proto_tree_add_item(pptp_tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(pptp_tree, offset, sizeof(hdr->resv),
"Reserved: %u", pntohs(&hdr->resv));
offset += sizeof(hdr->resv);
@@ -435,37 +434,37 @@ dissect_cntrl_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
guint32 frame;
guint32 bearer;
- proto_tree_add_item(tree, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
+ proto_tree_add_text(tree, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
"Protocol version: %u.%u", hdr->major_ver, hdr->minor_ver );
offset += sizeof(hdr->major_ver) + sizeof(hdr->minor_ver);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
frame = pntohl(&hdr->frame);
- proto_tree_add_item(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->max_chan),
+ proto_tree_add_text(tree, offset, sizeof(hdr->max_chan),
"Maximum channels: %u", hdr->max_chan);
offset += sizeof(hdr->max_chan);
- proto_tree_add_item(tree, offset, sizeof(hdr->firm_rev),
+ proto_tree_add_text(tree, offset, sizeof(hdr->firm_rev),
"Firmware revision: %u", hdr->firm_rev);
offset += sizeof(hdr->firm_rev);
- proto_tree_add_item(tree, offset, sizeof(hdr->host),
+ proto_tree_add_text(tree, offset, sizeof(hdr->host),
"Hostname: %s", hdr->host);
offset += sizeof(hdr->host);
- proto_tree_add_item(tree, offset, sizeof(hdr->vendor),
+ proto_tree_add_text(tree, offset, sizeof(hdr->vendor),
"Vendor: %s", hdr->vendor);
}
@@ -475,41 +474,41 @@ dissect_cntrl_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
guint32 frame;
guint32 bearer;
- proto_tree_add_item(tree, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
+ proto_tree_add_text(tree, offset, sizeof(hdr->major_ver) + sizeof(hdr->minor_ver),
"Protocol version: %u.%u", hdr->major_ver, hdr->minor_ver );
offset += sizeof(hdr->major_ver) + sizeof(hdr->minor_ver);
- proto_tree_add_item(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, offset, sizeof(hdr->result),
"Result: %s (%u)", cntrlresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_item(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
frame = pntohl(&hdr->frame);
- proto_tree_add_item(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->max_chan),
+ proto_tree_add_text(tree, offset, sizeof(hdr->max_chan),
"Maximum channels: %u", hdr->max_chan);
offset += sizeof(hdr->max_chan);
- proto_tree_add_item(tree, offset, sizeof(hdr->firm_rev),
+ proto_tree_add_text(tree, offset, sizeof(hdr->firm_rev),
"Firmware revision: %u", hdr->firm_rev);
offset += sizeof(hdr->firm_rev);
- proto_tree_add_item(tree, offset, sizeof(hdr->host),
+ proto_tree_add_text(tree, offset, sizeof(hdr->host),
"Hostname: %s", hdr->host);
offset += sizeof(hdr->host);
- proto_tree_add_item(tree, offset, sizeof(hdr->vendor),
+ proto_tree_add_text(tree, offset, sizeof(hdr->vendor),
"Vendor: %s", hdr->vendor);
}
@@ -517,15 +516,15 @@ static void
dissect_stop_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct stop_req * hdr = (struct stop_req *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->reason),
+ proto_tree_add_text(tree, offset, sizeof(hdr->reason),
"Reason: %s (%u)", reasontype2str(hdr->reason), hdr->reason);
offset += sizeof(hdr->reason);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv0),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv0),
"Reserved: %u", hdr->resv0);
offset += sizeof(hdr->resv0);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv1),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv1),
"Reserved: %u", hdr->resv1);
offset += sizeof(hdr->resv1);
}
@@ -534,15 +533,15 @@ static void
dissect_stop_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct stop_reply * hdr = (struct stop_reply *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, offset, sizeof(hdr->result),
"Result: %s (%u)", stopresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_item(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
}
@@ -551,7 +550,7 @@ static void
dissect_echo_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct echo_req * hdr = (struct echo_req *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->ident),
+ proto_tree_add_text(tree, offset, sizeof(hdr->ident),
"Identifier: %u", hdr->ident);
offset += sizeof(hdr->ident);
}
@@ -560,19 +559,19 @@ static void
dissect_echo_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct echo_reply * hdr = (struct echo_reply *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->ident),
+ proto_tree_add_text(tree, offset, sizeof(hdr->ident),
"Identifier: %u", hdr->ident);
offset += sizeof(hdr->ident);
- proto_tree_add_item(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, offset, sizeof(hdr->result),
"Result: %s (%u)", echoresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_item(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
}
@@ -583,53 +582,53 @@ dissect_out_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
guint32 bearer;
guint32 frame;
- proto_tree_add_item(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
"Call ID: %u", hdr->call_id);
offset += sizeof(hdr->call_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->call_serial),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_serial),
"Call Serial Number: %u", hdr->call_serial);
offset += sizeof(hdr->call_serial);
- proto_tree_add_item(tree, offset, sizeof(hdr->min_bps),
+ proto_tree_add_text(tree, offset, sizeof(hdr->min_bps),
"Minimum BPS: %u", hdr->min_bps);
offset += sizeof(hdr->min_bps);
- proto_tree_add_item(tree, offset, sizeof(hdr->max_bps),
+ proto_tree_add_text(tree, offset, sizeof(hdr->max_bps),
"Maximum BPS: %u", hdr->max_bps);
offset += sizeof(hdr->max_bps);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
frame = pntohl(&hdr->frame);
- proto_tree_add_item(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
- proto_tree_add_item(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
"Receive window size: %u", hdr->win_size);
offset += sizeof(hdr->win_size);
- proto_tree_add_item(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, offset, sizeof(hdr->delay),
"Processing delay: %u", hdr->delay);
offset += sizeof(hdr->delay);
- proto_tree_add_item(tree, offset, sizeof(hdr->phone_len),
+ proto_tree_add_text(tree, offset, sizeof(hdr->phone_len),
"Phone number length: %u", hdr->phone_len);
offset += sizeof(hdr->phone_len);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
- proto_tree_add_item(tree, offset, sizeof(hdr->phone),
+ proto_tree_add_text(tree, offset, sizeof(hdr->phone),
"Phone number: %s", hdr->phone);
offset += sizeof(hdr->phone);
- proto_tree_add_item(tree, offset, sizeof(hdr->subaddr),
+ proto_tree_add_text(tree, offset, sizeof(hdr->subaddr),
"Subaddress: %s", hdr->subaddr);
offset += sizeof(hdr->subaddr);
}
@@ -638,39 +637,39 @@ static void
dissect_out_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct out_reply * hdr = (struct out_reply *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
"Call ID: %u", hdr->call_id);
offset += sizeof(hdr->call_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", hdr->peer_id);
offset += sizeof(hdr->peer_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, offset, sizeof(hdr->result),
"Result: %s (%u)", outresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_item(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_item(tree, offset, sizeof(hdr->cause),
+ proto_tree_add_text(tree, offset, sizeof(hdr->cause),
"Cause code: %u", hdr->cause);
offset += sizeof(hdr->cause);
- proto_tree_add_item(tree, offset, sizeof(hdr->speed),
+ proto_tree_add_text(tree, offset, sizeof(hdr->speed),
"Connect speed: %u", hdr->speed);
offset += sizeof(hdr->speed);
- proto_tree_add_item(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
"Receive window size: %u", hdr->win_size);
offset += sizeof(hdr->win_size);
- proto_tree_add_item(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, offset, sizeof(hdr->delay),
"Processing delay: %u", hdr->delay);
offset += sizeof(hdr->delay);
- proto_tree_add_item(tree, offset, sizeof(hdr->channel_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->channel_id),
"Physical channel ID: %u", hdr->channel_id);
offset += sizeof(hdr->channel_id);
}
@@ -681,40 +680,40 @@ dissect_in_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct in_req * hdr = (struct in_req *)(pd + offset);
guint32 bearer;
- proto_tree_add_item(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
"Call ID: %u", hdr->call_id);
offset += sizeof(hdr->call_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->call_serial),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_serial),
"Call serial number: %u", hdr->call_serial);
offset += sizeof(hdr->call_serial);
bearer = pntohl(&hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->bearer),
+ proto_tree_add_text(tree, offset, sizeof(hdr->bearer),
"Bearer capabilities: %s (%u)", bearertype2str(bearer), bearer);
offset += sizeof(hdr->bearer);
- proto_tree_add_item(tree, offset, sizeof(hdr->channel_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->channel_id),
"Physical channel ID: %u", hdr->channel_id);
offset += sizeof(hdr->channel_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->dialed_len),
+ proto_tree_add_text(tree, offset, sizeof(hdr->dialed_len),
"Dialed number length: %u", hdr->dialed_len);
offset += sizeof(hdr->dialed_len);
- proto_tree_add_item(tree, offset, sizeof(hdr->dialing_len),
+ proto_tree_add_text(tree, offset, sizeof(hdr->dialing_len),
"Dialing number length: %u", hdr->dialing_len);
offset += sizeof(hdr->dialing_len);
- proto_tree_add_item(tree, offset, sizeof(hdr->dialed),
+ proto_tree_add_text(tree, offset, sizeof(hdr->dialed),
"Dialed number: %s", hdr->dialed);
offset += sizeof(hdr->dialed);
- proto_tree_add_item(tree, offset, sizeof(hdr->dialing),
+ proto_tree_add_text(tree, offset, sizeof(hdr->dialing),
"Dialing number: %s", hdr->dialing);
offset += sizeof(hdr->dialing);
- proto_tree_add_item(tree, offset, sizeof(hdr->subaddr),
+ proto_tree_add_text(tree, offset, sizeof(hdr->subaddr),
"Subaddress: %s", hdr->subaddr);
offset += sizeof(hdr->subaddr);
}
@@ -723,31 +722,31 @@ static void
dissect_in_reply(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct in_reply * hdr = (struct in_reply *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
"Call ID: %u", hdr->call_id);
offset += sizeof(hdr->call_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", hdr->peer_id);
offset += sizeof(hdr->peer_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, offset, sizeof(hdr->result),
"Result: %s (%u)", inresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_item(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_item(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
"Receive window size: %u", hdr->win_size);
offset += sizeof(hdr->win_size);
- proto_tree_add_item(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, offset, sizeof(hdr->delay),
"Processing delay: %u", hdr->delay);
offset += sizeof(hdr->delay);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
}
@@ -757,28 +756,28 @@ dissect_in_connected(const u_char *pd, int offset, frame_data *fd, proto_tree *t
struct in_connected * hdr = (struct in_connected *)(pd + offset);
guint32 frame;
- proto_tree_add_item(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", hdr->peer_id);
offset += sizeof(hdr->peer_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
- proto_tree_add_item(tree, offset, sizeof(hdr->speed),
+ proto_tree_add_text(tree, offset, sizeof(hdr->speed),
"Connect speed: %u", hdr->speed);
offset += sizeof(hdr->speed);
- proto_tree_add_item(tree, offset, sizeof(hdr->win_size),
+ proto_tree_add_text(tree, offset, sizeof(hdr->win_size),
"Receive window size: %u", hdr->win_size);
offset += sizeof(hdr->win_size);
- proto_tree_add_item(tree, offset, sizeof(hdr->delay),
+ proto_tree_add_text(tree, offset, sizeof(hdr->delay),
"Processing delay: %u", hdr->delay);
offset += sizeof(hdr->delay);
frame = pntohl(&hdr->frame);
- proto_tree_add_item(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, offset, sizeof(hdr->frame),
"Framing capabilities: %s (%u)", frametype2str(frame), frame);
offset += sizeof(hdr->frame);
}
@@ -787,11 +786,11 @@ static void
dissect_clear_req(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct clear_req * hdr = (struct clear_req *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
"Call ID: %u", hdr->call_id);
offset += sizeof(hdr->call_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
}
@@ -800,27 +799,27 @@ static void
dissect_disc_notify(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct disc_notify * hdr = (struct disc_notify *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->call_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->call_id),
"Call ID: %u", hdr->call_id);
offset += sizeof(hdr->call_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->result),
+ proto_tree_add_text(tree, offset, sizeof(hdr->result),
"Result: %s (%u)", discresulttype2str(hdr->result), hdr->result);
offset += sizeof(hdr->result);
- proto_tree_add_item(tree, offset, sizeof(hdr->error),
+ proto_tree_add_text(tree, offset, sizeof(hdr->error),
"Error: %s (%u)", errortype2str(hdr->error), hdr->error);
offset += sizeof(hdr->error);
- proto_tree_add_item(tree, offset, sizeof(hdr->cause),
+ proto_tree_add_text(tree, offset, sizeof(hdr->cause),
"Cause code: %u", hdr->cause);
offset += sizeof(hdr->cause);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
- proto_tree_add_item(tree, offset, sizeof(hdr->stats),
+ proto_tree_add_text(tree, offset, sizeof(hdr->stats),
"Call statistics: %s", hdr->stats);
offset += sizeof(hdr->stats);
}
@@ -829,35 +828,35 @@ static void
dissect_error_notify(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct error_notify * hdr = (struct error_notify *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", hdr->peer_id);
offset += sizeof(hdr->peer_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
- proto_tree_add_item(tree, offset, sizeof(hdr->crc),
+ proto_tree_add_text(tree, offset, sizeof(hdr->crc),
"CRC errors: %u", hdr->crc);
offset += sizeof(hdr->crc);
- proto_tree_add_item(tree, offset, sizeof(hdr->frame),
+ proto_tree_add_text(tree, offset, sizeof(hdr->frame),
"Framing errors: %u", hdr->frame);
offset += sizeof(hdr->frame);
- proto_tree_add_item(tree, offset, sizeof(hdr->hardware),
+ proto_tree_add_text(tree, offset, sizeof(hdr->hardware),
"Hardware overruns: %u", hdr->hardware);
offset += sizeof(hdr->hardware);
- proto_tree_add_item(tree, offset, sizeof(hdr->buffer),
+ proto_tree_add_text(tree, offset, sizeof(hdr->buffer),
"Buffer overruns: %u", hdr->buffer);
offset += sizeof(hdr->buffer);
- proto_tree_add_item(tree, offset, sizeof(hdr->timeout),
+ proto_tree_add_text(tree, offset, sizeof(hdr->timeout),
"Time-out errors: %u", hdr->timeout);
offset += sizeof(hdr->timeout);
- proto_tree_add_item(tree, offset, sizeof(hdr->alignment),
+ proto_tree_add_text(tree, offset, sizeof(hdr->alignment),
"Alignment errors: %u", hdr->alignment);
offset += sizeof(hdr->alignment);
}
@@ -866,19 +865,19 @@ static void
dissect_set_link(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
struct set_link * hdr = (struct set_link *)(pd + offset);
- proto_tree_add_item(tree, offset, sizeof(hdr->peer_id),
+ proto_tree_add_text(tree, offset, sizeof(hdr->peer_id),
"Peer's call ID: %u", hdr->peer_id);
offset += sizeof(hdr->peer_id);
- proto_tree_add_item(tree, offset, sizeof(hdr->resv),
+ proto_tree_add_text(tree, offset, sizeof(hdr->resv),
"Reserved: %u", hdr->resv);
offset += sizeof(hdr->resv);
- proto_tree_add_item(tree, offset, sizeof(hdr->send_acm),
+ proto_tree_add_text(tree, offset, sizeof(hdr->send_acm),
"Send ACCM: %#08x", hdr->send_acm);
offset += sizeof(hdr->send_acm);
- proto_tree_add_item(tree, offset, sizeof(hdr->recv_acm),
+ proto_tree_add_text(tree, offset, sizeof(hdr->recv_acm),
"Recv ACCM: %#08x", hdr->recv_acm);
offset += sizeof(hdr->recv_acm);
}
diff --git a/packet-raw.c b/packet-raw.c
index a9188729c4..f0fab49ab0 100644
--- a/packet-raw.c
+++ b/packet-raw.c
@@ -1,7 +1,7 @@
/* packet-raw.c
* Routines for raw packet disassembly
*
- * $Id: packet-raw.c,v 1.9 1999/03/23 03:14:43 gram Exp $
+ * $Id: packet-raw.c,v 1.10 1999/07/07 22:51:52 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -71,10 +71,9 @@ dissect_raw( const u_char *pd, frame_data *fd, proto_tree *tree ) {
/* populate a tree in the second pane with the status of the link
layer (ie none) */
if(tree) {
- ti = proto_tree_add_item(tree, 0, 0, "Raw packet data" );
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_RAW);
- proto_tree_add_item(fh_tree, 0, 0, "No link information available");
+ ti = proto_tree_add_text(tree, 0, 0, "Raw packet data" );
+ fh_tree = proto_item_add_subtree(ti, ETT_RAW);
+ proto_tree_add_text(fh_tree, 0, 0, "No link information available");
}
/* So far, the only time we get raw connection types are with Linux and
diff --git a/packet-rip.c b/packet-rip.c
index b4d3a992e7..7d1a780638 100644
--- a/packet-rip.c
+++ b/packet-rip.c
@@ -2,7 +2,7 @@
* Routines for RIPv1 and RIPv2 packet disassembly
* (c) Copyright Hannes R. Boehm <hannes@boehm.org>
*
- * $Id: packet-rip.c,v 1.8 1999/03/23 03:14:43 gram Exp $
+ * $Id: packet-rip.c,v 1.9 1999/07/07 22:51:52 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -90,14 +90,13 @@ dissect_rip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
col_add_str(fd, COL_INFO, packet_type[rip_header.command]);
if (tree) {
- ti = proto_tree_add_item(tree, offset, (fd->cap_len - offset), "Routing Information Protocol");
- rip_tree = proto_tree_new();
- proto_item_add_subtree(ti, rip_tree, ETT_RIP);
+ ti = proto_tree_add_text(tree, offset, (fd->cap_len - offset), "Routing Information Protocol");
+ rip_tree = proto_item_add_subtree(ti, ETT_RIP);
- proto_tree_add_item(rip_tree, offset, 1, "Command: %d (%s)", rip_header.command, packet_type[rip_header.command]);
- proto_tree_add_item(rip_tree, offset + 1, 1, "Version: %d", rip_header.version);
+ proto_tree_add_text(rip_tree, offset, 1, "Command: %d (%s)", rip_header.command, packet_type[rip_header.command]);
+ proto_tree_add_text(rip_tree, offset + 1, 1, "Version: %d", rip_header.version);
if(rip_header.version == RIPv2)
- proto_tree_add_item(rip_tree, offset + 2 , 2, "Routing Domain: %d", ntohs(rip_header.domain));
+ proto_tree_add_text(rip_tree, offset + 2 , 2, "Routing Domain: %d", ntohs(rip_header.domain));
/* skip header */
offset += RIP_HEADER_LENGTH;
@@ -109,7 +108,7 @@ dissect_rip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
family = ntohs(rip_entry.vektor.family);
switch (family) {
case 2: /* IP */
- ti = proto_tree_add_item(rip_tree, offset,
+ ti = proto_tree_add_text(rip_tree, offset,
RIP_ENTRY_LENGTH, "IP Address: %s, Metric: %ld",
ip_to_str((guint8 *) &(rip_entry.vektor.ip)),
(long)ntohl(rip_entry.vektor.metric));
@@ -117,13 +116,13 @@ dissect_rip(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
offset, ti);
break;
case 0xFFFF:
- proto_tree_add_item(rip_tree, offset,
+ proto_tree_add_text(rip_tree, offset,
RIP_ENTRY_LENGTH, "Authentication");
dissect_rip_authentication(&rip_entry.authentication,
offset, ti);
break;
default:
- proto_tree_add_item(rip_tree, offset,
+ proto_tree_add_text(rip_tree, offset,
RIP_ENTRY_LENGTH, "Unknown address family %u",
family);
break;
@@ -140,22 +139,21 @@ dissect_ip_rip_vektor(guint8 version, const e_rip_vektor *rip_vektor,
{
proto_tree *rip_vektor_tree;
- rip_vektor_tree = proto_tree_new();
- proto_item_add_subtree(tree, rip_vektor_tree, ETT_RIP_VEC);
+ rip_vektor_tree = proto_item_add_subtree(tree, ETT_RIP_VEC);
- proto_tree_add_item(rip_vektor_tree, offset, 2, "Address Family ID: IP");
+ proto_tree_add_text(rip_vektor_tree, offset, 2, "Address Family ID: IP");
if(version == RIPv2)
- proto_tree_add_item(rip_vektor_tree, offset + 2 , 2, "Route Tag: %d",
+ proto_tree_add_text(rip_vektor_tree, offset + 2 , 2, "Route Tag: %d",
ntohs(rip_vektor->tag));
- proto_tree_add_item(rip_vektor_tree, offset + 4, 4, "IP Address: %s",
+ proto_tree_add_text(rip_vektor_tree, offset + 4, 4, "IP Address: %s",
ip_to_str((guint8 *) &(rip_vektor->ip)));
if(version == RIPv2) {
- proto_tree_add_item(rip_vektor_tree, offset + 8 , 4, "Netmask: %s",
+ proto_tree_add_text(rip_vektor_tree, offset + 8 , 4, "Netmask: %s",
ip_to_str((guint8 *) &(rip_vektor->mask)));
- proto_tree_add_item(rip_vektor_tree, offset + 12, 4, "Next Hop: %s",
+ proto_tree_add_text(rip_vektor_tree, offset + 12, 4, "Next Hop: %s",
ip_to_str((guint8 *) &(rip_vektor->next_hop)));
}
- proto_tree_add_item(rip_vektor_tree, offset + 16, 4, "Metric: %ld",
+ proto_tree_add_text(rip_vektor_tree, offset + 16, 4, "Metric: %ld",
(long)ntohl(rip_vektor->metric));
}
@@ -166,14 +164,13 @@ dissect_rip_authentication(const e_rip_authentication *rip_authentication,
proto_tree *rip_authentication_tree;
guint16 authtype;
- rip_authentication_tree = proto_tree_new();
- proto_item_add_subtree(tree, rip_authentication_tree, ETT_RIP_VEC);
+ rip_authentication_tree = proto_item_add_subtree(tree, ETT_RIP_VEC);
authtype = ntohs(rip_authentication->authtype);
- proto_tree_add_item(rip_authentication_tree, offset + 2, 2,
+ proto_tree_add_text(rip_authentication_tree, offset + 2, 2,
"Authentication type: %u", authtype);
if (authtype == 2)
- proto_tree_add_item(rip_authentication_tree, offset + 4 , 16,
+ proto_tree_add_text(rip_authentication_tree, offset + 4 , 16,
"Password: %.16s",
rip_authentication->authentication);
}
diff --git a/packet-rsvp.c b/packet-rsvp.c
index fec28437c6..5f5c73c609 100644
--- a/packet-rsvp.c
+++ b/packet-rsvp.c
@@ -3,7 +3,7 @@
*
* (c) Copyright Ashok Narayanan <ashokn@cisco.com>
*
- * $Id: packet-rsvp.c,v 1.1 1999/06/11 16:44:51 gram Exp $
+ * $Id: packet-rsvp.c,v 1.2 1999/07/07 22:51:52 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -160,27 +160,25 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if (tree) {
msg_length = pntohs(pd+offset+6);
- ti = proto_tree_add_item(tree, offset, msg_length,
+ ti = proto_tree_add_text(tree, offset, msg_length,
"Resource ReserVation Protocol (RSVP)");
- rsvp_tree = proto_tree_new();
- proto_item_add_subtree(ti, rsvp_tree, ETT_RSVP);
+ rsvp_tree = proto_item_add_subtree(ti, ETT_RSVP);
- ti = proto_tree_add_item(rsvp_tree, offset,
+ ti = proto_tree_add_text(rsvp_tree, offset,
sizeof(rsvp_header), "RSVP Header");
- rsvp_header_tree = proto_tree_new();
- proto_item_add_subtree(ti, rsvp_header_tree, ETT_RSVP_HDR);
+ rsvp_header_tree = proto_item_add_subtree(ti, ETT_RSVP_HDR);
- proto_tree_add_item(rsvp_header_tree, offset, 1, "RSVP Version: %d",
+ proto_tree_add_text(rsvp_header_tree, offset, 1, "RSVP Version: %d",
(hdr->ver_flags & 0xf0)>>4);
- proto_tree_add_item(rsvp_header_tree, offset, 1, "Flags: %02X",
+ proto_tree_add_text(rsvp_header_tree, offset, 1, "Flags: %02X",
hdr->ver_flags & 0xf);
- proto_tree_add_item(rsvp_header_tree, offset+1, 1, "Message Type: %d - %s",
+ proto_tree_add_text(rsvp_header_tree, offset+1, 1, "Message Type: %d - %s",
hdr->message_type,
packet_type?packet_type:"Unknown");
- proto_tree_add_item(rsvp_header_tree, offset + 2 , 2, "Message Checksum");
- proto_tree_add_item(rsvp_header_tree, offset + 4 , 1, "Sending TTL: %d",
+ proto_tree_add_text(rsvp_header_tree, offset + 2 , 2, "Message Checksum");
+ proto_tree_add_text(rsvp_header_tree, offset + 4 , 1, "Sending TTL: %d",
hdr->sending_ttl);
- proto_tree_add_item(rsvp_header_tree, offset + 6 , 2, "Message length: %d",
+ proto_tree_add_text(rsvp_header_tree, offset + 6 , 2, "Message length: %d",
msg_length);
offset += sizeof(rsvp_header);
@@ -189,42 +187,41 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
obj = (rsvp_object *)&pd[offset];
obj_length = pntohs(pd+offset);
if (offset + obj_length > fd->cap_len) {
- proto_tree_add_item(rsvp_tree, offset, 1,
+ proto_tree_add_text(rsvp_tree, offset, 1,
"Further data not captured");
break;
}
object_type = match_strval(obj->class, rsvp_class_vals);
if (!object_type) object_type = "Unknown";
- ti = proto_tree_add_item(rsvp_tree, offset,
+ ti = proto_tree_add_text(rsvp_tree, offset,
obj_length,
"%s (%d)", object_type, obj->class);
- rsvp_object_tree = proto_tree_new();
offset2 = offset + sizeof(rsvp_object);
switch(obj->class) {
case RSVP_CLASS_SESSION :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_SESSION);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_SESSION);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
case 1: {
rsvp_session_ipv4 *sess = (rsvp_session_ipv4 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1 - IPv4");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Destination address: %s",
ip_to_str((guint8 *) &(sess->destination)));
- proto_tree_add_item(rsvp_object_tree, offset2+4, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+4, 1,
"Protocol: %d", sess->protocol);
- proto_tree_add_item(rsvp_object_tree, offset2+5, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+5, 1,
"Flags: %d", sess->flags);
- proto_tree_add_item(rsvp_object_tree, offset2+6, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
"Destination port: %d",
pntohs(pd+offset2+6));
break;
@@ -232,48 +229,48 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case 2: {
rsvp_session_ipv6 *sess = (rsvp_session_ipv6 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 2 - IPv6");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Destination address: %s",
ip6_to_str(&(sess->destination)));
- proto_tree_add_item(rsvp_object_tree, offset2+16, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+16, 1,
"Protocol: %d", sess->protocol);
- proto_tree_add_item(rsvp_object_tree, offset2+17, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+17, 1,
"Flags: %d", sess->flags);
- proto_tree_add_item(rsvp_object_tree, offset2+18, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+18, 2,
"Destination port: %d",
pntohs(pd+offset2+18));
break;
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
}
}
break;
case RSVP_CLASS_HOP :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_HOP);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_HOP);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
case 1: {
rsvp_hop_ipv4 *hop = (rsvp_hop_ipv4 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1 - IPv4");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Neighbor address: %s",
ip_to_str((guint8 *) &(hop->neighbor)));
- proto_tree_add_item(rsvp_object_tree, offset2+4, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+4, 4,
"Logical interface: %0x",
pntohl(pd+offset2+4));
break;
@@ -281,40 +278,40 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case 2: {
rsvp_hop_ipv6 *hop = (rsvp_hop_ipv6 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 2 - IPv6");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Neighbor address: %s",
ip6_to_str(&(hop->neighbor)));
- proto_tree_add_item(rsvp_object_tree, offset2+16, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
"Logical interface: %0x",
pntohl(pd+offset2+16));
break;
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
}
}
break;
case RSVP_CLASS_TIME_VALUES :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_TIME_VALUES);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_TIME_VALUES);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
case 1: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Refresh interval: %u ms (%u seconds)",
pntohl(pd+offset2),
pntohl(pd+offset2)/1000);
@@ -322,11 +319,11 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
break;
}
@@ -334,10 +331,10 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
break;
case RSVP_CLASS_ERROR :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_ERROR);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_ERROR);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
@@ -346,17 +343,17 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
char *err_str = match_strval(err->error_code, rsvp_error_vals);
if (!err_str) err_str = "Unknown";
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1 - IPv4");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Error node: %s",
ip_to_str((guint8 *) &(err->error_node)));
- proto_tree_add_item(rsvp_object_tree, offset2+4, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+4, 1,
"Flags: %02x", err->flags);
- proto_tree_add_item(rsvp_object_tree, offset2+5, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+5, 1,
"Error code: %d - %s", err->error_code,
err_str);
- proto_tree_add_item(rsvp_object_tree, offset2+6, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
"Error value: %d", pntohs(pd+offset2+6));
break;
@@ -366,28 +363,28 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
rsvp_error_ipv6 *err = (rsvp_error_ipv6 *)obj;
char *err_str = match_strval(err->error_code, rsvp_error_vals);
if (!err_str) err_str = "Unknown";
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 2 - IPv6");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Error node: %s",
ip6_to_str(&(err->error_node)));
- proto_tree_add_item(rsvp_object_tree, offset2+16, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+16, 1,
"Flags: %02x", err->flags);
- proto_tree_add_item(rsvp_object_tree, offset2+17, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+17, 1,
"Error code: %d - %s", err->error_code,
err_str);
- proto_tree_add_item(rsvp_object_tree, offset2+18, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+18, 2,
"Error value: %d", pntohs(pd+offset2+18));
break;
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
}
}
@@ -396,20 +393,20 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case RSVP_CLASS_SCOPE :
mylen = obj_length;
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_SCOPE);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_SCOPE);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
case 1: {
unsigned long ip;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1 - IPv4");
while (mylen > sizeof(rsvp_object)) {
ip = pntohl(pd+offset2);
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"IPv4 Address: %s",
ip_to_str((guint8 *) &ip));
offset2 += 4;
@@ -420,11 +417,11 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case 2: {
struct e_in6_addr *ip;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 2 - IPv6");
while (mylen>sizeof(rsvp_object)) {
ip = (struct e_in6_addr *)pd+offset2;
- proto_tree_add_item(rsvp_object_tree, offset2, 16,
+ proto_tree_add_text(rsvp_object_tree, offset2, 16,
"IPv6 Address: %s",
ip6_to_str(ip));
offset2 += 16;
@@ -434,21 +431,21 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
}
}
break;
case RSVP_CLASS_STYLE :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_STYLE);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_STYLE);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
@@ -456,19 +453,19 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
unsigned long ip = pntohl(pd+offset2);
char *style_str = match_strval(ip, style_vals);
if (!style_str) style_str = "Unknown";
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1");
- proto_tree_add_item(rsvp_object_tree, offset2+5, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+5, 1,
"Style: %ld - %s", ip, style_str);
break;
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
break;
}
@@ -476,18 +473,18 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
break;
case RSVP_CLASS_CONFIRM :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_CONFIRM);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_CONFIRM);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
switch(obj->type) {
case 1: {
rsvp_confirm_ipv4 *confirm = (rsvp_confirm_ipv4 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1 - IPv4");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Receiver address: %s",
ip_to_str((guint8 *) &(confirm->receiver)));
break;
@@ -495,72 +492,72 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case 2: {
rsvp_confirm_ipv6 *confirm = (rsvp_confirm_ipv6 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 2 - IPv6");
- proto_tree_add_item(rsvp_object_tree, offset2, 16,
+ proto_tree_add_text(rsvp_object_tree, offset2, 16,
"Receiver address: %s",
ip6_to_str(&(confirm->receiver)));
break;
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
}
}
break;
case RSVP_CLASS_SENDER_TEMPLATE :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_SENDER_TEMPLATE);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_SENDER_TEMPLATE);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
goto common_template;
case RSVP_CLASS_FILTER_SPEC :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_FILTER_SPEC);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_FILTER_SPEC);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
common_template:
switch(obj->type) {
case 1: {
rsvp_template_ipv4 *tem = (rsvp_template_ipv4 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 1 - IPv4");
- proto_tree_add_item(rsvp_object_tree, offset2, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2, 4,
"Source address: %s",
ip_to_str((guint8 *) &(tem->source)));
- proto_tree_add_item(rsvp_object_tree, offset2+6, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
"Source port: %d", pntohs(pd+offset2+6));
break;
}
case 2: {
rsvp_template_ipv6 *tem = (rsvp_template_ipv6 *)obj;
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: 2 - IPv6");
- proto_tree_add_item(rsvp_object_tree, offset2, 16,
+ proto_tree_add_text(rsvp_object_tree, offset2, 16,
"Source address: %s",
ip6_to_str(&(tem->source)));
- proto_tree_add_item(rsvp_object_tree, offset2+18, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+18, 2,
"Source port: %d", pntohs(pd+offset2+18));
break;
}
default: {
- proto_tree_add_item(rsvp_object_tree, offset+3, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+3, 1,
"C-type: Unknown (%d)",
obj->type);
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
}
}
@@ -569,59 +566,58 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case RSVP_CLASS_SENDER_TSPEC : {
IS_tspec *tspec = (IS_tspec *)obj;
- proto_item_add_subtree(ti, rsvp_object_tree,
- ETT_RSVP_SENDER_TSPEC);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_SENDER_TSPEC);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
- proto_tree_add_item(rsvp_object_tree, offset2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2, 1,
"Message format version: %d",
tspec->version>>4);
- proto_tree_add_item(rsvp_object_tree, offset2+2, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
"Data length: %d words, not including header",
pntohs(pd+offset2+2));
- proto_tree_add_item(rsvp_object_tree, offset2+4, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+4, 1,
"Service header: %d - %s",
tspec->service_header,
tspec->service_header==1 ?
"Default/global information (INTSRV_GENERAL)" :
"Unknown");
- proto_tree_add_item(rsvp_object_tree, offset2+6, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
"Length of service %d data: %d words, "
"not including header",
tspec->service_header,
pntohs(pd+offset2+6)>>12);
/* Token bucket TSPEC */
- proto_tree_add_item(rsvp_object_tree, offset2+8, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+8, 1,
"Parameter ID: %d - %s",
tspec->param_id,
tspec->param_id==127 ? "Token Bucket TSpec" :
"Unknown");
- proto_tree_add_item(rsvp_object_tree, offset2+9, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+9, 1,
"Parameter %d flags: %d",
tspec->param_id, tspec->flags_tspec);
- proto_tree_add_item(rsvp_object_tree, offset2+10, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+10, 2,
"Length of parameter %d data: %d words, "
"not including header",
tspec->param_id,
pntohs(pd+offset2+10));
- proto_tree_add_item(rsvp_object_tree, offset2+12, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+12, 4,
"Token bucket rate: %ld",
ieee_to_long(pd+offset2+12));
- proto_tree_add_item(rsvp_object_tree, offset2+16, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
"Token bucket size: %ld",
ieee_to_long(pd+offset2+16));
- proto_tree_add_item(rsvp_object_tree, offset2+20, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+20, 4,
"Peak data rate: %ld",
ieee_to_long(pd+offset2+20));
- proto_tree_add_item(rsvp_object_tree, offset2+24, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+24, 4,
"Minimum policed unit: %d",
pntohl(pd+offset2+24));
- proto_tree_add_item(rsvp_object_tree, offset2+28, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+28, 4,
"Maximum policed unit: %d",
pntohl(pd+offset2+28));
@@ -633,54 +629,53 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
char *qos_str = match_strval(flowspec->service_header, qos_vals);
char *is_param_str = match_strval(flowspec->param_id, svc_vals);
- proto_item_add_subtree(ti, rsvp_object_tree,
- ETT_RSVP_FLOWSPEC);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_FLOWSPEC);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
if (!qos_str) qos_str = "Unknown";
if (!is_param_str) is_param_str="Unknown";
- proto_tree_add_item(rsvp_object_tree, offset2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2, 1,
"Message format version: %d",
flowspec->version>>4);
- proto_tree_add_item(rsvp_object_tree, offset2+2, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
"Data length: %d words, not including header",
pntohs(pd+offset2+2));
- proto_tree_add_item(rsvp_object_tree, offset2+4, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+4, 1,
"Service header: %d - %s",
flowspec->service_header, qos_str);
- proto_tree_add_item(rsvp_object_tree, offset2+6, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+6, 2,
"Length of service %d data: %d words, "
"not including header",
flowspec->service_header,
pntohs(pd+offset2+6)>>12);
- proto_tree_add_item(rsvp_object_tree, offset2+8, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+8, 1,
"Parameter ID: %d - %s",
flowspec->param_id, is_param_str);
- proto_tree_add_item(rsvp_object_tree, offset2+9, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+9, 1,
"Parameter %d flags: %d",
flowspec->param_id, flowspec->flags_tspec);
- proto_tree_add_item(rsvp_object_tree, offset2+10, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+10, 2,
"Length of parameter %d data: %d words, "
"not including header",
flowspec->param_id,
pntohs(pd+offset2+10));
- proto_tree_add_item(rsvp_object_tree, offset2+12, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+12, 4,
"Token bucket rate: %ld",
ieee_to_long(pd+offset2+12));
- proto_tree_add_item(rsvp_object_tree, offset2+16, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+16, 4,
"Token bucket size: %ld",
ieee_to_long(pd+offset2+16));
- proto_tree_add_item(rsvp_object_tree, offset2+20, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+20, 4,
"Peak data rate: %ld",
ieee_to_long(pd+offset2+20));
- proto_tree_add_item(rsvp_object_tree, offset2+24, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+24, 4,
"Minimum policed unit: %d",
pntohl(pd+offset2+24));
- proto_tree_add_item(rsvp_object_tree, offset2+28, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+28, 4,
"Maximum policed unit: %d",
pntohl(pd+offset2+28));
if (flowspec->service_header!=QOS_GUARANTEED)
@@ -689,21 +684,21 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
/* Guaranteed-rate RSpec */
is_param_str = match_strval(flowspec->param_id_rspec, svc_vals);
if (!is_param_str) is_param_str="Unknown";
- proto_tree_add_item(rsvp_object_tree, offset2+32, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+32, 1,
"Parameter ID: %d - %s",
flowspec->param_id, is_param_str);
- proto_tree_add_item(rsvp_object_tree, offset2+33, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2+33, 1,
"Parameter %d flags: %d",
flowspec->param_id, flowspec->flags_rspec);
- proto_tree_add_item(rsvp_object_tree, offset2+34, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+34, 2,
"Length of parameter %d data: %d words, "
"not including header",
flowspec->param_id,
pntohs(pd+offset2+34));
- proto_tree_add_item(rsvp_object_tree, offset2+36, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+36, 4,
"Rate: %ld",
ieee_to_long(pd+offset2+36));
- proto_tree_add_item(rsvp_object_tree, offset2+40, 4,
+ proto_tree_add_text(rsvp_object_tree, offset2+40, 4,
"Slack term: %d",
pntohl(pd+offset2+40));
@@ -719,17 +714,17 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
int tree_num;
mylen = obj_length;
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_ADSPEC);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_ADSPEC);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
- proto_tree_add_item(rsvp_object_tree, offset2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset2, 1,
"Message format version: %d",
(*((unsigned char *)pd+offset2))>>4);
- proto_tree_add_item(rsvp_object_tree, offset2+2, 2,
+ proto_tree_add_text(rsvp_object_tree, offset2+2, 2,
"Data length: %d words, not including header",
pntohs(pd+offset2+2));
offset2+=4;
@@ -739,18 +734,17 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
shdr = (service_hdr *)(pd + offset2);
str = match_strval(shdr->service_num, adspec_services);
- ti = proto_tree_add_item(rsvp_object_tree, offset2,
+ ti = proto_tree_add_text(rsvp_object_tree, offset2,
(pntohs(&shdr->length)+1)<<2,
str?str:"Unknown");
- adspec_tree = proto_tree_new();
- proto_item_add_subtree(ti, adspec_tree, tree_num++);
- proto_tree_add_item(adspec_tree, offset2, 1,
+ adspec_tree = proto_item_add_subtree(ti, tree_num++);
+ proto_tree_add_text(adspec_tree, offset2, 1,
"Service header %d - %s",
shdr->service_num, str);
- proto_tree_add_item(adspec_tree, offset2+1, 1,
+ proto_tree_add_text(adspec_tree, offset2+1, 1,
(shdr->break_bit&0x80)?
"Break bit set":"Break bit not set");
- proto_tree_add_item(adspec_tree, offset2+2, 2,
+ proto_tree_add_text(adspec_tree, offset2+2, 2,
"Data length: %d words, not including header",
pntohs(&shdr->length));
offset2+=4; i=(pntohs(&shdr->length)+1)<<2; mylen-=4;
@@ -767,7 +761,7 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case 135:
case 136:
/* 32-bit unsigned integer */
- proto_tree_add_item(adspec_tree, offset2,
+ proto_tree_add_text(adspec_tree, offset2,
(pntohs(&phdr->length)+1)<<2,
"%s - %lu (type %d, length %d)",
str,
@@ -777,7 +771,7 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case 6:
/* IEEE float */
- proto_tree_add_item(adspec_tree, offset2,
+ proto_tree_add_text(adspec_tree, offset2,
(pntohs(&phdr->length)+1)<<2,
"%s - %lu (type %d, length %d)",
str,
@@ -785,14 +779,14 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
phdr->id, pntohs(&phdr->length));
break;
default:
- proto_tree_add_item(adspec_tree, offset2,
+ proto_tree_add_text(adspec_tree, offset2,
(pntohs(&phdr->length)+1)<<2,
"%s (type %d, length %d)",
str,
phdr->id, pntohs(&phdr->length));
}
} else {
- proto_tree_add_item(adspec_tree, offset2,
+ proto_tree_add_text(adspec_tree, offset2,
(pntohs(&phdr->length)+1)<<2,
"Unknown (type %d, length %d)",
phdr->id, pntohs(&phdr->length));
@@ -806,33 +800,33 @@ dissect_rsvp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
case RSVP_CLASS_INTEGRITY :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_INTEGRITY);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_INTEGRITY);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
goto default_class;
case RSVP_CLASS_POLICY :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_POLICY);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_POLICY);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
goto default_class;
default :
- proto_item_add_subtree(ti, rsvp_object_tree, ETT_RSVP_UNKNOWN_CLASS);
- proto_tree_add_item(rsvp_object_tree, offset, 2, "Length: %d",
+ rsvp_object_tree = proto_item_add_subtree(ti, ETT_RSVP_UNKNOWN_CLASS);
+ proto_tree_add_text(rsvp_object_tree, offset, 2, "Length: %d",
obj_length);
- proto_tree_add_item(rsvp_object_tree, offset+2, 1,
+ proto_tree_add_text(rsvp_object_tree, offset+2, 1,
"Class number: %d - %s",
obj->class, object_type);
default_class:
i = obj_length - sizeof(rsvp_object);
- proto_tree_add_item(rsvp_object_tree, offset2, i,
+ proto_tree_add_text(rsvp_object_tree, offset2, i,
"Data (%d bytes)", i);
break;
diff --git a/packet-rtsp.c b/packet-rtsp.c
index 785d17b39a..350286306a 100644
--- a/packet-rtsp.c
+++ b/packet-rtsp.c
@@ -4,7 +4,7 @@
* Jason Lango <jal@netapp.com>
* Liberally copied from packet-http.c, by Guy Harris <guy@netapp.com>
*
- * $Id: packet-rtsp.c,v 1.1 1999/07/07 00:34:56 guy Exp $
+ * $Id: packet-rtsp.c,v 1.2 1999/07/07 22:51:53 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -104,10 +104,9 @@ void dissect_rtsp(const u_char *pd, int offset, frame_data *fd,
rtsp_tree = NULL;
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Real Time Streaming Protocol");
- rtsp_tree = proto_tree_new();
- proto_item_add_subtree(ti, rtsp_tree, ETT_RTSP);
+ rtsp_tree = proto_item_add_subtree(ti, ETT_RTSP);
}
while (data < dataend) {
@@ -195,7 +194,7 @@ void dissect_rtsp(const u_char *pd, int offset, frame_data *fd,
* Put this line.
*/
if (rtsp_tree) {
- proto_tree_add_item(rtsp_tree, offset, linelen, "%s",
+ proto_tree_add_text(rtsp_tree, offset, linelen, "%s",
format_text(data, linelen));
}
offset += linelen;
@@ -208,7 +207,7 @@ void dissect_rtsp(const u_char *pd, int offset, frame_data *fd,
col_add_str(fd, COL_PROTOCOL, "RTSP/SDP");
}
else if (rtsp_tree && data < dataend) {
- proto_tree_add_item(rtsp_tree, offset, END_OF_FRAME,
+ proto_tree_add_text(rtsp_tree, offset, END_OF_FRAME,
"Data (%d bytes)", END_OF_FRAME);
}
}
diff --git a/packet-sdp.c b/packet-sdp.c
index 25f5f28a83..c81554b712 100644
--- a/packet-sdp.c
+++ b/packet-sdp.c
@@ -4,7 +4,7 @@
* Jason Lango <jal@netapp.com>
* Liberally copied from packet-http.c, by Guy Harris <guy@netapp.com>
*
- * $Id: packet-sdp.c,v 1.1 1999/07/07 00:34:56 guy Exp $
+ * $Id: packet-sdp.c,v 1.2 1999/07/07 22:51:53 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -68,10 +68,9 @@ void dissect_sdp(const u_char *pd, int offset, frame_data *fd,
if (!tree)
return;
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Session Description Protocol");
- sdp_tree = proto_tree_new();
- proto_item_add_subtree(ti, sdp_tree, ETT_SDP);
+ sdp_tree = proto_item_add_subtree(ti, ETT_SDP);
section = 0;
for (; data < dataend; offset += linelen, data = lineend) {
@@ -89,7 +88,7 @@ void dissect_sdp(const u_char *pd, int offset, frame_data *fd,
type = data[0];
if (data[1] != '=') {
- proto_tree_add_item(sdp_tree, offset, linelen,
+ proto_tree_add_text(sdp_tree, offset, linelen,
"Invalid line: %s",
format_text(data, linelen));
continue;
@@ -164,13 +163,13 @@ void dissect_sdp(const u_char *pd, int offset, frame_data *fd,
break;
}
- proto_tree_add_item(sdp_tree, offset, linelen,
+ proto_tree_add_text(sdp_tree, offset, linelen,
"%s (%c): %s", typename, type,
format_text(value, valuelen));
}
if (data < dataend) {
- proto_tree_add_item(sdp_tree, offset, END_OF_FRAME,
+ proto_tree_add_text(sdp_tree, offset, END_OF_FRAME,
"Data (%d bytes)", END_OF_FRAME);
}
}
diff --git a/packet-smb.c b/packet-smb.c
index 5edeaa6958..9ae2b4d39c 100644
--- a/packet-smb.c
+++ b/packet-smb.c
@@ -2,7 +2,7 @@
* Routines for smb packet dissection
* Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
*
- * $Id: packet-smb.c,v 1.14 1999/07/01 04:04:36 sharpe Exp $
+ * $Id: packet-smb.c,v 1.15 1999/07/07 22:51:53 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -316,7 +316,7 @@ dissect_unknown_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, END_OF_FRAME, "Data (%u bytes)",
+ proto_tree_add_text(tree, offset, END_OF_FRAME, "Data (%u bytes)",
END_OF_FRAME);
}
@@ -421,7 +421,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -433,7 +433,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -445,7 +445,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "BufferFormat1: %u", BufferFormat1);
+ proto_tree_add_text(tree, offset, 1, "BufferFormat1: %u", BufferFormat1);
}
@@ -457,7 +457,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, strlen(SharePath) + 1, "Share Path: %s", SharePath);
+ proto_tree_add_text(tree, offset, strlen(SharePath) + 1, "Share Path: %s", SharePath);
}
@@ -469,7 +469,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "BufferFormat2: %u", BufferFormat2);
+ proto_tree_add_text(tree, offset, 1, "BufferFormat2: %u", BufferFormat2);
}
@@ -481,7 +481,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, strlen(Password) + 1, "Password: %s", Password);
+ proto_tree_add_text(tree, offset, strlen(Password) + 1, "Password: %s", Password);
}
@@ -493,7 +493,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "BufferFormat3: %u", BufferFormat3);
+ proto_tree_add_text(tree, offset, 1, "BufferFormat3: %u", BufferFormat3);
}
@@ -505,7 +505,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, strlen(Service) + 1, "Service: %s", Service);
+ proto_tree_add_text(tree, offset, strlen(Service) + 1, "Service: %s", Service);
}
@@ -521,7 +521,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -533,7 +533,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max Buffer Size: %u", MaxBufferSize);
+ proto_tree_add_text(tree, offset, 2, "Max Buffer Size: %u", MaxBufferSize);
}
@@ -545,7 +545,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "TID: %u", TID);
+ proto_tree_add_text(tree, offset, 2, "TID: %u", TID);
}
@@ -557,7 +557,7 @@ dissect_treecon_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -611,7 +611,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -623,7 +623,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "AndXCommand: %u", AndXCommand);
+ proto_tree_add_text(tree, offset, 1, "AndXCommand: %u", AndXCommand);
}
@@ -635,7 +635,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "AndXReserved: %u", AndXReserved);
+ proto_tree_add_text(tree, offset, 1, "AndXReserved: %u", AndXReserved);
}
@@ -647,7 +647,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "AndXOffset: %u", AndXOffset);
+ proto_tree_add_text(tree, offset, 2, "AndXOffset: %u", AndXOffset);
}
@@ -659,7 +659,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "MaxBufferSize: %u", MaxBufferSize);
+ proto_tree_add_text(tree, offset, 2, "MaxBufferSize: %u", MaxBufferSize);
}
@@ -671,7 +671,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "MaxMpxCount: %u", MaxMpxCount);
+ proto_tree_add_text(tree, offset, 2, "MaxMpxCount: %u", MaxMpxCount);
}
@@ -683,7 +683,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "VcNumber: %u", VcNumber);
+ proto_tree_add_text(tree, offset, 2, "VcNumber: %u", VcNumber);
}
@@ -695,7 +695,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 4, "SessionKey: %u", SessionKey);
+ proto_tree_add_text(tree, offset, 4, "SessionKey: %u", SessionKey);
}
@@ -707,7 +707,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "PasswordLen: %u", PasswordLen);
+ proto_tree_add_text(tree, offset, 2, "PasswordLen: %u", PasswordLen);
}
@@ -719,7 +719,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 4, "Reserved: %u", Reserved);
+ proto_tree_add_text(tree, offset, 4, "Reserved: %u", Reserved);
}
@@ -731,7 +731,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -743,7 +743,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(AccountName) + 1, "AccountName: %s", AccountName);
+ proto_tree_add_text(tree, offset, strlen(AccountName) + 1, "AccountName: %s", AccountName);
}
@@ -755,7 +755,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(PrimaryDomain) + 1, "PrimaryDomain: %s", PrimaryDomain);
+ proto_tree_add_text(tree, offset, strlen(PrimaryDomain) + 1, "PrimaryDomain: %s", PrimaryDomain);
}
@@ -767,7 +767,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(NativeOS) + 1, "NativeOS: %s", NativeOS);
+ proto_tree_add_text(tree, offset, strlen(NativeOS) + 1, "NativeOS: %s", NativeOS);
}
@@ -783,7 +783,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -795,7 +795,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "AndXCommand: %u", AndXCommand);
+ proto_tree_add_text(tree, offset, 1, "AndXCommand: %u", AndXCommand);
}
@@ -807,7 +807,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "AndXReserved: %u", AndXReserved);
+ proto_tree_add_text(tree, offset, 1, "AndXReserved: %u", AndXReserved);
}
@@ -819,7 +819,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "AndXOffset: %u", AndXOffset);
+ proto_tree_add_text(tree, offset, 2, "AndXOffset: %u", AndXOffset);
}
@@ -831,7 +831,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "MaxBufferSize: %u", MaxBufferSize);
+ proto_tree_add_text(tree, offset, 2, "MaxBufferSize: %u", MaxBufferSize);
}
@@ -843,7 +843,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "MaxMpxCount: %u", MaxMpxCount);
+ proto_tree_add_text(tree, offset, 2, "MaxMpxCount: %u", MaxMpxCount);
}
@@ -855,7 +855,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "VcNumber: %u", VcNumber);
+ proto_tree_add_text(tree, offset, 2, "VcNumber: %u", VcNumber);
}
@@ -867,7 +867,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 4, "SessionKey: %u", SessionKey);
+ proto_tree_add_text(tree, offset, 4, "SessionKey: %u", SessionKey);
}
@@ -879,7 +879,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "ANSI Account Password Length: %u", ANSIAccountPasswordLength);
+ proto_tree_add_text(tree, offset, 2, "ANSI Account Password Length: %u", ANSIAccountPasswordLength);
}
@@ -891,7 +891,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "UNICODE Account Password Length: %u", UNICODEAccountPasswordLength);
+ proto_tree_add_text(tree, offset, 2, "UNICODE Account Password Length: %u", UNICODEAccountPasswordLength);
}
@@ -903,7 +903,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 4, "Reserved: %u", Reserved);
+ proto_tree_add_text(tree, offset, 4, "Reserved: %u", Reserved);
}
@@ -915,36 +915,35 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- ti = proto_tree_add_item(tree, offset, 4, "Capabilities: 0x%04x", Capabilities);
- Capabilities_tree = proto_tree_new();
- proto_item_add_subtree(ti, Capabilities_tree, ETT_SMB_CAPABILITIES);
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ ti = proto_tree_add_text(tree, offset, 4, "Capabilities: 0x%04x", Capabilities);
+ Capabilities_tree = proto_item_add_subtree(ti, ETT_SMB_CAPABILITIES);
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0001, 32, " Raw Mode supported", " Raw Mode not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0002, 32, " Raw Mode supported", " MPX Mode not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0004, 32," Unicode supported", " Unicode not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0008, 32, " Large Files supported", " Large Files not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0010, 32, " NT LM 0.12 SMBs supported", " NT LM 0.12 SMBs not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0020, 32, " RPC Remote APIs supported", " RPC Remote APIs not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0040, 32, " NT Status Codes supported", " NT Status Codes not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0080, 32, " Level 2 OpLocks supported", " Level 2 OpLocks not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0100, 32, " Lock&Read supported", " Lock&Read not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x0200, 32, " NT Find supported", " NT Find not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x1000, 32, " DFS supported", " DFS not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x4000, 32, " Large READX supported", " Large READX not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x8000, 32, " Large WRITEX supported", " Large WRITEX not supported"));
- proto_tree_add_item(Capabilities_tree, offset, 4, "%s",
+ proto_tree_add_text(Capabilities_tree, offset, 4, "%s",
decode_boolean_bitfield(Capabilities, 0x80000000, 32, " Extended Security Exchanges supported", " Extended Security Exchanges not supported"));
}
@@ -957,7 +956,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count: %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count: %u", ByteCount);
}
@@ -969,7 +968,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(ANSIPassword) + 1, "ANSI Password: %s", ANSIPassword);
+ proto_tree_add_text(tree, offset, strlen(ANSIPassword) + 1, "ANSI Password: %s", ANSIPassword);
}
@@ -983,7 +982,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(UNICODEPassword) + 1, "UNICODE Password: %s", UNICODEPassword);
+ proto_tree_add_text(tree, offset, strlen(UNICODEPassword) + 1, "UNICODE Password: %s", UNICODEPassword);
}
@@ -997,7 +996,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(AccountName) + 1, "Account Name: %s", AccountName);
+ proto_tree_add_text(tree, offset, strlen(AccountName) + 1, "Account Name: %s", AccountName);
}
@@ -1009,7 +1008,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(PrimaryDomain) + 1, "Primary Domain: %s", PrimaryDomain);
+ proto_tree_add_text(tree, offset, strlen(PrimaryDomain) + 1, "Primary Domain: %s", PrimaryDomain);
}
@@ -1021,7 +1020,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(NativeOS) + 1, "Native OS: %s", NativeOS);
+ proto_tree_add_text(tree, offset, strlen(NativeOS) + 1, "Native OS: %s", NativeOS);
}
@@ -1033,7 +1032,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(NativeLanManType) + 1, "Native LanMan Type: %s", NativeLanManType);
+ proto_tree_add_text(tree, offset, strlen(NativeLanManType) + 1, "Native LanMan Type: %s", NativeLanManType);
}
@@ -1060,7 +1059,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -1072,7 +1071,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "AndXCommand: %u", AndXCommand);
+ proto_tree_add_text(tree, offset, 1, "AndXCommand: %u", AndXCommand);
}
@@ -1084,7 +1083,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 1, "AndXReserved: %u", AndXReserved);
+ proto_tree_add_text(tree, offset, 1, "AndXReserved: %u", AndXReserved);
}
@@ -1096,7 +1095,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "AndXOffset: %u", AndXOffset);
+ proto_tree_add_text(tree, offset, 2, "AndXOffset: %u", AndXOffset);
}
@@ -1108,7 +1107,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Action: %u", Action);
+ proto_tree_add_text(tree, offset, 2, "Action: %u", Action);
}
@@ -1120,7 +1119,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -1132,7 +1131,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(NativeOS) + 1, "NativeOS: %s", NativeOS);
+ proto_tree_add_text(tree, offset, strlen(NativeOS) + 1, "NativeOS: %s", NativeOS);
}
@@ -1144,7 +1143,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(NativeLanMan) + 1, "NativeLanMan: %s", NativeLanMan);
+ proto_tree_add_text(tree, offset, strlen(NativeLanMan) + 1, "NativeLanMan: %s", NativeLanMan);
}
@@ -1156,7 +1155,7 @@ dissect_ssetup_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree
if (tree) {
- proto_tree_add_item(tree, offset, strlen(PrimaryDomain) + 1, "PrimaryDomain: %s", PrimaryDomain);
+ proto_tree_add_text(tree, offset, strlen(PrimaryDomain) + 1, "PrimaryDomain: %s", PrimaryDomain);
}
@@ -1194,9 +1193,9 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Invalid TCON_ANDX format. WCT should be 2, 3, or 4 ..., not %u", wct);
+ proto_tree_add_text(tree, offset, 1, "Invalid TCON_ANDX format. WCT should be 2, 3, or 4 ..., not %u", wct);
- proto_tree_add_item(tree, offset, END_OF_FRAME, "Data");
+ proto_tree_add_text(tree, offset, END_OF_FRAME, "Data");
return;
@@ -1206,7 +1205,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", wct);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", wct);
}
@@ -1216,11 +1215,11 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Next Command: %s",
+ proto_tree_add_text(tree, offset, 1, "Next Command: %s",
(andxcmd == 0xFF) ? "No further commands":
decode_smb_name(andxcmd));
- proto_tree_add_item(tree, offset + 1, 1, "Reserved (MBZ): %u", pd[offset+1]);
+ proto_tree_add_text(tree, offset + 1, 1, "Reserved (MBZ): %u", pd[offset+1]);
}
@@ -1230,7 +1229,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Offset to next command: %u", andxoffs);
+ proto_tree_add_text(tree, offset, 2, "Offset to next command: %u", andxoffs);
}
@@ -1244,10 +1243,9 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- ti = proto_tree_add_item(tree, offset, 2, "Additional Flags: 0x%02x", flags);
- flags_tree = proto_tree_new();
- proto_item_add_subtree(ti, flags_tree, ETT_SMB_AFLAGS);
- proto_tree_add_item(flags_tree, offset, 2, "%s",
+ ti = proto_tree_add_text(tree, offset, 2, "Additional Flags: 0x%02x", flags);
+ flags_tree = proto_item_add_subtree(ti, ETT_SMB_AFLAGS);
+ proto_tree_add_text(flags_tree, offset, 2, "%s",
decode_boolean_bitfield(flags, 0x01, 16,
"Disconnect TID",
"Don't disconnect TID"));
@@ -1260,7 +1258,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Password Length: %u", passwdlen);
+ proto_tree_add_text(tree, offset, 2, "Password Length: %u", passwdlen);
}
@@ -1270,7 +1268,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", bcc);
}
@@ -1280,7 +1278,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str) + 1, "Password: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str) + 1, "Password: %s", str);
}
@@ -1290,7 +1288,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str) + 1, "Path: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str) + 1, "Path: %s", str);
}
@@ -1300,7 +1298,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str) + 1, "Service: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str) + 1, "Service: %s", str);
}
@@ -1314,7 +1312,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", bcc);
}
@@ -1324,7 +1322,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str) + 1, "Service Type: %s",
+ proto_tree_add_text(tree, offset, strlen(str) + 1, "Service Type: %s",
str);
}
@@ -1339,7 +1337,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) { /* Should break out the bits */
- proto_tree_add_item(tree, offset, 2, "Optional Support: 0x%04x",
+ proto_tree_add_text(tree, offset, 2, "Optional Support: 0x%04x",
optionsup);
}
@@ -1350,7 +1348,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", bcc);
}
@@ -1360,7 +1358,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str) + 1, "Service: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str) + 1, "Service: %s", str);
}
@@ -1370,7 +1368,7 @@ dissect_tcon_andx_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str) + 1, "Native File System: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str) + 1, "Native File System: %s", str);
}
@@ -1407,9 +1405,9 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
!((wct == 13) && (dirn == 0)) && !((wct == 17) && (dirn == 0))) {
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Invalid Negotiate Protocol format. WCT should be zero or 1 or 13 or 17 ..., not %u", wct);
+ proto_tree_add_text(tree, offset, 1, "Invalid Negotiate Protocol format. WCT should be zero or 1 or 13 or 17 ..., not %u", wct);
- proto_tree_add_item(tree, offset, END_OF_FRAME, "Data");
+ proto_tree_add_text(tree, offset, END_OF_FRAME, "Data");
return;
}
@@ -1417,7 +1415,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %d", wct);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %d", wct);
}
@@ -1433,7 +1431,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", bcc);
}
@@ -1441,9 +1439,8 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME, "Dialects");
- dialects = proto_tree_new();
- proto_item_add_subtree(ti, dialects, ETT_SMB_DIALECTS);
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME, "Dialects");
+ dialects = proto_item_add_subtree(ti, ETT_SMB_DIALECTS);
}
@@ -1452,7 +1449,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(dialects, offset, 1, "Dialect Marker: %d", pd[offset]);
+ proto_tree_add_text(dialects, offset, 1, "Dialect Marker: %d", pd[offset]);
}
@@ -1462,7 +1459,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(dialects, offset, strlen(str)+1, "Dialect: %s", str);
+ proto_tree_add_text(dialects, offset, strlen(str)+1, "Dialect: %s", str);
}
@@ -1479,12 +1476,12 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (dialect == 0xFFFF) { /* Server didn't like them dialects */
- proto_tree_add_item(tree, offset, 2, "Supplied dialects not recognized");
+ proto_tree_add_text(tree, offset, 2, "Supplied dialects not recognized");
}
else {
- proto_tree_add_item(tree, offset, 2, "Dialect Index: %u, PC NETWORK PROTGRAM 1.0", dialect);
+ proto_tree_add_text(tree, offset, 2, "Dialect Index: %u, PC NETWORK PROTGRAM 1.0", dialect);
}
@@ -1496,7 +1493,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", bcc);
}
@@ -1506,7 +1503,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Dialect Index: %u, Greater than CORE PROTOCOL and up to LANMAN2.1", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Dialect Index: %u, Greater than CORE PROTOCOL and up to LANMAN2.1", GSHORT(pd, offset));
}
@@ -1518,14 +1515,13 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- ti = proto_tree_add_item(tree, offset, 2, "Security Mode: 0x%04x", mode);
- mode_tree = proto_tree_new();
- proto_item_add_subtree(ti, mode_tree, ETT_SMB_MODE);
- proto_tree_add_item(mode_tree, offset, 2, "%s",
+ ti = proto_tree_add_text(tree, offset, 2, "Security Mode: 0x%04x", mode);
+ mode_tree = proto_item_add_subtree(ti, ETT_SMB_MODE);
+ proto_tree_add_text(mode_tree, offset, 2, "%s",
decode_boolean_bitfield(mode, 0x0001, 16,
"Security = User",
"Security = Share"));
- proto_tree_add_item(mode_tree, offset, 2, "%s",
+ proto_tree_add_text(mode_tree, offset, 2, "%s",
decode_boolean_bitfield(mode, 0x0002, 16,
"Passwords = Encrypted",
"Passwords = Plaintext"));
@@ -1536,7 +1532,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max buffer size: %u", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Max buffer size: %u", GSHORT(pd, offset));
}
@@ -1544,7 +1540,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max multiplex count: %u", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Max multiplex count: %u", GSHORT(pd, offset));
}
@@ -1552,7 +1548,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max vcs: %u", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Max vcs: %u", GSHORT(pd, offset));
}
@@ -1562,14 +1558,13 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- ti = proto_tree_add_item(tree, offset, 2, "Raw Mode: 0x%04x", rawmode);
- rawmode_tree = proto_tree_new();
- proto_item_add_subtree(ti, rawmode_tree, ETT_SMB_RAWMODE);
- proto_tree_add_item(rawmode_tree, offset, 2, "%s",
+ ti = proto_tree_add_text(tree, offset, 2, "Raw Mode: 0x%04x", rawmode);
+ rawmode_tree = proto_item_add_subtree(ti, ETT_SMB_RAWMODE);
+ proto_tree_add_text(rawmode_tree, offset, 2, "%s",
decode_boolean_bitfield(rawmode, 0x01, 16,
"Read Raw supported",
"Read Raw not supported"));
- proto_tree_add_item(rawmode_tree, offset, 2, "%s",
+ proto_tree_add_text(rawmode_tree, offset, 2, "%s",
decode_boolean_bitfield(rawmode, 0x02, 16,
"Write Raw supported",
"Write Raw not supported"));
@@ -1580,7 +1575,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 4, "Session key: %08x", GWORD(pd, offset));
+ proto_tree_add_text(tree, offset, 4, "Session key: %08x", GWORD(pd, offset));
}
@@ -1590,9 +1585,9 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Server Time: %s",
+ proto_tree_add_text(tree, offset, 2, "Server Time: %s",
dissect_dos_time(GSHORT(pd, offset)));
- proto_tree_add_item(tree, offset + 2, 2, "Server Date: %s",
+ proto_tree_add_text(tree, offset + 2, 2, "Server Date: %s",
dissect_dos_date(GSHORT(pd, offset + 2)));
}
@@ -1603,7 +1598,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Server time zone: %i min from UTC",
+ proto_tree_add_text(tree, offset, 2, "Server time zone: %i min from UTC",
(signed)GSSHORT(pd, offset));
}
@@ -1616,7 +1611,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Challenge Length: %u", enckeylen);
+ proto_tree_add_text(tree, offset, 2, "Challenge Length: %u", enckeylen);
}
@@ -1624,7 +1619,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Reserved: %u (MBZ)", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Reserved: %u (MBZ)", GSHORT(pd, offset));
}
@@ -1634,7 +1629,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", bcc);
}
@@ -1646,7 +1641,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, enckeylen, "Challenge: %s",
+ proto_tree_add_text(tree, offset, enckeylen, "Challenge: %s",
bytes_to_str(str, enckeylen));
}
@@ -1660,7 +1655,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, strlen(str)+1, "Primary Domain: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str)+1, "Primary Domain: %s", str);
}
@@ -1670,7 +1665,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Dialect Index: %u, Greater than LANMAN2.1", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Dialect Index: %u, Greater than LANMAN2.1", GSHORT(pd, offset));
}
@@ -1680,22 +1675,21 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- ti = proto_tree_add_item(tree, offset, 1, "Security Mode: 0x%02x", mode);
- mode_tree = proto_tree_new();
- proto_item_add_subtree(ti, mode_tree, ETT_SMB_MODE);
- proto_tree_add_item(mode_tree, offset, 1, "%s",
+ ti = proto_tree_add_text(tree, offset, 1, "Security Mode: 0x%02x", mode);
+ mode_tree = proto_item_add_subtree(ti, ETT_SMB_MODE);
+ proto_tree_add_text(mode_tree, offset, 1, "%s",
decode_boolean_bitfield(mode, 0x01, 8,
"Security = User",
"Security = Share"));
- proto_tree_add_item(mode_tree, offset, 1, "%s",
+ proto_tree_add_text(mode_tree, offset, 1, "%s",
decode_boolean_bitfield(mode, 0x02, 8,
"Passwords = Encrypted",
"Passwords = Plaintext"));
- proto_tree_add_item(mode_tree, offset, 1, "%s",
+ proto_tree_add_text(mode_tree, offset, 1, "%s",
decode_boolean_bitfield(mode, 0x04, 8,
"Security signatures enabled",
"Security signatures not enabled"));
- proto_tree_add_item(mode_tree, offset, 1, "%s",
+ proto_tree_add_text(mode_tree, offset, 1, "%s",
decode_boolean_bitfield(mode, 0x08, 8,
"Security signatures required",
"Security signatures not required"));
@@ -1706,7 +1700,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max multiplex count: %u", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Max multiplex count: %u", GSHORT(pd, offset));
}
@@ -1714,7 +1708,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max vcs: %u", GSHORT(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Max vcs: %u", GSHORT(pd, offset));
}
@@ -1722,7 +1716,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Max buffer size: %u", GWORD(pd, offset));
+ proto_tree_add_text(tree, offset, 2, "Max buffer size: %u", GWORD(pd, offset));
}
@@ -1730,7 +1724,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 4, "Max raw size: %u", GWORD(pd, offset));
+ proto_tree_add_text(tree, offset, 4, "Max raw size: %u", GWORD(pd, offset));
}
@@ -1738,7 +1732,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 4, "Session key: %08x", GWORD(pd, offset));
+ proto_tree_add_text(tree, offset, 4, "Session key: %08x", GWORD(pd, offset));
}
@@ -1748,62 +1742,61 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- ti = proto_tree_add_item(tree, offset, 4, "Capabilities: 0x%04x", caps);
- caps_tree = proto_tree_new();
- proto_item_add_subtree(ti, caps_tree, ETT_SMB_CAPABILITIES);
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ ti = proto_tree_add_text(tree, offset, 4, "Capabilities: 0x%04x", caps);
+ caps_tree = proto_item_add_subtree(ti, ETT_SMB_CAPABILITIES);
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0001, 32,
"Raw Mode supported",
"Raw Mode not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0002, 32,
"MPX Mode supported",
"MPX Mode not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0004, 32,
"Unicode supported",
"Unicode not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0008, 32,
"Large files supported",
"Large files not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0010, 32,
"NT LM 0.12 SMBs supported",
"NT LM 0.12 SMBs not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0020, 32,
"RPC remote APIs supported",
"RPC remote APIs not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0040, 32,
"NT status codes supported",
"NT status codes not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0080, 32,
"Level 2 OpLocks supported",
"Level 2 OpLocks not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0100, 32,
"Lock&Read supported",
"Lock&Read not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x0200, 32,
"NT Find supported",
"NT Find not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x1000, 32,
"DFS supported",
"DFS not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x4000, 32,
"Large READX supported",
"Large READX not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x8000, 32,
"Large WRITEX supported",
"Large WRITEX not supported"));
- proto_tree_add_item(caps_tree, offset, 4, "%s",
+ proto_tree_add_text(caps_tree, offset, 4, "%s",
decode_boolean_bitfield(caps, 0x80000000, 32,
"Extended security exchanges supported",
"Extended security exchanges not supported"));
@@ -1815,8 +1808,8 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 4, "System Time Low: 0x%08x", GWORD(pd, offset));
- proto_tree_add_item(tree, offset + 4, 4, "System Time High: 0x%08x", GWORD(pd, offset + 4));
+ proto_tree_add_text(tree, offset, 4, "System Time Low: 0x%08x", GWORD(pd, offset));
+ proto_tree_add_text(tree, offset + 4, 4, "System Time High: 0x%08x", GWORD(pd, offset + 4));
}
@@ -1826,7 +1819,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Server time zone: %i min from UTC",
+ proto_tree_add_text(tree, offset, 2, "Server time zone: %i min from UTC",
(signed)GSSHORT(pd, offset));
}
@@ -1839,7 +1832,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Encryption key len: %u", enckeylen);
+ proto_tree_add_text(tree, offset, 1, "Encryption key len: %u", enckeylen);
}
@@ -1849,7 +1842,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte count (BCC): %u", bcc);
+ proto_tree_add_text(tree, offset, 2, "Byte count (BCC): %u", bcc);
}
@@ -1863,7 +1856,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (tree) {
- proto_tree_add_item(tree, offset, enckeylen, "Challenge encryption key: %s",
+ proto_tree_add_text(tree, offset, enckeylen, "Challenge encryption key: %s",
bytes_to_str(str, enckeylen));
}
@@ -1882,9 +1875,9 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
if (caps & 0x0004) {
ustr = unicode_to_str(str, &ustr_len);
- proto_tree_add_item(tree, offset, ustr_len+2, "OEM domain name: %s", ustr);
+ proto_tree_add_text(tree, offset, ustr_len+2, "OEM domain name: %s", ustr);
} else {
- proto_tree_add_item(tree, offset, strlen(str)+1, "OEM domain name: %s", str);
+ proto_tree_add_text(tree, offset, strlen(str)+1, "OEM domain name: %s", str);
}
}
@@ -1894,7 +1887,7 @@ dissect_negprot_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tr
default: /* Baddd */
if (tree)
- proto_tree_add_item(tree, offset, 1, "Bad format, should never get here");
+ proto_tree_add_text(tree, offset, 1, "Bad format, should never get here");
return;
}
@@ -1918,7 +1911,7 @@ dissect_deletedir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -1930,7 +1923,7 @@ dissect_deletedir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -1942,7 +1935,7 @@ dissect_deletedir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Buffer Format: %u", BufferFormat);
+ proto_tree_add_text(tree, offset, 1, "Buffer Format: %u", BufferFormat);
}
@@ -1954,7 +1947,7 @@ dissect_deletedir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(DirectoryName) + 1, "Directory Name: %s", DirectoryName);
+ proto_tree_add_text(tree, offset, strlen(DirectoryName) + 1, "Directory Name: %s", DirectoryName);
}
@@ -1970,7 +1963,7 @@ dissect_deletedir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -1982,7 +1975,7 @@ dissect_deletedir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -2009,7 +2002,7 @@ dissect_createdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -2021,7 +2014,7 @@ dissect_createdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -2033,7 +2026,7 @@ dissect_createdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Buffer Format: %u", BufferFormat);
+ proto_tree_add_text(tree, offset, 1, "Buffer Format: %u", BufferFormat);
}
@@ -2045,7 +2038,7 @@ dissect_createdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, strlen(DirectoryName) + 1, "Directory Name: %s", DirectoryName);
+ proto_tree_add_text(tree, offset, strlen(DirectoryName) + 1, "Directory Name: %s", DirectoryName);
}
@@ -2061,7 +2054,7 @@ dissect_createdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -2073,7 +2066,7 @@ dissect_createdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -2100,7 +2093,7 @@ dissect_checkdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *t
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -2112,7 +2105,7 @@ dissect_checkdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *t
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -2124,7 +2117,7 @@ dissect_checkdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *t
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Buffer Format: %u", BufferFormat);
+ proto_tree_add_text(tree, offset, 1, "Buffer Format: %u", BufferFormat);
}
@@ -2136,7 +2129,7 @@ dissect_checkdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *t
if (tree) {
- proto_tree_add_item(tree, offset, strlen(DirectoryName) + 1, "Directory Name: %s", DirectoryName);
+ proto_tree_add_text(tree, offset, strlen(DirectoryName) + 1, "Directory Name: %s", DirectoryName);
}
@@ -2152,7 +2145,7 @@ dissect_checkdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *t
if (tree) {
- proto_tree_add_item(tree, offset, 1, "Word Count (WCT): %u", WordCount);
+ proto_tree_add_text(tree, offset, 1, "Word Count (WCT): %u", WordCount);
}
@@ -2164,7 +2157,7 @@ dissect_checkdir_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *t
if (tree) {
- proto_tree_add_item(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
+ proto_tree_add_text(tree, offset, 2, "Byte Count (BCC): %u", ByteCount);
}
@@ -2609,17 +2602,16 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Server Message Block Protocol");
- smb_tree = proto_tree_new();
- proto_item_add_subtree(ti, smb_tree, ETT_SMB);
+ smb_tree = proto_item_add_subtree(ti, ETT_SMB);
/* 0xFFSMB is actually a 1 byte msg type and 3 byte server
* component ... SMB is only one used
*/
- proto_tree_add_item(smb_tree, offset, 1, "Message Type: 0xFF");
- proto_tree_add_item(smb_tree, offset+1, 3, "Server Component: SMB");
+ proto_tree_add_text(smb_tree, offset, 1, "Message Type: 0xFF");
+ proto_tree_add_text(smb_tree, offset+1, 3, "Server Component: SMB");
}
@@ -2627,7 +2619,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 1, "Command: %s", decode_smb_name(cmd));
+ proto_tree_add_text(smb_tree, offset, 1, "Command: %s", decode_smb_name(cmd));
}
@@ -2639,7 +2631,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 1, "Error Class: %s",
+ proto_tree_add_text(smb_tree, offset, 1, "Error Class: %s",
val_to_str((guint8)pd[offset], errcls_types, "Unknown Error Class (%x)"));
}
@@ -2651,7 +2643,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 1, "Reserved: %i", errcode1);
+ proto_tree_add_text(smb_tree, offset, 1, "Reserved: %i", errcode1);
}
@@ -2661,7 +2653,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 2, "Error Code: %s",
+ proto_tree_add_text(smb_tree, offset, 2, "Error Code: %s",
decode_smb_error(errcls, errcode));
}
@@ -2674,36 +2666,35 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- tf = proto_tree_add_item(smb_tree, offset, 1, "Flags: 0x%02x", flags);
+ tf = proto_tree_add_text(smb_tree, offset, 1, "Flags: 0x%02x", flags);
- flags_tree = proto_tree_new();
- proto_item_add_subtree(tf, flags_tree, ETT_SMB_FLAGS);
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ flags_tree = proto_item_add_subtree(tf, ETT_SMB_FLAGS);
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, 0x01, 8,
"Lock&Read, Write&Unlock supported",
"Lock&Read, Write&Unlock not supported"));
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, 0x02, 8,
"Receive buffer posted",
"Receive buffer not posted"));
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, 0x08, 8,
"Path names caseless",
"Path names case sensitive"));
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, 0x10, 8,
"Pathnames canonicalized",
"Pathnames not canonicalized"));
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, 0x20, 8,
"OpLocks requested/granted",
"OpLocks not requested/granted"));
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, 0x40, 8,
"Notify all",
"Notify open only"));
- proto_tree_add_item(flags_tree, offset, 1, "%s",
+ proto_tree_add_text(flags_tree, offset, 1, "%s",
decode_boolean_bitfield(flags, SMB_FLAGS_DIRN,
8, "Response to client/redirector", "Request to server"));
@@ -2715,39 +2706,38 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- tf = proto_tree_add_item(smb_tree, offset, 1, "Flags2: 0x%04x", flags2);
+ tf = proto_tree_add_text(smb_tree, offset, 1, "Flags2: 0x%04x", flags2);
- flags2_tree = proto_tree_new();
- proto_item_add_subtree(tf, flags2_tree, ETT_SMB_FLAGS2);
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ flags2_tree = proto_item_add_subtree(tf, ETT_SMB_FLAGS2);
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x0001, 16,
"Long file names supported",
"Long file names not supported"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x0002, 16,
"Extended attributes supported",
"Extended attributes not supported"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x0004, 16,
"Security signatures supported",
"Security signatures not supported"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x0800, 16,
"Extended security negotiation supported",
"Extended security negotiation not supported"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x1000, 16,
"Resolve pathnames with DFS",
"Don't resolve pathnames with DFS"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x2000, 16,
"Permit reads if execute-only",
"Don't permit reads if execute-only"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x4000, 16,
"Error codes are NT error codes",
"Error codes are DOS error codes"));
- proto_tree_add_item(flags2_tree, offset, 1, "%s",
+ proto_tree_add_text(flags2_tree, offset, 1, "%s",
decode_boolean_bitfield(flags2, 0x8000, 16,
"Strings are Unicode",
"Strings are ASCII"));
@@ -2758,7 +2748,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 12, "Reserved: 6 WORDS");
+ proto_tree_add_text(smb_tree, offset, 12, "Reserved: 6 WORDS");
}
@@ -2770,7 +2760,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 2, "Network Path/Tree ID (TID): %i (%04x)", tid, tid);
+ proto_tree_add_text(smb_tree, offset, 2, "Network Path/Tree ID (TID): %i (%04x)", tid, tid);
}
@@ -2782,7 +2772,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 2, "Process ID (PID): %i (%04x)", pid, pid);
+ proto_tree_add_text(smb_tree, offset, 2, "Process ID (PID): %i (%04x)", pid, pid);
}
@@ -2794,7 +2784,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 2, "User ID (UID): %i (%04x)", uid, uid);
+ proto_tree_add_text(smb_tree, offset, 2, "User ID (UID): %i (%04x)", uid, uid);
}
@@ -2806,7 +2796,7 @@ dissect_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, int
if (tree) {
- proto_tree_add_item(smb_tree, offset, 2, "Multiplex ID (MID): %i (%04x)", mid, mid);
+ proto_tree_add_text(smb_tree, offset, 2, "Multiplex ID (MID): %i (%04x)", mid, mid);
}
diff --git a/packet-snmp.c b/packet-snmp.c
index cb898d72cb..d7edc838e8 100644
--- a/packet-snmp.c
+++ b/packet-snmp.c
@@ -2,7 +2,7 @@
* Routines for SNMP (simple network management protocol)
* D.Jorand (c) 1998
*
- * $Id: packet-snmp.c,v 1.3 1999/06/12 04:17:19 guy Exp $
+ * $Id: packet-snmp.c,v 1.4 1999/07/07 22:51:54 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -452,18 +452,17 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if(tree) {
/* all_length=header_length+pdu_type_length+request_id_length+error_status_length+error_index_length; */
all_length=fd->pkt_len-offset;
- item = proto_tree_add_item(tree, offset, all_length, "Simple Network Management Protocol");
- snmp_tree = proto_tree_new();
- proto_item_add_subtree(item, snmp_tree, ETT_SNMP);
- proto_tree_add_item(snmp_tree, offset, header_length, "Community: \"%s\", Version: %s", community, val_to_str(version, versions, "Unknown version %#x"));
+ item = proto_tree_add_text(tree, offset, all_length, "Simple Network Management Protocol");
+ snmp_tree = proto_item_add_subtree(item, ETT_SNMP);
+ proto_tree_add_text(snmp_tree, offset, header_length, "Community: \"%s\", Version: %s", community, val_to_str(version, versions, "Unknown version %#x"));
offset+=header_length;
- proto_tree_add_item(snmp_tree, offset, pdu_type_length, "%s", pdu_type_string);
+ proto_tree_add_text(snmp_tree, offset, pdu_type_length, "%s", pdu_type_string);
offset+=pdu_type_length;
- proto_tree_add_item(snmp_tree, offset, request_id_length, "Request Id.: %#x", (unsigned int)request_id);
+ proto_tree_add_text(snmp_tree, offset, request_id_length, "Request Id.: %#x", (unsigned int)request_id);
offset+=request_id_length;
- proto_tree_add_item(snmp_tree, offset, error_status_length, "Error Status: %s", val_to_str(error_status, error_statuses, "Unknown (%d)"));
+ proto_tree_add_text(snmp_tree, offset, error_status_length, "Error Status: %s", val_to_str(error_status, error_statuses, "Unknown (%d)"));
offset+=error_status_length;
- proto_tree_add_item(snmp_tree, offset, error_index_length, "Error Index: %d", (int)error_index);
+ proto_tree_add_text(snmp_tree, offset, error_index_length, "Error Index: %d", (int)error_index);
offset+=error_index_length;
} else {
offset+=header_length;
@@ -481,12 +480,11 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
col_add_str(fd, COL_INFO, pdu_type_string);
if(tree) {
all_length=fd->pkt_len-offset;
- item = proto_tree_add_item(tree, offset, all_length, "Simple Network Management Protocol");
- snmp_tree = proto_tree_new();
- proto_item_add_subtree(item, snmp_tree, ETT_SNMP);
- proto_tree_add_item(snmp_tree, offset, header_length, "Community: \"%s\", Version: %s", community, val_to_str(version, versions, "Unknown version %#x"));
+ item = proto_tree_add_text(tree, offset, all_length, "Simple Network Management Protocol");
+ snmp_tree = proto_item_add_subtree(item, ETT_SNMP);
+ proto_tree_add_text(snmp_tree, offset, header_length, "Community: \"%s\", Version: %s", community, val_to_str(version, versions, "Unknown version %#x"));
offset+=header_length;
- proto_tree_add_item(snmp_tree, offset, pdu_type_length, "Pdu type: %s", pdu_type_string);
+ proto_tree_add_text(snmp_tree, offset, pdu_type_length, "Pdu type: %s", pdu_type_string);
offset+=pdu_type_length;
} else {
offset+=header_length;
@@ -510,7 +508,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
strcat(vb_string,tmp_string);
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Enterprise: %s", vb_string);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Enterprise: %s", vb_string);
}
offset+=tmp_length;
@@ -525,7 +523,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
tmp_length-=length;
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Agent address: %d.%d.%d.%d",
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Agent address: %d.%d.%d.%d",
vb_string_value[0],vb_string_value[1],vb_string_value[2],vb_string_value[3]);
}
offset+=tmp_length;
@@ -540,7 +538,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
tmp_length-=length;
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Trap type: %s", val_to_str(trap_type, trap_types, "Unknown (%d)"));
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Trap type: %s", val_to_str(trap_type, trap_types, "Unknown (%d)"));
}
offset+=tmp_length;
@@ -554,7 +552,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
tmp_length-=length;
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Specific trap type: %ld (%#lx)", (long)specific_type, (long)specific_type);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Specific trap type: %ld (%#lx)", (long)specific_type, (long)specific_type);
}
offset+=tmp_length;
@@ -568,7 +566,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
}
tmp_length-=length;
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Timestamp: %lu", (unsigned long)timestamp);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Timestamp: %lu", (unsigned long)timestamp);
}
offset+=tmp_length;
}
@@ -640,7 +638,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
sprint_objid(vb_string2, vb_name, vb_name_length);
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Object identifier %d: %s (%s)", vb_index, vb_string, vb_string2);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Object identifier %d: %s (%s)", vb_index, vb_string, vb_string2);
}
offset+=tmp_length;
@@ -664,7 +662,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: NULL");
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: NULL");
}
offset+=tmp_length;
break;
@@ -679,7 +677,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <i> %ld (%#lx)", (long)vb_integer_value, (long)vb_integer_value);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <i> %ld (%#lx)", (long)vb_integer_value, (long)vb_integer_value);
}
offset+=tmp_length;
break;
@@ -697,7 +695,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <u> %lu (%#lx)", (unsigned long)vb_unsigned_value, (unsigned long)vb_unsigned_value);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <u> %lu (%#lx)", (unsigned long)vb_unsigned_value, (unsigned long)vb_unsigned_value);
}
offset+=tmp_length;
break;
@@ -718,7 +716,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <i64> %lu:%lu (%#lx:%lx)",
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <i64> %lu:%lu (%#lx:%lx)",
vb_counter64_value.high,
vb_counter64_value.low,
vb_counter64_value.high,
@@ -744,7 +742,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
sprintf(tmp_string, OID_FORMAT_STRING1, vb_oid_value[i]);
strcat(vb_string,tmp_string);
}
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <oid> %s", vb_string);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <oid> %s", vb_string);
}
offset+=tmp_length;
break;
@@ -774,9 +772,9 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
sprintf(tmp_string, ".%03d", (int)vb_string_value[i]);
strcat(vb_string,tmp_string);
}
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <str> %s", vb_string);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <str> %s", vb_string);
}else {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <str> %s", vb_string_value);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <str> %s", vb_string_value);
}
}
offset+=tmp_length;
@@ -793,7 +791,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <i64> %ld:%lu (%#lx:%lx)",
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <i64> %ld:%lu (%#lx:%lx)",
vb_counter64_value.high,
vb_counter64_value.low,
vb_counter64_value.high,
@@ -813,7 +811,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <f> %f", (double)vb_float_value);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <f> %f", (double)vb_float_value);
}
offset+=tmp_length;
break;
@@ -828,7 +826,7 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
return;
}
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <d> %f", vb_double_value);
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <d> %f", vb_double_value);
}
offset+=tmp_length;
break;
@@ -836,17 +834,17 @@ dissect_snmp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
case SNMP_NOSUCHOBJECT:
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <err> no such object");
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <err> no such object");
}
break;
case SNMP_NOSUCHINSTANCE:
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <err> no such instance");
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <err> no such instance");
}
break;
case SNMP_ENDOFMIBVIEW:
if(tree) {
- proto_tree_add_item(snmp_tree, offset, tmp_length, "Value: <err> end of mib view");
+ proto_tree_add_text(snmp_tree, offset, tmp_length, "Value: <err> end of mib view");
}
break;
diff --git a/packet-tcp.c b/packet-tcp.c
index f9534a9322..371d9feed3 100644
--- a/packet-tcp.c
+++ b/packet-tcp.c
@@ -1,7 +1,7 @@
/* packet-tcp.c
* Routines for TCP packet disassembly
*
- * $Id: packet-tcp.c,v 1.25 1999/07/07 00:34:57 guy Exp $
+ * $Id: packet-tcp.c,v 1.26 1999/07/07 22:51:55 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -144,7 +144,7 @@ static void
dissect_tcpopt_maxseg(proto_tree *opt_tree, const char *name, const u_char *opd,
int offset, guint optlen)
{
- proto_tree_add_item(opt_tree, offset, optlen,
+ proto_tree_add_text(opt_tree, offset, optlen,
"%s: %u bytes", name, pntohs(opd));
tcp_info_append_uint("MSS", pntohs(opd));
}
@@ -153,7 +153,7 @@ static void
dissect_tcpopt_wscale(proto_tree *opt_tree, const char *name, const u_char *opd,
int offset, guint optlen)
{
- proto_tree_add_item(opt_tree, offset, optlen,
+ proto_tree_add_text(opt_tree, offset, optlen,
"%s: %u bytes", name, *opd);
tcp_info_append_uint("WS", *opd);
}
@@ -166,17 +166,16 @@ dissect_tcpopt_sack(proto_tree *opt_tree, const char *name, const u_char *opd,
proto_item *tf;
guint leftedge, rightedge;
- tf = proto_tree_add_item(opt_tree, offset, optlen, "%s:", name);
+ tf = proto_tree_add_text(opt_tree, offset, optlen, "%s:", name);
offset += 2; /* skip past type and length */
optlen -= 2; /* subtract size of type and length */
while (optlen > 0) {
if (field_tree == NULL) {
/* Haven't yet made a subtree out of this option. Do so. */
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_TCP_OPTION_SACK);
+ field_tree = proto_item_add_subtree(tf, ETT_TCP_OPTION_SACK);
}
if (optlen < 4) {
- proto_tree_add_item(field_tree, offset, optlen,
+ proto_tree_add_text(field_tree, offset, optlen,
"(suboption would go past end of option)");
break;
}
@@ -185,7 +184,7 @@ dissect_tcpopt_sack(proto_tree *opt_tree, const char *name, const u_char *opd,
opd += 4;
optlen -= 4;
if (optlen < 4) {
- proto_tree_add_item(field_tree, offset, optlen,
+ proto_tree_add_text(field_tree, offset, optlen,
"(suboption would go past end of option)");
break;
}
@@ -193,7 +192,7 @@ dissect_tcpopt_sack(proto_tree *opt_tree, const char *name, const u_char *opd,
rightedge = pntohl(opd);
opd += 4;
optlen -= 4;
- proto_tree_add_item(field_tree, offset, 8,
+ proto_tree_add_text(field_tree, offset, 8,
"left edge = %u, right edge = %u", leftedge, rightedge);
tcp_info_append_uint("SLE", leftedge);
tcp_info_append_uint("SRE", rightedge);
@@ -205,7 +204,7 @@ static void
dissect_tcpopt_echo(proto_tree *opt_tree, const char *name, const u_char *opd,
int offset, guint optlen)
{
- proto_tree_add_item(opt_tree, offset, optlen,
+ proto_tree_add_text(opt_tree, offset, optlen,
"%s: %u", name, pntohl(opd));
tcp_info_append_uint("ECHO", pntohl(opd));
}
@@ -214,7 +213,7 @@ static void
dissect_tcpopt_timestamp(proto_tree *opt_tree, const char *name,
const u_char *opd, int offset, guint optlen)
{
- proto_tree_add_item(opt_tree, offset, optlen,
+ proto_tree_add_text(opt_tree, offset, optlen,
"%s: tsval %u, tsecr %u", name, pntohl(opd), pntohl(opd + 4));
tcp_info_append_uint("TSV", pntohl(opd));
tcp_info_append_uint("TSER", pntohl(opd + 4));
@@ -224,7 +223,7 @@ static void
dissect_tcpopt_cc(proto_tree *opt_tree, const char *name, const u_char *opd,
int offset, guint optlen)
{
- proto_tree_add_item(opt_tree, offset, optlen,
+ proto_tree_add_text(opt_tree, offset, optlen,
"%s: %u", name, pntohl(opd));
tcp_info_append_uint("CC", pntohl(opd));
}
@@ -389,45 +388,43 @@ dissect_tcp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, hlen,
+ ti = proto_tree_add_text(tree, offset, hlen,
"Transmission Control Protocol");
- tcp_tree = proto_tree_new();
- proto_item_add_subtree(ti, tcp_tree, ETT_TCP);
- proto_tree_add_item(tcp_tree, offset, 2, "Source port: %s (%u)",
+ tcp_tree = proto_item_add_subtree(ti, ETT_TCP);
+ proto_tree_add_text(tcp_tree, offset, 2, "Source port: %s (%u)",
get_tcp_port(th.th_sport), th.th_sport);
- proto_tree_add_item(tcp_tree, offset + 2, 2, "Destination port: %s (%u)",
+ proto_tree_add_text(tcp_tree, offset + 2, 2, "Destination port: %s (%u)",
get_tcp_port(th.th_dport), th.th_dport);
- proto_tree_add_item(tcp_tree, offset + 4, 4, "Sequence number: %u",
+ proto_tree_add_text(tcp_tree, offset + 4, 4, "Sequence number: %u",
th.th_seq);
if (th.th_flags & TH_ACK)
- proto_tree_add_item(tcp_tree, offset + 8, 4, "Acknowledgement number: %u",
+ proto_tree_add_text(tcp_tree, offset + 8, 4, "Acknowledgement number: %u",
th.th_ack);
- proto_tree_add_item(tcp_tree, offset + 12, 1, "Header length: %u bytes", hlen);
- tf = proto_tree_add_item(tcp_tree, offset + 13, 1, "Flags: 0x%x", th.th_flags);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_TCP_FLAGS);
- proto_tree_add_item(field_tree, offset + 13, 1, "%s",
+ proto_tree_add_text(tcp_tree, offset + 12, 1, "Header length: %u bytes", hlen);
+ tf = proto_tree_add_text(tcp_tree, offset + 13, 1, "Flags: 0x%x", th.th_flags);
+ field_tree = proto_item_add_subtree(tf, ETT_TCP_FLAGS);
+ proto_tree_add_text(field_tree, offset + 13, 1, "%s",
decode_boolean_bitfield(th.th_flags, TH_URG, sizeof (th.th_flags)*8,
"Urgent pointer", "No urgent pointer"));
- proto_tree_add_item(field_tree, offset + 13, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 13, 1, "%s",
decode_boolean_bitfield(th.th_flags, TH_ACK, sizeof (th.th_flags)*8,
"Acknowledgment", "No acknowledgment"));
- proto_tree_add_item(field_tree, offset + 13, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 13, 1, "%s",
decode_boolean_bitfield(th.th_flags, TH_PUSH, sizeof (th.th_flags)*8,
"Push", "No push"));
- proto_tree_add_item(field_tree, offset + 13, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 13, 1, "%s",
decode_boolean_bitfield(th.th_flags, TH_RST, sizeof (th.th_flags)*8,
"Reset", "No reset"));
- proto_tree_add_item(field_tree, offset + 13, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 13, 1, "%s",
decode_boolean_bitfield(th.th_flags, TH_SYN, sizeof (th.th_flags)*8,
"Syn", "No Syn"));
- proto_tree_add_item(field_tree, offset + 13, 1, "%s",
+ proto_tree_add_text(field_tree, offset + 13, 1, "%s",
decode_boolean_bitfield(th.th_flags, TH_FIN, sizeof (th.th_flags)*8,
"Fin", "No Fin"));
- proto_tree_add_item(tcp_tree, offset + 14, 2, "Window size: %u", th.th_win);
- proto_tree_add_item(tcp_tree, offset + 16, 2, "Checksum: 0x%04x", th.th_sum);
+ proto_tree_add_text(tcp_tree, offset + 14, 2, "Window size: %u", th.th_win);
+ proto_tree_add_text(tcp_tree, offset + 16, 2, "Checksum: 0x%04x", th.th_sum);
if (th.th_flags & TH_URG)
- proto_tree_add_item(tcp_tree, offset + 18, 2, "Urgent pointer: 0x%04x",
+ proto_tree_add_text(tcp_tree, offset + 18, 2, "Urgent pointer: 0x%04x",
th.th_urp);
}
@@ -436,10 +433,9 @@ dissect_tcp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
/* There's more than just the fixed-length header. Decode the
options. */
optlen = hlen - sizeof (e_tcphdr); /* length of options, in bytes */
- tf = proto_tree_add_item(tcp_tree, offset + 20, optlen,
+ tf = proto_tree_add_text(tcp_tree, offset + 20, optlen,
"Options: (%d bytes)", optlen);
- field_tree = proto_tree_new();
- proto_item_add_subtree(tf, field_tree, ETT_TCP_OPTIONS);
+ field_tree = proto_item_add_subtree(tf, ETT_TCP_OPTIONS);
dissect_ip_tcp_options(field_tree, &pd[offset + 20], offset + 20, optlen,
tcpopts, N_TCP_OPTS, TCPOPT_EOL);
}
diff --git a/packet-telnet.c b/packet-telnet.c
index 8a9256f67b..0f8d120496 100644
--- a/packet-telnet.c
+++ b/packet-telnet.c
@@ -2,7 +2,7 @@
* Routines for telnet packet dissection
* Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
*
- * $Id: packet-telnet.c,v 1.2 1999/04/05 23:39:51 guy Exp $
+ * $Id: packet-telnet.c,v 1.3 1999/07/07 22:51:55 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -139,18 +139,16 @@ void telnet_sub_option(proto_tree *telnet_tree, char *rr, int *i, int offset, in
subneg_len = i1 - *i + 2;
- ti = proto_tree_add_item(telnet_tree, offset, subneg_len, "Suboption Begin: %s", opt);
+ ti = proto_tree_add_text(telnet_tree, offset, subneg_len, "Suboption Begin: %s", opt);
- option_tree = proto_tree_new();
+ option_tree = proto_item_add_subtree(ti, ETT_TELNET_SUBOPT);
- proto_item_add_subtree(ti, option_tree, ETT_TELNET_SUBOPT);
-
- proto_tree_add_item(option_tree, offset + 2, subneg_len - 2, "%s %s", (req ? "Send your" : "Here's my"), opt);
+ proto_tree_add_text(option_tree, offset + 2, subneg_len - 2, "%s %s", (req ? "Send your" : "Here's my"), opt);
if (req == 0) { /* Add the value */
memcpy(sub_opt_data, rr + *i + 2, subneg_len - 2);
- proto_tree_add_item(option_tree, offset + 4, subneg_len - 4, "Value: %s", format_text(sub_opt_data, subneg_len - 4));
+ proto_tree_add_text(option_tree, offset + 4, subneg_len - 4, "Value: %s", format_text(sub_opt_data, subneg_len - 4));
*i += subneg_len - 2;
}
@@ -169,85 +167,85 @@ void telnet_command(proto_tree *telnet_tree, char *rr, int *i, int offset, int m
case TN_EOF:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: End of File");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: End of File");
(*i)++;
break;
case TN_SUSP:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Suspend Current Process");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Suspend Current Process");
(*i)++;
break;
case TN_ABORT:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Abort Process");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Abort Process");
(*i)++;
break;
case TN_EOR:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: End of Record");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: End of Record");
(*i)++;
break;
case TN_SE:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Suboption End");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Suboption End");
(*i)++;
break;
case TN_NOP:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: No Operation");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: No Operation");
(*i)++;
break;
case TN_DM:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Data Mark");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Data Mark");
(*i)++;
break;
case TN_BRK:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Break");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Break");
(*i)++;
break;
case TN_IP:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Interrupt Process");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Interrupt Process");
(*i)++;
break;
case TN_AO:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Abort Output");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Abort Output");
(*i)++;
break;
case TN_AYT:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Are You There?");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Are You There?");
(*i)++;
break;
case TN_EC:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Escape Character");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Escape Character");
(*i)++;
break;
case TN_EL:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Erase Line");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Erase Line");
(*i)++;
break;
case TN_GA:
- proto_tree_add_item(telnet_tree, offset, 2, "Command: Go Ahead");
+ proto_tree_add_text(telnet_tree, offset, 2, "Command: Go Ahead");
(*i)++;
break;
@@ -264,7 +262,7 @@ void telnet_command(proto_tree *telnet_tree, char *rr, int *i, int offset, int m
else
opt = options[(unsigned int)rr[*i + 1]];
- proto_tree_add_item(telnet_tree, offset, 3, "Command: Will %s", opt);
+ proto_tree_add_text(telnet_tree, offset, 3, "Command: Will %s", opt);
*i += 2; /* skip two chars */
break;
@@ -275,7 +273,7 @@ void telnet_command(proto_tree *telnet_tree, char *rr, int *i, int offset, int m
else
opt = options[(unsigned int)rr[*i + 1]];
- proto_tree_add_item(telnet_tree, offset, 3, "Command: Won't %s", opt);
+ proto_tree_add_text(telnet_tree, offset, 3, "Command: Won't %s", opt);
*i += 2; /* skip two chars */
break;
@@ -286,7 +284,7 @@ void telnet_command(proto_tree *telnet_tree, char *rr, int *i, int offset, int m
else
opt = options[(unsigned int)rr[*i + 1]];
- proto_tree_add_item(telnet_tree, offset, 3, "Command: Do %s", opt);
+ proto_tree_add_text(telnet_tree, offset, 3, "Command: Do %s", opt);
*i += 2; /* skip two chars */
break;
@@ -297,7 +295,7 @@ void telnet_command(proto_tree *telnet_tree, char *rr, int *i, int offset, int m
else
opt = options[(unsigned int)rr[*i + 1]];
- proto_tree_add_item(telnet_tree, offset, 3, "Command: Don't %s", opt);
+ proto_tree_add_text(telnet_tree, offset, 3, "Command: Don't %s", opt);
*i += 2; /* skip two chars */
break;
@@ -333,10 +331,9 @@ dissect_telnet(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, i
memcpy(rr, pd + offset, max_data);
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Telnet Protocol");
- telnet_tree = proto_tree_new();
- proto_item_add_subtree(ti, telnet_tree, ETT_TELNET);
+ telnet_tree = proto_item_add_subtree(ti, ETT_TELNET);
i1 = i2 = i3 = 0;
@@ -346,7 +343,7 @@ dissect_telnet(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, i
if (strlen(data) > 0) {
- proto_tree_add_item(telnet_tree, offset + i2, strlen(data), "Data: %s", format_text(data, strlen(data)));
+ proto_tree_add_text(telnet_tree, offset + i2, strlen(data), "Data: %s", format_text(data, strlen(data)));
memset(data, '\0', sizeof(data));
i3 = 0;
@@ -369,7 +366,7 @@ dissect_telnet(const u_char *pd, int offset, frame_data *fd, proto_tree *tree, i
if (strlen(data) > 0) { /* Still some data to add */
- proto_tree_add_item(telnet_tree, offset + i2, strlen(data), "Data: %s", format_text(data, strlen(data)));
+ proto_tree_add_text(telnet_tree, offset + i2, strlen(data), "Data: %s", format_text(data, strlen(data)));
}
diff --git a/packet-tftp.c b/packet-tftp.c
index de1cb3eb1f..221ef1ae9e 100644
--- a/packet-tftp.c
+++ b/packet-tftp.c
@@ -3,7 +3,7 @@
*
* Richard Sharpe <rsharpe@ns.aus.com>
*
- * $Id: packet-tftp.c,v 1.3 1999/05/13 05:46:04 guy Exp $
+ * $Id: packet-tftp.c,v 1.4 1999/07/07 22:51:56 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -88,55 +88,54 @@ dissect_tftp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
if (tree) {
- ti = proto_tree_add_item(tree, offset, END_OF_FRAME,
+ ti = proto_tree_add_text(tree, offset, END_OF_FRAME,
"Trivial File Transfer Protocol");
- tftp_tree = proto_tree_new();
- proto_item_add_subtree(ti, tftp_tree, ETT_TFTP);
+ tftp_tree = proto_item_add_subtree(ti, ETT_TFTP);
switch (i1 = pntohs(pd+offset)) {
case RRQ:
- proto_tree_add_item(tftp_tree, offset, 2, "Read Request");
+ proto_tree_add_text(tftp_tree, offset, 2, "Read Request");
offset += 2;
i1 = strlen(pd+offset);
- proto_tree_add_item(tftp_tree, offset, i1+1, "Source File: %s", pd+offset);
+ proto_tree_add_text(tftp_tree, offset, i1+1, "Source File: %s", pd+offset);
offset += i1 + 1;
- proto_tree_add_item(tftp_tree, offset, END_OF_FRAME, "Type: %s",pd+offset);
+ proto_tree_add_text(tftp_tree, offset, END_OF_FRAME, "Type: %s",pd+offset);
break;
case WRQ:
- proto_tree_add_item(tftp_tree, offset, 2, "Write Request");
+ proto_tree_add_text(tftp_tree, offset, 2, "Write Request");
offset += 2;
i1 = strlen(pd+offset);
- proto_tree_add_item(tftp_tree, offset, i1+1, "Destination File: %s", pd+offset);
+ proto_tree_add_text(tftp_tree, offset, i1+1, "Destination File: %s", pd+offset);
offset += i1 + 1;
- proto_tree_add_item(tftp_tree, offset+2, END_OF_FRAME, "Type: %s",pd+offset);
+ proto_tree_add_text(tftp_tree, offset+2, END_OF_FRAME, "Type: %s",pd+offset);
break;
case DATA:
- proto_tree_add_item(tftp_tree, offset, 2, "Data Packet");
+ proto_tree_add_text(tftp_tree, offset, 2, "Data Packet");
offset += 2;
i1 = pntohs(pd+offset);
- proto_tree_add_item(tftp_tree, offset, 2, "Block = %u", i1);
+ proto_tree_add_text(tftp_tree, offset, 2, "Block = %u", i1);
offset += 2;
- proto_tree_add_item(tftp_tree, offset, END_OF_FRAME,
+ proto_tree_add_text(tftp_tree, offset, END_OF_FRAME,
"Data (%d bytes)", END_OF_FRAME);
break;
case ACK:
- proto_tree_add_item(tftp_tree, offset, 2, "Acknowledgement");
+ proto_tree_add_text(tftp_tree, offset, 2, "Acknowledgement");
offset += 2;
i1 = pntohs(pd+offset);
- proto_tree_add_item(tftp_tree, offset, END_OF_FRAME, "Block = %u", i1);
+ proto_tree_add_text(tftp_tree, offset, END_OF_FRAME, "Block = %u", i1);
break;
case ERROR:
- proto_tree_add_item(tftp_tree, offset, 2, "Error Code");
+ proto_tree_add_text(tftp_tree, offset, 2, "Error Code");
offset += 2;
i1 = pntohs(pd+offset);
- proto_tree_add_item(tftp_tree, offset, 2, "Code = %s", tftp_errors[i1 % 8]);
+ proto_tree_add_text(tftp_tree, offset, 2, "Code = %s", tftp_errors[i1 % 8]);
offset += 2;
- proto_tree_add_item(tftp_tree, offset, END_OF_FRAME, "Error Message: %s", pd + offset);
+ proto_tree_add_text(tftp_tree, offset, END_OF_FRAME, "Error Message: %s", pd + offset);
break;
default:
- proto_tree_add_item(tftp_tree, offset, 2, "Unknown TFTP Request: %0X.", i1);
+ proto_tree_add_text(tftp_tree, offset, 2, "Unknown TFTP Request: %0X.", i1);
offset += 2;
- proto_tree_add_item(tftp_tree, offset, END_OF_FRAME,
+ proto_tree_add_text(tftp_tree, offset, END_OF_FRAME,
"Data (%d bytes)", END_OF_FRAME);
break;
}
diff --git a/packet-tr.c b/packet-tr.c
index fce7be4279..a7eca11f17 100644
--- a/packet-tr.c
+++ b/packet-tr.c
@@ -2,7 +2,7 @@
* Routines for Token-Ring packet disassembly
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-tr.c,v 1.14 1999/06/16 20:14:51 gram Exp $
+ * $Id: packet-tr.c,v 1.15 1999/07/07 22:51:56 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -36,36 +36,85 @@
#include <glib.h>
#include "packet.h"
#include "etypes.h"
+
+int proto_tr = -1;
+int hf_tr_dst = -1;
+int hf_tr_src = -1;
+int hf_tr_dst_vendor = -1;
+int hf_tr_src_vendor = -1;
+int hf_tr_sr = -1;
+int hf_tr_ac = -1;
+int hf_tr_priority = -1;
+int hf_tr_frame = -1;
+int hf_tr_monitor_cnt = -1;
+int hf_tr_priority_reservation = -1;
+int hf_tr_fc = -1;
+int hf_tr_fc_type = -1;
+int hf_tr_fc_pcf = -1;
+int hf_tr_rif_bytes = -1;
+int hf_tr_broadcast = -1;
+int hf_tr_max_frame_size = -1;
+int hf_tr_direction = -1;
+int hf_tr_rif = -1;
+int hf_tr_rif_ring = -1;
+int hf_tr_rif_bridge = -1;
+
+static const value_string ac_vals[] = {
+ { 0, "Token" },
+ { 0x10, "Frame" },
+ { 0, NULL }
+};
+
+static const value_string pcf_vals[] = {
+ { 0, "Normal buffer" },
+ { 1, "Express buffer" },
+ { 2, "Purge" },
+ { 3, "Claim Token" },
+ { 4, "Beacon" },
+ { 5, "Active Monitor Present" },
+ { 6, "Standby Monitor Present" },
+ { 0, NULL },
+};
+
+static const value_string frame_vals[] = {
+ { 0, "MAC" },
+ { 64, "LLC" },
+ { 128, "Reserved" },
+ { 0, NULL },
+};
+
+static const value_string broadcast_vals[] = {
+ { 0 << 5, "Non-broadcast" },
+ { 1 << 5, "Non-broadcast" },
+ { 2 << 5, "Non-broadcast" },
+ { 3 << 5, "Non-broadcast" },
+ { 4 << 5, "All-routes broadcast" },
+ { 5 << 5, "All-routes broadcast" },
+ { 6 << 5, "Single-route broadcast" },
+ { 7 << 5, "Single-route broadcast" },
+ { 0, NULL }
+};
+
+static const value_string max_frame_size_vals[] = {
+ { 0, "516" },
+ { 1, "1500" },
+ { 2, "2052" },
+ { 3, "4472" },
+ { 4, "8144" },
+ { 5, "11407" },
+ { 6, "17800" },
+ { 0, NULL }
+};
+
+static const value_string direction_vals[] = {
+ { 0, "From originating station (-->)" },
+ { 128, "To originating station (<--)" },
+ { 0, NULL }
+};
static void
add_ring_bridge_pairs(int rcf_len, const u_char *pd, proto_tree *tree);
-static char*
-sr_broadcast(u_char val) {
-
- if (val < 4) {
- return "Non-broadcast";
- }
- else if (val < 6) {
- return "All-routes broadcast";
- }
- else {
- return "Single-route broadcast";
- }
-}
-
-static int
-sr_frame(u_char val) {
-
- int rc_frame[7] = { 516, 1500, 2052, 4472, 8144, 11407, 17800 };
-
- if (val > 6) {
- return -1;
- }
- else return rc_frame[val];
-}
-
-
void
capture_tr(const u_char *pd, guint32 cap_len, packet_counts *ld) {
@@ -115,10 +164,6 @@ capture_tr(const u_char *pd, guint32 cap_len, packet_counts *ld) {
source_routed = 1;
}
-/* else {
- printf("0e+%d = %02X 0f+%d = %02X\n", trn_rif_bytes, pd[0x0e + trn_rif_bytes],
- trn_rif_bytes, pd[0x0f + trn_rif_bytes]);
- } */
}
@@ -163,7 +208,7 @@ capture_tr(const u_char *pd, guint32 cap_len, packet_counts *ld) {
void
dissect_tr(const u_char *pd, frame_data *fd, proto_tree *tree) {
- proto_tree *fh_tree, *bf_tree;
+ proto_tree *tr_tree, *bf_tree;
proto_item *ti;
int offset = 14;
@@ -184,35 +229,9 @@ dissect_tr(const u_char *pd, frame_data *fd, proto_tree *tree) {
guint8 trn_shost_nonsr[6];
- static const value_string ac_vals[] = {
- { 0, "Token" },
- { 0x10, "Frame" },
- { 0, NULL }
- };
-
- static const value_string pcf_vals[] = {
- { 0, "Normal buffer" },
- { 1, "Express buffer" },
- { 2, "Purge" },
- { 3, "Claim Token" },
- { 4, "Beacon" },
- { 5, "Active Monitor Present" },
- { 6, "Standby Monitor Present" },
- { 0, NULL },
- };
-
- static const value_string frame_vals[] = {
- { 0, "MAC" },
- { 64, "LLC" },
- { 128, "Reserved" },
- { 0, NULL },
- };
/* Token-Ring Strings */
char *fc[] = { "MAC", "LLC", "Reserved", "Unknown" };
- char *rc_arrow[] = { "-->", "<--" };
- char *rc_direction[] = { "From originating station",
- "To originating station" };
/* get the data */
memcpy(&trn_ac, &pd[0], sizeof(guint8));
@@ -296,60 +315,61 @@ dissect_tr(const u_char *pd, frame_data *fd, proto_tree *tree) {
/* protocol analysis tree */
if (tree) {
- ti = proto_tree_add_item(tree, 0, 14 + actual_rif_bytes, "Token-Ring");
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_TOKEN_RING);
+ /* Create Token-Ring Tree */
+ ti = proto_tree_add_item(tree, proto_tr, 0, 14 + actual_rif_bytes, NULL);
+ tr_tree = proto_item_add_subtree(ti, ETT_TOKEN_RING);
- ti = proto_tree_add_item(fh_tree, 0, 1, "Access Control (0x%02x)", trn_ac);
- bf_tree = proto_tree_new();
- proto_item_add_subtree(ti, bf_tree, ETT_TOKEN_RING_AC);
+ /* Create the Access Control bitfield tree */
+ ti = proto_tree_add_item_format(tr_tree, hf_tr_ac, 0, 1, trn_ac,
+ "Access Control (0x%02x)", trn_ac);
+ bf_tree = proto_item_add_subtree(ti, ETT_TOKEN_RING_AC);
- proto_tree_add_item(bf_tree, 0, 1, "%s",
+ proto_tree_add_item_format(bf_tree, hf_tr_priority, 0, 1, trn_ac & 0xe0,
decode_numeric_bitfield(trn_ac, 0xe0, 8, "Priority = %d"));
- proto_tree_add_item(bf_tree, 0, 1, "%s",
+ proto_tree_add_item_format(bf_tree, hf_tr_frame, 0, 1, trn_ac & 0x10,
decode_enumerated_bitfield(trn_ac, 0x10, 8, ac_vals, "%s"));
- proto_tree_add_item(bf_tree, 0, 1, "%s",
+ proto_tree_add_item_format(bf_tree, hf_tr_monitor_cnt, 0, 1, trn_ac & 0x08,
decode_numeric_bitfield(trn_ac, 0x08, 8, "Monitor Count"));
- proto_tree_add_item(bf_tree, 0, 1, "%s",
+ proto_tree_add_item_format(bf_tree, hf_tr_priority_reservation, 0, 1, trn_ac & 0x07,
decode_numeric_bitfield(trn_ac, 0x07, 8, "Priority Reservation = %d"));
+ /* Create the Frame Control bitfield tree */
+ ti = proto_tree_add_item_format(tr_tree, hf_tr_fc, 1, 1, trn_fc,
+ "Frame Control (0x%02x)", trn_fc);
+ bf_tree = proto_item_add_subtree(ti, ETT_TOKEN_RING_FC);
- ti = proto_tree_add_item(fh_tree, 1, 1, "Frame Control (0x%02x)", trn_fc);
- bf_tree = proto_tree_new();
- proto_item_add_subtree(ti, bf_tree, ETT_TOKEN_RING_FC);
-
- proto_tree_add_item(bf_tree, 1, 1, "%s",
+ proto_tree_add_item_format(bf_tree, hf_tr_fc_type, 1, 1, trn_fc & 0xc0,
decode_enumerated_bitfield(trn_fc, 0xc0, 8, frame_vals, "%s"));
- proto_tree_add_item(bf_tree, 1, 1, "%s",
+ proto_tree_add_item_format(bf_tree, hf_tr_fc_pcf, 1, 1, trn_fc & 0x0f,
decode_enumerated_bitfield(trn_fc, 0x0f, 8, pcf_vals, "%s"));
- proto_tree_add_item(fh_tree, 2, 6, "Destination: %s",
- ether_to_str((guint8 *) trn_dhost));
- proto_tree_add_item(fh_tree, 8, 6, "Source: %s",
- ether_to_str((guint8 *) trn_shost));
+ proto_tree_add_item(tr_tree, hf_tr_dst, 2, 6, trn_dhost);
+ proto_tree_add_item_hidden(tr_tree, hf_tr_dst_vendor, 2, 3, trn_dhost);
+ proto_tree_add_item(tr_tree, hf_tr_src, 8, 6, trn_shost);
+ proto_tree_add_item_hidden(tr_tree, hf_tr_src_vendor, 8, 3, trn_shost);
+ proto_tree_add_item_hidden(tr_tree, hf_tr_sr, 8, 1, source_routed);
- if (source_routed) {
- proto_tree_add_item(fh_tree, 14, 1, "RIF length: %d bytes", trn_rif_bytes);
+ /* non-source-routed version of src addr */
+ proto_tree_add_item_hidden(tr_tree, hf_tr_src, 8, 6, trn_shost_nonsr);
+ proto_tree_add_item_hidden(tr_tree, hf_tr_src_vendor, 8, 3, trn_shost_nonsr);
- proto_tree_add_item(fh_tree, 15, 1,
- "%s, up to %d bytes in frame (LF=%d)",
- sr_broadcast((pd[14] & 224) >> 5),
- sr_frame((pd[15] & 112) >> 4),
- (pd[15] & 112) >> 4);
+ if (source_routed) {
+ /* RCF Byte 1 */
+ proto_tree_add_item(tr_tree, hf_tr_rif_bytes, 14, 1, trn_rif_bytes);
+ proto_tree_add_item(tr_tree, hf_tr_broadcast, 14, 1, pd[14] & 224);
- proto_tree_add_item(fh_tree, 15, 1,
- "Direction: %s (%s)",
- rc_direction[(pd[15] & 128) >> 7],
- rc_arrow[(pd[15] & 128) >> 7]);
+ /* RCF Byte 2 */
+ proto_tree_add_item(tr_tree, hf_tr_max_frame_size, 15, 1, pd[15] & 112);
+ proto_tree_add_item(tr_tree, hf_tr_direction, 15, 1, pd[15] & 128);
/* if we have more than 2 bytes of RIF, then we have
ring/bridge pairs */
if (trn_rif_bytes > 2) {
- add_ring_bridge_pairs(trn_rif_bytes, pd, fh_tree);
+ add_ring_bridge_pairs(trn_rif_bytes, pd, tr_tree);
}
}
@@ -363,24 +383,11 @@ dissect_tr(const u_char *pd, frame_data *fd, proto_tree *tree) {
tcpdump. W/o that, however, I'm guessing that DSAP == SSAP if the
frame type is LLC. It's very much a hack. -- Gilbert Ramirez */
if (actual_rif_bytes > trn_rif_bytes) {
- /*printf("trn_rif %d actual_rif %d\n", trn_rif_bytes, actual_rif_bytes);*/
- proto_tree_add_item(fh_tree, 14 + trn_rif_bytes, actual_rif_bytes - trn_rif_bytes,
+ proto_tree_add_text(tr_tree, 14 + trn_rif_bytes, actual_rif_bytes - trn_rif_bytes,
"Empty RIF from Linux 2.0.x driver. The sniffing NIC "
"is also running a protocol stack.");
}
- /*
- if (source_routed && (trn_rif_bytes == 2) && silly_linux) {
- proto_tree_add_item(fh_tree, 14 + trn_rif_bytes, 18 - actual_rif_bytes,
- "Empty RIF from Linux 2.0.x driver. The sniffing NIC "
- "is also running a protocol stack.");
- }
- else if ((!source_routed) && silly_linux ) {
- proto_tree_add_item(fh_tree, 14, 18,
- "Empty RIF from Linux 2.0.x driver. The sniffing NIC "
- "is also running a protocol stack.");
- }*/
}
-
/* The package is either MAC or LLC */
switch (frame_type) {
/* MAC */
@@ -416,17 +423,46 @@ add_ring_bridge_pairs(int rcf_len, const u_char *pd, proto_tree *tree)
if (j==1) {
segment=pntohs(&pd[16]) >> 4;
size = sprintf(buffer, "%03X",segment);
+ proto_tree_add_item_hidden(tree, hf_tr_rif_ring, 16, 2, segment);
buff_offset += size;
}
segment=pntohs(&pd[17+j]) >> 4;
brdgnmb=pd[16+j] & 0x0f;
size = sprintf(buffer+buff_offset, "-%01X-%03X",brdgnmb,segment);
+ proto_tree_add_item_hidden(tree, hf_tr_rif_ring, 17+j, 2, segment);
+ proto_tree_add_item_hidden(tree, hf_tr_rif_bridge, 16+j, 1, brdgnmb);
buff_offset += size;
}
+ proto_tree_add_item(tree, hf_tr_rif, 16, rcf_len << 1, buffer);
+}
- proto_tree_add_item(tree, 16, rcf_len << 1,
- "Ring-Bridge Pairs: %s",
- buffer);
+void
+proto_register_tr(void)
+{
+ const hf_register_info hf[] = {
+ { "Access Control", "tr.ac", &hf_tr_ac, FT_UINT8, NULL },
+ { "Priority", "tr.priority", &hf_tr_priority, FT_UINT8, NULL },
+ { "Frame", "tr.frame", &hf_tr_frame, FT_VALS_UINT8, VALS(ac_vals) },
+ { "Monitor Count", "tr.monitor_cnt", &hf_tr_monitor_cnt, FT_UINT8, NULL },
+ { "Priority Reservation","tr.priority_reservation", &hf_tr_priority_reservation, FT_UINT8, NULL },
+ { "Frame Control", "tr.fc", &hf_tr_fc, FT_UINT8, NULL },
+ { "Frame Type", "tr.frame_type", &hf_tr_fc_type, FT_VALS_UINT8, VALS(frame_vals) },
+ { "Frame PCF", "tr.frame_pcf", &hf_tr_fc_pcf, FT_VALS_UINT8, VALS(pcf_vals) },
+ { "Destination", "tr.dst", &hf_tr_dst, FT_ETHER, NULL },
+ { "Source", "tr.src", &hf_tr_src, FT_ETHER, NULL },
+ { "Destination Hardware Vendor", "tr.dst_vendor", &hf_tr_dst_vendor, FT_ETHER_VENDOR, NULL },
+ { "Source Hardware Vendor", "tr.src_vendor", &hf_tr_src_vendor, FT_ETHER_VENDOR, NULL },
+ { "Source Routed", "tr.sr", &hf_tr_sr, FT_BOOLEAN, NULL },
+ { "RIF Bytes", "tr.rif_bytes", &hf_tr_rif_bytes, FT_UINT8, NULL },
+ { "Broadcast Type", "tr.broadcast", &hf_tr_broadcast, FT_VALS_UINT8, VALS(broadcast_vals) },
+ { "Maximum Frame Size", "tr.max_frame_size", &hf_tr_max_frame_size, FT_VALS_UINT8, VALS(max_frame_size_vals) },
+ { "Direction", "tr.direction", &hf_tr_direction, FT_VALS_UINT8, VALS(direction_vals) },
+ { "Ring-Bridge Pairs", "tr.rif", &hf_tr_rif, FT_STRING, NULL },
+ { "RIF Ring", "tr.rif_ring", &hf_tr_rif_ring, FT_UINT16, NULL },
+ { "RIF Bridge", "tr.rif_bridge", &hf_tr_rif_bridge, FT_UINT8, NULL },
+ };
+ proto_tr = proto_register_protocol("Token-Ring", "tr");
+ proto_register_field_array(proto_tr, hf, array_length(hf));
}
diff --git a/packet-trmac.c b/packet-trmac.c
index 5bba8b17f2..ff58766fc8 100644
--- a/packet-trmac.c
+++ b/packet-trmac.c
@@ -2,7 +2,7 @@
* Routines for Token-Ring Media Access Control
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-trmac.c,v 1.11 1999/03/23 03:14:44 gram Exp $
+ * $Id: packet-trmac.c,v 1.12 1999/07/07 22:51:56 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@unicom.net>
@@ -81,161 +81,159 @@ sv_text(const u_char *pd, int pkt_offset, proto_tree *tree)
u_char errors[6]; /* isolating or non-isolating */
/* this just adds to the clutter on the screen...
- proto_tree_add_item(tree, pkt_offset, 1,
+ proto_tree_add_text(tree, pkt_offset, 1,
"Subvector Length: %d bytes", sv_length);*/
switch(pd[1]) {
case 0x01: /* Beacon Type */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Beacon Type: %s", beacon[ pntohs( &pd[2] ) ] );
break;
case 0x02: /* NAUN */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"NAUN: %s", ether_to_str((guint8*)&pd[2]));
break;
case 0x03: /* Local Ring Number */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Local Ring Number: 0x%04X (%d)",
pntohs( &pd[2] ), pntohs( &pd[2] ));
break;
case 0x04: /* Assign Physical Location */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Assign Physical Location: 0x%08X", pntohl( &pd[2] ) );
break;
case 0x05: /* Soft Error Report Value */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Soft Error Report Value: %d ms", 10 * pntohs( &pd[2] ) );
break;
case 0x06: /* Enabled Function Classes */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Enabled Function Classes: %04X", pntohs( &pd[2] ) );
break;
case 0x07: /* Allowed Access Priority */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Allowed Access Priority: %04X", pntohs( &pd[2] ) );
break;
case 0x09: /* Correlator */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Correlator: %04X", pntohs( &pd[2] ) );
break;
case 0x0A: /* Address of last neighbor notification */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Address of Last Neighbor Notification: %s",
ether_to_str((guint8*)&pd[2]));
break;
case 0x0B: /* Physical Location */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Physical Location: 0x%08X", pntohl( &pd[2] ) );
break;
case 0x20: /* Response Code */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Response Code: 0x%04X 0x%04X", pntohl( &pd[2] ),
pntohl( &pd[4] ) );
break;
case 0x21: /* Reserved */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Reserved: 0x%04X", pntohs( &pd[2] ) );
break;
case 0x22: /* Product Instance ID */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Product Instance ID: ...");
break;
case 0x23: /* Ring Station Microcode Level */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Ring Station Microcode Level: ...");
break;
case 0x26: /* Wrap data */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Wrap Data: ... (%d bytes)", sv_length - 2);
break;
case 0x27: /* Frame Forward */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Frame Forward: ... (%d bytes)", sv_length - 2);
break;
case 0x29: /* Ring Station Status Subvector */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Ring Station Status Subvector: ...");
break;
case 0x2A: /* Transmit Status Code */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Transmit Status Code: %04X", pntohs( &pd[2] ) );
break;
case 0x2B: /* Group Address */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Group Address: %08X", pntohl( &pd[2] ) );
break;
case 0x2C: /* Functional Address */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Functional Address: %08X", pntohl( &pd[2] ) );
break;
case 0x2D: /* Isolating Error Counts */
memcpy(errors, &pd[2], 6);
- ti = proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ ti = proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Isolating Error Counts (%d total)",
errors[0] + errors[1] + errors[2] + errors[3] + errors[4]);
- sv_tree = proto_tree_new();
- proto_item_add_subtree(ti, sv_tree, ETT_TR_IERR_CNT);
+ sv_tree = proto_item_add_subtree(ti, ETT_TR_IERR_CNT);
- proto_tree_add_item(sv_tree, pkt_offset+2, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+2, 1,
"Line Errors: %d", errors[0]);
- proto_tree_add_item(sv_tree, pkt_offset+3, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+3, 1,
"Internal Errors: %d", errors[1]);
- proto_tree_add_item(sv_tree, pkt_offset+4, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+4, 1,
"Burst Errors: %d", errors[2]);
- proto_tree_add_item(sv_tree, pkt_offset+5, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+5, 1,
"A/C Errors: %d", errors[3]);
- proto_tree_add_item(sv_tree, pkt_offset+6, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+6, 1,
"Abort delimiter transmitted: %d", errors[4]);
break;
case 0x2E: /* Non-Isolating Error Counts */
memcpy(errors, &pd[2], 6);
- ti = proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ ti = proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Non-Isolating Error Counts (%d total)",
errors[0] + errors[1] + errors[2] + errors[3] + errors[4]);
- sv_tree = proto_tree_new();
- proto_item_add_subtree(ti, sv_tree, ETT_TR_NERR_CNT);
+ sv_tree = proto_item_add_subtree(ti, ETT_TR_NERR_CNT);
- proto_tree_add_item(sv_tree, pkt_offset+2, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+2, 1,
"Lost Frame Errors: %d", errors[0]);
- proto_tree_add_item(sv_tree, pkt_offset+3, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+3, 1,
"Receiver Congestion: %d", errors[1]);
- proto_tree_add_item(sv_tree, pkt_offset+4, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+4, 1,
"Frame-Copied Congestion: %d", errors[2]);
- proto_tree_add_item(sv_tree, pkt_offset+5, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+5, 1,
"Frequency Errors: %d", errors[3]);
- proto_tree_add_item(sv_tree, pkt_offset+6, 1,
+ proto_tree_add_text(sv_tree, pkt_offset+6, 1,
"Token Errors: %d", errors[4]);
break;
case 0x30: /* Error Code */
- proto_tree_add_item(tree, pkt_offset+1, sv_length-1,
+ proto_tree_add_text(tree, pkt_offset+1, sv_length-1,
"Error Code: %04X", pntohs( &pd[2] ) );
break;
default: /* Unknown */
- proto_tree_add_item(tree, pkt_offset+1, 1,
+ proto_tree_add_text(tree, pkt_offset+1, 1,
"Unknown Sub-Vector: 0x%02X", pd[1]);
}
return sv_length;
@@ -255,10 +253,9 @@ dissect_trmac(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
mv_length = pntohs(&pd[offset]);
if (tree) {
- ti = proto_tree_add_item(tree, offset, mv_length,
+ ti = proto_tree_add_text(tree, offset, mv_length,
"Media Access Control");
- mac_tree = proto_tree_new();
- proto_item_add_subtree(ti, mac_tree, ETT_TR_MAC);
+ mac_tree = proto_item_add_subtree(ti, ETT_TR_MAC);
}
/* Interpret the major vector */
@@ -272,16 +269,16 @@ dissect_trmac(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
if (tree) {
if (mv_text)
- proto_tree_add_item(mac_tree, offset+3, 1, "Major Vector Command: %s",
+ proto_tree_add_text(mac_tree, offset+3, 1, "Major Vector Command: %s",
mv_text);
else
- proto_tree_add_item(mac_tree, offset+3, 1, "Major Vector Command: %02X (Unknown)",
+ proto_tree_add_text(mac_tree, offset+3, 1, "Major Vector Command: %02X (Unknown)",
pd[offset+3]);
- proto_tree_add_item(mac_tree, offset, 2, "Total Length: %d bytes",
+ proto_tree_add_text(mac_tree, offset, 2, "Total Length: %d bytes",
mv_length);
- proto_tree_add_item(mac_tree, offset+2, 1, "Source Class: %s",
+ proto_tree_add_text(mac_tree, offset+2, 1, "Source Class: %s",
class[ pd[offset+2] & 0x0f ]);
- proto_tree_add_item(mac_tree, offset+2, 1, "Destination Class: %s",
+ proto_tree_add_text(mac_tree, offset+2, 1, "Destination Class: %s",
class[ pd[offset+2] >> 4 ]);
/* interpret the subvectors */
diff --git a/packet-udp.c b/packet-udp.c
index aaaa28c5f0..f020984bbb 100644
--- a/packet-udp.c
+++ b/packet-udp.c
@@ -1,7 +1,7 @@
/* packet-udp.c
* Routines for UDP packet disassembly
*
- * $Id: packet-udp.c,v 1.18 1999/06/25 07:15:02 guy Exp $
+ * $Id: packet-udp.c,v 1.19 1999/07/07 22:51:57 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -191,15 +191,14 @@ dissect_udp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree) {
col_add_fstr(fd, COL_UNRES_DST_PORT, "%u", uh_dport);
if (tree) {
- ti = proto_tree_add_item(tree, offset, 8, "User Datagram Protocol");
- udp_tree = proto_tree_new();
- proto_item_add_subtree(ti, udp_tree, ETT_UDP);
- proto_tree_add_item(udp_tree, offset, 2, "Source port: %s (%u)",
+ ti = proto_tree_add_text(tree, offset, 8, "User Datagram Protocol");
+ udp_tree = proto_item_add_subtree(ti, ETT_UDP);
+ proto_tree_add_text(udp_tree, offset, 2, "Source port: %s (%u)",
get_udp_port(uh_sport), uh_sport);
- proto_tree_add_item(udp_tree, offset + 2, 2, "Destination port: %s (%u)",
+ proto_tree_add_text(udp_tree, offset + 2, 2, "Destination port: %s (%u)",
get_udp_port(uh_dport), uh_dport);
- proto_tree_add_item(udp_tree, offset + 4, 2, "Length: %u", uh_ulen);
- proto_tree_add_item(udp_tree, offset + 6, 2, "Checksum: 0x%04x", uh_sum);
+ proto_tree_add_text(udp_tree, offset + 4, 2, "Length: %u", uh_ulen);
+ proto_tree_add_text(udp_tree, offset + 6, 2, "Checksum: 0x%04x", uh_sum);
}
/* Skip over header */
diff --git a/packet-vines.c b/packet-vines.c
index 0df823efe0..72f036a6e2 100644
--- a/packet-vines.c
+++ b/packet-vines.c
@@ -1,7 +1,7 @@
/* packet-vines.c
* Routines for Banyan VINES protocol packet disassembly
*
- * $Id: packet-vines.c,v 1.6 1999/03/23 03:14:45 gram Exp $
+ * $Id: packet-vines.c,v 1.7 1999/07/07 22:51:57 gram Exp $
*
* Don Lafontaine <lafont02@cn.ca>
*
@@ -84,11 +84,10 @@ dissect_vines_frp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
}
if (tree) {
- ti = proto_tree_add_item(tree, offset, 2, "Vines Fragmentation Protocol");
- vines_frp_tree = proto_tree_new();
- proto_item_add_subtree(ti, vines_frp_tree, ETT_VINES_FRP);
- proto_tree_add_item(vines_frp_tree, offset, 1, "Control Flags: 0x%02x = %s fragment", vines_frp_ctrl, frp_flags_str);
- proto_tree_add_item(vines_frp_tree, offset + 1, 1, "Sequence Number: 0x%02x", vines_frp_seqno);
+ ti = proto_tree_add_text(tree, offset, 2, "Vines Fragmentation Protocol");
+ vines_frp_tree = proto_item_add_subtree(ti, ETT_VINES_FRP);
+ proto_tree_add_text(vines_frp_tree, offset, 1, "Control Flags: 0x%02x = %s fragment", vines_frp_ctrl, frp_flags_str);
+ proto_tree_add_text(vines_frp_tree, offset + 1, 1, "Sequence Number: 0x%02x", vines_frp_seqno);
}
/* Skip over header */
@@ -195,14 +194,13 @@ dissect_vines(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
*/
if (tree)
{
- ti = proto_tree_add_item(tree, offset, (viph.vip_pktlen), "Vines IP");
- vip_tree = proto_tree_new();
- proto_item_add_subtree(ti, vip_tree, ETT_VINES);
- proto_tree_add_item(vip_tree, offset, 2, "Packet checksum: 0x%04x", viph.vip_chksum);
- proto_tree_add_item(vip_tree, offset + 2, 2, "Packet length: 0x%04x (%d)", viph.vip_pktlen, viph.vip_pktlen);
- proto_tree_add_item(vip_tree, offset + 4, 1, "Transport control: 0x%02x",
+ ti = proto_tree_add_text(tree, offset, (viph.vip_pktlen), "Vines IP");
+ vip_tree = proto_item_add_subtree(ti, ETT_VINES);
+ proto_tree_add_text(vip_tree, offset, 2, "Packet checksum: 0x%04x", viph.vip_chksum);
+ proto_tree_add_text(vip_tree, offset + 2, 2, "Packet length: 0x%04x (%d)", viph.vip_pktlen, viph.vip_pktlen);
+ proto_tree_add_text(vip_tree, offset + 4, 1, "Transport control: 0x%02x",
viph.vip_tctl);
- proto_tree_add_item(vip_tree, offset + 5, 1, "Protocol: 0x%02x", viph.vip_proto);
+ proto_tree_add_text(vip_tree, offset + 5, 1, "Protocol: 0x%02x", viph.vip_proto);
}
@@ -283,18 +281,17 @@ void dissect_vines_spp(const u_char *pd, int offset, frame_data *fd, proto_tree
*/
if (tree)
{
- ti = proto_tree_add_item(tree, offset, sizeof(viph), "Vines SPP");
- vspp_tree = proto_tree_new();
- proto_item_add_subtree(ti, vspp_tree, ETT_VINES_SPP);
- proto_tree_add_item(vspp_tree, offset, 2, "Source port: 0x%04x", viph.vspp_sport);
- proto_tree_add_item(vspp_tree, offset+2, 2, "Destination port: 0x%04x", viph.vspp_dport);
- proto_tree_add_item(vspp_tree, offset+4, 1, "Packet type: 0x%02x", viph.vspp_pkttype);
- proto_tree_add_item(vspp_tree, offset+5, 1, "Control: 0x%02x", viph.vspp_control);
- proto_tree_add_item(vspp_tree, offset+6, 2, "Local Connection ID: 0x%04x", viph.vspp_lclid);
- proto_tree_add_item(vspp_tree, offset+8, 2, "Remote Connection ID: 0x%04x", viph.vspp_rmtid);
- proto_tree_add_item(vspp_tree, offset+10, 2, "Sequence number: 0x%04x", viph.vspp_seqno);
- proto_tree_add_item(vspp_tree, offset+12, 2, "Ack number: 0x%04x", viph.vspp_ack);
- proto_tree_add_item(vspp_tree, offset+14, 2, "Window: 0x%04x", viph.vspp_win);
+ ti = proto_tree_add_text(tree, offset, sizeof(viph), "Vines SPP");
+ vspp_tree = proto_item_add_subtree(ti, ETT_VINES_SPP);
+ proto_tree_add_text(vspp_tree, offset, 2, "Source port: 0x%04x", viph.vspp_sport);
+ proto_tree_add_text(vspp_tree, offset+2, 2, "Destination port: 0x%04x", viph.vspp_dport);
+ proto_tree_add_text(vspp_tree, offset+4, 1, "Packet type: 0x%02x", viph.vspp_pkttype);
+ proto_tree_add_text(vspp_tree, offset+5, 1, "Control: 0x%02x", viph.vspp_control);
+ proto_tree_add_text(vspp_tree, offset+6, 2, "Local Connection ID: 0x%04x", viph.vspp_lclid);
+ proto_tree_add_text(vspp_tree, offset+8, 2, "Remote Connection ID: 0x%04x", viph.vspp_rmtid);
+ proto_tree_add_text(vspp_tree, offset+10, 2, "Sequence number: 0x%04x", viph.vspp_seqno);
+ proto_tree_add_text(vspp_tree, offset+12, 2, "Ack number: 0x%04x", viph.vspp_ack);
+ proto_tree_add_text(vspp_tree, offset+14, 2, "Window: 0x%04x", viph.vspp_win);
}
}
diff --git a/packet.c b/packet.c
index 162e33006a..f06d7046ef 100644
--- a/packet.c
+++ b/packet.c
@@ -1,7 +1,7 @@
/* packet.c
* Routines for packet disassembly
*
- * $Id: packet.c,v 1.28 1999/06/22 03:39:06 guy Exp $
+ * $Id: packet.c,v 1.29 1999/07/07 22:51:57 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -54,6 +54,11 @@
extern capture_file cf;
+int proto_frame = -1;
+int hf_frame_arrival_time = -1;
+int hf_frame_packet_len = -1;
+int hf_frame_capture_len = -1;
+
gchar *
ether_to_str(const guint8 *ad) {
static gchar str[3][18];
@@ -176,6 +181,50 @@ bytes_to_str(const guint8 *bd, int bd_len) {
return cur;
}
+static const char *mon_names[12] = {
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec"
+};
+
+gchar *
+abs_time_to_str(struct timeval *abs_time)
+{
+ struct tm *tmp;
+ static gchar *cur;
+ static char str[3][3+1+2+2+4+1+2+1+2+1+2+1+4+1 + 5 /* extra */];
+
+ if (cur == &str[0][0]) {
+ cur = &str[1][0];
+ } else if (cur == &str[1][0]) {
+ cur = &str[2][0];
+ } else {
+ cur = &str[0][0];
+ }
+
+ tmp = localtime(&abs_time->tv_sec);
+ sprintf(cur, "%s %2d, %d %02d:%02d:%02d.%04ld",
+ mon_names[tmp->tm_mon],
+ tmp->tm_mday,
+ tmp->tm_year + 1900,
+ tmp->tm_hour,
+ tmp->tm_min,
+ tmp->tm_sec,
+ (long)abs_time->tv_usec/100);
+
+ return cur;
+}
+
+
/*
* Given a pointer into a data buffer, and to the end of the buffer,
* find the end of the (putative) line at that position in the data
@@ -396,7 +445,7 @@ match_strval(guint32 val, const value_string *vs) {
return(vs[i].strptr);
i++;
}
-
+
return(NULL);
}
@@ -485,7 +534,7 @@ decode_numeric_bitfield(guint32 val, guint32 mask, int width,
gint
check_col(frame_data *fd, gint el) {
int i;
-
+
if (fd->cinfo) {
for (i = 0; i < fd->cinfo->num_cols; i++) {
if (fd->cinfo->fmt_matx[i][el])
@@ -568,29 +617,13 @@ col_add_str(frame_data *fd, gint el, const gchar* str) {
}
}
-static const char *mon_names[12] = {
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec"
-};
-
/* this routine checks the frame type from the cf structure */
void
dissect_packet(const u_char *pd, frame_data *fd, proto_tree *tree)
{
proto_tree *fh_tree;
proto_item *ti;
- struct tm *tmp;
- time_t then;
+ struct timeval tv;
/* Put in frame header information. */
if (check_col(fd, COL_CLS_TIME))
@@ -603,31 +636,26 @@ dissect_packet(const u_char *pd, frame_data *fd, proto_tree *tree)
col_add_delta_time(fd, COL_DELTA_TIME);
if (tree) {
- ti = proto_tree_add_item(tree, 0, fd->cap_len,
- "Frame (%d on wire, %d captured)",
- fd->pkt_len, fd->cap_len);
-
- fh_tree = proto_tree_new();
- proto_item_add_subtree(ti, fh_tree, ETT_FRAME);
- then = fd->abs_secs;
- tmp = localtime(&then);
- proto_tree_add_item(fh_tree, 0, 0,
- "Frame arrived on %s %2d, %d %02d:%02d:%02d.%04ld",
- mon_names[tmp->tm_mon],
- tmp->tm_mday,
- tmp->tm_year + 1900,
- tmp->tm_hour,
- tmp->tm_min,
- tmp->tm_sec,
- (long)fd->abs_usecs/100);
-
- proto_tree_add_item(fh_tree, 0, 0, "Total frame length: %d bytes",
- fd->pkt_len);
- proto_tree_add_item(fh_tree, 0, 0, "Capture frame length: %d bytes",
- fd->cap_len);
+ ti = proto_tree_add_item_format(tree, proto_frame, 0, fd->cap_len,
+ NULL, "Frame (%d on wire, %d captured)", fd->pkt_len, fd->cap_len);
+
+ fh_tree = proto_item_add_subtree(ti, ETT_FRAME);
+
+ tv.tv_sec = fd->abs_secs;
+ tv.tv_usec = fd->abs_usecs;
+
+ proto_tree_add_item(fh_tree, hf_frame_arrival_time,
+ 0, 0, &tv);
+
+ proto_tree_add_item_format(fh_tree, hf_frame_packet_len,
+ 0, 0, fd->pkt_len, "Packet Length: %d byte%s", fd->pkt_len,
+ plurality(fd->pkt_len, "", "s"));
+
+ proto_tree_add_item_format(fh_tree, hf_frame_capture_len,
+ 0, 0, fd->cap_len, "Capture Length: %d byte%s", fd->cap_len,
+ plurality(fd->cap_len, "", "s"));
}
-#ifdef WITH_WIRETAP
switch (fd->lnk_t) {
case WTAP_ENCAP_ETHERNET :
dissect_eth(pd, fd, tree);
@@ -648,26 +676,33 @@ dissect_packet(const u_char *pd, frame_data *fd, proto_tree *tree)
dissect_raw(pd, fd, tree);
break;
}
-#else
- switch (cf.lnk_t) {
- case DLT_EN10MB :
- dissect_eth(pd, fd, tree);
- break;
- case DLT_FDDI :
- dissect_fddi(pd, fd, tree);
- break;
- case DLT_IEEE802 :
- dissect_tr(pd, fd, tree);
- break;
- case DLT_NULL :
- dissect_null(pd, fd, tree);
- break;
- case DLT_PPP :
- dissect_ppp(pd, fd, tree);
- break;
- case DLT_RAW :
- dissect_raw(pd, fd, tree);
- break;
- }
-#endif
+}
+
+void
+proto_register_frame(void)
+{
+ proto_frame = proto_register_protocol (
+ /* name */ "Frame",
+ /* abbrev */ "frame");
+
+ hf_frame_arrival_time = proto_register_field (
+ /* name */ "Arrival Time",
+ /* abbrev */ "frame.time",
+ /* ftype */ FT_ABSOLUTE_TIME,
+ /* parent */ proto_frame,
+ /* vals[] */ NULL );
+
+ hf_frame_packet_len = proto_register_field(
+ /* name */ "Total Frame Length",
+ /* abbrev */ "frame.frame_len",
+ /* ftype */ FT_UINT32,
+ /* parent */ proto_frame,
+ /* vals[] */ NULL );
+
+ hf_frame_capture_len = proto_register_field(
+ /* name */ "Capture Frame Length",
+ /* abbrev */ "frame.cap_len",
+ /* ftype */ FT_UINT32,
+ /* parent */ proto_frame,
+ /* vals[] */ NULL );
}
diff --git a/packet.h b/packet.h
index 2b7955f1e3..ac45a52230 100644
--- a/packet.h
+++ b/packet.h
@@ -1,7 +1,7 @@
/* packet.h
* Definitions for packet disassembly structures and routines
*
- * $Id: packet.h,v 1.64 1999/07/07 00:34:58 guy Exp $
+ * $Id: packet.h,v 1.65 1999/07/07 22:51:58 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -27,6 +27,10 @@
#ifndef __PACKET_H__
#define __PACKET_H__
+#ifndef __PROTO_H__
+#include "proto.h"
+#endif
+
/* Pointer versions of ntohs and ntohl. Given a pointer to a member of a
* byte array, returns the value of the two or four bytes at the pointer.
* The pletoh[sl] versions return the little-endian representation.
@@ -65,12 +69,18 @@
#endif
#endif
+/* Useful when you have an array whose size you can tell at compile-time */
+#define array_length(x) (sizeof x / sizeof x[0])
+
+
/* Useful when highlighting regions inside a dissect_*() function. With this
* macro, you can highlight from an arbitrary offset to the end of the
* frame. See dissect_data() for an example.
*/
#define END_OF_FRAME (fd->cap_len - offset)
-
+
+/* To pass one of two strings, singular or plural */
+#define plurality(d,s,p) ((d) == 1 ? (s) : (p))
typedef struct _column_info {
gint num_cols; /* Number of columns */
@@ -102,9 +112,8 @@ typedef struct _frame_data {
guint32 del_usecs; /* Delta microseconds */
long file_off; /* File offset */
column_info *cinfo; /* Column formatting information */
-#ifdef WITH_WIRETAP
- int lnk_t; /* Per-packet encapsulation/data-link type */
-#endif
+ int lnk_t; /* Per-packet encapsulation/data-link type */
+ gboolean passed_dfilter; /* TRUE = display, FALSE = no display */
} frame_data;
typedef struct _packet_info {
@@ -140,6 +149,7 @@ typedef struct tcp_extra_data {
add_subtree() call. */
enum {
+ ETT_NONE,
ETT_FRAME,
ETT_IEEE8023,
ETT_ETHER2,
@@ -298,6 +308,7 @@ enum {
/* Utility routines used by packet*.c */
gchar* ether_to_str(const guint8 *);
gchar* ip_to_str(const guint8 *);
+gchar* abs_time_to_str(struct timeval*);
gchar* time_secs_to_str(guint32);
gchar* bytes_to_str(const guint8 *, int);
const u_char *find_line_end(const u_char *data, const u_char *dataend,
@@ -327,25 +338,6 @@ void col_append_fstr(frame_data *, gint, gchar *, ...);
void col_add_str(frame_data *, gint, const gchar *);
void col_append_str(frame_data *, gint, gchar *);
-/* Routines in packet.c */
-
-typedef struct GtkWidget proto_tree;
-typedef struct GtkWidget proto_item;
-
-struct GtkWidget;
-
-void proto_item_set_len(proto_item *ti, gint len);
-proto_tree* proto_tree_new(void);
-void proto_item_add_subtree(proto_item *ti, proto_tree *subtree, gint idx);
-
-#if __GNUC__ == 2
-proto_item* proto_tree_add_item(proto_tree *tree, gint start, gint len,
- gchar *format, ...)
- __attribute__((format (printf, 4, 5)));
-#else
-proto_item* proto_tree_add_item(proto_tree *tree, gint start, gint len,
- gchar *format, ...);
-#endif
void dissect_packet(const u_char *, frame_data *, proto_tree *);
/*
@@ -448,12 +440,12 @@ void dissect_gre(const u_char *, int, frame_data *, proto_tree *);
void init_dissect_udp(void);
/* These functions are in ethertype.c */
-gchar *ethertype_to_str(guint16 etype, const char *fmt);
void capture_ethertype(guint16 etype, int offset,
const u_char *pd, guint32 cap_len, packet_counts *ld);
void ethertype(guint16 etype, int offset,
const u_char *pd, frame_data *fd, proto_tree *tree,
- proto_tree *fh_tree);
+ proto_tree *fh_tree, int item_id);
+extern const value_string etype_vals[];
/* These functions are in packet-arp.c */
gchar *arphrdaddr_to_str(guint8 *ad, int ad_len, guint16 type);
diff --git a/print.c b/print.c
index d9b5d36c47..53bba697e8 100644
--- a/print.c
+++ b/print.c
@@ -1,7 +1,7 @@
/* print.c
* Routines for printing packet analysis trees.
*
- * $Id: print.c,v 1.10 1999/06/21 19:04:35 gram Exp $
+ * $Id: print.c,v 1.11 1999/07/07 22:51:58 gram Exp $
*
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
@@ -38,8 +38,8 @@
#endif
#include "ethereal.h"
-#include "gtkpacket.h"
#include "packet.h"
+#include "gtkpacket.h"
#include "prefs.h"
#include "print.h"
#include "ps.h"
diff --git a/proto.c b/proto.c
new file mode 100644
index 0000000000..7bdd2f54b4
--- /dev/null
+++ b/proto.c
@@ -0,0 +1,620 @@
+/* proto.c
+ * Routines for protocol tree
+ *
+ * $Id: proto.c,v 1.1 1999/07/07 22:51:59 gram Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifndef _STDIO_H
+#include <stdio.h>
+#endif
+
+#include <stdarg.h>
+
+#ifndef _STRING_H
+#include <string.h>
+#endif
+
+#ifdef NEED_SNPRINTF_H
+# include "snprintf.h"
+#endif
+
+#ifndef __G_LIB_H__
+#include <glib.h>
+#endif
+
+#ifndef __PROTO_H__
+#include "proto.h"
+#endif
+
+#ifndef __PACKET_H__
+#include "packet.h"
+#endif
+
+#ifndef __RESOLV_H__
+#include "resolv.h"
+#endif
+
+#define cVALS(x) (const value_string*)(x)
+
+static void
+proto_tree_free_node(GNode *node, gpointer data);
+
+static struct header_field_info*
+find_hfinfo_record(int hfindex);
+
+static proto_item *
+proto_tree_add_item_value(proto_tree *tree, int hfindex, gint start,
+ gint length, int include_format, int visible, va_list ap);
+
+static gboolean proto_check_id(GNode *node, gpointer data);
+
+void dfilter_yacc_init(void);
+
+/* centralization of registration functions */
+void proto_register_data(void);
+void proto_register_eth(void);
+void proto_register_fddi(void);
+void proto_register_frame(void);
+void proto_register_ip(void);
+void proto_register_llc(void);
+void proto_register_null(void);
+void proto_register_tr(void);
+
+int hf_text_only = 1;
+
+/* Contains information about protocols and header fields. Used when
+ * dissectors register their data */
+GMemChunk *gmc_hfinfo = NULL;
+
+/* Contains information about a field when a dissector calls
+ * proto_tree_add_item. */
+GMemChunk *gmc_field_info = NULL;
+
+/* String space for protocol and field items for the GUI */
+GMemChunk *gmc_item_labels = NULL;
+
+/* List which stores protocols and fields that have been registered */
+GPtrArray *gpa_hfinfo = NULL;
+
+
+/* initialize data structures and register protocols and fields */
+void
+proto_init(void)
+{
+ if (gmc_hfinfo)
+ g_mem_chunk_destroy(gmc_hfinfo);
+ if (gmc_field_info)
+ g_mem_chunk_destroy(gmc_field_info);
+ if (gmc_item_labels)
+ g_mem_chunk_destroy(gmc_item_labels);
+ if (gpa_hfinfo)
+ g_ptr_array_free(gpa_hfinfo, FALSE); /* ever needs to be TRUE? */
+
+ gmc_hfinfo = g_mem_chunk_new("gmc_hfinfo",
+ sizeof(struct header_field_info), 50 * sizeof(struct
+ header_field_info), G_ALLOC_ONLY);
+ gmc_field_info = g_mem_chunk_new("gmc_field_info",
+ sizeof(struct field_info), 200 * sizeof(struct field_info),
+ G_ALLOC_AND_FREE);
+ gmc_item_labels = g_mem_chunk_new("gmc_item_labels",
+ ITEM_LABEL_LENGTH, 20 * ITEM_LABEL_LENGTH,
+ G_ALLOC_AND_FREE);
+ gpa_hfinfo = g_ptr_array_new();
+
+ /* Have each dissector register its protocols and fields. The
+ * order doesn't matter. Put the calls in alphabetical order
+ * just to make it easy. */
+ proto_register_data();
+ proto_register_eth();
+ proto_register_fddi();
+ proto_register_frame();
+ proto_register_ip();
+ proto_register_llc();
+ proto_register_null();
+ proto_register_tr();
+
+ /* Register one special-case FT_TEXT_ONLY field for use when
+ converting ethereal to new-style proto_tree. These fields
+ are merely strings on the GUI tree; they are not filterable */
+ hf_text_only = proto_register_field (
+ /* name */ "Text",
+ /* abbrev */ "text",
+ /* ftype */ FT_TEXT_ONLY,
+ /* parent */ -1,
+ /* vals[] */ NULL );
+
+ dfilter_yacc_init();
+}
+
+/* frees the resources that the dissection a proto_tree uses */
+void
+proto_tree_free(proto_tree *tree)
+{
+ g_node_traverse((GNode*)tree, G_IN_ORDER, G_TRAVERSE_ALL, -1,
+ (GNodeTraverseFunc)proto_tree_free_node, NULL);
+}
+
+static void
+proto_tree_free_node(GNode *node, gpointer data)
+{
+ field_info *fi = (field_info*) (node->data);
+ if (fi->representation)
+ g_mem_chunk_free(gmc_item_labels, fi->representation);
+ if (fi->hfinfo->type == FT_STRING)
+ g_free(fi->value.string);
+ g_mem_chunk_free(gmc_field_info, fi);
+}
+
+/* Finds a record in the hf_info_records array. */
+static struct header_field_info*
+find_hfinfo_record(int hfindex)
+{
+ g_assert(hfindex >= 0 && hfindex < gpa_hfinfo->len);
+ return g_ptr_array_index(gpa_hfinfo, hfindex);
+}
+
+proto_item *
+proto_tree_add_item(proto_tree *tree, int hfindex, gint start, gint length, ...)
+{
+ proto_item *pi;
+ va_list ap;
+
+ va_start(ap, length);
+ pi = proto_tree_add_item_value(tree, hfindex, start, length, 0, 1, ap);
+ va_end(ap);
+
+ return pi;
+}
+
+proto_item *
+proto_tree_add_item_hidden(proto_tree *tree, int hfindex, gint start, gint length, ...)
+{
+ proto_item *pi;
+ va_list ap;
+
+ va_start(ap, length);
+ pi = proto_tree_add_item_value(tree, hfindex, start, length, 0, 0, ap);
+ va_end(ap);
+
+ return pi;
+}
+
+proto_item *
+proto_tree_add_item_format(proto_tree *tree, int hfindex, gint start, gint length, ...)
+{
+ proto_item *pi;
+ va_list ap;
+
+ va_start(ap, length);
+ pi = proto_tree_add_item_value(tree, hfindex, start, length, 1, 1, ap);
+ va_end(ap);
+
+ return pi;
+}
+
+proto_item *
+proto_tree_add_text(proto_tree *tree, gint start, gint length, ...)
+{
+ proto_item *pi;
+ va_list ap;
+
+ va_start(ap, length);
+ pi = proto_tree_add_item_value(tree, hf_text_only, start, length, 1, 1, ap);
+ va_end(ap);
+
+ return pi;
+}
+
+static proto_item *
+proto_tree_add_item_value(proto_tree *tree, int hfindex, gint start,
+ gint length, int include_format, int visible, va_list ap)
+{
+ proto_item *pi;
+ field_info *fi;
+ char *junk, *format;
+
+ if (!tree)
+ return(NULL);
+
+ fi = g_mem_chunk_alloc(gmc_field_info);
+
+ fi->hfinfo = find_hfinfo_record(hfindex);
+ g_assert(fi->hfinfo != NULL);
+ fi->start = start;
+ fi->length = length;
+ fi->tree_type = ETT_NONE;
+ fi->visible = visible;
+
+/* from the stdarg man page on Solaris 2.6:
+NOTES
+ It is up to the calling routine to specify in some manner
+ how many arguments there are, since it is not always possi-
+ ble to determine the number of arguments from the stack
+ frame. For example, execl is passed a zero pointer to sig-
+ nal the end of the list. printf can tell how many arguments
+ there are by the format. It is non-portable to specify a
+ second argument of char, short, or float to va_arg, because
+ arguments seen by the called function are not char, short,
+ or float. C converts char and short arguments to int and
+ converts float arguments to double before passing them to a
+ function.
+*/
+ switch(fi->hfinfo->type) {
+ case FT_NONE:
+ junk = va_arg(ap, guint8*);
+ break;
+
+ case FT_BOOLEAN:
+ fi->value.boolean = va_arg(ap, unsigned int) ? TRUE : FALSE;
+ break;
+
+ case FT_UINT8:
+ case FT_VALS_UINT8:
+ fi->value.numeric = va_arg(ap, unsigned int);
+ break;
+
+ case FT_UINT16:
+ case FT_VALS_UINT16:
+ fi->value.numeric = va_arg(ap, unsigned int);
+ break;
+
+ case FT_UINT32:
+ case FT_VALS_UINT24:
+ case FT_VALS_UINT32:
+ case FT_RELATIVE_TIME:
+ case FT_IPv4:
+ case FT_IPXSERVER:
+ fi->value.numeric = va_arg(ap, guint32);
+ break;
+
+ case FT_ETHER:
+ case FT_ETHER_VENDOR:
+/* fi->value.ether = va_arg(ap, guint8*);*/
+ memcpy(fi->value.ether, va_arg(ap, guint8*), 6);
+ break;
+
+ case FT_ABSOLUTE_TIME:
+ memcpy(&fi->value.abs_time, va_arg(ap, struct timeval*),
+ sizeof(struct timeval));
+ break;
+
+ case FT_STRING:
+ fi->value.string = g_strdup(va_arg(ap, char*)); /* XXX */
+ break;
+
+ case FT_TEXT_ONLY:
+ ; /* nothing */
+ break;
+
+ default:
+ g_error("hfinfo->type %d not handled\n", fi->hfinfo->type);
+ break;
+ }
+
+ pi = (proto_item*) g_node_new(fi);
+ g_node_append((GNode*)tree, (GNode*)pi);
+
+ /* are there any formatting arguments? */
+ if (visible && include_format) {
+ fi->representation = g_mem_chunk_alloc(gmc_item_labels);
+ format = va_arg(ap, char*);
+ vsnprintf(fi->representation, ITEM_LABEL_LENGTH,
+ format, ap);
+ }
+ else {
+ fi->representation = NULL;
+ }
+
+ return pi;
+}
+
+void
+proto_item_set_len(proto_item *pi, gint length)
+{
+ field_info *fi = (field_info*) (((GNode*)pi)->data);
+ fi->length = length;
+}
+
+proto_tree*
+proto_tree_create_root(void)
+{
+ return (proto_tree*) g_node_new(NULL);
+}
+
+proto_tree*
+proto_item_add_subtree(proto_item *pi, gint idx) {
+ field_info *fi = (field_info*) (((GNode*)pi)->data);
+ fi->tree_type = idx;
+ return (proto_tree*) pi;
+}
+
+
+int
+proto_register_protocol(char *name, char *abbrev)
+{
+ return proto_register_field(name, abbrev, FT_NONE, -1, NULL);
+}
+
+void
+proto_register_field_array(int parent, const hf_register_info *hf, int num_records)
+{
+ int field_id, i;
+ const hf_register_info *ptr = hf;
+
+ for (i = 0; i < num_records; i++, ptr++) {
+ field_id = proto_register_field(ptr->name, ptr->abbrev,
+ ptr->type, parent, ptr->vals);
+ *ptr->p_id = field_id;
+ }
+}
+
+
+int
+proto_register_field(char *name, char *abbrev, enum ftenum type, int parent,
+ struct value_string* vals)
+{
+ struct header_field_info *hfinfo;
+
+ hfinfo = g_mem_chunk_alloc(gmc_hfinfo);
+ hfinfo->name = name; /* should I g_strdup? */
+ hfinfo->abbrev = abbrev; /* should I g_strdup? */
+ hfinfo->type = type;
+ hfinfo->parent = parent; /* this field differentiates protos and fields */
+ hfinfo->vals = vals;
+
+ g_assert((vals == NULL) || (type == FT_VALS_UINT8 || type == FT_VALS_UINT16 ||
+ type == FT_VALS_UINT24 || type == FT_VALS_UINT32));
+
+ /* if we always add and never delete, then id == len - 1 is correct */
+ g_ptr_array_add(gpa_hfinfo, hfinfo);
+ hfinfo->id = gpa_hfinfo->len - 1;
+ return hfinfo->id;
+}
+
+void
+proto_item_fill_label(field_info *fi, gchar *label_str)
+{
+ char *s;
+
+ switch(fi->hfinfo->type) {
+ case FT_NONE:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s", fi->hfinfo->name);
+ break;
+
+ case FT_BOOLEAN:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s", fi->hfinfo->name,
+ fi->value.boolean == TRUE ? "True" : "False");
+ break;
+
+ case FT_UINT8:
+ case FT_UINT16:
+ case FT_UINT32:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %d", fi->hfinfo->name,
+ fi->value.numeric);
+ break;
+
+ case FT_ABSOLUTE_TIME:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s", fi->hfinfo->name,
+ abs_time_to_str(&fi->value.abs_time));
+ break;
+
+ case FT_VALS_UINT8:
+ s = match_strval(fi->value.numeric, cVALS(fi->hfinfo->vals));
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s (0x%02x)", fi->hfinfo->name,
+ (s ? s : "Unknown"), fi->value.numeric);
+ break;
+
+ case FT_VALS_UINT16:
+ s = match_strval(fi->value.numeric, cVALS(fi->hfinfo->vals));
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s (0x%04x)", fi->hfinfo->name,
+ (s ? s : "Unknown"), fi->value.numeric);
+ break;
+
+ case FT_VALS_UINT24:
+ s = match_strval(fi->value.numeric, cVALS(fi->hfinfo->vals));
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s (0x%06x)", fi->hfinfo->name,
+ (s ? s : "Unknown"), fi->value.numeric);
+ break;
+
+
+ case FT_VALS_UINT32:
+ s = match_strval(fi->value.numeric, cVALS(fi->hfinfo->vals));
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s (0x%08x)", fi->hfinfo->name,
+ (s ? s : "Unknown"), fi->value.numeric);
+ break;
+
+ case FT_ETHER:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s (%s)", fi->hfinfo->name,
+ ether_to_str(fi->value.ether),
+ get_ether_name(fi->value.ether));
+ break;
+
+ case FT_ETHER_VENDOR:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %02x:%02x:%02x (%s)", fi->hfinfo->name,
+ fi->value.ether[0],
+ fi->value.ether[1],
+ fi->value.ether[2],
+ get_manuf_name(fi->value.ether));
+ break;
+
+ case FT_IPv4:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s (%s)", fi->hfinfo->name,
+ get_hostname(fi->value.numeric),
+ ip_to_str((guint8*)&fi->value.numeric));
+ break;
+
+ case FT_STRING:
+ snprintf(label_str, ITEM_LABEL_LENGTH,
+ "%s: %s", fi->hfinfo->name, fi->value.string);
+ break;
+
+ default:
+ g_error("hfinfo->type %d not handled\n", fi->hfinfo->type);
+ break;
+ }
+}
+
+int
+proto_registrar_n(void)
+{
+ return gpa_hfinfo->len;
+}
+
+char*
+proto_registrar_get_abbrev(int n)
+{
+ struct header_field_info *hfinfo;
+
+ hfinfo = find_hfinfo_record(n);
+ if (hfinfo)
+ return hfinfo->abbrev;
+ else
+ return NULL;
+}
+
+int
+proto_registrar_get_ftype(int n)
+{
+ struct header_field_info *hfinfo;
+
+ hfinfo = find_hfinfo_record(n);
+ if (hfinfo)
+ return hfinfo->type;
+ else
+ return -1;
+}
+
+int
+proto_registrar_get_parent(int n)
+{
+ struct header_field_info *hfinfo;
+
+ hfinfo = find_hfinfo_record(n);
+ if (hfinfo)
+ return hfinfo->parent;
+ else
+ return -2;
+}
+
+gboolean
+proto_registrar_is_protocol(int n)
+{
+ struct header_field_info *hfinfo;
+
+ hfinfo = find_hfinfo_record(n);
+ if (hfinfo)
+ return (hfinfo->parent == -1 ? TRUE : FALSE);
+ else
+ return FALSE;
+}
+
+typedef struct find_id_info {
+ int target;
+ GNode *result;
+} find_id_info;
+
+/* looks for a protocol or a header field in a proto_tree. Assumes that protocols
+ * are at the top level, and header fields only occur underneath their parent's
+ * subtree. Returns NULL if field not found
+ */
+proto_item*
+proto_find_field(proto_tree* tree, int id)
+{
+ find_id_info fiinfo;
+ int parent_protocol;
+ proto_tree *subtree;
+
+ fiinfo.target = id;
+ fiinfo.result = NULL;
+
+ /* do a quicker check if field is a protocol */
+ if (proto_registrar_is_protocol(id) == TRUE) {
+ return proto_find_protocol(tree, id);
+ }
+
+ /* find the field's parent protocol */
+ parent_protocol = proto_registrar_get_parent(id);
+ subtree = proto_find_protocol(tree, parent_protocol);
+
+ /* if there is a tree with that protocol, search it for the field */
+ if (subtree)
+ g_node_traverse((GNode*)subtree, G_IN_ORDER, G_TRAVERSE_ALL, -1, proto_check_id, &fiinfo);
+
+ return (proto_item*) fiinfo.result;
+}
+
+
+/* Looks for a protocol at the top layer of the tree.
+ * Assumption: a protocol can occur only once in a proto_tree.
+ */
+proto_item*
+proto_find_protocol(proto_tree* tree, int protocol_id)
+{
+ find_id_info fiinfo;
+
+ fiinfo.target = protocol_id;
+ fiinfo.result = NULL;
+
+ g_node_traverse((GNode*)tree, G_IN_ORDER, G_TRAVERSE_ALL, 2, proto_check_id, &fiinfo);
+ return (proto_item*) fiinfo.result;
+}
+
+
+static gboolean
+proto_check_id(GNode *node, gpointer data)
+{
+ field_info *fi = (field_info*) (node->data);
+ find_id_info *fiinfo = (find_id_info*) data;
+
+ if (fi) { /* !fi == the top most container node which holds nothing */
+ if (fi->hfinfo->id == fiinfo->target) {
+ fiinfo->result = node;
+ return TRUE; /* halt traversal */
+ }
+ }
+ return FALSE; /* keep traversing */
+}
+
+void
+proto_get_field_values(proto_tree* subtree, GNodeTraverseFunc fill_array_func, proto_tree_search_info *sinfo)
+{
+ g_node_traverse((GNode*)subtree, G_IN_ORDER, G_TRAVERSE_ALL, -1, fill_array_func, sinfo);
+}
diff --git a/proto.h b/proto.h
new file mode 100644
index 0000000000..59bede3fa8
--- /dev/null
+++ b/proto.h
@@ -0,0 +1,165 @@
+/* proto.h
+ * Definitions for protocol display
+ *
+ * $Id: proto.h,v 1.1 1999/07/07 22:51:59 gram Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+
+#ifndef __PROTO_H__
+#define __PROTO_H__
+
+#ifdef HAVE_SYS_TIME_H
+ #ifndef _SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+#endif
+
+/* needs glib.h */
+typedef struct GNode proto_tree;
+typedef struct GNode proto_item;
+struct value_string;
+
+#define ITEM_LABEL_LENGTH 240
+
+/* In order to make a const value_string[] look like a value_string*, I
+ * need this macro */
+#define VALS(x) (struct value_string*)(x)
+
+
+/* field types */
+enum ftenum {
+ FT_NONE, /* used for protocol labels (thus no field type) */
+ FT_BOOLEAN, /* TRUE and FALSE come from <glib.h> */
+ FT_UINT8,
+ FT_UINT16,
+ FT_UINT32,
+ FT_ABSOLUTE_TIME,
+ FT_RELATIVE_TIME,
+ FT_STRING,
+ FT_ETHER,
+ FT_ETHER_VENDOR,
+ FT_BYTES,
+ FT_IPv4,
+ FT_IPv6,
+ FT_IPXSERVER,
+ FT_VALS_UINT8,
+ FT_VALS_UINT16,
+ FT_VALS_UINT24,
+ FT_VALS_UINT32,
+ FT_TEXT_ONLY, /* non-filterable, used when converting ethereal
+ from old-style proto_tree to new-style proto_tree */
+ NUM_FIELD_TYPES /* last item number plus one */
+};
+
+
+typedef struct header_field_info {
+ char *name;
+ char *abbrev;
+ enum ftenum type;
+ int parent;
+ struct value_string *vals;
+ int id; /* assigned by order of registration */
+/* int color; for use by GUI code */
+} header_field_info;
+
+/*extern struct header_field_info hfinfo[];*/
+
+/* Used when registering many fields at once */
+typedef struct hf_register_info {
+ char *name;
+ char *abbrev;
+ int *p_id; /* pointer to int; written to by register() function */
+ enum ftenum type;
+ struct value_string *vals;
+} hf_register_info;
+
+
+/* Info stored in each proto_item GNode */
+typedef struct field_info {
+ struct header_field_info *hfinfo;
+ gint start;
+ gint length;
+ gint tree_type; /* ETT_* */
+ char *representation; /* for GUI tree */
+ int visible;
+ union {
+ gboolean boolean;
+ guint32 numeric;
+ struct timeval abs_time; /* the whole struct, not a pointer */
+ gchar *string;
+ guint8 ether[6];
+ } value;
+} field_info;
+
+
+typedef struct proto_tree_search_info {
+ int target_field;
+ GArray *result_array;
+ guint8 *packet_data;
+} proto_tree_search_info;
+
+void proto_init(void);
+void proto_item_set_len(proto_item *ti, gint length);
+proto_tree* proto_tree_create_root(void);
+void proto_tree_free(proto_tree *tree);
+proto_tree* proto_item_add_subtree(proto_item *ti, gint idx);
+
+int
+proto_register_field(char *name, char *abbrev, enum ftenum type, int parent,
+ struct value_string* vals);
+
+int
+proto_register_protocol(char *name, char *abbrev);
+
+void
+proto_register_field_array(int parent, const hf_register_info *hf, int num_records);
+
+proto_item *
+proto_tree_add_item(proto_tree *tree, int hfindex, gint start,
+ gint length, ...);
+
+proto_item *
+proto_tree_add_item_hidden(proto_tree *tree, int hfindex, gint start,
+ gint length, ...);
+
+proto_item *
+proto_tree_add_item_format(proto_tree *tree, int hfindex, gint start,
+ gint length, ...);
+
+proto_item *
+proto_tree_add_text(proto_tree *tree, gint start, gint length, ...);
+
+void
+proto_item_fill_label(field_info *fi, gchar *label_str);
+
+/* useful functions for external routines to get info about registered protos and fields */
+int proto_registrar_n(void);
+char* proto_registrar_get_abbrev(int n);
+int proto_registrar_get_ftype(int n);
+int proto_registrar_get_parent(int n);
+gboolean proto_registrar_is_protocol(int n);
+proto_item* proto_find_field(proto_tree* tree, int id);
+proto_item* proto_find_protocol(proto_tree* tree, int protocol_id);
+void proto_get_field_values(proto_tree* subtree, GNodeTraverseFunc fill_array_func,
+ proto_tree_search_info *sinfo);
+
+#endif /* proto.h */
diff --git a/resolv.c b/resolv.c
index cb46eb3e0d..3d44e15121 100644
--- a/resolv.c
+++ b/resolv.c
@@ -1,7 +1,7 @@
/* resolv.c
* Routines for network object lookup
*
- * $Id: resolv.c,v 1.6 1999/03/28 18:32:00 gram Exp $
+ * $Id: resolv.c,v 1.7 1999/07/07 22:51:59 gram Exp $
*
* Laurent Deniel <deniel@worldnet.fr>
*
@@ -284,7 +284,6 @@ static u_char *host_name_lookup6(struct e_in6_addr *addr)
/* unknown host or DNS timeout */
#endif /* INET6 */
sprintf(name, "%s", ip6_to_str(addr));
-
return (name);
}
@@ -834,3 +833,25 @@ extern u_char *get_manuf_name(u_char *addr)
return manufp->name;
} /* get_manuf_name */
+
+
+
+/* return IP address of either hostname or IP address in text format.
+ * Used more in the dfilter parser rather than in packet dissectors */
+unsigned long get_host_ipaddr(const char *host)
+{
+ struct hostent *hp = NULL;
+ unsigned long ipaddr;
+
+ hp = gethostbyname(host);
+ if (hp == NULL) {
+ hp = gethostbyaddr(host, strlen(host), AF_INET);
+ if (hp == NULL) {
+ return 0;
+ }
+ }
+
+ memcpy(&ipaddr, hp->h_addr, hp->h_length);
+
+ return ntohl(ipaddr);
+}
diff --git a/resolv.h b/resolv.h
index 31e04d1b03..4782f60f30 100644
--- a/resolv.h
+++ b/resolv.h
@@ -1,7 +1,7 @@
/* resolv.h
* Definitions for network object lookup
*
- * $Id: resolv.h,v 1.4 1999/03/28 18:32:01 gram Exp $
+ * $Id: resolv.h,v 1.5 1999/07/07 22:51:59 gram Exp $
*
* Laurent Deniel <deniel@worldnet.fr>
*
@@ -72,4 +72,7 @@ extern u_char *get_ether_addr(u_char *name);
/* adds a hostname/IP in the hash table */
extern void add_host_name(u_int addr, u_char *name);
+/* Returns IP address for a string representing the hostname or dotted-decial IP address */
+unsigned long get_host_ipaddr(const char *host);
+
#endif /* __RESOLV_H__ */
diff --git a/summary.c b/summary.c
index ca98e0b036..85816a697a 100644
--- a/summary.c
+++ b/summary.c
@@ -1,7 +1,7 @@
/* summary.c
* Routines for capture file summary window
*
- * $Id: summary.c,v 1.2 1999/07/04 06:41:19 guy Exp $
+ * $Id: summary.c,v 1.3 1999/07/07 22:52:00 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -83,7 +83,6 @@ extern capture_file cf;
char * string_for_format(guint16 cd_t){
switch (cd_t) {
-#ifdef WITH_WIRETAP
case WTAP_FILE_WTAP:
return "wiretap";
case WTAP_FILE_PCAP:
@@ -100,18 +99,6 @@ char * string_for_format(guint16 cd_t){
return "Network Monitor";
case WTAP_FILE_NETXRAY:
return "NetXray/Sniffer Pro";
-#else
- case CD_WIRE:
- return "wiretap";
- case CD_SNOOP:
- return "snoop";
- case CD_PCAP_BE:
- return "pcap-be";
- case CD_PCAP_LE:
- return "pcap-le";
- case CD_NA_UNCOMPR:
- return "network-associates";
-#endif
default:
return "unknown";
}
@@ -136,7 +123,8 @@ tally_frame_data(gpointer cf, gpointer st) {
sum_tally->stop_time = cur_time;
}
sum_tally->bytes += cur_frame->pkt_len;
- sum_tally->count++;
+ if (cur_frame->passed_dfilter)
+ sum_tally->filtered_count++;
}
void
@@ -171,7 +159,7 @@ summary_prep_cb(GtkWidget *w, gpointer d) {
st->stop_time = secs_usecs(first_frame->abs_secs,first_frame->abs_usecs)
;
st->bytes = 0;
- st->count = 0;
+ st->filtered_count = 0;
cur_glist = cf.plist;
for (i = 0; i < cf.count; i++){
@@ -238,6 +226,10 @@ seconds", seconds);
snprintf(string_buff, SUM_STR_MAX, "Packet count: %i", cf.count);
add_string_to_box(string_buff, data_box);
+ /* Filtered Packet count */
+ snprintf(string_buff, SUM_STR_MAX, "Filtered packet count: %i", st->filtered_count);
+ add_string_to_box(string_buff, data_box);
+
/* Packets per second */
if (seconds > 0){
snprintf(string_buff, SUM_STR_MAX, "Avg. packets/sec: %.3f",
@@ -279,15 +271,15 @@ traffic_bytes/seconds);
}
add_string_to_box(string_buff, capture_box);
- /* Display filter */
- if (cf.dfilter) {
+ /* Display filter. The situation where cf.dfilter="" and cf.dfcode=NULL can exist,
+ so I'll check for both */
+ if (cf.dfilter && cf.dfcode) {
snprintf(string_buff, SUM_STR_MAX, "Display filter: %s", cf.dfilter);
} else {
sprintf(string_buff, "Display filter: none");
}
add_string_to_box(string_buff, capture_box);
-
/* Capture filter */
if (cf.cfilter) {
snprintf(string_buff, SUM_STR_MAX, "Capture filter: %s", cf.cfilter);
@@ -295,11 +287,7 @@ traffic_bytes/seconds);
sprintf(string_buff, "Capture filter: none");
}
add_string_to_box(string_buff, capture_box);
-#if (GTK_MINOR_VERSION > 1) || ((GTK_MICRO_VERSION > 1) && (GTK_MINOR_VERSION > 0))
gtk_window_set_position(GTK_WINDOW(sum_open_w), GTK_WIN_POS_MOUSE);
-#else
- gtk_window_position(GTK_WINDOW(sum_open_w), GTK_WIN_POS_MOUSE);
-#endif
gtk_widget_show(sum_open_w);
}
diff --git a/summary.h b/summary.h
index 8e6ffba88b..915c0bf7a8 100644
--- a/summary.h
+++ b/summary.h
@@ -1,7 +1,7 @@
/* summary.h
* Definitions for capture file summary windows
*
- * $Id: summary.h,v 1.1 1999/06/22 22:02:12 gram Exp $
+ * $Id: summary.h,v 1.2 1999/07/07 22:52:00 gram Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -30,7 +30,7 @@ typedef struct _summary_tally {
guint32 bytes;
double start_time;
double stop_time;
- guint32 count;
+ guint32 filtered_count;
} summary_tally;
diff --git a/wiretap/ChangeLog b/wiretap/ChangeLog
index 34dc54b7c4..9b7f7681cd 100644
--- a/wiretap/ChangeLog
+++ b/wiretap/ChangeLog
@@ -1,3 +1,6 @@
+July 7, 1999
+ Removed display filter support.
+
May 12, 1999
Guy added support for Netmon 2.0 files.
@@ -26,3 +29,4 @@ January 1, 1999
December 10, 1998
Proper timestamp calculati