aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGES61
-rw-r--r--CREDITS372
-rw-r--r--Makefile.in105
-rw-r--r--VERSION2
-rw-r--r--acconfig.h18
-rw-r--r--aclocal.m4158
-rw-r--r--addrtoname.c28
-rw-r--r--addrtoname.h1
-rw-r--r--bootp.h4
-rw-r--r--config.h.in48
-rwxr-xr-xconfigure3108
-rwxr-xr-xconfigure.in112
-rw-r--r--cpack.c4
-rw-r--r--cpack.h3
-rw-r--r--ethertype.h14
-rw-r--r--forces.h2
-rw-r--r--ieee802_11_radio.h62
-rw-r--r--in_cksum.c200
-rw-r--r--interface.h24
-rw-r--r--ip.h6
-rw-r--r--ip6.h37
-rwxr-xr-xipproto.c1
-rw-r--r--ipproto.h3
-rw-r--r--missing/addrsize.h36
-rw-r--r--missing/bittypes.h117
-rw-r--r--missing/resolv6.h36
-rw-r--r--missing/resolv_ext.h49
-rw-r--r--netdissect.h53
-rw-r--r--ospf.h4
-rw-r--r--oui.c1
-rw-r--r--oui.h1
-rw-r--r--ppi.h9
-rw-r--r--print-802_11.c634
-rw-r--r--print-802_15_4.c183
-rw-r--r--print-ap1394.c2
-rw-r--r--print-arcnet.c4
-rw-r--r--print-arp.c1
-rw-r--r--print-atalk.c60
-rw-r--r--print-atm.c10
-rw-r--r--print-babel.c414
-rw-r--r--print-bgp.c138
-rw-r--r--print-carp.c88
-rw-r--r--print-cdp.c2
-rw-r--r--print-chdlc.c2
-rw-r--r--print-dccp.c56
-rw-r--r--print-dhcp6.c6
-rw-r--r--print-eigrp.c4
-rw-r--r--print-enc.c2
-rw-r--r--print-ether.c191
-rw-r--r--print-forces.c22
-rw-r--r--print-fr.c4
-rw-r--r--print-gre.c4
-rw-r--r--print-icmp.c21
-rw-r--r--print-icmp6.c101
-rw-r--r--print-igmp.c6
-rw-r--r--print-ip.c160
-rw-r--r--print-ip6.c92
-rw-r--r--print-ipnet.c2
-rw-r--r--print-ipx.c4
-rw-r--r--print-isoclns.c34
-rw-r--r--print-juniper.c16
-rw-r--r--print-lane.c6
-rw-r--r--print-ldp.c2
-rw-r--r--print-llc.c6
-rw-r--r--print-lldp.c448
-rw-r--r--print-lmp.c2
-rw-r--r--print-lspping.c2
-rw-r--r--print-mobile.c5
-rw-r--r--print-mpls.c202
-rw-r--r--print-null.c2
-rw-r--r--print-ospf.c6
-rw-r--r--print-pflog.c2
-rw-r--r--print-pgm.c88
-rw-r--r--print-pim.c28
-rw-r--r--print-ppi.c104
-rw-r--r--print-ppp.c20
-rw-r--r--print-rpki-rtr.c368
-rw-r--r--print-rrcp.c4
-rw-r--r--print-rsvp.c2
-rw-r--r--print-sctp.c6
-rw-r--r--print-sflow.c805
-rw-r--r--print-sl.c2
-rw-r--r--print-sll.c2
-rw-r--r--print-slow.c4
-rw-r--r--print-sunrpc.c10
-rw-r--r--print-symantec.c2
-rw-r--r--print-tcp.c95
-rw-r--r--print-tftp.c8
-rw-r--r--print-udp.c130
-rw-r--r--print-vrrp.c12
-rw-r--r--tcp.h1
-rw-r--r--tcpdump-stdinc.h39
-rw-r--r--tcpdump.1.in51
-rw-r--r--tcpdump.c212
-rw-r--r--tests/02-sunrise-sunset-esp.pcapbin0 -> 1352 bytes
-rw-r--r--tests/02-sunrise-sunset-esp.puu34
-rw-r--r--tests/08-sunrise-sunset-aes.pcapbin0 -> 1480 bytes
-rw-r--r--tests/08-sunrise-sunset-aes.puu36
-rw-r--r--tests/08-sunrise-sunset-esp2.pcapbin0 -> 1800 bytes
-rw-r--r--tests/08-sunrise-sunset-esp2.puu43
-rw-r--r--tests/QinQpacket.out249
-rw-r--r--tests/QinQpacket.pcapbin0 -> 78264 bytes
-rw-r--r--tests/QinQpacketv.out1977
-rw-r--r--tests/TESTLIST17
-rwxr-xr-xtests/TESTonce15
-rw-r--r--tests/babel.pcapbin0 -> 3320 bytes
-rw-r--r--tests/babel1.out25
-rw-r--r--tests/babel1v.out51
-rw-r--r--tests/dio.out2
-rw-r--r--tests/eapon1.pcapbin0 -> 16412 bytes
-rw-r--r--tests/eapon1.puu368
-rw-r--r--tests/eapon2.puu66
-rw-r--r--tests/empty.uu3
-rw-r--r--tests/espudp1.pcapbin0 -> 1416 bytes
-rw-r--r--tests/espudp1.puu35
-rw-r--r--tests/forces1.out42
-rw-r--r--tests/forces1.pcapbin476 -> 2488 bytes
-rw-r--r--tests/forces1vvv.out253
-rw-r--r--tests/forces1vvvv.out331
-rw-r--r--tests/forces2.pcapbin17566 -> 0 bytes
-rw-r--r--tests/forces3vvv.out602
-rw-r--r--tests/ikev2.puu22231
-rw-r--r--tests/ikev2four.pcapbin0 -> 5856 bytes
-rw-r--r--tests/ikev2four.puu134
-rw-r--r--tests/ikev2fourv.out42
-rw-r--r--tests/ikev2fourv4.out42
-rw-r--r--tests/ikev2pI2.pcapbin0 -> 912 bytes
-rw-r--r--tests/ikev2pI2.puu24
-rw-r--r--tests/isakmp-delete-segfault.pcapbin0 -> 721 bytes
-rw-r--r--tests/isakmp-delete-segfault.puu20
-rw-r--r--tests/isakmp-identification-segfault.pcapbin0 -> 356 bytes
-rw-r--r--tests/isakmp-identification-segfault.puu11
-rw-r--r--tests/isakmp-pointer-loop.pcapbin0 -> 112 bytes
-rw-r--r--tests/isakmp-pointer-loop.puu6
-rw-r--r--tests/isakmp4500.pcapbin0 -> 6830 bytes
-rw-r--r--tests/isakmp4500.puu155
-rw-r--r--tests/lmp.pcapbin0 -> 1732 bytes
-rw-r--r--tests/lmp.puu42
-rwxr-xr-xtests/lmp.sh2
-rw-r--r--tests/mpls-ldp-hello.pcapbin0 -> 114 bytes
-rw-r--r--tests/mpls-ldp-hello.puu6
-rw-r--r--tests/ospf-gmpls.pcapbin0 -> 640 bytes
-rw-r--r--tests/ospf-gmpls.puu18
-rw-r--r--tests/print-flags.pcapbin0 -> 6621 bytes
-rw-r--r--tests/print-flags.puu151
-rwxr-xr-xtests/print-flags.sh23
-rw-r--r--tests/sflow_multiple_counter_30_pdus.out1828
-rw-r--r--tests/sflow_multiple_counter_30_pdus.pcapbin0 -> 29308 bytes
-rw-r--r--udp.h2
-rw-r--r--win32/Include/Arpa/tftp.h84
-rw-r--r--win32/Include/Netinet/in_systm.h56
-rw-r--r--win32/Include/Netinet/ip.h177
-rw-r--r--win32/Include/inetprivate.h40
-rw-r--r--win32/Include/telnet.h320
-rw-r--r--win32/prj/GNUmakefile2
-rw-r--r--win32/prj/WinDump.dsp8
156 files changed, 10471 insertions, 28720 deletions
diff --git a/CHANGES b/CHANGES
index 33f453b7d528..2fa51b9d0091 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,64 @@
+Friday December 9, 2011. guy@alum.mit.edu.
+ Summary for 4.2.1 tcpdump release
+ Only build the Babel printer if IPv6 is enabled.
+ Support Babel on port 6696 as well as 6697.
+ Include ppi.h in release tarball.
+ Include all the test files in the release tarball, and don't
+ "include" test files that no longer exist.
+ Don't assume we have <rpc/rpc.h> - check for it.
+ Support "-T carp" as a way of dissecting IP protocol 112 as CARP
+ rather than VRRP.
+ Support Hilscher NetAnalyzer link-layer header format.
+ Constify some pointers and fix compiler warnings.
+ Get rid of never-true test.
+ Fix an unintended fall-through in a case statement in the ARP
+ printer.
+ Fix several cases where sizeof(sizeof(XXX)) was used when just
+ sizeof(XXX) was intended.
+ Make stricter sanity checks in the ES-IS printer.
+ Get rid of some GCCisms that caused builds to fai with compilers
+ that don't support them.
+ Fix typo in man page.
+ Added length checks to Babel printer.
+
+Sunday July 24, 2011. mcr@sandelman.ca.
+ Summary for 4.2.+
+ merged 802.15.4 decoder from Dmitry Eremin-Solenikov <dbaryshkov
+ at gmail dot com>
+ updates to forces for new port numbers
+ Use "-H", not "-h", for the 802.11s option. (-h always help)
+ Better ICMPv6 checksum handling.
+ add support for the RPKI/Router Protocol, per -ietf-sidr-rpki-rtr-12
+ get rid of uuencoded pcap test files, git can do binary.
+ sFlow changes for 64-bit counters.
+ fixes for PPI packet header handling and printing.
+ Add DCB Exchange protocol (DCBX) version 1.01.
+ Babel dissector, from Juliusz Chroboczek and Grégoire Henry.
+ improvements to radiotap for rate values > 127.
+ Many improvements to ForCES decode, including fix SCTP TML port
+ updated RPL type code to RPL-17 draft
+ Improve printout of DHCPv6 options.
+ added support and test case for QinQ (802.1q VLAN) packets
+ Handle DLT_IEEE802_15_4_NOFCS like DLT_IEEE802_15_4.
+ Build fixes for Sparc and other machines with alignment restrictions.
+ Merged changes from Debian package.
+ PGM: Add ACK decoding and add PGMCC DATA and FEEDBACK options.
+ Build fixes for OSX (Snow Leopard and others)
+ Add support for IEEE 802.15.4 packets
+
+Tue. July 20, 2010. guy@alum.mit.edu.
+ Summary for 4.1.2 tcpdump release
+ If -U is specified, flush the file after creating it, so it's
+ not zero-length
+ Fix TCP flags output description, and some typoes, in the man
+ page
+ Add a -h flag, and only attempt to recognize 802.11s mesh
+ headers if it's set
+ When printing the link-layer type list, send *all* output to
+ stderr
+ Include the CFLAGS setting when configure was run in the
+ compiler flags
+
Thu. April 1, 2010. guy@alum.mit.edu.
Summary for 4.1.1 tcpdump release
Fix build on systems with PF, such as FreeBSD and OpenBSD.
diff --git a/CREDITS b/CREDITS
index 0a3b56eb238f..9e7e875769be 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1,189 +1,203 @@
This file lists people who have contributed to tcpdump:
The current maintainers:
- Bill Fenner <fenner at research dot att dot com>
- David Young <dyoung at pobox dot com>
- Fulvio Risso <risso at polito dot it>
- Guy Harris <guy at alum dot mit dot edu>
- Hannes Gredler <hannes at juniper dot net>
- Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
+ Bill Fenner <fenner at research dot att dot com>
+ David Young <dyoung at pobox dot com>
+ Fulvio Risso <risso at polito dot it>
+ Guy Harris <guy at alum dot mit dot edu>
+ Hannes Gredler <hannes at juniper dot net>
+ Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
Additional people who have contributed patches:
- Aaron Campbell <aaron at arbor dot net>
- Alfredo Andres <aandres at s21sec dot com>
- Albert Chin <china at thewrittenword dot com>
- Ananth Suryanarayana <anantha at juniper dot net>
- Andrea Bittau <a dot bittau at cs dot ucl dot ac dot uk>
- Andrew Brown <atatat at atatdot dot net>
- Andrew Church <andrew at users dot sourceforge dot net>
- Andrew Hintz <adhintz at users dot sourceforge dot net>
- Andrew Silent <andrew at nording dot ru>
- Andrew Tridgell <tridge at linuxcare dot com>
- Andy Heffernan <ahh at juniper dot net>
- Arkadiusz Miskiewicz <misiek at pld dot org dot pl>
- Armando L. Caro Jr. <acaro at mail dot eecis dot udel dot edu>
- Arnaldo Carvalho de Melo <acme at ghostprotocols dot net>
- Ben Byer <bushing at sourceforge dot net>
- Atsushi Onoe <onoe at netbsd dot org>
- Ben Smithurst <ben at scientia dot demon dot co dot uk>
- Bert Vermeulen <bert at biot dot com>
- Bjoern A. Zeeb <bzeeb at Zabbadoz dot NeT>
- Brent L. Bates <blbates at vigyan dot com>
- Brian Ginsbach <ginsbach at cray dot com>
- Bruce M. Simpson <bms at spc dot org>
- Carles Kishimoto Bisbe <ckishimo at ac dot upc dot es>
- Charlie Lenahan <clenahan at fortresstech dot com>
- Charles M. Hannum <mycroft at netbsd dot org>
- Chris Cogdon <chris at cogdon dot org>
- Chris G. Demetriou <cgd at netbsd dot org>
- Christian Sievers <c_s at users dot sourceforge dot net>
- Chris Jepeway <jepeway at blasted-heath dot com>
- Chris Larson <clarson at kergoth dot com>
- Craig Rodrigues <rodrigc at mediaone dot net>
- Crist J. Clark <cjclark at alum dot mit dot edu>
- Daniel Hagerty <hag at ai dot mit dot edu>
- Darren Reed <darrenr at reed dot wattle dot id dot au>
- David Binderman <d dot binderman at virgin dot net>
- David Horn <dhorn2000 at gmail dot com>
- David Smith <dsmith at redhat dot com>
- David Young <dyoung at ojctech dot com>
- Don Ebright <Don dot Ebright at compuware dot com>
- Eddie Kohler <xexd at sourceforge dot net>
- Elmar Kirchner <elmar at juniper dot net>
- Fang Wang <fangwang at sourceforge dot net>
- Florent Drouin <Florent dot Drouin at alcatel-lucent dot fr>
- Florian Forster <octo at verplant dot org>
- Francis Dupont <Francis dot Dupont at enst-bretagne dot fr>
- Francisco Matias Cuenca-Acuna <mcuenca at george dot rutgers dot edu>
- Francois-Xavier Le Bail <fx dot lebail at yahoo dot com>
- Frank Volf <volf at oasis dot IAEhv dot nl>
- Fulvio Risso <risso at polito dot it>
- George Bakos <gbakos at ists dot dartmouth dot edu>
- Gerald Combs <gerald at ethereal dot com>
- Gerrit Renker <gerrit at erg dot abdn dot ac dot uk>
- Gert Doering <gert at greenie dot muc dot de>
- Greg Minshall <minshall at acm dot org>
- Greg Stark <gsstark at mit dot edu>
- Gilbert Ramirez Jr. <gram at xiexie dot org>
- Gisle Vanem <giva at bgnett dot no>
- Hannes Viertel <hviertel at juniper dot net>
- Hank Leininger <tcpdump-workers at progressive-comp dot com>
- Harry Raaymakers <harryr at connect dot com dot au>
- Heinz-Ado Arnolds <Ado dot Arnolds at dhm-systems dot de>
- Hendrik Scholz <hendrik at scholz dot net>
- Ian McDonald <imcdnzl at gmail dot com>
- Ilpo Järvinen <ilpo dot jarvinen at helsinki dot fi>
- Jacek Tobiasz <Jacek dot Tobiasz at atm dot com dot pl>
- Jakob Schlyter <jakob at openbsd dot org>
- Jamal Hadi Salim <hadi at cyberus dot ca>
- Jan Oravec <wsx at wsx6 dot net>
- Jason R. Thorpe <thorpej at netbsd dot org>
- Jefferson Ogata <jogata at nodc dot noaa dot gov>
- Jeffrey Hutzelman <jhutz at cmu dot edu>
- Jesper Peterson <jesper at endace dot com>
- Jim Hutchins <jim at ca dot sandia dot gov>
- Jonathan Heusser <jonny at drugphish dot ch>
- Tatuya Jinmei <jinmei at kame dot net>
- João Medeiros <ignotus21 at sourceforge dot net>
- Joerg Mayer <jmayer@loplof.de>
- Jørgen Thomsen <jth at jth dot net>
- Julian Cowley <julian at lava dot net>
- Kaarthik Sivakumar <kaarthik at torrentnet dot com>
- Karl Norby <karl-norby at sourceforge dot net>
- Kazushi Sugyo <sugyo at pb dot jp dot nec dot com>
- Kelly Carmichael <kcarmich at ipapp dot com>
- Ken Hornstein <kenh at cmf dot nrl dot navy dot mil>
- Kevin Steves <stevesk at pobox dot com>
- Klaus Klein <kleink at reziprozitaet dot de>
- Kris Kennaway <kris at freebsd dot org>
- Krzysztof Halasa <khc at pm dot waw dot pl>
- Larry Lile <lile at stdio dot com>
- Lennert Buytenhek <buytenh at gnu dot org>
- Loris Degioanni <loris at netgroup-serv dot polito dot it>
- Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
- Lucas C. Villa Real <lucasvr at us dot ibm dot com>
- Luis Martin Garcia <luis dot mgarc at gmail dot com>
- Maciej W. Rozycki <macro at ds2 dot pg dot gda dot pl>
- Manu Pathak <mapathak at cisco dot com>
- Marc Binderberger <mbind at sourceforge dot net>
- Marc A. Lehmann <pcg at goof dot com>
- Mark Ellzey Thomas <mark at ackers dot net>
- Marko Kiiskila <carnil at cs dot tut dot fi>
- Markus Schöpflin <schoepflin at sourceforge dot net>
- Marshall Rose <mrose at dbc dot mtview dot ca dot us>
- Martin Husemann <martin at netbsd dot org>
- Max Laier <max at love2party dot net>
- Michael A. Meffie III <meffie at sourceforge dot net>
- Michael Madore <mmadore at turbolinux dot com>
- Michael Riepe <too-tired at sourceforge dot net>
- Michael Shalayeff <mickey at openbsd dot org>
- Michael Shields <shields at msrl dot com>
- Michael T. Stolarchuk <mts at off dot to>
- Michele "mydecay" Marchetto <smarchetto1 at tin dot it>
- Mike Frysinger <vapier at gmail dot com>
- Monroe Williams <monroe at pobox dot com>
- Motonori Shindo <mshindo at mshindo dot net>
- Nathan J. Williams <nathanw at MIT dot EDU>
- Nathaniel Couper-Noles <Nathaniel at isi1 dot tccisi dot com>
- Neil T. Spring <bluehal at users dot sourceforge dot net>
- Niels Provos <provos at openbsd dot org>
- Nickolai Zeldovich <kolya at MIT dot EDU>
- Nicolas Ferrero <toorop at babylo dot net>
- Noritoshi Demizu <demizu at users dot sourceforge dot net>
- Olaf Kirch <okir at caldera dot de>
- Onno van der Linden <onno at simplex dot nl>
- Paolo Abeni <paolo dot abeni at email dot it>
- Pascal Hennequin <pascal dot hennequin at int-evry dot fr>
- Pasvorn Boonmark <boonmark at juniper dot net>
- Paul Mundt <lethal at linux-sh dot org>
- Paul S. Traina <pst at freebsd dot org>
- Pavlin Radoslavov <pavlin at icir dot org>
- Pekka Savola <pekkas at netcore dot fi>
- Peter Fales <peter at fales-lorenz dot net>
- Peter Jeremy <peter dot jeremy at alcatel dot com dot au>
- <pfhunt at users dot sourceforge dot net>
- Peter Volkov <pva at gentoo dot org>
- Phil Wood <cpw at lanl dot gov>
- Rafal Maszkowski <rzm at icm dot edu dot pl>
- Randy Sofia <rsofia at users dot sourceforge dot net>
- Raphael Raimbault <raphael dot raimbault at netasq dot com>
- Rick Cheng <rcheng at juniper dot net>
- Rick Jones <rick dot jones2 at hp dot com>
- Rick Watson <watsonrick at users dot sourceforge dot net>
- Rob Braun <bbraun at synack dot net>
- Robert Edmonds <stu-42 at sourceforge dot net>
- Roderick Schertler <roderick at argon dot org>
- Sagun Shakya <sagun dot shakya at sun dot com>
- Sami Farin <safari at iki dot fi>
- Scott Rose <syberpunk at users dot sourceforge dot net>
- Sebastian Krahmer <krahmer at cs dot uni-potsdam dot de>
- Sebastien Raveau <sebastien dot raveau at epita dot fr>
- Sebastien Vincent <svincent at idems dot fr>
- Sepherosa Ziehau <sepherosa at gmail dot com>
- Seth Webster <swebster at sst dot ll dot mit dot edu>
- Shinsuke Suzuki <suz at kame dot net>
- Steinar Haug <sthaug at nethelp dot no>
- Swaminathan Chandrasekaran <chander at juniper dot net>
- Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp>
- Terry Kennedy <terry at tmk dot com>
- Timo Koskiahde
- Tony Li <tli at procket dot com>
- Toshihiro Kanda <candy at fct dot kgc dot co dot jp>
- Uns Lider <unslider at miranda dot org>
- Victor Oppleman <oppleman at users dot sourceforge dot net>
- Wesley Griffin <wgriffin at users dot sourceforge dot net>
- Wesley Shields <wxs at FreeBSD dot org>
- Wilbert de Graaf <wilbertdg at hetnet dot nl>
- Will Drewry <will at alum dot bu dot edu>
- William J. Hulley <bill dot hulley at gmail dot com>
- Yen Yen Lim
- Yoshifumi Nishida
+ A Costa <agcosta at gis dot net>
+ Aaron Campbell <aaron at arbor dot net>
+ Alfredo Andres <aandres at s21sec dot com>
+ Albert Chin <china at thewrittenword dot com>
+ Ananth Suryanarayana <anantha at juniper dot net>
+ Andrea Bittau <a dot bittau at cs dot ucl dot ac dot uk>
+ Andrew Brown <atatat at atatdot dot net>
+ Andrew Church <andrew at users dot sourceforge dot net>
+ Andrew Hintz <adhintz at users dot sourceforge dot net>
+ Andrew Nording <andrew at nording dot ru>
+ Andrew Tridgell <tridge at linuxcare dot com>
+ Andy Heffernan <ahh at juniper dot net>
+ Anton Bernal <anton at juniper dot net>
+ Arkadiusz Miskiewicz <misiek at pld dot org dot pl>
+ Armando L. Caro Jr. <acaro at mail dot eecis dot udel dot edu>
+ Arnaldo Carvalho de Melo <acme at ghostprotocols dot net>
+ Ben Byer <bushing at sourceforge dot net>
+ Atsushi Onoe <onoe at netbsd dot org>
+ Ben Smithurst <ben at scientia dot demon dot co dot uk>
+ Bert Vermeulen <bert at biot dot com>
+ Bjoern A. Zeeb <bzeeb at Zabbadoz dot NeT>
+ Brent L. Bates <blbates at vigyan dot com>
+ Brian Ginsbach <ginsbach at cray dot com>
+ Bruce M. Simpson <bms at spc dot org>
+ Carles Kishimoto Bisbe <ckishimo at ac dot upc dot es>
+ Charlie Lenahan <clenahan at fortresstech dot com>
+ Charles M. Hannum <mycroft at netbsd dot org>
+ Chris Cogdon <chris at cogdon dot org>
+ Chris G. Demetriou <cgd at netbsd dot org>
+ Chris Jepeway <jepeway at blasted-heath dot com>
+ Chris Larson <clarson at kergoth dot com>
+ Christian Sievers <c_s at users dot sourceforge dot net>
+ Christophe Rhodes <csr21 at cantab dot net>
+ Craig Rodrigues <rodrigc at mediaone dot net>
+ Crist J. Clark <cjclark at alum dot mit dot edu>
+ Daniel Hagerty <hag at ai dot mit dot edu>
+ Darren Reed <darrenr at reed dot wattle dot id dot au>
+ David Binderman <d dot binderman at virgin dot net>
+ David Horn <dhorn2000 at gmail dot com>
+ David Smith <dsmith at redhat dot com>
+ David Young <dyoung at ojctech dot com>
+ Dmitry Eremin-Solenikov <dbaryshkov at gmail dot com>
+ Don Ebright <Don dot Ebright at compuware dot com>
+ Eddie Kohler <xexd at sourceforge dot net>
+ Elmar Kirchner <elmar at juniper dot net>
+ Fang Wang <fangwang at sourceforge dot net>
+ Florent Drouin <Florent dot Drouin at alcatel-lucent dot fr>
+ Florian Forster <octo at verplant dot org>
+ Francis Dupont <Francis dot Dupont at enst-bretagne dot fr>
+ Francisco Matias Cuenca-Acuna <mcuenca at george dot rutgers dot edu>
+ Francois-Xavier Le Bail <fx dot lebail at yahoo dot com>
+ Frank Volf <volf at oasis dot IAEhv dot nl>
+ Fulvio Risso <risso at polito dot it>
+ George Bakos <gbakos at ists dot dartmouth dot edu>
+ Gerald Combs <gerald at ethereal dot com>
+ Gerrit Renker <gerrit at erg dot abdn dot ac dot uk>
+ Gert Doering <gert at greenie dot muc dot de>
+ Greg Minshall <minshall at acm dot org>
+ Greg Stark <gsstark at mit dot edu>
+ Grégoire Henry <henry@pps.jussieu.fr>
+ Gilbert Ramirez Jr. <gram at xiexie dot org>
+ Gisle Vanem <gvanem at broadpark dot no>
+ Hannes Viertel <hviertel at juniper dot net>
+ Hank Leininger <tcpdump-workers at progressive-comp dot com>
+ Harry Raaymakers <harryr at connect dot com dot au>
+ Heinz-Ado Arnolds <Ado dot Arnolds at dhm-systems dot de>
+ Hendrik Scholz <hendrik at scholz dot net>
+ Ian McDonald <imcdnzl at gmail dot com>
+ Ilpo Järvinen <ilpo dot jarvinen at helsinki dot fi>
+ Jacek Tobiasz <Jacek dot Tobiasz at atm dot com dot pl>
+ Jakob Schlyter <jakob at openbsd dot org>
+ Jamal Hadi Salim <hadi at cyberus dot ca>
+ Jan Oravec <wsx at wsx6 dot net>
+ Jason R. Thorpe <thorpej at netbsd dot org>
+ Jefferson Ogata <jogata at nodc dot noaa dot gov>
+ Jeffrey Hutzelman <jhutz at cmu dot edu>
+ Jesper Peterson <jesper at endace dot com>
+ Jim Hutchins <jim at ca dot sandia dot gov>
+ Jonathan Heusser <jonny at drugphish dot ch>
+ Tatuya Jinmei <jinmei at kame dot net>
+ João Medeiros <ignotus21 at sourceforge dot net>
+ Joerg Mayer <jmayer@loplof.de>
+ Jørgen Thomsen <jth at jth dot net>
+ Julian Cowley <julian at lava dot net>
+ Juliusz Chroboczek <jch@pps.jussieu.fr>
+ Kaarthik Sivakumar <kaarthik at torrentnet dot com>
+ Kaladhar Musunuru <kaladharm at sourceforge dot net>
+ Karl Norby <karl-norby at sourceforge dot net>
+ Kazushi Sugyo <sugyo at pb dot jp dot nec dot com>
+ Kelly Carmichael <kcarmich at ipapp dot com>
+ Ken Hornstein <kenh at cmf dot nrl dot navy dot mil>
+ Kevin Steves <stevesk at pobox dot com>
+ Klaus Klein <kleink at reziprozitaet dot de>
+ Kris Kennaway <kris at freebsd dot org>
+ Krzysztof Halasa <khc at pm dot waw dot pl>
+ Larry Lile <lile at stdio dot com>
+ Lennert Buytenhek <buytenh at gnu dot org>
+ Loris Degioanni <loris at netgroup-serv dot polito dot it>
+ Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
+ Lucas C. Villa Real <lucasvr at us dot ibm dot com>
+ Luis MartinGarcia <luis dot mgarc at gmail dot com>
+ Maciej W. Rozycki <macro at ds2 dot pg dot gda dot pl>
+ Manu Pathak <mapathak at cisco dot com>
+ Marc Binderberger <mbind at sourceforge dot net>
+ Marc A. Lehmann <pcg at goof dot com>
+ Mark Ellzey Thomas <mark at ackers dot net>
+ Marko Kiiskila <carnil at cs dot tut dot fi>
+ Markus Schöpflin <schoepflin at sourceforge dot net>
+ Marshall Rose <mrose at dbc dot mtview dot ca dot us>
+ Martin Husemann <martin at netbsd dot org>
+ Max Laier <max at love2party dot net>
+ Michael A. Meffie III <meffie at sourceforge dot net>
+ Michael Madore <mmadore at turbolinux dot com>
+ Michael Riepe <too-tired at sourceforge dot net>
+ Michael Shalayeff <mickey at openbsd dot org>
+ Michael Shields <shields at msrl dot com>
+ Michael T. Stolarchuk <mts at off dot to>
+ Michal Sekletar <msekleta at redhat dot com>
+ Michele "mydecay" Marchetto <smarchetto1 at tin dot it>
+ Mike Frysinger <vapier at gmail dot com>
+ Minto Jeyananth <minto at juniper dot net>
+ Monroe Williams <monroe at pobox dot com>
+ Motonori Shindo <mshindo at mshindo dot net>
+ Nathan J. Williams <nathanw at MIT dot EDU>
+ Nathaniel Couper-Noles <Nathaniel at isi1 dot tccisi dot com>
+ Neil T. Spring <bluehal at users dot sourceforge dot net>
+ Niels Provos <provos at openbsd dot org>
+ Nickolai Zeldovich <kolya at MIT dot EDU>
+ Nicolas Ferrero <toorop at babylo dot net>
+ Noritoshi Demizu <demizu at users dot sourceforge dot net>
+ Olaf Kirch <okir at caldera dot de>
+ Onno van der Linden <onno at simplex dot nl>
+ Paolo Abeni <paolo dot abeni at email dot it>
+ Pascal Hennequin <pascal dot hennequin at int-evry dot fr>
+ Pasvorn Boonmark <boonmark at juniper dot net>
+ Paul Ferrell <pflarr at sourceforge dot net>
+ Paul Mundt <lethal at linux-sh dot org>
+ Paul S. Traina <pst at freebsd dot org>
+ Pavlin Radoslavov <pavlin at icir dot org>
+ Pawel Worach <pawel dot worach at gmail dot com>
+ Pekka Savola <pekkas at netcore dot fi>
+ Peter Fales <peter at fales-lorenz dot net>
+ Peter Jeremy <peter dot jeremy at alcatel dot com dot au>
+ <pfhunt at users dot sourceforge dot net>
+ Peter Volkov <pva at gentoo dot org>
+ Phil Wood <cpw at lanl dot gov>
+ Rafal Maszkowski <rzm at icm dot edu dot pl>
+ Randy Sofia <rsofia at users dot sourceforge dot net>
+ Raphael Raimbault <raphael dot raimbault at netasq dot com>
+ Rick Cheng <rcheng at juniper dot net>
+ Rick Jones <rick dot jones2 at hp dot com>
+ Rick Watson <watsonrick at users dot sourceforge dot net>
+ Rob Braun <bbraun at synack dot net>
+ Robert Edmonds <stu-42 at sourceforge dot net>
+ Roderick Schertler <roderick at argon dot org>
+ Romain Francoise <rfrancoise at debian dot org>
+ Sagun Shakya <sagun dot shakya at sun dot com>
+ Sami Farin <safari at iki dot fi>
+ Scott Mcmillan <scott.a.mcmillan at intel dot com>
+ Scott Rose <syberpunk at users dot sourceforge dot net>
+ Sebastian Krahmer <krahmer at cs dot uni-potsdam dot de>
+ Sebastien Raveau <sebastien dot raveau at epita dot fr>
+ Sebastien Vincent <svincent at idems dot fr>
+ Sepherosa Ziehau <sepherosa at gmail dot com>
+ Seth Webster <swebster at sst dot ll dot mit dot edu>
+ Shinsuke Suzuki <suz at kame dot net>
+ Steinar Haug <sthaug at nethelp dot no>
+ Swaminathan Chandrasekaran <chander at juniper dot net>
+ Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp>
+ Terry Kennedy <terry at tmk dot com>
+ Timo Koskiahde
+ Tony Li <tli at procket dot com>
+ Toshihiro Kanda <candy at fct dot kgc dot co dot jp>
+ Uns Lider <unslider at miranda dot org>
+ Victor Oppleman <oppleman at users dot sourceforge dot net>
+ Weesan Lee <weesan at juniper dot net>
+ Wesley Griffin <wgriffin at users dot sourceforge dot net>
+ Wesley Shields <wxs at FreeBSD dot org>
+ Wilbert de Graaf <wilbertdg at hetnet dot nl>
+ Will Drewry <will at alum dot bu dot edu>
+ William J. Hulley <bill dot hulley at gmail dot com>
+ Yen Yen Lim
+ Yoshifumi Nishida
The original LBL crew:
- Steve McCanne
- Craig Leres
- Van Jacobson
+ Steve McCanne
+ Craig Leres
+ Van Jacobson
Past maintainers:
- Jun-ichiro itojun Hagino <itojun at iijlab dot net>
+ Jun-ichiro itojun Hagino <itojun at iijlab dot net>
diff --git a/Makefile.in b/Makefile.in
index 8e7b73b4cf6a..d7a81bc64948 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -26,6 +26,7 @@
# Top level hierarchy
prefix = @prefix@
exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
# Pathname of directory to install the binary
sbindir = @sbindir@
# Pathname of directory to install the man page
@@ -46,7 +47,8 @@ INCLS = -I. @V_INCLS@
DEFS = @DEFS@ @CPPFLAGS@ @V_DEFS@
# Standard CFLAGS
-CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
+CFLAGS = @CFLAGS@
+FULL_CFLAGS = $(CCOPT) $(DEFS) $(INCLS) $(CFLAGS)
# Standard LDFLAGS
LDFLAGS = @LDFLAGS@
@@ -64,15 +66,15 @@ RANLIB = @RANLIB@
# problem if you don't own the file but can write to the directory.
.c.o:
@rm -f $@
- $(CC) $(CFLAGS) -c $(srcdir)/$*.c
+ $(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c \
- nlpid.c l2vpn.c machdep.c parsenfsfh.c \
- print-802_11.c print-ap1394.c print-ah.c print-arcnet.c \
- print-aodv.c print-arp.c print-ascii.c print-atalk.c print-atm.c \
- print-beep.c print-bfd.c print-bgp.c print-bootp.c print-bt.c \
- print-cdp.c print-cfm.c print-chdlc.c print-cip.c print-cnfp.c \
- print-dccp.c print-decnet.c \
+ nlpid.c l2vpn.c machdep.c parsenfsfh.c in_cksum.c \
+ print-802_11.c print-802_15_4.c print-ap1394.c print-ah.c \
+ print-arcnet.c print-aodv.c print-arp.c print-ascii.c print-atalk.c \
+ print-atm.c print-beep.c print-bfd.c print-bgp.c \
+ print-bootp.c print-bt.c print-carp.c print-cdp.c print-cfm.c \
+ print-chdlc.c print-cip.c print-cnfp.c print-dccp.c print-decnet.c \
print-domain.c print-dtp.c print-dvmrp.c print-enc.c print-egp.c \
print-eap.c print-eigrp.c\
print-esp.c print-ether.c print-fddi.c print-fr.c \
@@ -83,8 +85,9 @@ CSRC = addrtoname.c af.c checksum.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c
print-lmp.c print-lspping.c print-lwapp.c \
print-lwres.c print-mobile.c print-mpcp.c print-mpls.c print-msdp.c \
print-nfs.c print-ntp.c print-null.c print-olsr.c print-ospf.c \
- print-pgm.c print-pim.c print-ppp.c print-pppoe.c print-pptp.c \
- print-radius.c print-raw.c print-rip.c print-rrcp.c print-rsvp.c \
+ print-pgm.c print-pim.c \
+ print-ppi.c print-ppp.c print-pppoe.c print-pptp.c \
+ print-radius.c print-raw.c print-rip.c print-rpki-rtr.c print-rrcp.c print-rsvp.c \
print-rx.c print-sctp.c print-sflow.c print-sip.c print-sl.c print-sll.c \
print-slow.c print-snmp.c print-stp.c print-sunatm.c print-sunrpc.c \
print-symantec.c print-syslog.c print-tcp.c print-telnet.c print-tftp.c \
@@ -165,6 +168,7 @@ HDR = \
oui.h \
pcap-missing.h \
pmap_prot.h \
+ ppi.h \
ppp.h \
route6d.h \
rpc_auth.h \
@@ -226,16 +230,12 @@ EXTRA_DIST = \
lbl/os-ultrix4.h \
makemib \
missing/addrinfo.h \
- missing/addrsize.h \
- missing/bittypes.h \
missing/dlnames.c \
missing/datalinks.c \
missing/getnameinfo.c \
missing/inet_aton.c \
missing/inet_ntop.c \
missing/inet_pton.c \
- missing/resolv6.h \
- missing/resolv_ext.h \
missing/snprintf.c \
missing/sockstorage.h \
missing/strdup.c \
@@ -245,6 +245,7 @@ EXTRA_DIST = \
mkdep \
packetdat.awk \
pcap_dump_ftell.c \
+ print-babel.c \
print-dhcp6.c \
print-frag6.c \
print-icmp6.c \
@@ -262,12 +263,18 @@ EXTRA_DIST = \
stime.awk \
strcasecmp.c \
tcpdump.1.in \
- tests/02-sunrise-sunset-esp.puu \
- tests/08-sunrise-sunset-aes.puu \
- tests/08-sunrise-sunset-esp2.puu \
+ tests/02-sunrise-sunset-esp.pcap \
+ tests/08-sunrise-sunset-aes.pcap \
+ tests/08-sunrise-sunset-esp2.pcap \
+ tests/QinQpacket.out \
+ tests/QinQpacket.pcap \
+ tests/QinQpacketv.out \
tests/TESTLIST \
tests/TESTonce \
tests/TESTrun.sh \
+ tests/babel.pcap \
+ tests/babel1.out \
+ tests/babel1v.out \
tests/bgp-infinite-loop.pcap \
tests/bgp_vpn_attrset.out \
tests/bgp_vpn_attrset.pcap \
@@ -279,8 +286,8 @@ EXTRA_DIST = \
tests/e1000g.pcap \
tests/eapon1.gdbinit \
tests/eapon1.out \
- tests/eapon1.puu \
- tests/eapon2.puu \
+ tests/eapon1.pcap \
+ tests/empty.uu \
tests/esp-secrets.txt \
tests/esp0.out \
tests/esp1.gdbinit \
@@ -292,61 +299,57 @@ EXTRA_DIST = \
tests/esp5.gdbinit \
tests/esp5.out \
tests/espudp1.out \
- tests/espudp1.puu \
+ tests/espudp1.pcap \
tests/forces1.out \
tests/forces1.pcap \
tests/forces1vvv.out \
tests/forces1vvvv.out \
tests/forces2.out \
- tests/forces2.pcap \
tests/forces2v.out \
tests/forces2vv.out \
- tests/ikev2.puu \
+ tests/forces3vvv.out \
tests/ikev2four.out \
- tests/ikev2four.puu \
+ tests/ikev2four.pcap \
tests/ikev2fourv.out \
tests/ikev2fourv4.out \
tests/ikev2pI2-secrets.txt \
tests/ikev2pI2.out \
- tests/ikev2pI2.puu \
- tests/isakmp-delete-segfault.puu \
- tests/isakmp-identification-segfault.puu \
- tests/isakmp-pointer-loop.puu \
+ tests/ikev2pI2.pcap \
+ tests/isakmp-delete-segfault.pcap \
+ tests/isakmp-identification-segfault.pcap \
+ tests/isakmp-pointer-loop.pcap \
tests/isakmp1.out \
tests/isakmp2.out \
tests/isakmp3.out \
tests/isakmp4.out \
- tests/isakmp4500.puu \
+ tests/isakmp4500.pcap \
tests/isis-infinite-loop.pcap \
tests/ldp-infinite-loop.pcap \
tests/lmp.out \
- tests/lmp.puu \
+ tests/lmp.pcap \
tests/lmp.sh \
tests/lspping-fec-ldp.pcap \
tests/lspping-fec-rsvp.pcap \
tests/mpls-ldp-hello.out \
- tests/mpls-ldp-hello.puu \
+ tests/mpls-ldp-hello.pcap \
tests/mpls-traceroute.pcap \
tests/ospf-gmpls.out \
- tests/ospf-gmpls.puu \
+ tests/ospf-gmpls.pcap \
tests/print-A.out \
tests/print-AA.out \
tests/print-capX.out \
tests/print-capXX.out \
- tests/print-flags.puu \
+ tests/print-flags.pcap \
tests/print-flags.sh \
tests/print-x.out \
tests/print-xx.out \
tests/rsvp-infinite-loop.pcap \
+ tests/sflow_multiple_counter_30_pdus.out \
+ tests/sflow_multiple_counter_30_pdus.pcap \
vfprintf.c \
- win32/Include/Arpa/tftp.h \
win32/Include/errno.h \
win32/Include/getopt.h \
- win32/Include/inetprivate.h \
- win32/Include/telnet.h \
win32/Include/w32_fzs.h \
- win32/Include/Netinet/in_systm.h \
- win32/Include/Netinet/ip.h \
win32/Src/getopt.c \
win32/prj/GNUmakefile \
win32/prj/WinDump.dsp \
@@ -356,7 +359,7 @@ all: $(PROG)
$(PROG): $(OBJ) @V_PCAPDEP@
@rm -f $@
- $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
+ $(CC) $(FULL_CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
$(LIBNETDISSECT): $(LIBNETDISSECT_OBJ)
@rm -f $@
@@ -364,30 +367,30 @@ $(LIBNETDISSECT): $(LIBNETDISSECT_OBJ)
$(RANLIB) $@
datalinks.o: $(srcdir)/missing/datalinks.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/datalinks.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/datalinks.c
dlnames.o: $(srcdir)/missing/dlnames.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/dlnames.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/dlnames.c
getnameinfo.o: $(srcdir)/missing/getnameinfo.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/getnameinfo.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/getnameinfo.c
getaddrinfo.o: $(srcdir)/missing/getaddrinfo.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/getaddrinfo.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/getaddrinfo.c
inet_pton.o: $(srcdir)/missing/inet_pton.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/inet_pton.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/inet_pton.c
inet_ntop.o: $(srcdir)/missing/inet_ntop.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/inet_ntop.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/inet_ntop.c
inet_aton.o: $(srcdir)/missing/inet_aton.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/inet_aton.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/inet_aton.c
snprintf.o: $(srcdir)/missing/snprintf.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
strlcat.o: $(srcdir)/missing/strlcat.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
strlcpy.o: $(srcdir)/missing/strlcpy.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
strsep.o: $(srcdir)/missing/strsep.c
- $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/strsep.c
+ $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strsep.c
version.o: version.c
- $(CC) $(CFLAGS) -c version.c
+ $(CC) $(FULL_CFLAGS) -c version.c
version.c: $(srcdir)/VERSION
@rm -f $@
@@ -423,9 +426,9 @@ clean:
distclean:
rm -f $(CLEANFILES) Makefile config.cache config.log config.status \
config.h gnuc.h os-proto.h stamp-h stamp-h.in $(PROG).1
+ rm -rf autom4te.cache
check: tcpdump
- uudecode --help || (echo "No uudecode program found, not running tests"; echo "apt-get/rpm install sharutils?"; exit 1)
(cd tests && ./TESTrun.sh)
tags: $(TAGFILES)
diff --git a/VERSION b/VERSION
index 627a3f43a64f..fae6e3d04b2c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.1.1
+4.2.1
diff --git a/acconfig.h b/acconfig.h
index 97417969a27c..9eb54f8b3dfa 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -8,12 +8,6 @@
/* Define if you enable support for the libsmi. */
#undef LIBSMI
-/* define if you have struct __res_state_ext */
-#undef HAVE_RES_STATE_EXT
-
-/* define if your struct __res_state has the nsort member */
-#undef HAVE_NEW_RES_STATE
-
/* define if you have the addrinfo function. */
#undef HAVE_ADDRINFO
@@ -23,15 +17,6 @@
/* define ifyou have the h_errno variable. */
#undef HAVE_H_ERRNO
-/* define if IN6ADDRSZ is defined (XXX not used!) */
-#undef HAVE_IN6ADDRSZ
-
-/* define if INADDRSZ is defined (XXX not used!) */
-#undef HAVE_INADDRSZ
-
-/* define if RES_USE_INET6 is defined */
-#undef HAVE_RES_USE_INET6
-
/* define if you have struct sockaddr_storage */
#undef HAVE_SOCKADDR_STORAGE
@@ -68,9 +53,6 @@
/* define if you have getrpcbynumber() */
#undef HAVE_GETRPCBYNUMBER
-/* AIX hack. */
-#undef _SUN
-
/* Workaround for missing 64-bit formats */
#undef PRId64
#undef PRIo64
diff --git a/aclocal.m4 b/aclocal.m4
index 40b586648d5f..9570de5309af 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -47,7 +47,7 @@ AC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
$1="-O"
$2=""
if test "${srcdir}" != "." ; then
- $2="-I\$(srcdir)"
+ $2="-I$srcdir"
fi
if test "${CFLAGS+set}" = set; then
LBL_CFLAGS="$CFLAGS"
@@ -309,14 +309,22 @@ AC_DEFUN(AC_LBL_LIBPCAP,
#
# Look for pcap-config.
#
- AC_PATH_PROG(PCAP_CONFIG, pcap-config)
+ AC_PATH_TOOL(PCAP_CONFIG, pcap-config)
if test -n "$PCAP_CONFIG" ; then
#
# Found - use it to get the include flags for
# libpcap and the flags to link with libpcap.
#
- $2="`\"$PCAP_CONFIG\" --cflags` $$2"
- libpcap="`\"$PCAP_CONFIG\" --libs`"
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PCAP_CONFIG" --cflags`
+ $2="$cflags $$2"
+ libpcap=`"$PCAP_CONFIG" --libs`
else
#
# Not found; look for pcap.
@@ -378,9 +386,17 @@ AC_DEFUN(AC_LBL_LIBPCAP,
# The libpcap directory has a pcap-config script.
# Use it to get any additioal libraries needed
# to link with the libpcap archive library in
- # that directory
+ # that directory.
+ #
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
#
- libpcap="$libpcap `\"$PCAP_CONFIG\" --additional-libs --static`"
+ additional_libs=`"$PCAP_CONFIG" --additional-libs --static`
+ libpcap="$libpcap $additional_libs"
fi
fi
LIBS="$libpcap $LIBS"
@@ -418,6 +434,21 @@ AC_DEFUN(AC_LBL_LIBPCAP,
fi
dnl
+ dnl Check for "pcap_loop()", to make sure we found a working
+ dnl libpcap and have all the right other libraries with which
+ dnl to link. (Otherwise, the checks below will fail, not
+ dnl because the routines are missing from the library, but
+ dnl because we aren't linking properly with libpcap, and
+ dnl that will cause confusing errors at build time.)
+ dnl
+ AC_CHECK_FUNC(pcap_loop,,
+ [
+ AC_MSG_ERROR(
+[Report this to tcpdump-workers@lists.tcpdump.org, and include the
+config.log file in your report])
+ ])
+
+ dnl
dnl Check for "pcap_list_datalinks()", "pcap_set_datalink()",
dnl and "pcap_datalink_name_to_val()", and use substitute versions
dnl if they're not present.
@@ -1057,113 +1088,6 @@ AC_DEFUN(AC_STRUCT_SA_STORAGE, [
])
dnl
-dnl Checks for macro of IP address size
-AC_DEFUN(AC_CHECK_ADDRSZ, [
- $1=yes
-dnl check for INADDRSZ
- AC_MSG_CHECKING(for INADDRSZ)
- AC_CACHE_VAL(ac_cv_inaddrsz,
- AC_TRY_COMPILE([
-# include <arpa/nameser.h>],
- [int a = INADDRSZ],
- ac_cv_inaddrsz=yes,
- ac_cv_inaddrsz=no))
- AC_MSG_RESULT($ac_cv_inaddrsz)
- if test $ac_cv_inaddrsz = yes; then
- AC_DEFINE(HAVE_INADDRSZ)
- else
- $1=no
- fi
-dnl check for IN6ADDRSZ
- AC_MSG_CHECKING(for IN6ADDRSZ)
- AC_CACHE_VAL(ac_cv_in6addrsz,
- AC_TRY_COMPILE([
-# include <arpa/nameser.h>],
- [int a = IN6ADDRSZ],
- ac_cv_in6addrsz=yes,
- ac_cv_in6addrsz=no))
- AC_MSG_RESULT($ac_cv_in6addrsz)
- if test $ac_cv_in6addrsz = yes; then
- AC_DEFINE(HAVE_IN6ADDRSZ)
- else
- $1=no
- fi
-])
-
-dnl
-dnl check for RES_USE_INET6
-AC_DEFUN(AC_CHECK_RES_USE_INET6, [
- AC_MSG_CHECKING(for RES_USE_INET6)
- AC_CACHE_VAL($1,
- AC_TRY_COMPILE([
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <resolv.h>],
- [int a = RES_USE_INET6],
- $1=yes,
- $1=no))
- AC_MSG_RESULT($$1)
- if test $$1 = yes; then
- AC_DEFINE(HAVE_RES_USE_INET6)
- fi
-])
-
-dnl
-dnl check for AAAA
-AC_DEFUN(AC_CHECK_AAAA, [
- AC_MSG_CHECKING(for AAAA)
- AC_CACHE_VAL($1,
- AC_TRY_COMPILE([
-# include <sys/types.h>
-# include <arpa/nameser.h>],
- [int a = T_AAAA],
- $1=yes,
- $1=no))
- AC_MSG_RESULT($$1)
- if test $$1 = yes; then
- AC_DEFINE(HAVE_AAAA)
- fi
-])
-
-dnl
-dnl check for struct res_state_ext
-AC_DEFUN(AC_STRUCT_RES_STATE_EXT, [
- AC_MSG_CHECKING(for res_state_ext)
- AC_CACHE_VAL($1,
- AC_TRY_COMPILE([
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <netinet6/in6.h>
-# include <resolv.h>],
- [struct __res_state_ext e],
- $1=yes,
- $1=no))
- AC_MSG_RESULT($$1)
- if test $$1 = yes; then
- AC_DEFINE(HAVE_RES_STATE_EXT)
- fi
-])
-
-dnl
-dnl check for struct res_state_ext
-AC_DEFUN(AC_STRUCT_RES_STATE, [
- AC_MSG_CHECKING(for nsort in res_state)
- AC_CACHE_VAL($1,
- AC_TRY_COMPILE([
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <netinet6/in6.h>
-# include <resolv.h>],
- [struct __res_state e; e.nsort = 0],
- $1=yes,
- $1=no))
- AC_MSG_RESULT($$1)
- if test $$1 = yes; then
- AC_DEFINE(HAVE_NEW_RES_STATE)
- fi
-])
-
-dnl
dnl check for h_errno
AC_DEFUN(AC_VAR_H_ERRNO, [
AC_MSG_CHECKING(for h_errno)
@@ -1187,7 +1111,7 @@ dnl
AC_DEFUN(AC_C___ATTRIBUTE__, [
AC_MSG_CHECKING(for __attribute__)
AC_CACHE_VAL(ac_cv___attribute__, [
-AC_COMPILE_IFELSE(
+AC_COMPILE_IFELSE([
AC_LANG_SOURCE([[
#include <stdlib.h>
@@ -1204,7 +1128,7 @@ main(int argc, char **argv)
{
foo();
}
- ]]),
+ ]])],
ac_cv___attribute__=yes,
ac_cv___attribute__=no)])
if test "$ac_cv___attribute__" = "yes"; then
@@ -1225,7 +1149,7 @@ dnl
AC_DEFUN(AC_C___ATTRIBUTE___FORMAT_FUNCTION_POINTER, [
AC_MSG_CHECKING([whether __attribute__((format)) can be applied to function pointers])
AC_CACHE_VAL(ac_cv___attribute___format_function_pointer, [
-AC_COMPILE_IFELSE(
+AC_COMPILE_IFELSE([
AC_LANG_SOURCE([[
#include <stdlib.h>
@@ -1237,7 +1161,7 @@ main(int argc, char **argv)
{
(*foo)("%s", "test");
}
- ]]),
+ ]])],
ac_cv___attribute___format_function_pointer=yes,
ac_cv___attribute___format_function_pointer=no)])
if test "$ac_cv___attribute___format_function_pointer" = "yes"; then
diff --git a/addrtoname.c b/addrtoname.c
index 29826dfbc7e2..d77f27b0ac4f 100644
--- a/addrtoname.c
+++ b/addrtoname.c
@@ -508,6 +508,34 @@ etheraddr_string(register const u_char *ep)
}
const char *
+le64addr_string(const u_char *ep)
+{
+ const unsigned int len = 8;
+ register u_int i;
+ register char *cp;
+ register struct enamemem *tp;
+ char buf[BUFSIZE];
+
+ tp = lookup_bytestring(ep, len);
+ if (tp->e_name)
+ return (tp->e_name);
+
+ cp = buf;
+ for (i = len; i > 0 ; --i) {
+ *cp++ = hex[*(ep + i - 1) >> 4];
+ *cp++ = hex[*(ep + i - 1) & 0xf];
+ *cp++ = ':';
+ }
+ cp --;
+
+ *cp = '\0';
+
+ tp->e_name = strdup(buf);
+
+ return (tp->e_name);
+}
+
+const char *
linkaddr_string(const u_char *ep, const unsigned int type, const unsigned int len)
{
register u_int i;
diff --git a/addrtoname.h b/addrtoname.h
index 1df204a941f4..cd5c41f4a5ff 100644
--- a/addrtoname.h
+++ b/addrtoname.h
@@ -34,6 +34,7 @@ enum {
extern const char *linkaddr_string(const u_char *, const unsigned int, const unsigned int);
extern const char *etheraddr_string(const u_char *);
+extern const char *le64addr_string(const u_char *);
extern const char *etherproto_string(u_short);
extern const char *tcpport_string(u_short);
extern const char *udpport_string(u_short);
diff --git a/bootp.h b/bootp.h
index 65ca3766c713..b1b81dce9084 100644
--- a/bootp.h
+++ b/bootp.h
@@ -37,7 +37,7 @@ struct bootp {
u_int8_t bp_sname[64]; /* server host name */
u_int8_t bp_file[128]; /* boot file name */
u_int8_t bp_vend[64]; /* vendor-specific area */
-};
+} UNALIGNED;
/*
* UDP port numbers, server and client.
@@ -217,7 +217,7 @@ struct cmu_vend {
struct in_addr v_ins1, v_ins2; /* IEN-116 name servers */
struct in_addr v_ts1, v_ts2; /* Time servers */
u_int8_t v_unused[24]; /* currently unused */
-};
+} UNALIGNED;
/* v_flags values */
diff --git a/config.h.in b/config.h.in
index 20c3fcf394a9..9ee068be14fe 100644
--- a/config.h.in
+++ b/config.h.in
@@ -8,12 +8,6 @@
/* Define if you enable support for the libsmi. */
#undef LIBSMI
-/* define if you have struct __res_state_ext */
-#undef HAVE_RES_STATE_EXT
-
-/* define if your struct __res_state has the nsort member */
-#undef HAVE_NEW_RES_STATE
-
/* define if you have the addrinfo function. */
#undef HAVE_ADDRINFO
@@ -23,15 +17,6 @@
/* define ifyou have the h_errno variable. */
#undef HAVE_H_ERRNO
-/* define if IN6ADDRSZ is defined (XXX not used!) */
-#undef HAVE_IN6ADDRSZ
-
-/* define if INADDRSZ is defined (XXX not used!) */
-#undef HAVE_INADDRSZ
-
-/* define if RES_USE_INET6 is defined */
-#undef HAVE_RES_USE_INET6
-
/* define if you have struct sockaddr_storage */
#undef HAVE_SOCKADDR_STORAGE
@@ -68,9 +53,6 @@
/* define if you have getrpcbynumber() */
#undef HAVE_GETRPCBYNUMBER
-/* AIX hack. */
-#undef _SUN
-
/* Workaround for missing 64-bit formats */
#undef PRId64
#undef PRIo64
@@ -108,6 +90,9 @@
/* Define to 1 if you have the <fcntl.h> header file. */
#undef HAVE_FCNTL_H
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
/* Define to 1 if you have the `getnameinfo' function. */
#undef HAVE_GETNAMEINFO
@@ -165,6 +150,9 @@
/* Define to 1 if you have the `pcap_lib_version' function. */
#undef HAVE_PCAP_LIB_VERSION
+/* Define to 1 if you have the `pcap_set_tstamp_type' function. */
+#undef HAVE_PCAP_SET_TSTAMP_TYPE
+
/* Define to 1 if you have the <pcap/usb.h> header file. */
#undef HAVE_PCAP_USB_H
@@ -174,6 +162,9 @@
/* Define to 1 if you have the <rpc/rpcent.h> header file. */
#undef HAVE_RPC_RPCENT_H
+/* Define to 1 if you have the <rpc/rpc.h> header file. */
+#undef HAVE_RPC_RPC_H
+
/* Define to 1 if you have the `setlinebuf' function. */
#undef HAVE_SETLINEBUF
@@ -237,6 +228,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
/* Define to 1 if you have the `vfprintf' function. */
#undef HAVE_VFPRINTF
@@ -276,21 +270,6 @@
/* return value of signal handlers */
#undef RETSIGVAL
-/* The size of `char', as computed by sizeof. */
-#undef SIZEOF_CHAR
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
@@ -303,6 +282,9 @@
/* needed on HP-UX */
#undef _HPUX_SOURCE
+/* define on AIX to get certain functions */
+#undef _SUN
+
/* define if your compiler allows __attribute__((format)) to be applied to
function pointers */
#undef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
diff --git a/configure b/configure
index cb51d19c8057..f481d333d3f9 100755
--- a/configure
+++ b/configure
@@ -1267,6 +1267,7 @@ if test -n "$ac_init_help"; then
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --disable-universal don't build universal on OS X
--enable-smb enable possibly-buggy SMB printer default=yes
--disable-smb disable possibly-buggy SMB printer
--enable-ipv6 enable ipv6 (with ipv4) support
@@ -1845,7 +1846,7 @@ fi
V_CCOPT="-O"
V_INCLS=""
if test "${srcdir}" != "." ; then
- V_INCLS="-I\$(srcdir)"
+ V_INCLS="-I$srcdir"
fi
if test "${CFLAGS+set}" = set; then
LBL_CFLAGS="$CFLAGS"
@@ -3217,7 +3218,8 @@ if test "${ac_cv___attribute__+set}" = set; then
else
cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+
+ /* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
@@ -3290,7 +3292,8 @@ if test "${ac_cv___attribute___format_function_pointer+set}" = set; then
else
cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
+
+ /* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
@@ -3986,7 +3989,8 @@ done
-for ac_header in fcntl.h rpc/rpcent.h netdnet/dnetdb.h
+
+for ac_header in fcntl.h rpc/rpc.h rpc/rpcent.h netdnet/dnetdb.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -4387,6 +4391,36 @@ fi
case "$host_os" in
+darwin*)
+ # Check whether --enable-universal was given.
+if test "${enable_universal+set}" = set; then
+ enableval=$enable_universal;
+fi
+
+ if test "$enable_universal" != "no"; then
+ case "$host_os" in
+
+ darwin9.*)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
+ LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
+ ;;
+
+ darwin10.*)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
+ LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
+ ;;
+ esac
+ fi
+ ;;
+
linux*)
{ echo "$as_me:$LINENO: checking Linux kernel version" >&5
echo $ECHO_N "checking Linux kernel version... $ECHO_C" >&6; }
@@ -4807,7 +4841,7 @@ if test "${enable_ipv6+set}" = set; then
enableval=$enable_ipv6; case "$enableval" in
yes) { echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6; }
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
cat >>confdefs.h <<\_ACEOF
#define INET6 1
_ACEOF
@@ -4867,7 +4901,7 @@ eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
(exit $ac_status); }; }; then
{ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6; }
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
cat >>confdefs.h <<\_ACEOF
#define INET6 1
_ACEOF
@@ -5467,2032 +5501,6 @@ _ACEOF
fi
-{ echo "$as_me:$LINENO: checking for char" >&5
-echo $ECHO_N "checking for char... $ECHO_C" >&6; }
-if test "${ac_cv_type_char+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef char ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_char=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_char=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
-echo "${ECHO_T}$ac_cv_type_char" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of char" >&5
-echo $ECHO_N "checking size of char... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_char+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_char=$ac_lo;;
-'') if test "$ac_cv_type_char" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_char=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef char ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_char=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_char" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (char)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_char=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
-echo "${ECHO_T}$ac_cv_sizeof_char" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for short" >&5
-echo $ECHO_N "checking for short... $ECHO_C" >&6; }
-if test "${ac_cv_type_short+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef short ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_short=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_short=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
-echo "${ECHO_T}$ac_cv_type_short" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of short" >&5
-echo $ECHO_N "checking size of short... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_short+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_short=$ac_lo;;
-'') if test "$ac_cv_type_short" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_short=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef short ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_short=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_short" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (short)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_short=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
-echo "${ECHO_T}$ac_cv_sizeof_short" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for int" >&5
-echo $ECHO_N "checking for int... $ECHO_C" >&6; }
-if test "${ac_cv_type_int+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef int ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_int=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_int=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
-echo "${ECHO_T}$ac_cv_type_int" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of int" >&5
-echo $ECHO_N "checking size of int... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_int+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_int=$ac_lo;;
-'') if test "$ac_cv_type_int" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_int=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef int ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_int=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_int" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (int)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_int=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
-echo "${ECHO_T}$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for long" >&5
-echo $ECHO_N "checking for long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_long=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
-echo "${ECHO_T}$ac_cv_type_long" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long" >&5
-echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long=$ac_lo;;
-'') if test "$ac_cv_type_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_long=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
-
-
-{ echo "$as_me:$LINENO: checking for long long" >&5
-echo $ECHO_N "checking for long long... $ECHO_C" >&6; }
-if test "${ac_cv_type_long_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef long long ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_long_long=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_long_long=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
-echo "${ECHO_T}$ac_cv_type_long_long" >&6; }
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ echo "$as_me:$LINENO: checking size of long long" >&5
-echo $ECHO_N "checking size of long long... $ECHO_C" >&6; }
-if test "${ac_cv_sizeof_long_long+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=0 ac_mid=0
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr $ac_mid + 1`
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=-1 ac_mid=-1
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_lo=$ac_mid; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_hi=`expr '(' $ac_mid ')' - 1`
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- ac_mid=`expr 2 '*' $ac_mid`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo= ac_hi=
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-int
-main ()
-{
-static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_hi=$ac_mid
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_lo=`expr '(' $ac_mid ')' + 1`
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in
-?*) ac_cv_sizeof_long_long=$ac_lo;;
-'') if test "$ac_cv_type_long_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long_long=0
- fi ;;
-esac
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
- typedef long long ac__type_sizeof_;
-static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
-static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (((long int) (sizeof (ac__type_sizeof_))) < 0)
- {
- long int i = longval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%ld\n", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ((long int) (sizeof (ac__type_sizeof_))))
- return 1;
- fprintf (f, "%lu\n", i);
- }
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_sizeof_long_long=`cat conftest.val`
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-if test "$ac_cv_type_long_long" = yes; then
- { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute sizeof (long long)
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
- else
- ac_cv_sizeof_long_long=0
- fi
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f conftest.val
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
-echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
-
-
-
{ echo "$as_me:$LINENO: checking for addrinfo" >&5
echo $ECHO_N "checking for addrinfo... $ECHO_C" >&6; }
@@ -7706,326 +5714,6 @@ if test "$ac_cv_sa_storage" = no; then
fi
- ac_cv_addrsz=yes
- { echo "$as_me:$LINENO: checking for INADDRSZ" >&5
-echo $ECHO_N "checking for INADDRSZ... $ECHO_C" >&6; }
- if test "${ac_cv_inaddrsz+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <arpa/nameser.h>
-int
-main ()
-{
-int a = INADDRSZ
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_inaddrsz=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_inaddrsz=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_inaddrsz" >&5
-echo "${ECHO_T}$ac_cv_inaddrsz" >&6; }
- if test $ac_cv_inaddrsz = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_INADDRSZ 1
-_ACEOF
-
- else
- ac_cv_addrsz=no
- fi
- { echo "$as_me:$LINENO: checking for IN6ADDRSZ" >&5
-echo $ECHO_N "checking for IN6ADDRSZ... $ECHO_C" >&6; }
- if test "${ac_cv_in6addrsz+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <arpa/nameser.h>
-int
-main ()
-{
-int a = IN6ADDRSZ
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_in6addrsz=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_in6addrsz=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_in6addrsz" >&5
-echo "${ECHO_T}$ac_cv_in6addrsz" >&6; }
- if test $ac_cv_in6addrsz = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_IN6ADDRSZ 1
-_ACEOF
-
- else
- ac_cv_addrsz=no
- fi
-
-if test "$ac_cv_addrsz" = no; then
- missing_includes=yes
-fi
-
-
- { echo "$as_me:$LINENO: checking for RES_USE_INET6" >&5
-echo $ECHO_N "checking for RES_USE_INET6... $ECHO_C" >&6; }
- if test "${ac_cv_res_inet6+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <resolv.h>
-int
-main ()
-{
-int a = RES_USE_INET6
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_res_inet6=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_res_inet6=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_res_inet6" >&5
-echo "${ECHO_T}$ac_cv_res_inet6" >&6; }
- if test $ac_cv_res_inet6 = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_RES_USE_INET6 1
-_ACEOF
-
- fi
-
-if test "$ac_cv_res_inet6" = no; then
- missing_includes=yes
-fi
-
-
- { echo "$as_me:$LINENO: checking for res_state_ext" >&5
-echo $ECHO_N "checking for res_state_ext... $ECHO_C" >&6; }
- if test "${ac_cv_res_state_ext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <netinet6/in6.h>
-# include <resolv.h>
-int
-main ()
-{
-struct __res_state_ext e
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_res_state_ext=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_res_state_ext=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_res_state_ext" >&5
-echo "${ECHO_T}$ac_cv_res_state_ext" >&6; }
- if test $ac_cv_res_state_ext = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_RES_STATE_EXT 1
-_ACEOF
-
- fi
-
-if test "$ac_cv_res_state_ext" = no; then
- missing_includes=yes
-fi
-
-
- { echo "$as_me:$LINENO: checking for nsort in res_state" >&5
-echo $ECHO_N "checking for nsort in res_state... $ECHO_C" >&6; }
- if test "${ac_cv_res_state+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-# include <sys/types.h>
-# include <netinet/in.h>
-# include <netinet6/in6.h>
-# include <resolv.h>
-int
-main ()
-{
-struct __res_state e; e.nsort = 0
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_res_state=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_res_state=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
- { echo "$as_me:$LINENO: result: $ac_cv_res_state" >&5
-echo "${ECHO_T}$ac_cv_res_state" >&6; }
- if test $ac_cv_res_state = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_NEW_RES_STATE 1
-_ACEOF
-
- fi
-
-
-
-
@@ -8133,7 +5821,9 @@ done
-for ac_func in strftime
+
+
+for ac_func in fork vfork strftime
do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -9465,8 +7155,9 @@ echo "${ECHO_T}not found" >&6; }
#
# Look for pcap-config.
#
- # Extract the first word of "pcap-config", so it can be a program name with args.
-set dummy pcap-config; ac_word=$2
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pcap-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pcap-config; ac_word=$2
{ echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
if test "${ac_cv_path_PCAP_CONFIG+set}" = set; then
@@ -9505,13 +7196,82 @@ echo "${ECHO_T}no" >&6; }
fi
+fi
+if test -z "$ac_cv_path_PCAP_CONFIG"; then
+ ac_pt_PCAP_CONFIG=$PCAP_CONFIG
+ # Extract the first word of "pcap-config", so it can be a program name with args.
+set dummy pcap-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PCAP_CONFIG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ case $ac_pt_PCAP_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PCAP_CONFIG="$ac_pt_PCAP_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PCAP_CONFIG=$ac_cv_path_ac_pt_PCAP_CONFIG
+if test -n "$ac_pt_PCAP_CONFIG"; then
+ { echo "$as_me:$LINENO: result: $ac_pt_PCAP_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PCAP_CONFIG" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+ if test "x$ac_pt_PCAP_CONFIG" = x; then
+ PCAP_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet. If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+ PCAP_CONFIG=$ac_pt_PCAP_CONFIG
+ fi
+else
+ PCAP_CONFIG="$ac_cv_path_PCAP_CONFIG"
+fi
+
if test -n "$PCAP_CONFIG" ; then
#
# Found - use it to get the include flags for
# libpcap and the flags to link with libpcap.
#
- V_INCLS="`\"$PCAP_CONFIG\" --cflags` $V_INCLS"
- libpcap="`\"$PCAP_CONFIG\" --libs`"
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ cflags=`"$PCAP_CONFIG" --cflags`
+ V_INCLS="$cflags $V_INCLS"
+ libpcap=`"$PCAP_CONFIG" --libs`
else
#
# Not found; look for pcap.
@@ -9659,9 +7419,17 @@ fi
# The libpcap directory has a pcap-config script.
# Use it to get any additioal libraries needed
# to link with the libpcap archive library in
- # that directory
+ # that directory.
#
- libpcap="$libpcap `\"$PCAP_CONFIG\" --additional-libs --static`"
+ # Please read section 11.6 "Shell Substitutions"
+ # in the autoconf manual before doing anything
+ # to this that involves quoting. Especially note
+ # the statement "There is just no portable way to use
+ # double-quoted strings inside double-quoted back-quoted
+ # expressions (pfew!)."
+ #
+ additional_libs=`"$PCAP_CONFIG" --additional-libs --static`
+ libpcap="$libpcap $additional_libs"
fi
fi
LIBS="$libpcap $LIBS"
@@ -9700,6 +7468,100 @@ echo "${ECHO_T}yes" >&6; }
esac
fi
+ { echo "$as_me:$LINENO: checking for pcap_loop" >&5
+echo $ECHO_N "checking for pcap_loop... $ECHO_C" >&6; }
+if test "${ac_cv_func_pcap_loop+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define pcap_loop to an innocuous variant, in case <limits.h> declares pcap_loop.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define pcap_loop innocuous_pcap_loop
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char pcap_loop (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef pcap_loop
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pcap_loop ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_pcap_loop || defined __stub___pcap_loop
+choke me
+#endif
+
+int
+main ()
+{
+return pcap_loop ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ ac_cv_func_pcap_loop=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_func_pcap_loop=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_pcap_loop" >&5
+echo "${ECHO_T}$ac_cv_func_pcap_loop" >&6; }
+if test $ac_cv_func_pcap_loop = yes; then
+ :
+else
+
+ { { echo "$as_me:$LINENO: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
+config.log file in your report" >&5
+echo "$as_me: error: Report this to tcpdump-workers@lists.tcpdump.org, and include the
+config.log file in your report" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+
+
{ echo "$as_me:$LINENO: checking for pcap_list_datalinks" >&5
echo $ECHO_N "checking for pcap_list_datalinks... $ECHO_C" >&6; }
if test "${ac_cv_func_pcap_list_datalinks+set}" = set; then
@@ -11173,7 +9035,9 @@ fi
#
# Do we have the new open API? Check for pcap_create, and assume that,
-# if we do, we also have pcap_activate() and the other new routines.
+# if we do, we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0.
+#
for ac_func in pcap_create
do
@@ -11268,6 +9132,106 @@ _ACEOF
fi
done
+if test $ac_cv_func_pcap_create = "yes" ; then
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+
+for ac_func in pcap_set_tstamp_type
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext &&
+ $as_test_x conftest$ac_exeext; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+fi
@@ -11734,7 +9698,8 @@ MAN_MISC_INFO=7
case "$host_os" in
aix*)
- cat >>confdefs.h <<\_ACEOF
+
+cat >>confdefs.h <<\_ACEOF
#define _SUN 1
_ACEOF
@@ -11783,294 +9748,6 @@ if test -f /dev/bpf0 ; then
V_GROUP=bpf
fi
-#
-# Check for some headers introduced in later versions of libpcap
-# and used by some printers.
-#
-savedcppflags="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $V_INCLS"
-
-for ac_header in pcap/bluetooth.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in pcap/usb.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-CPPFLAGS="$savedcppflags"
-
for ac_header in sys/bitypes.h
do
@@ -13364,6 +11041,133 @@ fi
fi
+#
+# Check for some headers introduced in later versions of libpcap
+# and used by some printers.
+#
+# Those headers use the {u_}intN_t types, so we must do this after
+# we check for what's needed to get them defined.
+#
+savedcppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $V_INCLS"
+
+for ac_header in pcap/bluetooth.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <tcpdump-stdinc.h>
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in pcap/usb.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <tcpdump-stdinc.h>
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+ { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+CPPFLAGS="$savedcppflags"
+
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
@@ -13944,6 +11748,7 @@ _ACEOF
fi
+ savedppflags="$CPPLAGS"
CPPFLAGS="$CPPFLAGS $V_INCLS"
for ac_header in openssl/evp.h
@@ -14085,6 +11890,7 @@ fi
done
+ CPPFLAGS="$savedcppflags"
else
#
# Not found. Did the user explicitly ask for it?
@@ -14100,8 +11906,8 @@ echo "$as_me: error: SSLeay not found" >&2;}
fi
if test "$missing_includes" = "yes"; then
- CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
- V_INCLS="$V_INCLS -I\$(srcdir)/missing"
+ CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
+ V_INCLS="$V_INCLS -I$srcdir/missing"
fi
diff --git a/configure.in b/configure.in
index eb3e5e8b1ddf..4ac664ecf099 100755
--- a/configure.in
+++ b/configure.in
@@ -29,7 +29,7 @@ AC_C___ATTRIBUTE__
if test "$ac_cv___attribute__" = "yes"; then
AC_C___ATTRIBUTE___FORMAT_FUNCTION_POINTER
fi
-AC_CHECK_HEADERS(fcntl.h rpc/rpcent.h netdnet/dnetdb.h)
+AC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h netdnet/dnetdb.h)
AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>])
@@ -60,6 +60,33 @@ AC_HEADER_TIME
case "$host_os" in
+darwin*)
+ AC_ARG_ENABLE(universal,
+ AC_HELP_STRING([--disable-universal],[don't build universal on OS X]))
+ if test "$enable_universal" != "no"; then
+ case "$host_os" in
+
+ darwin9.*)
+ #
+ # Leopard. Build for x86 and 32-bit PowerPC, with
+ # x86 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch i386 -arch ppc"
+ LDFLAGS="$LDFLAGS -arch i386 -arch ppc"
+ ;;
+
+ darwin10.*)
+ #
+ # Snow Leopard. Build for x86-64 and x86, with
+ # x86-64 first. (That's what Apple does.)
+ #
+ V_CCOPT="$V_CCOPT -arch x86_64 -arch i386"
+ LDFLAGS="$LDFLAGS -arch x86_64 -arch i386"
+ ;;
+ esac
+ fi
+ ;;
+
linux*)
AC_MSG_CHECKING(Linux kernel version)
if test "$cross_compiling" = yes; then
@@ -172,7 +199,7 @@ AC_ARG_ENABLE(ipv6,
--disable-ipv6 disable ipv6 support],
[ case "$enableval" in
yes) AC_MSG_RESULT(yes)
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
AC_DEFINE(INET6)
ipv6=yes
;;
@@ -194,7 +221,7 @@ main()
}
],
[ AC_MSG_RESULT(yes)
- LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c $LOCALSRC"
+ LOCALSRC="print-ip6.c print-ip6opts.c print-mobility.c print-ripng.c print-icmp6.c print-frag6.c print-rt6.c print-ospf6.c print-dhcp6.c print-babel.c $LOCALSRC"
AC_DEFINE(INET6)
ipv6=yes],
[ AC_MSG_RESULT(no)
@@ -468,15 +495,6 @@ if test "$td_cv_decl_netdnet_dnetdb_h_dnet_htoa" = yes; then
fi
dnl
-dnl check sizeof basic types.
-dnl They're very likely to be wrong for cross-compiling.
-AC_CHECK_SIZEOF(char, 1)
-AC_CHECK_SIZEOF(short, 2)
-AC_CHECK_SIZEOF(int, 4)
-AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
-
-dnl
dnl Checks for addrinfo structure
AC_STRUCT_ADDRINFO(ac_cv_addrinfo)
if test "$ac_cv_addrinfo" = no; then
@@ -504,34 +522,8 @@ if test "$ac_cv_sa_storage" = no; then
missing_includes=yes
fi
-dnl
-dnl Checks for IN[6]ADDRSZ
-AC_CHECK_ADDRSZ(ac_cv_addrsz)
-if test "$ac_cv_addrsz" = no; then
- missing_includes=yes
-fi
-
-dnl
-dnl Checks for RES_USE_INET6
-AC_CHECK_RES_USE_INET6(ac_cv_res_inet6)
-if test "$ac_cv_res_inet6" = no; then
- missing_includes=yes
-fi
-
-dnl
-dnl Checks for res_state_ext structure
-AC_STRUCT_RES_STATE_EXT(ac_cv_res_state_ext)
-if test "$ac_cv_res_state_ext" = no; then
- missing_includes=yes
-fi
-
-dnl
-dnl Checks if res_state structure has nsort member.
-AC_STRUCT_RES_STATE(ac_cv_res_state)
-
-
AC_REPLACE_FUNCS(vfprintf strcasecmp strlcat strlcpy strdup strsep)
-AC_CHECK_FUNCS(strftime)
+AC_CHECK_FUNCS(fork vfork strftime)
AC_CHECK_FUNCS(setlinebuf alarm)
needsnprintf=no
@@ -723,8 +715,17 @@ fi
#
# Do we have the new open API? Check for pcap_create, and assume that,
-# if we do, we also have pcap_activate() and the other new routines.
+# if we do, we also have pcap_activate() and the other new routines
+# introduced in libpcap 1.0.0.
+#
AC_CHECK_FUNCS(pcap_create)
+if test $ac_cv_func_pcap_create = "yes" ; then
+ #
+ # OK, do we have pcap_set_tstamp_type? If so, assume we have
+ # pcap_list_tstamp_types and pcap_free_tstamp_types as well.
+ #
+ AC_CHECK_FUNCS(pcap_set_tstamp_type)
+fi
AC_CHECK_FUNCS(pcap_findalldevs pcap_dump_flush pcap_lib_version)
if test $ac_cv_func_pcap_findalldevs = "yes" ; then
@@ -803,7 +804,7 @@ case "$host_os" in
aix*)
dnl Workaround to enable certain features
- AC_DEFINE(_SUN)
+ AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
;;
hpux*)
@@ -849,16 +850,6 @@ if test -f /dev/bpf0 ; then
V_GROUP=bpf
fi
-#
-# Check for some headers introduced in later versions of libpcap
-# and used by some printers.
-#
-savedcppflags="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $V_INCLS"
-AC_CHECK_HEADERS(pcap/bluetooth.h)
-AC_CHECK_HEADERS(pcap/usb.h)
-CPPFLAGS="$savedcppflags"
-
AC_CHECK_HEADERS(sys/bitypes.h)
AC_CHECK_TYPE([int8_t], ,
@@ -980,6 +971,19 @@ if test "$ac_lbl_inttypes_h_defines_formats" = no; then
])
fi
+#
+# Check for some headers introduced in later versions of libpcap
+# and used by some printers.
+#
+# Those headers use the {u_}intN_t types, so we must do this after
+# we check for what's needed to get them defined.
+#
+savedcppflags="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $V_INCLS"
+AC_CHECK_HEADERS(pcap/bluetooth.h,,,[#include <tcpdump-stdinc.h>])
+AC_CHECK_HEADERS(pcap/usb.h,,,[#include <tcpdump-stdinc.h>])
+CPPFLAGS="$savedcppflags"
+
AC_PROG_RANLIB
AC_LBL_DEVEL(V_CCOPT)
@@ -1063,8 +1067,10 @@ if test "$want_libcrypto" != "no"; then
fi
AC_CHECK_LIB(crypto, DES_cbc_encrypt)
+ savedppflags="$CPPLAGS"
CPPFLAGS="$CPPFLAGS $V_INCLS"
AC_CHECK_HEADERS(openssl/evp.h)
+ CPPFLAGS="$savedcppflags"
else
#
# Not found. Did the user explicitly ask for it?
@@ -1079,8 +1085,8 @@ fi
dnl
dnl set additional include path if necessary
if test "$missing_includes" = "yes"; then
- CPPFLAGS="$CPPFLAGS -I\$(srcdir)/missing"
- V_INCLS="$V_INCLS -I\$(srcdir)/missing"
+ CPPFLAGS="$CPPFLAGS -I$srcdir/missing"
+ V_INCLS="$V_INCLS -I$srcdir/missing"
fi
AC_SUBST(V_CCOPT)
diff --git a/cpack.c b/cpack.c
index 14c0a9ee2a3e..c921b3905918 100644
--- a/cpack.c
+++ b/cpack.c
@@ -38,7 +38,7 @@
#include "cpack.h"
#include "extract.h"
-static u_int8_t *
+u_int8_t *
cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment)
{
size_t misalignment = (size_t)(p - buf) % alignment;
@@ -53,7 +53,7 @@ cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment)
* wordsize bytes remain in the buffer after the boundary. Otherwise,
* return a pointer to the boundary.
*/
-static u_int8_t *
+u_int8_t *
cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize)
{
u_int8_t *next;
diff --git a/cpack.h b/cpack.h
index 14ed37692cd9..74f97960adb8 100644
--- a/cpack.h
+++ b/cpack.h
@@ -43,6 +43,9 @@ int cpack_uint16(struct cpack_state *, u_int16_t *);
int cpack_uint32(struct cpack_state *, u_int32_t *);
int cpack_uint64(struct cpack_state *, u_int64_t *);
+u_int8_t *cpack_next_boundary(u_int8_t *buf, u_int8_t *p, size_t alignment);
+u_int8_t *cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize);
+
#define cpack_int8(__s, __p) cpack_uint8((__s), (u_int8_t*)(__p))
#define cpack_int16(__s, __p) cpack_uint16((__s), (u_int16_t*)(__p))
#define cpack_int32(__s, __p) cpack_uint32((__s), (u_int32_t*)(__p))
diff --git a/ethertype.h b/ethertype.h
index 900bd38eec41..fc5e515c6bb7 100644
--- a/ethertype.h
+++ b/ethertype.h
@@ -103,6 +103,20 @@
#ifndef ETHERTYPE_8021Q
#define ETHERTYPE_8021Q 0x8100
#endif
+
+/* see:
+ http://en.wikipedia.org/wiki/IEEE_802.1Q
+ and http://en.wikipedia.org/wiki/QinQ
+*/
+#ifndef ETHERTYPE_8021Q9100
+#define ETHERTYPE_8021Q9100 0x9100
+#endif
+#ifndef ETHERTYPE_8021Q9200
+#define ETHERTYPE_8021Q9200 0x9200
+#endif
+#ifndef ETHERTYPE_8021QinQ
+#define ETHERTYPE_8021QinQ 0x88a8
+#endif
#ifndef ETHERTYPE_IPX
#define ETHERTYPE_IPX 0x8137
#endif
diff --git a/forces.h b/forces.h
index b9cf072fb611..ed497d41d7b1 100644
--- a/forces.h
+++ b/forces.h
@@ -585,7 +585,7 @@ int pkeyitlv_print(register const u_char * pptr, register u_int len,
u_int16_t op_msk, int indent);
int pdatacnt_print(register const u_char * pptr, register u_int len,
- u_int32_t IDcnt, u_int16_t op_msk, int indent);
+ u_int16_t IDcnt, u_int16_t op_msk, int indent);
int pdata_print(register const u_char * pptr, register u_int len,
u_int16_t op_msk, int indent);
diff --git a/ieee802_11_radio.h b/ieee802_11_radio.h
index 8caeaa256153..5aff13786a6a 100644
--- a/ieee802_11_radio.h
+++ b/ieee802_11_radio.h
@@ -158,6 +158,10 @@ struct ieee80211_radiotap_header {
* Unitless indication of the Rx/Tx antenna for this packet.
* The first antenna is antenna 0.
*
+ * IEEE80211_RADIOTAP_RX_FLAGS u_int16_t bitmap
+ *
+ * Properties of received frames. See flags defined below.
+ *
* IEEE80211_RADIOTAP_XCHANNEL u_int32_t bitmap
* u_int16_t MHz
* u_int8_t channel number
@@ -168,6 +172,25 @@ struct ieee80211_radiotap_header {
* finally the maximum regulatory transmit power cap in .5 dBm
* units. This property supersedes IEEE80211_RADIOTAP_CHANNEL
* and only one of the two should be present.
+ *
+ * IEEE80211_RADIOTAP_MCS u_int8_t known
+ * u_int8_t flags
+ * u_int8_t mcs
+ *
+ * Bitset indicating which fields have known values, followed
+ * by bitset of flag values, followed by the MCS rate index as
+ * in IEEE 802.11n.
+ *
+ * IEEE80211_RADIOTAP_VENDOR_NAMESPACE
+ * u_int8_t OUI[3]
+ * u_int8_t subspace
+ * u_int16_t length
+ *
+ * The Vendor Namespace Field contains three sub-fields. The first
+ * sub-field is 3 bytes long. It contains the vendor's IEEE 802
+ * Organizationally Unique Identifier (OUI). The fourth byte is a
+ * vendor-specific "namespace selector."
+ *
*/
enum ieee80211_radiotap_type {
IEEE80211_RADIOTAP_TSFT = 0,
@@ -184,8 +207,12 @@ enum ieee80211_radiotap_type {
IEEE80211_RADIOTAP_ANTENNA = 11,
IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
+ IEEE80211_RADIOTAP_RX_FLAGS = 14,
/* NB: gap for netbsd definitions */
IEEE80211_RADIOTAP_XCHANNEL = 18,
+ IEEE80211_RADIOTAP_MCS = 19,
+ IEEE80211_RADIOTAP_NAMESPACE = 29,
+ IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
IEEE80211_RADIOTAP_EXT = 31
};
@@ -206,6 +233,19 @@ enum ieee80211_radiotap_type {
#define IEEE80211_CHAN_HT40U 0x20000 /* HT 40 channel w/ ext above */
#define IEEE80211_CHAN_HT40D 0x40000 /* HT 40 channel w/ ext below */
+/* Useful combinations of channel characteristics, borrowed from Ethereal */
+#define IEEE80211_CHAN_A \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
+#define IEEE80211_CHAN_B \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
+#define IEEE80211_CHAN_G \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
+#define IEEE80211_CHAN_TA \
+ (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+#define IEEE80211_CHAN_TG \
+ (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN | IEEE80211_CHAN_TURBO)
+
+
/* For IEEE80211_RADIOTAP_FLAGS */
#define IEEE80211_RADIOTAP_F_CFP 0x01 /* sent/received
* during CFP
@@ -226,6 +266,26 @@ enum ieee80211_radiotap_type {
* (to 32-bit boundary)
*/
#define IEEE80211_RADIOTAP_F_BADFCS 0x40 /* does not pass FCS check */
-#define IEEE80211_RADIOTAP_F_SHORTGI 0x80 /* HT short GI */
+
+/* For IEEE80211_RADIOTAP_RX_FLAGS */
+#define IEEE80211_RADIOTAP_F_RX_BADFCS 0x0001 /* frame failed crc check */
+#define IEEE80211_RADIOTAP_F_RX_PLCP_CRC 0x0002 /* frame failed PLCP CRC check */
+
+/* For IEEE80211_RADIOTAP_MCS known */
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN 0x01
+#define IEEE80211_RADIOTAP_MCS_MCS_INDEX_KNOWN 0x02 /* MCS index field */
+#define IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN 0x04
+#define IEEE80211_RADIOTAP_MCS_HT_FORMAT_KNOWN 0x08
+#define IEEE80211_RADIOTAP_MCS_FEC_TYPE_KNOWN 0x10
+
+/* For IEEE80211_RADIOTAP_MCS flags */
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK 0x03
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20 0
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_40 1
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20L 2
+#define IEEE80211_RADIOTAP_MCS_BANDWIDTH_20U 3
+#define IEEE80211_RADIOTAP_MCS_SHORT_GI 0x04 /* short guard interval */
+#define IEEE80211_RADIOTAP_MCS_HT_GREENFIELD 0x08
+#define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10
#endif /* _NET_IF_IEEE80211RADIOTAP_H_ */
diff --git a/in_cksum.c b/in_cksum.c
new file mode 100644
index 000000000000..93cdfc9aad98
--- /dev/null
+++ b/in_cksum.c
@@ -0,0 +1,200 @@
+/* in_cksum.c
+ * 4.4-Lite-2 Internet checksum routine, modified to take a vector of
+ * pointers/lengths giving the pieces to be checksummed. Also using
+ * Tahoe/CGI version of ADDCARRY(x) macro instead of from portable version.
+ */
+
+/*
+ * Copyright (c) 1988, 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)in_cksum.c 8.1 (Berkeley) 6/10/93
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include "interface.h"
+
+/*
+ * Checksum routine for Internet Protocol family headers (Portable Version).
+ *
+ * This routine is very heavily used in the network
+ * code and should be modified for each CPU to be as fast as possible.
+ */
+
+#define ADDCARRY(x) {if ((x) > 65535) (x) -= 65535;}
+#define REDUCE {l_util.l = sum; sum = l_util.s[0] + l_util.s[1]; ADDCARRY(sum);}
+
+u_int16_t
+in_cksum(const struct cksum_vec *vec, int veclen)
+{
+ register const u_int16_t *w;
+ register int sum = 0;
+ register int mlen = 0;
+ int byte_swapped = 0;
+
+ union {
+ u_int8_t c[2];
+ u_int16_t s;
+ } s_util;
+ union {
+ u_int16_t s[2];
+ u_int32_t l;
+ } l_util;
+
+ for (; veclen != 0; vec++, veclen--) {
+ if (vec->len == 0)
+ continue;
+ w = (const u_int16_t *)(void *)vec->ptr;
+ if (mlen == -1) {
+ /*
+ * The first byte of this chunk is the continuation
+ * of a word spanning between this chunk and the
+ * last chunk.
+ *
+ * s_util.c[0] is already saved when scanning previous
+ * chunk.
+ */
+ s_util.c[1] = *(const u_int8_t *)w;
+ sum += s_util.s;
+ w = (const u_int16_t *)(void *)((const u_int8_t *)w + 1);
+ mlen = vec->len - 1;
+ } else
+ mlen = vec->len;
+ /*
+ * Force to even boundary.
+ */
+ if ((1 & (unsigned long) w) && (mlen > 0)) {
+ REDUCE;
+ sum <<= 8;
+ s_util.c[0] = *(const u_int8_t *)w;
+ w = (const u_int16_t *)(void *)((const u_int8_t *)w + 1);
+ mlen--;
+ byte_swapped = 1;
+ }
+ /*
+ * Unroll the loop to make overhead from
+ * branches &c small.
+ */
+ while ((mlen -= 32) >= 0) {
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ sum += w[4]; sum += w[5]; sum += w[6]; sum += w[7];
+ sum += w[8]; sum += w[9]; sum += w[10]; sum += w[11];
+ sum += w[12]; sum += w[13]; sum += w[14]; sum += w[15];
+ w += 16;
+ }
+ mlen += 32;
+ while ((mlen -= 8) >= 0) {
+ sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3];
+ w += 4;
+ }
+ mlen += 8;
+ if (mlen == 0 && byte_swapped == 0)
+ continue;
+ REDUCE;
+ while ((mlen -= 2) >= 0) {
+ sum += *w++;
+ }
+ if (byte_swapped) {
+ REDUCE;
+ sum <<= 8;
+ byte_swapped = 0;
+ if (mlen == -1) {
+ s_util.c[1] = *(const u_int8_t *)w;
+ sum += s_util.s;
+ mlen = 0;
+ } else
+ mlen = -1;
+ } else if (mlen == -1)
+ s_util.c[0] = *(const u_int8_t *)w;
+ }
+ if (mlen == -1) {
+ /* The last mbuf has odd # of bytes. Follow the
+ standard (the odd byte may be shifted left by 8 bits
+ or not as determined by endian-ness of the machine) */
+ s_util.c[1] = 0;
+ sum += s_util.s;
+ }
+ REDUCE;
+ return (~sum & 0xffff);
+}
+
+/*
+ * Given the host-byte-order value of the checksum field in a packet
+ * header, and the network-byte-order computed checksum of the data
+ * that the checksum covers (including the checksum itself), compute
+ * what the checksum field *should* have been.
+ */
+u_int16_t
+in_cksum_shouldbe(u_int16_t sum, u_int16_t computed_sum)
+{
+ u_int32_t shouldbe;
+
+ /*
+ * The value that should have gone into the checksum field
+ * is the negative of the value gotten by summing up everything
+ * *but* the checksum field.
+ *
+ * We can compute that by subtracting the value of the checksum
+ * field from the sum of all the data in the packet, and then
+ * computing the negative of that value.
+ *
+ * "sum" is the value of the checksum field, and "computed_sum"
+ * is the negative of the sum of all the data in the packets,
+ * so that's -(-computed_sum - sum), or (sum + computed_sum).
+ *
+ * All the arithmetic in question is one's complement, so the
+ * addition must include an end-around carry; we do this by
+ * doing the arithmetic in 32 bits (with no sign-extension),
+ * and then adding the upper 16 bits of the sum, which contain
+ * the carry, to the lower 16 bits of the sum, and then do it
+ * again in case *that* sum produced a carry.
+ *
+ * As RFC 1071 notes, the checksum can be computed without
+ * byte-swapping the 16-bit words; summing 16-bit words
+ * on a big-endian machine gives a big-endian checksum, which
+ * can be directly stuffed into the big-endian checksum fields
+ * in protocol headers, and summing words on a little-endian
+ * machine gives a little-endian checksum, which must be
+ * byte-swapped before being stuffed into a big-endian checksum
+ * field.
+ *
+ * "computed_sum" is a network-byte-order value, so we must put
+ * it in host byte order before subtracting it from the
+ * host-byte-order value from the header; the adjusted checksum
+ * will be in host byte order, which is what we'll return.
+ */
+ shouldbe = sum;
+ shouldbe += ntohs(computed_sum);
+ shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+ shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
+ return shouldbe;
+}
diff --git a/interface.h b/interface.h
index 6e04b058c21c..18668a21f377 100644
--- a/interface.h
+++ b/interface.h
@@ -28,10 +28,6 @@
#include "os-proto.h"
#endif
-#ifndef HAVE___ATTRIBUTE__
-#define __attribute__(x)
-#endif
-
/* snprintf et al */
#include <stdarg.h>
@@ -74,6 +70,7 @@ extern char *strsep(char **, const char *);
#define PT_CNFP 7 /* Cisco NetFlow protocol */
#define PT_TFTP 8 /* trivial file transfer protocol */
#define PT_AODV 9 /* Ad-hoc On-demand Distance Vector Protocol */
+#define PT_CARP 10 /* Common Address Redundancy Protocol */
#ifndef min
#define min(a,b) ((a)>(b)?(b):(a))
@@ -166,7 +163,6 @@ extern void hex_and_ascii_print(const char *, const u_char *, u_int);
extern void hex_print_with_offset(const char *, const u_char *, u_int, u_int);
extern void hex_print(const char *, const u_char *, u_int);
extern void telnet_print(const u_char *, u_int);
-extern int ethertype_print(u_short, const u_char *, u_int, u_int);
extern int llc_print(const u_char *, u_int, u_int, const u_char *,
const u_char *, u_short *);
extern int snap_print(const u_char *, u_int, u_int, u_int);
@@ -189,9 +185,6 @@ extern u_int enc_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int pflog_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int arcnet_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int arcnet_linux_if_print(const struct pcap_pkthdr *, const u_char *);
-extern void ether_print(const u_char *, u_int, u_int,
- void (*)(const u_char *), const u_char *);
-extern u_int ether_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int token_print(const u_char *, u_int, u_int);
extern u_int token_if_print(const struct pcap_pkthdr *, const u_char *);
extern void fddi_print(const u_char *, u_int, u_int);
@@ -231,6 +224,7 @@ extern void cisco_autorp_print(const u_char *, u_int);
extern void rsvp_print(const u_char *, u_int);
extern void ldp_print(const u_char *, u_int);
extern void lldp_print(const u_char *, u_int);
+extern void rpki_rtr_print(const u_char *, u_int);
extern void lmp_print(const u_char *, u_int);
extern void lspping_print(const u_char *, u_int);
extern void lwapp_control_print(const u_char *, u_int, int);
@@ -297,6 +291,7 @@ extern const char *nt_errstr(u_int32_t);
extern void print_data(const unsigned char *, int);
extern void l2tp_print(const u_char *, u_int);
extern void vrrp_print(const u_char *, u_int, int);
+extern void carp_print(const u_char *, u_int, int);
extern void slow_print(const u_char *, u_int);
extern void sflow_print(const u_char *, u_int);
extern void mpcp_print(const u_char *, u_int);
@@ -322,10 +317,9 @@ extern u_int bt_if_print(const struct pcap_pkthdr *, const u_char *);
extern u_int usb_linux_48_byte_print(const struct pcap_pkthdr *, const u_char *);
extern u_int usb_linux_64_byte_print(const struct pcap_pkthdr *, const u_char *);
+
#ifdef INET6
-extern void ip6_print(const u_char *, u_int);
extern void ip6_opt_print(const u_char *, int);
-extern int nextproto6_cksum(const struct ip6_hdr *, const u_short *, u_int, u_int);
extern int hbhopt_print(const u_char *);
extern int dstopt_print(const u_char *);
extern int frag6_print(const u_char *, const u_char *);
@@ -334,9 +328,15 @@ extern void ripng_print(const u_char *, unsigned int);
extern int rt6_print(const u_char *, const u_char *);
extern void ospf6_print(const u_char *, u_int);
extern void dhcp6_print(const u_char *, u_int);
+extern void babel_print(const u_char *, u_int);
extern int mask62plen(const u_char *);
#endif /*INET6*/
-extern u_short in_cksum(const u_short *, register u_int, int);
+
+struct cksum_vec {
+ const u_int8_t *ptr;
+ int len;
+};
+extern u_int16_t in_cksum(const struct cksum_vec *, int);
extern u_int16_t in_cksum_shouldbe(u_int16_t, u_int16_t);
#ifndef HAVE_BPF_DUMP
@@ -356,6 +356,7 @@ extern netdissect_options *gndo;
#define bflag gndo->ndo_bflag
#define eflag gndo->ndo_eflag
#define fflag gndo->ndo_fflag
+#define jflag gndo->ndo_jflag
#define Kflag gndo->ndo_Kflag
#define nflag gndo->ndo_nflag
#define Nflag gndo->ndo_Nflag
@@ -384,6 +385,7 @@ extern netdissect_options *gndo;
#define Cflag_count gndo->ndo_Cflag_count
#define Gflag_count gndo->ndo_Gflag_count
#define Gflag_time gndo->ndo_Gflag_time
+#define Hflag gndo->ndo_Hflag
#define snaplen gndo->ndo_snaplen
#define snapend gndo->ndo_snapend
diff --git a/ip.h b/ip.h
index a01d0f07d49e..8a97632e515f 100644
--- a/ip.h
+++ b/ip.h
@@ -62,7 +62,7 @@ struct ip {
u_int8_t ip_p; /* protocol */
u_int16_t ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
-};
+} UNALIGNED;
#define IP_MAXPACKET 65535 /* maximum packet size */
@@ -134,7 +134,7 @@ struct ip_timestamp {
u_int32_t ipt_time;
} ipt_ta[1];
} ipt_timestamp;
-};
+} UNALIGNED;
/* flag bits for ipt_flg */
#define IPOPT_TS_TSONLY 0 /* timestamps only */
@@ -161,4 +161,4 @@ struct ip_timestamp {
#define IP_MSS 576 /* default maximum segment size */
/* in print-ip.c */
-extern u_int32_t ip_finddst(const struct ip *);
+extern int nextproto4_cksum(const struct ip *, const u_int8_t *, u_int, u_int);
diff --git a/ip6.h b/ip6.h
index a6df97aae10b..12c87ad29291 100644
--- a/ip6.h
+++ b/ip6.h
@@ -86,21 +86,7 @@ struct ip6_hdr {
} ip6_ctlun;
struct in6_addr ip6_src; /* source address */
struct in6_addr ip6_dst; /* destination address */
-};
-
-/*
- * Pseudo header, used for higher layer checksumming.
- */
-union ip6_pseudo_hdr {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
-};
+} UNALIGNED;
#define ip6_vfc ip6_ctlun.ip6_un2_vfc
#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
@@ -123,25 +109,23 @@ union ip6_pseudo_hdr {
*/
struct ip6_ext {
- u_char ip6e_nxt;
- u_char ip6e_len;
-};
+ u_int8_t ip6e_nxt;
+ u_int8_t ip6e_len;
+} UNALIGNED;
/* Hop-by-Hop options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
struct ip6_hbh {
u_int8_t ip6h_nxt; /* next header */
u_int8_t ip6h_len; /* length in units of 8 octets */
/* followed by options */
-};
+} UNALIGNED;
/* Destination options header */
-/* XXX should we pad it to force alignment on an 8-byte boundary? */
struct ip6_dest {
u_int8_t ip6d_nxt; /* next header */
u_int8_t ip6d_len; /* length in units of 8 octets */
/* followed by options */
-};
+} UNALIGNED;
/* Option types and related macros */
#define IP6OPT_PAD1 0x00 /* 00 0 00000 */
@@ -177,7 +161,7 @@ struct ip6_rthdr {
u_int8_t ip6r_type; /* routing type */
u_int8_t ip6r_segleft; /* segments left */
/* followed by routing type specific data */
-};
+} UNALIGNED;
/* Type 0 Routing header */
struct ip6_rthdr0 {
@@ -188,7 +172,7 @@ struct ip6_rthdr0 {
u_int8_t ip6r0_reserved; /* reserved field */
u_int8_t ip6r0_slmap[3]; /* strict/loose bit map */
struct in6_addr ip6r0_addr[1]; /* up to 23 addresses */
-};
+} UNALIGNED;
/* Fragment header */
struct ip6_frag {
@@ -196,10 +180,13 @@ struct ip6_frag {
u_int8_t ip6f_reserved; /* reserved field */
u_int16_t ip6f_offlg; /* offset, reserved, and flag */
u_int32_t ip6f_ident; /* identification */
-};
+} UNALIGNED;
#define IP6F_OFF_MASK 0xfff8 /* mask out offset from ip6f_offlg */
#define IP6F_RESERVED_MASK 0x0006 /* reserved bits in ip6f_offlg */
#define IP6F_MORE_FRAG 0x0001 /* more-fragments flag */
+/* in print-ip6.c */
+extern int nextproto6_cksum(const struct ip6_hdr *, const u_int8_t *, u_int, u_int);
+
#endif /* not _NETINET_IP6_H_ */
diff --git a/ipproto.c b/ipproto.c
index 644b36427719..cbb9bf3f74e6 100755
--- a/ipproto.c
+++ b/ipproto.c
@@ -55,6 +55,7 @@ const struct tok ipproto_values[] = {
{ IPPROTO_PGM, "PGM" },
{ IPPROTO_SCTP, "SCTP" },
{ IPPROTO_MOBILITY, "Mobility" },
+ { IPPROTO_CARP, "CARP" },
{ 0, NULL }
};
diff --git a/ipproto.h b/ipproto.h
index 96407541f64d..c9801a624a49 100644
--- a/ipproto.h
+++ b/ipproto.h
@@ -133,6 +133,9 @@ extern const struct tok ipproto_values[];
#ifndef IPPROTO_VRRP
#define IPPROTO_VRRP 112
#endif
+#ifndef IPPROTO_CARP
+#define IPPROTO_CARP 112
+#endif
#ifndef IPPROTO_PGM
#define IPPROTO_PGM 113
#endif
diff --git a/missing/addrsize.h b/missing/addrsize.h
deleted file mode 100644
index 13db4da9159d..000000000000
--- a/missing/addrsize.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef INADDRSZ
-#define INADDRSZ 4 /* IPv4 T_A */
-#endif
-
-#ifndef IN6ADDRSZ
-#define IN6ADDRSZ 16 /* IPv6 T_AAAA */
-#endif
-
diff --git a/missing/bittypes.h b/missing/bittypes.h
deleted file mode 100644
index 31013ae4552a..000000000000
--- a/missing/bittypes.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#ifndef HAVE_U_INT8_T
-
-#if SIZEOF_CHAR == 1
-typedef unsigned char u_int8_t;
-#elif SIZEOF_INT == 1
-typedef unsigned int u_int8_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int8_t"
-#endif
-
-#endif /* HAVE_U_INT8_T */
-
-#ifndef HAVE_U_INT16_T
-
-#if SIZEOF_SHORT == 2
-typedef unsigned short u_int16_t;
-#elif SIZEOF_INT == 2
-typedef unsigned int u_int16_t;
-#elif SIZEOF_CHAR == 2
-typedef unsigned char u_int16_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int16_t"
-#endif
-
-#endif /* HAVE_U_INT16_T */
-
-#ifndef HAVE_U_INT32_T
-
-#if SIZEOF_INT == 4
-typedef unsigned int u_int32_t;
-#elif SIZEOF_LONG == 4
-typedef unsigned long u_int32_t;
-#elif SIZEOF_SHORT == 4
-typedef unsigned short u_int32_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int32_t"
-#endif
-
-#endif /* HAVE_U_INT32_T */
-
-#ifndef HAVE_U_INT64_T
-
-#if SIZEOF_LONG_LONG == 8
-typedef unsigned long long u_int64_t;
-#elif defined(_MSC_EXTENSIONS)
-typedef unsigned _int64 u_int64_t;
-#elif SIZEOF_INT == 8
-typedef unsigned int u_int64_t;
-#elif SIZEOF_LONG == 8
-typedef unsigned long u_int64_t;
-#elif SIZEOF_SHORT == 8
-typedef unsigned short u_int64_t;
-#else /* XXX */
-#error "there's no appropriate type for u_int64_t"
-#endif
-
-#endif /* HAVE_U_INT64_T */
-
-#ifndef PRId64
-#ifdef _MSC_EXTENSIONS
-#define PRId64 "I64d"
-#else /* _MSC_EXTENSIONS */
-#define PRId64 "lld"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRId64 */
-
-#ifndef PRIo64
-#ifdef _MSC_EXTENSIONS
-#define PRIo64 "I64o"
-#else /* _MSC_EXTENSIONS */
-#define PRIo64 "llo"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIo64 */
-
-#ifndef PRIx64
-#ifdef _MSC_EXTENSIONS
-#define PRIx64 "I64x"
-#else /* _MSC_EXTENSIONS */
-#define PRIx64 "llx"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIx64 */
-
-#ifndef PRIu64
-#ifdef _MSC_EXTENSIONS
-#define PRIu64 "I64u"
-#else /* _MSC_EXTENSIONS */
-#define PRIu64 "llu"
-#endif /* _MSC_EXTENSIONS */
-#endif /* PRIu64 */
diff --git a/missing/resolv6.h b/missing/resolv6.h
deleted file mode 100644
index ccee03e6c436..000000000000
--- a/missing/resolv6.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * Resolver options for IPv6.
- * XXX: this should be in an offical include file. There may be conflicts...
- */
-#ifndef HAVE_RES_USE_INET6
-#define RES_USE_INET6 0x80000000 /* use/map IPv6 in gethostbyname() */
-#endif
diff --git a/missing/resolv_ext.h b/missing/resolv_ext.h
deleted file mode 100644
index 92c531d860cc..000000000000
--- a/missing/resolv_ext.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 1999 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef MAXRESOLVSORT /* XXX */
-#define MAXRESOLVSORT 10 /* number of net to sort on */
-#endif
-
-#ifndef HAVE_RES_STATE_EXT
-struct __res_state_ext {
- struct sockaddr_storage nsaddr_list[MAXNS];
- struct {
- int af; /* address family for addr, mask */
- union {
- struct in_addr ina;
-#ifdef INET6
- struct in6_addr in6a;
-#endif
- } addr, mask;
- } sort_list[MAXRESOLVSORT];
-};
-#endif
-
-extern struct __res_state_ext _res_ext;
diff --git a/netdissect.h b/netdissect.h
index e87941daf180..0c66dfaf8094 100644
--- a/netdissect.h
+++ b/netdissect.h
@@ -107,6 +107,7 @@ struct netdissect_options {
int ndo_Iflag; /* rfmon (monitor) mode */
int ndo_Oflag; /* run filter code optimizer */
int ndo_dlt; /* if != -1, ask libpcap for the DLT it names*/
+ int ndo_jflag; /* packet time stamp source */
int ndo_pflag; /* don't go promiscuous */
int ndo_Cflag; /* rotate dump files after this many bytes */
@@ -116,6 +117,7 @@ struct netdissect_options {
time_t ndo_Gflag_time; /* The last time_t the dump file was rotated. */
int ndo_Wflag; /* recycle output files after this number of files */
int ndo_WflagChars;
+ int ndo_Hflag; /* dissect 802.11s draft mesh standard */
int ndo_suppress_default_print; /* don't use default_print() for unknown packet types */
const char *ndo_dltname;
@@ -157,7 +159,7 @@ struct netdissect_options {
void (*ndo_error)(netdissect_options *,
const char *fmt, ...)
#ifdef __ATTRIBUTE___FORMAT_OK_FOR_FUNCTION_POINTERS
- __attribute__ ((format (printf, 2, 3)))
+ __attribute__ ((noreturn, format (printf, 2, 3)))
#endif
;
void (*ndo_warning)(netdissect_options *,
@@ -252,6 +254,9 @@ extern char *copy_argv(netdissect_options *, char **);
extern void safeputchar(int);
extern void safeputs(const char *, int);
+#define PLURAL_SUFFIX(n) \
+ (((n) != 1) ? "s" : "")
+
#if 0
extern const char *isonsap_string(netdissect_options *, const u_char *);
extern const char *protoid_string(netdissect_options *, const u_char *);
@@ -263,6 +268,12 @@ extern const char *dnnum_string(netdissect_options *, u_short);
#include <pcap.h>
+typedef u_int (*if_ndo_printer)(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *, const u_char *);
+typedef u_int (*if_printer)(const struct pcap_pkthdr *, const u_char *);
+
+extern if_ndo_printer lookup_ndo_printer(int);
+extern if_printer lookup_printer(int);
extern void eap_print(netdissect_options *,const u_char *, u_int);
extern int esp_print(netdissect_options *,
@@ -281,6 +292,22 @@ extern void ip_print_inner(netdissect_options *ndo,
const u_char *bp2);
extern void rrcp_print(netdissect_options *,const u_char *, u_int);
+extern void ether_print(netdissect_options *,
+ const u_char *, u_int, u_int,
+ void (*)(netdissect_options *, const u_char *),
+ const u_char *);
+
+extern u_int ether_if_print(netdissect_options *,
+ const struct pcap_pkthdr *,const u_char *);
+extern u_int netanalyzer_if_print(netdissect_options *,
+ const struct pcap_pkthdr *,const u_char *);
+extern u_int netanalyzer_transparent_if_print(netdissect_options *,
+ const struct pcap_pkthdr *,
+ const u_char *);
+
+extern int ethertype_print(netdissect_options *,u_short, const u_char *,
+ u_int, u_int);
+
/* stuff that has not yet been rototiled */
#if 0
extern void ascii_print(netdissect_options *,u_int);
@@ -291,8 +318,6 @@ extern void hex_print_with_offset(netdissect_options *,const char *,
u_int, u_int);
extern void hex_print(netdissect_options *,const char *, u_int);
extern void telnet_print(netdissect_options *,const u_char *, u_int);
-extern int ethertype_print(netdissect_options *,u_short, const u_char *,
- u_int, u_int);
extern int llc_print(netdissect_options *,
const u_char *, u_int, u_int, const u_char *,
const u_char *, u_short *);
@@ -319,7 +344,6 @@ extern void egp_print(netdissect_options *,const u_char *, u_int,
const u_char *);
extern void arcnet_if_print(u_char*,const struct pcap_pkthdr *,const u_char *);
-extern void ether_if_print(u_char *,const struct pcap_pkthdr *,const u_char *);
extern void token_if_print(u_char *,const struct pcap_pkthdr *,const u_char *);
extern void fddi_if_print(u_char *,const struct pcap_pkthdr *, const u_char *);
@@ -333,6 +357,7 @@ extern void igmp_print(netdissect_options *,
register const u_char *, u_int);
extern void igrp_print(netdissect_options *,const u_char *, u_int,
const u_char *);
+extern int nextproto4_cksum(const struct ip *, const u_int8_t *, u_int, u_int);
extern void ipN_print(netdissect_options *,const u_char *, u_int);
extern void ipx_print(netdissect_options *,const u_char *, u_int);
extern void isoclns_print(netdissect_options *,const u_char *,
@@ -378,6 +403,7 @@ extern void raw_if_print(u_char *,
const struct pcap_pkthdr *, const u_char *);
extern void rip_print(netdissect_options *,const u_char *, u_int);
+extern void rpki_rtr_print(netdissect_options *,const u_char *, u_int);
extern void sctp_print(netdissect_options *ndo,
const u_char *bp, const u_char *bp2,
@@ -424,6 +450,8 @@ extern void l2tp_print(netdissect_options *,const u_char *, u_int);
extern void lcp_print(netdissect_options *,const u_char *, u_int);
extern void vrrp_print(netdissect_options *,const u_char *bp,
u_int len, int ttl);
+extern void carp_print(netdissect_options *,const u_char *bp,
+ u_int len, int ttl);
extern void cdp_print(netdissect_options *,const u_char *,
u_int, u_int, const u_char *, const u_char *);
extern void stp_print(netdissect_options *,const u_char *p, u_int length);
@@ -433,12 +461,15 @@ extern void pptp_print(netdissect_options *,const u_char *, u_int);
#endif
extern u_int ipnet_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
+extern u_int ppi_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
+
+extern u_int ieee802_15_4_if_print(netdissect_options *,const struct pcap_pkthdr *, const u_char *);
-#if 0
#ifdef INET6
extern void ip6_print(netdissect_options *,const u_char *, u_int);
+#if 0
extern void ip6_opt_print(netdissect_options *,const u_char *, int);
-extern int nextproto6_cksum(const struct ip6_hdr *, const u_short *, u_int, u_int);
+extern int nextproto6_cksum(const struct ip6_hdr *, const u_int8_t *, u_int, u_int);
extern int hbhopt_print(netdissect_options *,const u_char *);
extern int dstopt_print(netdissect_options *,const u_char *);
extern int frag6_print(netdissect_options *,const u_char *,
@@ -453,11 +484,17 @@ extern void dhcp6_print(netdissect_options *,const u_char *,
extern void zephyr_print(netdissect_options * ndo,
const u_char *cp, int length);
+#endif /* 0 */
#endif /*INET6*/
-extern u_short in_cksum(const u_short *,
- register u_int, int);
+#if 0
+struct cksum_vec {
+ const u_int8_t *ptr;
+ int len;
+};
+extern u_int16_t in_cksum(const struct cksum_vec *, int);
+extern u_int16_t in_cksum_shouldbe(u_int16_t, u_int16_t);
#endif
extern void esp_print_decodesecret(netdissect_options *ndo);
diff --git a/ospf.h b/ospf.h
index 2b1c6ee4c6b7..b86458baa7ee 100644
--- a/ospf.h
+++ b/ospf.h
@@ -324,5 +324,5 @@ struct ospfhdr {
#define ospf_lsa ospf_un.un_lsa
/* Functions shared by ospf and ospf6 */
-extern int ospf_print_te_lsa(u_int8_t *, u_int);
-extern int ospf_print_grace_lsa(u_int8_t *, u_int);
+extern int ospf_print_te_lsa(const u_int8_t *, u_int);
+extern int ospf_print_grace_lsa(const u_int8_t *, u_int);
diff --git a/oui.c b/oui.c
index 422cd161b847..1067aa1c5cec 100644
--- a/oui.c
+++ b/oui.c
@@ -42,6 +42,7 @@ const struct tok oui_values[] = {
{ OUI_IEEE_8021_PRIVATE, "IEEE 802.1 Private"},
{ OUI_IEEE_8023_PRIVATE, "IEEE 802.3 Private"},
{ OUI_TIA, "ANSI/TIA"},
+ { OUI_DCBX, "DCBX"},
{ 0, NULL }
};
diff --git a/oui.h b/oui.h
index dc8bb01c8f1b..d39cb6cae37f 100644
--- a/oui.h
+++ b/oui.h
@@ -30,6 +30,7 @@ extern const struct tok smi_values[];
#define OUI_IEEE_8021_PRIVATE 0x0080c2 /* IEEE 802.1 Organisation Specific - Annex F */
#define OUI_IEEE_8023_PRIVATE 0x00120f /* IEEE 802.3 Organisation Specific - Annex G */
#define OUI_TIA 0x0012bb /* TIA - Telecommunications Industry Association - ANSI/TIA-1057- 2006 */
+#define OUI_DCBX 0x001B21 /* DCBX */
/*
* These are SMI Network Management Private Enterprise Codes for
diff --git a/ppi.h b/ppi.h
new file mode 100644
index 000000000000..733eb950f0de
--- /dev/null
+++ b/ppi.h
@@ -0,0 +1,9 @@
+typedef struct ppi_header {
+ uint8_t ppi_ver;
+ uint8_t ppi_flags;
+ uint16_t ppi_len;
+ uint32_t ppi_dlt;
+} ppi_header_t;
+
+#define PPI_HDRLEN 8
+
diff --git a/print-802_11.c b/print-802_11.c
index 088840ab1384..24ab625a61e3 100644
--- a/print-802_11.c
+++ b/print-802_11.c
@@ -46,6 +46,15 @@ static const char rcsid[] _U_ =
#include "ieee802_11.h"
#include "ieee802_11_radio.h"
+/* Radiotap state */
+/* This is used to save state when parsing/processing parameters */
+struct radiotap_state
+{
+ u_int32_t present;
+
+ u_int8_t rate;
+};
+
#define PRINT_SSID(p) \
if (p.ssid_present) { \
printf(" ("); \
@@ -74,26 +83,403 @@ static const char rcsid[] _U_ =
printf("%s", \
CAPABILITY_PRIVACY(p.capability_info) ? ", PRIVACY" : "" );
-static const int ieee80211_htrates[16] = {
- 13, /* IFM_IEEE80211_MCS0 */
- 26, /* IFM_IEEE80211_MCS1 */
- 39, /* IFM_IEEE80211_MCS2 */
- 52, /* IFM_IEEE80211_MCS3 */
- 78, /* IFM_IEEE80211_MCS4 */
- 104, /* IFM_IEEE80211_MCS5 */
- 117, /* IFM_IEEE80211_MCS6 */
- 130, /* IFM_IEEE80211_MCS7 */
- 26, /* IFM_IEEE80211_MCS8 */
- 52, /* IFM_IEEE80211_MCS9 */
- 78, /* IFM_IEEE80211_MCS10 */
- 104, /* IFM_IEEE80211_MCS11 */
- 156, /* IFM_IEEE80211_MCS12 */
- 208, /* IFM_IEEE80211_MCS13 */
- 234, /* IFM_IEEE80211_MCS14 */
- 260, /* IFM_IEEE80211_MCS15 */
+#define MAX_MCS_INDEX 76
+
+/*
+ * Indices are:
+ *
+ * the MCS index (0-76);
+ *
+ * 0 for 20 MHz, 1 for 40 MHz;
+ *
+ * 0 for a long guard interval, 1 for a short guard interval.
+ */
+static const float ieee80211_float_htrates[MAX_MCS_INDEX+1][2][2] = {
+ /* MCS 0 */
+ { /* 20 Mhz */ { 6.5, /* SGI */ 7.2, },
+ /* 40 Mhz */ { 13.5, /* SGI */ 15.0, },
+ },
+
+ /* MCS 1 */
+ { /* 20 Mhz */ { 13.0, /* SGI */ 14.4, },
+ /* 40 Mhz */ { 27.0, /* SGI */ 30.0, },
+ },
+
+ /* MCS 2 */
+ { /* 20 Mhz */ { 19.5, /* SGI */ 21.7, },
+ /* 40 Mhz */ { 40.5, /* SGI */ 45.0, },
+ },
+
+ /* MCS 3 */
+ { /* 20 Mhz */ { 26.0, /* SGI */ 28.9, },
+ /* 40 Mhz */ { 54.0, /* SGI */ 60.0, },
+ },
+
+ /* MCS 4 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 5 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 6 */
+ { /* 20 Mhz */ { 58.5, /* SGI */ 65.0, },
+ /* 40 Mhz */ { 121.5, /* SGI */ 135.0, },
+ },
+
+ /* MCS 7 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 8 */
+ { /* 20 Mhz */ { 13.0, /* SGI */ 14.4, },
+ /* 40 Mhz */ { 27.0, /* SGI */ 30.0, },
+ },
+
+ /* MCS 9 */
+ { /* 20 Mhz */ { 26.0, /* SGI */ 28.9, },
+ /* 40 Mhz */ { 54.0, /* SGI */ 60.0, },
+ },
+
+ /* MCS 10 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 11 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 12 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 13 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 14 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 15 */
+ { /* 20 Mhz */ { 130.0, /* SGI */ 144.4, },
+ /* 40 Mhz */ { 270.0, /* SGI */ 300.0, },
+ },
+
+ /* MCS 16 */
+ { /* 20 Mhz */ { 19.5, /* SGI */ 21.7, },
+ /* 40 Mhz */ { 40.5, /* SGI */ 45.0, },
+ },
+
+ /* MCS 17 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 18 */
+ { /* 20 Mhz */ { 58.5, /* SGI */ 65.0, },
+ /* 40 Mhz */ { 121.5, /* SGI */ 135.0, },
+ },
+
+ /* MCS 19 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 20 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 21 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 22 */
+ { /* 20 Mhz */ { 175.5, /* SGI */ 195.0, },
+ /* 40 Mhz */ { 364.5, /* SGI */ 405.0, },
+ },
+
+ /* MCS 23 */
+ { /* 20 Mhz */ { 195.0, /* SGI */ 216.7, },
+ /* 40 Mhz */ { 405.0, /* SGI */ 450.0, },
+ },
+
+ /* MCS 24 */
+ { /* 20 Mhz */ { 26.0, /* SGI */ 28.9, },
+ /* 40 Mhz */ { 54.0, /* SGI */ 60.0, },
+ },
+
+ /* MCS 25 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 26 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 27 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 28 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 29 */
+ { /* 20 Mhz */ { 208.0, /* SGI */ 231.1, },
+ /* 40 Mhz */ { 432.0, /* SGI */ 480.0, },
+ },
+
+ /* MCS 30 */
+ { /* 20 Mhz */ { 234.0, /* SGI */ 260.0, },
+ /* 40 Mhz */ { 486.0, /* SGI */ 540.0, },
+ },
+
+ /* MCS 31 */
+ { /* 20 Mhz */ { 260.0, /* SGI */ 288.9, },
+ /* 40 Mhz */ { 540.0, /* SGI */ 600.0, },
+ },
+
+ /* MCS 32 */
+ { /* 20 Mhz */ { 0.0, /* SGI */ 0.0, }, /* not valid */
+ /* 40 Mhz */ { 6.0, /* SGI */ 6.7, },
+ },
+
+ /* MCS 33 */
+ { /* 20 Mhz */ { 39.0, /* SGI */ 43.3, },
+ /* 40 Mhz */ { 81.0, /* SGI */ 90.0, },
+ },
+
+ /* MCS 34 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 35 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 36 */
+ { /* 20 Mhz */ { 58.5, /* SGI */ 65.0, },
+ /* 40 Mhz */ { 121.5, /* SGI */ 135.0, },
+ },
+
+ /* MCS 37 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 38 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 39 */
+ { /* 20 Mhz */ { 52.0, /* SGI */ 57.8, },
+ /* 40 Mhz */ { 108.0, /* SGI */ 120.0, },
+ },
+
+ /* MCS 40 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 41 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 42 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 43 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 44 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 45 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 46 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 47 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 48 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 49 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 50 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 51 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 52 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 53 */
+ { /* 20 Mhz */ { 65.0, /* SGI */ 72.2, },
+ /* 40 Mhz */ { 135.0, /* SGI */ 150.0, },
+ },
+
+ /* MCS 54 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 55 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 56 */
+ { /* 20 Mhz */ { 78.0, /* SGI */ 86.7, },
+ /* 40 Mhz */ { 162.0, /* SGI */ 180.0, },
+ },
+
+ /* MCS 57 */
+ { /* 20 Mhz */ { 91.0, /* SGI */ 101.1, },
+ /* 40 Mhz */ { 189.0, /* SGI */ 210.0, },
+ },
+
+ /* MCS 58 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 59 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 60 */
+ { /* 20 Mhz */ { 104.0, /* SGI */ 115.6, },
+ /* 40 Mhz */ { 216.0, /* SGI */ 240.0, },
+ },
+
+ /* MCS 61 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 62 */
+ { /* 20 Mhz */ { 130.0, /* SGI */ 144.4, },
+ /* 40 Mhz */ { 270.0, /* SGI */ 300.0, },
+ },
+
+ /* MCS 63 */
+ { /* 20 Mhz */ { 130.0, /* SGI */ 144.4, },
+ /* 40 Mhz */ { 270.0, /* SGI */ 300.0, },
+ },
+
+ /* MCS 64 */
+ { /* 20 Mhz */ { 143.0, /* SGI */ 158.9, },
+ /* 40 Mhz */ { 297.0, /* SGI */ 330.0, },
+ },
+
+ /* MCS 65 */
+ { /* 20 Mhz */ { 97.5, /* SGI */ 108.3, },
+ /* 40 Mhz */ { 202.5, /* SGI */ 225.0, },
+ },
+
+ /* MCS 66 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 67 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 68 */
+ { /* 20 Mhz */ { 117.0, /* SGI */ 130.0, },
+ /* 40 Mhz */ { 243.0, /* SGI */ 270.0, },
+ },
+
+ /* MCS 69 */
+ { /* 20 Mhz */ { 136.5, /* SGI */ 151.7, },
+ /* 40 Mhz */ { 283.5, /* SGI */ 315.0, },
+ },
+
+ /* MCS 70 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 71 */
+ { /* 20 Mhz */ { 175.5, /* SGI */ 195.0, },
+ /* 40 Mhz */ { 364.5, /* SGI */ 405.0, },
+ },
+
+ /* MCS 72 */
+ { /* 20 Mhz */ { 156.0, /* SGI */ 173.3, },
+ /* 40 Mhz */ { 324.0, /* SGI */ 360.0, },
+ },
+
+ /* MCS 73 */
+ { /* 20 Mhz */ { 175.5, /* SGI */ 195.0, },
+ /* 40 Mhz */ { 364.5, /* SGI */ 405.0, },
+ },
+
+ /* MCS 74 */
+ { /* 20 Mhz */ { 195.0, /* SGI */ 216.7, },
+ /* 40 Mhz */ { 405.0, /* SGI */ 450.0, },
+ },
+
+ /* MCS 75 */
+ { /* 20 Mhz */ { 195.0, /* SGI */ 216.7, },
+ /* 40 Mhz */ { 405.0, /* SGI */ 450.0, },
+ },
+
+ /* MCS 76 */
+ { /* 20 Mhz */ { 214.5, /* SGI */ 238.3, },
+ /* 40 Mhz */ { 445.5, /* SGI */ 495.0, },
+ },
};
-#define PRINT_HT_RATE(_sep, _r, _suf) \
- printf("%s%.1f%s", _sep, (.5 * ieee80211_htrates[(_r) & 0xf]), _suf)
static const char *auth_alg_text[]={"Open System","Shared Key","EAP"};
#define NUM_AUTH_ALGS (sizeof auth_alg_text / sizeof auth_alg_text[0])
@@ -269,6 +655,7 @@ static int
parse_elements(struct mgmt_body_t *pbody, const u_char *p, int offset,
u_int length)
{
+ u_int elementlen;
struct ssid_t ssid;
struct challenge_t challenge;
struct rates_t rates;
@@ -487,12 +874,13 @@ parse_elements(struct mgmt_body_t *pbody, const u_char *p, int offset,
return 0;
if (length < 2)
return 0;
- if (!TTEST2(*(p + offset + 2), *(p + offset + 1)))
+ elementlen = *(p + offset + 1);
+ if (!TTEST2(*(p + offset + 2), elementlen))
return 0;
- if (length < (u_int)(*(p + offset + 1) + 2))
+ if (length < elementlen + 2)
return 0;
- offset += *(p + offset + 1) + 2;
- length -= *(p + offset + 1) + 2;
+ offset += elementlen + 2;
+ length -= elementlen + 2;
break;
}
}
@@ -1321,7 +1709,8 @@ ieee802_11_print(const u_char *p, u_int length, u_int orig_caplen, int pad,
hdrlen = extract_header_length(fc);
if (pad)
hdrlen = roundup2(hdrlen, 4);
- if (FC_TYPE(fc) == T_DATA && DATA_FRAME_IS_QOS(FC_SUBTYPE(fc))) {
+ if (Hflag && FC_TYPE(fc) == T_DATA &&
+ DATA_FRAME_IS_QOS(FC_SUBTYPE(fc))) {
meshdrlen = extract_mesh_header_length(p+hdrlen);
hdrlen += meshdrlen;
} else
@@ -1461,7 +1850,8 @@ print_chaninfo(int freq, int flags)
}
static int
-print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
+print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags,
+ struct radiotap_state *state, u_int32_t presentflags)
{
union {
int8_t i8;
@@ -1476,9 +1866,18 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
switch (bit) {
case IEEE80211_RADIOTAP_FLAGS:
rc = cpack_uint8(s, &u.u8);
+ if (rc != 0)
+ break;
*flags = u.u8;
break;
case IEEE80211_RADIOTAP_RATE:
+ rc = cpack_uint8(s, &u.u8);
+ if (rc != 0)
+ break;
+
+ /* Save state rate */
+ state->rate = u.u8;
+ break;
case IEEE80211_RADIOTAP_DB_ANTSIGNAL:
case IEEE80211_RADIOTAP_DB_ANTNOISE:
case IEEE80211_RADIOTAP_ANTENNA:
@@ -1497,6 +1896,7 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
case IEEE80211_RADIOTAP_FHSS:
case IEEE80211_RADIOTAP_LOCK_QUALITY:
case IEEE80211_RADIOTAP_TX_ATTENUATION:
+ case IEEE80211_RADIOTAP_RX_FLAGS:
rc = cpack_uint16(s, &u.u16);
break;
case IEEE80211_RADIOTAP_DB_TX_ATTENUATION:
@@ -1520,6 +1920,45 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
break;
rc = cpack_uint8(s, &u4.u8);
break;
+ case IEEE80211_RADIOTAP_MCS:
+ rc = cpack_uint8(s, &u.u8);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &u2.u8);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &u3.u8);
+ break;
+ case IEEE80211_RADIOTAP_VENDOR_NAMESPACE: {
+ u_int8_t vns[3];
+ u_int16_t length;
+ u_int8_t subspace;
+
+ if ((cpack_align_and_reserve(s, 2)) == NULL) {
+ rc = -1;
+ break;
+ }
+
+ rc = cpack_uint8(s, &vns[0]);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &vns[1]);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &vns[2]);
+ if (rc != 0)
+ break;
+ rc = cpack_uint8(s, &subspace);
+ if (rc != 0)
+ break;
+ rc = cpack_uint16(s, &length);
+ if (rc != 0)
+ break;
+
+ /* Skip up to length */
+ s->c_next += length;
+ break;
+ }
default:
/* this bit indicates a field whose
* size we do not know, so we cannot
@@ -1534,18 +1973,64 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
return rc;
}
+ /* Preserve the state present flags */
+ state->present = presentflags;
+
switch (bit) {
case IEEE80211_RADIOTAP_CHANNEL:
+ /*
+ * If CHANNEL and XCHANNEL are both present, skip
+ * CHANNEL.
+ */
+ if (presentflags & (1 << IEEE80211_RADIOTAP_XCHANNEL))
+ break;
print_chaninfo(u.u16, u2.u16);
break;
case IEEE80211_RADIOTAP_FHSS:
printf("fhset %d fhpat %d ", u.u16 & 0xff, (u.u16 >> 8) & 0xff);
break;
case IEEE80211_RADIOTAP_RATE:
- if (u.u8 & 0x80)
- PRINT_HT_RATE("", u.u8, " Mb/s ");
- else
- PRINT_RATE("", u.u8, " Mb/s ");
+ /*
+ * XXX On FreeBSD rate & 0x80 means we have an MCS. On
+ * Linux and AirPcap it does not. (What about
+ * Mac OS X, NetBSD, OpenBSD, and DragonFly BSD?)
+ *
+ * This is an issue either for proprietary extensions
+ * to 11a or 11g, which do exist, or for 11n
+ * implementations that stuff a rate value into
+ * this field, which also appear to exist.
+ *
+ * We currently handle that by assuming that
+ * if the 0x80 bit is set *and* the remaining
+ * bits have a value between 0 and 15 it's
+ * an MCS value, otherwise it's a rate. If
+ * there are cases where systems that use
+ * "0x80 + MCS index" for MCS indices > 15,
+ * or stuff a rate value here between 64 and
+ * 71.5 Mb/s in here, we'll need a preference
+ * setting. Such rates do exist, e.g. 11n
+ * MCS 7 at 20 MHz with a long guard interval.
+ */
+ if (u.u8 >= 0x80 && u.u8 <= 0x8f) {
+ /*
+ * XXX - we don't know the channel width
+ * or guard interval length, so we can't
+ * convert this to a data rate.
+ *
+ * If you want us to show a data rate,
+ * use the MCS field, not the Rate field;
+ * the MCS field includes not only the
+ * MCS index, it also includes bandwidth
+ * and guard interval information.
+ *
+ * XXX - can we get the channel width
+ * from XChannel and the guard interval
+ * information from Flags, at least on
+ * FreeBSD?
+ */
+ printf("MCS %u ", u.u8 & 0x7f);
+ } else
+ printf("%2.1f Mb/s ", .5*u.u8);
break;
case IEEE80211_RADIOTAP_DBM_ANTSIGNAL:
printf("%ddB signal ", u.i8);
@@ -1589,9 +2074,89 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit, u_int8_t *flags)
case IEEE80211_RADIOTAP_TSFT:
printf("%" PRIu64 "us tsft ", u.u64);
break;
+ case IEEE80211_RADIOTAP_RX_FLAGS:
+ /* Do nothing for now */
+ break;
case IEEE80211_RADIOTAP_XCHANNEL:
print_chaninfo(u2.u16, u.u32);
break;
+ case IEEE80211_RADIOTAP_MCS: {
+ static const char *bandwidth[4] = {
+ "20 MHz",
+ "40 MHz",
+ "20 MHz (L)",
+ "20 MHz (U)"
+ };
+ float htrate;
+
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_MCS_INDEX_KNOWN) {
+ /*
+ * We know the MCS index.
+ */
+ if (u3.u8 <= MAX_MCS_INDEX) {
+ /*
+ * And it's in-range.
+ */
+ if (u.u8 & (IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN|IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN)) {
+ /*
+ * And we know both the bandwidth and
+ * the guard interval, so we can look
+ * up the rate.
+ */
+ htrate =
+ ieee80211_float_htrates \
+ [u3.u8] \
+ [((u2.u8 & IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK) == IEEE80211_RADIOTAP_MCS_BANDWIDTH_40 ? 1 : 0)] \
+ [((u2.u8 & IEEE80211_RADIOTAP_MCS_SHORT_GI) ? 1 : 0)];
+ } else {
+ /*
+ * We don't know both the bandwidth
+ * and the guard interval, so we can
+ * only report the MCS index.
+ */
+ htrate = 0.0;
+ }
+ } else {
+ /*
+ * The MCS value is out of range.
+ */
+ htrate = 0.0;
+ }
+ if (htrate != 0.0) {
+ /*
+ * We have the rate.
+ * Print it.
+ */
+ printf("%.1f Mb/s MCS %u ", htrate, u3.u8);
+ } else {
+ /*
+ * We at least have the MCS index.
+ * Print it.
+ */
+ printf("MCS %u ", u3.u8);
+ }
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_BANDWIDTH_KNOWN) {
+ printf("%s ",
+ bandwidth[u2.u8 & IEEE80211_RADIOTAP_MCS_BANDWIDTH_MASK]);
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_GUARD_INTERVAL_KNOWN) {
+ printf("%s GI ",
+ (u2.u8 & IEEE80211_RADIOTAP_MCS_SHORT_GI) ?
+ "short" : "lon");
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_HT_FORMAT_KNOWN) {
+ printf("%s ",
+ (u2.u8 & IEEE80211_RADIOTAP_MCS_HT_GREENFIELD) ?
+ "greenfield" : "mixed");
+ }
+ if (u.u8 & IEEE80211_RADIOTAP_MCS_FEC_TYPE_KNOWN) {
+ printf("%s FEC ",
+ (u2.u8 & IEEE80211_RADIOTAP_MCS_FEC_LDPC) ?
+ "LDPC" : "BCC");
+ }
+ break;
+ }
}
return 0;
}
@@ -1611,6 +2176,7 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
struct cpack_state cpacker;
struct ieee80211_radiotap_header *hdr;
u_int32_t present, next_present;
+ u_int32_t presentflags = 0;
u_int32_t *presentp, *last_presentp;
enum ieee80211_radiotap_type bit;
int bit0;
@@ -1619,6 +2185,7 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
u_int8_t flags;
int pad;
u_int fcslen;
+ struct radiotap_state state;
if (caplen < sizeof(*hdr)) {
printf("[|802.11]");
@@ -1660,6 +2227,11 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
fcslen = 0;
for (bit0 = 0, presentp = &hdr->it_present; presentp <= last_presentp;
presentp++, bit0 += 32) {
+ presentflags = EXTRACT_LE_32BITS(presentp);
+
+ /* Clear state. */
+ memset(&state, 0, sizeof(state));
+
for (present = EXTRACT_LE_32BITS(presentp); present;
present = next_present) {
/* clear the least significant bit that is set */
@@ -1669,16 +2241,16 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
bit = (enum ieee80211_radiotap_type)
(bit0 + BITNO_32(present ^ next_present));
- if (print_radiotap_field(&cpacker, bit, &flags) != 0)
+ if (print_radiotap_field(&cpacker, bit, &flags, &state, presentflags) != 0)
goto out;
}
}
+out:
if (flags & IEEE80211_RADIOTAP_F_DATAPAD)
pad = 1; /* Atheros padding */
if (flags & IEEE80211_RADIOTAP_F_FCS)
fcslen = 4; /* FCS at end of packet */
-out:
return len + ieee802_11_print(p + len, length - len, caplen - len, pad,
fcslen);
#undef BITNO_32
diff --git a/print-802_15_4.c b/print-802_15_4.c
new file mode 100644
index 000000000000..2016552cea2c
--- /dev/null
+++ b/print-802_15_4.c
@@ -0,0 +1,183 @@
+/*
+ * Copyright (c) 2009
+ * Siemens AG, All rights reserved.
+ * Dmitry Eremin-Solenikov (dbaryshkov@gmail.com)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code distributions
+ * retain the above copyright notice and this paragraph in its entirety, (2)
+ * distributions including binary code include the above copyright notice and
+ * this paragraph in its entirety in the documentation or other materials
+ * provided with the distribution, and (3) all advertising materials mentioning
+ * features or use of this software display the following acknowledgement:
+ * ``This product includes software developed by the University of California,
+ * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
+ * the University nor the names of its contributors may be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <pcap.h>
+#include <string.h>
+
+#include "interface.h"
+#include "addrtoname.h"
+
+#include "extract.h"
+
+static const char *ftypes[] = {
+ "Beacon", /* 0 */
+ "Data", /* 1 */
+ "ACK", /* 2 */
+ "Command", /* 3 */
+ "Reserved", /* 4 */
+ "Reserved", /* 5 */
+ "Reserved", /* 6 */
+ "Reserved", /* 7 */
+};
+
+static int
+extract_header_length(u_int16_t fc)
+{
+ int len = 0;
+
+ switch ((fc >> 10) & 0x3) {
+ case 0x00:
+ if (fc & (1 << 6)) /* intra-PAN with none dest addr */
+ return -1;
+ break;
+ case 0x01:
+ return -1;
+ case 0x02:
+ len += 4;
+ break;
+ case 0x03:
+ len += 10;
+ break;
+ }
+
+ switch ((fc >> 14) & 0x3) {
+ case 0x00:
+ break;
+ case 0x01:
+ return -1;
+ case 0x02:
+ len += 4;
+ break;
+ case 0x03:
+ len += 10;
+ break;
+ }
+
+ if (fc & (1 << 6)) {
+ if (len < 2)
+ return -1;
+ len -= 2;
+ }
+
+ return len;
+}
+
+
+u_int
+ieee802_15_4_if_print(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ u_int caplen = h->caplen;
+ int hdrlen;
+ u_int16_t fc;
+ u_int8_t seq;
+
+ if (caplen < 3) {
+ ND_PRINT((ndo, "[|802.15.4] %x", caplen));
+ return caplen;
+ }
+
+ fc = EXTRACT_LE_16BITS(p);
+ hdrlen = extract_header_length(fc);
+
+ seq = EXTRACT_LE_8BITS(p + 2);
+
+ p += 3;
+ caplen -= 3;
+
+ ND_PRINT((ndo,"IEEE 802.15.4 %s packet ", ftypes[fc & 0x7]));
+ if (vflag)
+ ND_PRINT((ndo,"seq %02x ", seq));
+ if (hdrlen == -1) {
+ ND_PRINT((ndo,"malformed! "));
+ return caplen;
+ }
+
+
+ if (!vflag) {
+ p+= hdrlen;
+ caplen -= hdrlen;
+ } else {
+ u_int16_t panid = 0;
+
+ switch ((fc >> 10) & 0x3) {
+ case 0x00:
+ ND_PRINT((ndo,"none "));
+ break;
+ case 0x01:
+ ND_PRINT((ndo,"reserved destination addressing mode"));
+ return 0;
+ case 0x02:
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ ND_PRINT((ndo,"%04x:%04x ", panid, EXTRACT_LE_16BITS(p)));
+ p += 2;
+ break;
+ case 0x03:
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ ND_PRINT((ndo,"%04x:%s ", panid, le64addr_string(p)));
+ p += 8;
+ break;
+ }
+ ND_PRINT((ndo,"< ");
+
+ switch ((fc >> 14) & 0x3) {
+ case 0x00:
+ ND_PRINT((ndo,"none "));
+ break;
+ case 0x01:
+ ND_PRINT((ndo,"reserved source addressing mode"));
+ return 0;
+ case 0x02:
+ if (!(fc & (1 << 6))) {
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ }
+ ND_PRINT((ndo,"%04x:%04x ", panid, EXTRACT_LE_16BITS(p)));
+ p += 2;
+ break;
+ case 0x03:
+ if (!(fc & (1 << 6))) {
+ panid = EXTRACT_LE_16BITS(p);
+ p += 2;
+ }
+ ND_PRINT((ndo,"%04x:%s ", panid, le64addr_string(p))));
+ p += 8;
+ break;
+ }
+
+ caplen -= hdrlen;
+ }
+
+ if (!suppress_default_print)
+ (ndo->ndo_default_print)(ndo, p, caplen);
+
+ return 0;
+}
diff --git a/print-ap1394.c b/print-ap1394.c
index cb9d972f43b6..ab0713b5a7a2 100644
--- a/print-ap1394.c
+++ b/print-ap1394.c
@@ -106,7 +106,7 @@ ap1394_if_print(const struct pcap_pkthdr *h, const u_char *p)
p += FIREWIRE_HDRLEN;
ether_type = EXTRACT_16BITS(&fp->firewire_type);
- if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ if (ethertype_print(gndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
ap1394_hdr_print((u_char *)fp, length + FIREWIRE_HDRLEN);
diff --git a/print-arcnet.c b/print-arcnet.c
index a7b9f0da6bd7..9531f346bff7 100644
--- a/print-arcnet.c
+++ b/print-arcnet.c
@@ -265,14 +265,14 @@ arcnet_encap_print(u_char arctype, const u_char *p,
#ifdef INET6
case ARCTYPE_INET6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
return (1);
#endif /*INET6*/
case ARCTYPE_ARP_OLD:
case ARCTYPE_ARP:
case ARCTYPE_REVARP:
- arp_print(gndo, p, length, caplen);
+ arp_print(gndo, p, length, caplen);
return (1);
case ARCTYPE_ATALK: /* XXX was this ever used? */
diff --git a/print-arp.c b/print-arp.c
index 0ca86cfca087..905ef4656003 100644
--- a/print-arp.c
+++ b/print-arp.c
@@ -318,6 +318,7 @@ arp_print(netdissect_options *ndo,
return;
case ARPHRD_FRELAY:
linkaddr = LINKADDR_FRELAY;
+ break;
default:
linkaddr = LINKADDR_ETHER;
break;
diff --git a/print-atalk.c b/print-atalk.c
index e7d6b5fdb1c4..0a08ef9daa78 100644
--- a/print-atalk.c
+++ b/print-atalk.c
@@ -99,14 +99,10 @@ llap_print(register const u_char *bp, u_int length)
u_short snet;
u_int hdrlen;
- /*
- * Our packet is on a 4-byte boundary, as we're either called
- * directly from a top-level link-layer printer (ltalk_if_print)
- * or from the UDP printer. The LLAP+DDP header is a multiple
- * of 4 bytes in length, so the DDP payload is also on a 4-byte
- * boundary, and we don't need to align it before calling
- * "ddp_print()".
- */
+ if (length < sizeof(*lp)) {
+ (void)printf(" [|llap %u]", length);
+ return (length);
+ }
lp = (const struct LAP *)bp;
bp += sizeof(*lp);
length -= sizeof(*lp);
@@ -115,7 +111,7 @@ llap_print(register const u_char *bp, u_int length)
case lapShortDDP:
if (length < ddpSSize) {
- (void)printf(" [|sddp %d]", length);
+ (void)printf(" [|sddp %u]", length);
return (length);
}
sdp = (const struct atShortDDP *)bp;
@@ -131,7 +127,7 @@ llap_print(register const u_char *bp, u_int length)
case lapDDP:
if (length < ddpSize) {
- (void)printf(" [|ddp %d]", length);
+ (void)printf(" [|ddp %u]", length);
return (length);
}
dp = (const struct atDDP *)bp;
@@ -154,7 +150,7 @@ llap_print(register const u_char *bp, u_int length)
#endif
default:
- printf("%d > %d at-lap#%d %d",
+ printf("%d > %d at-lap#%d %u",
lp->src, lp->dst, lp->type, length);
break;
}
@@ -176,7 +172,7 @@ atalk_print(register const u_char *bp, u_int length)
printf("AT ");
if (length < ddpSize) {
- (void)printf(" [|ddp %d]", length);
+ (void)printf(" [|ddp %u]", length);
return;
}
dp = (const struct atDDP *)bp;
@@ -265,6 +261,10 @@ atp_print(register const struct atATP *ap, u_int length)
fputs(tstr, stdout);
return;
}
+ if (length < sizeof(*ap)) {
+ (void)printf(" [|atp %u]", length);
+ return;
+ }
length -= sizeof(*ap);
switch (ap->control & 0xc0) {
@@ -276,7 +276,7 @@ atp_print(register const struct atATP *ap, u_int length)
atp_bitmap_print(ap->bitmap);
if (length != 0)
- (void)printf(" [len=%d]", length);
+ (void)printf(" [len=%u]", length);
switch (ap->control & (atpEOM|atpSTS)) {
case atpEOM:
@@ -292,7 +292,7 @@ atp_print(register const struct atATP *ap, u_int length)
break;
case atpRspCode:
- (void)printf(" atp-resp%s%d:%d (%d)",
+ (void)printf(" atp-resp%s%d:%d (%u)",
ap->control & atpEOM? "*" : " ",
EXTRACT_16BITS(&ap->transID), ap->bitmap, length);
switch (ap->control & (atpXO|atpSTS)) {
@@ -315,7 +315,7 @@ atp_print(register const struct atATP *ap, u_int length)
/* length should be zero */
if (length)
- (void)printf(" [len=%d]", length);
+ (void)printf(" [len=%u]", length);
/* there shouldn't be any control flags */
if (ap->control & (atpXO|atpEOM|atpSTS)) {
@@ -337,7 +337,7 @@ atp_print(register const struct atATP *ap, u_int length)
break;
default:
- (void)printf(" atp-0x%x %d (%d)", ap->control,
+ (void)printf(" atp-0x%x %d (%u)", ap->control,
EXTRACT_16BITS(&ap->transID), length);
break;
}
@@ -387,14 +387,14 @@ nbp_print(register const struct atNBP *np, u_int length, register u_short snet,
const u_char *ep;
if (length < nbpHeaderSize) {
- (void)printf(" truncated-nbp %d", length);
+ (void)printf(" truncated-nbp %u", length);
return;
}
length -= nbpHeaderSize;
if (length < 8) {
/* must be room for at least one tuple */
- (void)printf(" truncated-nbp %d", length + nbpHeaderSize);
+ (void)printf(" truncated-nbp %u", length + nbpHeaderSize);
return;
}
/* ep points to end of available data */
@@ -439,7 +439,7 @@ nbp_print(register const struct atNBP *np, u_int length, register u_short snet,
break;
default:
- (void)printf(" nbp-0x%x %d (%d)", np->control, np->id,
+ (void)printf(" nbp-0x%x %d (%u)", np->control, np->id,
length);
break;
}
@@ -551,26 +551,24 @@ ataddr_string(u_short atnet, u_char athost)
if (first && (first = 0, !nflag)
&& (fp = fopen("/etc/atalk.names", "r"))) {
char line[256];
- int i1, i2, i3;
+ int i1, i2;
while (fgets(line, sizeof(line), fp)) {
if (line[0] == '\n' || line[0] == 0 || line[0] == '#')
continue;
- if (sscanf(line, "%d.%d.%d %256s", &i1, &i2, &i3,
- nambuf) == 4)
+ if (sscanf(line, "%d.%d %256s", &i1, &i2, nambuf) == 3)
/* got a hostname. */
- i3 |= ((i1 << 8) | i2) << 8;
- else if (sscanf(line, "%d.%d %256s", &i1, &i2,
- nambuf) == 3)
+ i2 |= (i1 << 8);
+ else if (sscanf(line, "%d %256s", &i1, nambuf) == 2)
/* got a net name */
- i3 = (((i1 << 8) | i2) << 8) | 255;
+ i2 = (i1 << 8) | 255;
else
continue;
- for (tp = &hnametable[i3 & (HASHNAMESIZE-1)];
+ for (tp = &hnametable[i2 & (HASHNAMESIZE-1)];
tp->nxt; tp = tp->nxt)
;
- tp->addr = i3;
+ tp->addr = i2;
tp->nxt = newhnamemem();
tp->name = strdup(nambuf);
}
@@ -596,11 +594,9 @@ ataddr_string(u_short atnet, u_char athost)
tp->addr = (atnet << 8) | athost;
tp->nxt = newhnamemem();
if (athost != 255)
- (void)snprintf(nambuf, sizeof(nambuf), "%d.%d.%d",
- atnet >> 8, atnet & 0xff, athost);
+ (void)snprintf(nambuf, sizeof(nambuf), "%d.%d", atnet, athost);
else
- (void)snprintf(nambuf, sizeof(nambuf), "%d.%d", atnet >> 8,
- atnet & 0xff);
+ (void)snprintf(nambuf, sizeof(nambuf), "%d", atnet);
tp->name = strdup(nambuf);
return (tp->name);
diff --git a/print-atm.c b/print-atm.c
index 135898bad91a..935d182753b8 100644
--- a/print-atm.c
+++ b/print-atm.c
@@ -270,10 +270,12 @@ sig_print(const u_char *p, int caplen)
printf(":%s ",
tok2str(msgtype2str, "msgtype#%d", p[MSG_TYPE_POS]));
- if (caplen < CALL_REF_POS+3) {
- printf("[|atm]");
- return;
- }
+ /*
+ * The call reference comes before the message type,
+ * so if we know we have the message type, which we
+ * do from the caplen test above, we also know we have
+ * the call reference.
+ */
call_ref = EXTRACT_24BITS(&p[CALL_REF_POS]);
printf("CALL_REF:0x%06x", call_ref);
} else {
diff --git a/print-babel.c b/print-babel.c
new file mode 100644
index 000000000000..e787f8b2fc8c
--- /dev/null
+++ b/print-babel.c
@@ -0,0 +1,414 @@
+/*
+ * Copyright (c) 2007-2011 Grégoire Henry, Juliusz Chroboczek
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "addrtoname.h"
+#include "interface.h"
+#include "extract.h"
+
+static void babel_print_v2(const u_char *cp, u_int length);
+
+void
+babel_print(const u_char *cp, u_int length) {
+ printf("babel");
+
+ TCHECK2(*cp, 4);
+
+ if(cp[0] != 42) {
+ printf(" malformed header");
+ return;
+ } else {
+ printf(" %d", cp[1]);
+ }
+
+ switch(cp[1]) {
+ case 2:
+ babel_print_v2(cp,length);
+ break;
+ default:
+ printf(" unknown version");
+ break;
+ }
+
+ return;
+
+ trunc:
+ printf(" [|babel]");
+ return;
+}
+
+#define MESSAGE_PAD1 0
+#define MESSAGE_PADN 1
+#define MESSAGE_ACK_REQ 2
+#define MESSAGE_ACK 3
+#define MESSAGE_HELLO 4
+#define MESSAGE_IHU 5
+#define MESSAGE_ROUTER_ID 6
+#define MESSAGE_NH 7
+#define MESSAGE_UPDATE 8
+#define MESSAGE_REQUEST 9
+#define MESSAGE_MH_REQUEST 10
+
+static const char *
+format_id(const u_char *id)
+{
+ static char buf[25];
+ snprintf(buf, 25, "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
+ id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]);
+ buf[24] = '\0';
+ return buf;
+}
+
+static const unsigned char v4prefix[16] =
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 };
+
+static const char *
+format_prefix(const u_char *prefix, unsigned char plen)
+{
+ static char buf[50];
+ if(plen >= 96 && memcmp(prefix, v4prefix, 12) == 0)
+ snprintf(buf, 50, "%s/%u", ipaddr_string(prefix + 12), plen - 96);
+ else
+ snprintf(buf, 50, "%s/%u", ip6addr_string(prefix), plen);
+ buf[49] = '\0';
+ return buf;
+}
+
+static const char *
+format_address(const u_char *prefix)
+{
+ if(memcmp(prefix, v4prefix, 12) == 0)
+ return ipaddr_string(prefix + 12);
+ else
+ return ip6addr_string(prefix);
+}
+
+static int
+network_prefix(int ae, int plen, unsigned int omitted,
+ const unsigned char *p, const unsigned char *dp,
+ unsigned int len, unsigned char *p_r)
+{
+ unsigned pb;
+ unsigned char prefix[16];
+
+ if(plen >= 0)
+ pb = (plen + 7) / 8;
+ else if(ae == 1)
+ pb = 4;
+ else
+ pb = 16;
+
+ if(pb > 16)
+ return -1;
+
+ memset(prefix, 0, 16);
+
+ switch(ae) {
+ case 0: break;
+ case 1:
+ if(omitted > 4 || pb > 4 || (pb > omitted && len < pb - omitted))
+ return -1;
+ memcpy(prefix, v4prefix, 12);
+ if(omitted) {
+ if (dp == NULL) return -1;
+ memcpy(prefix, dp, 12 + omitted);
+ }
+ if(pb > omitted) memcpy(prefix + 12 + omitted, p, pb - omitted);
+ break;
+ case 2:
+ if(omitted > 16 || (pb > omitted && len < pb - omitted))
+ return -1;
+ if(omitted) {
+ if (dp == NULL) return -1;
+ memcpy(prefix, dp, omitted);
+ }
+ if(pb > omitted) memcpy(prefix + omitted, p, pb - omitted);
+ break;
+ case 3:
+ if(pb > 8 && len < pb - 8) return -1;
+ prefix[0] = 0xfe;
+ prefix[1] = 0x80;
+ if(pb > 8) memcpy(prefix + 8, p, pb - 8);
+ break;
+ default:
+ return -1;
+ }
+
+ memcpy(p_r, prefix, 16);
+ return 1;
+}
+
+static int
+network_address(int ae, const unsigned char *a, unsigned int len,
+ unsigned char *a_r)
+{
+ return network_prefix(ae, -1, 0, a, NULL, len, a_r);
+}
+
+#define ICHECK(i, l) \
+ if ((i) + (l) > bodylen || (i) + (l) > length) goto corrupt;
+
+static void
+babel_print_v2(const u_char *cp, u_int length) {
+ u_int i;
+ u_short bodylen;
+ u_char v4_prefix[16] =
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF, 0, 0, 0, 0 };
+ u_char v6_prefix[16] = {0};
+
+ TCHECK2(*cp, 4);
+ if (length < 4)
+ goto corrupt;
+ bodylen = EXTRACT_16BITS(cp + 2);
+ printf(" (%u)", bodylen);
+
+ /* Process the TLVs in the body */
+ i = 0;
+ while(i < bodylen) {
+ const u_char *message;
+ u_char type, len;
+
+ message = cp + 4 + i;
+ TCHECK2(*message, 2);
+ ICHECK(i, 2);
+ type = message[0];
+ len = message[1];
+
+ TCHECK2(*message, 2 + len);
+ ICHECK(i, 2 + len);
+
+ switch(type) {
+ case MESSAGE_PAD1: {
+ if(!vflag)
+ printf(" pad1");
+ else
+ printf("\n\tPad 1");
+ }
+ break;
+
+ case MESSAGE_PADN: {
+ if(!vflag)
+ printf(" padN");
+ else
+ printf("\n\tPad %d", len + 2);
+ }
+ break;
+
+ case MESSAGE_ACK_REQ: {
+ u_short nonce, interval;
+ if(!vflag)
+ printf(" ack-req");
+ else {
+ printf("\n\tAcknowledgment Request ");
+ if(len < 6) goto corrupt;
+ nonce = EXTRACT_16BITS(message + 4);
+ interval = EXTRACT_16BITS(message + 6);
+ printf("%04x %d", nonce, interval);
+ }
+ }
+ break;
+
+ case MESSAGE_ACK: {
+ u_short nonce;
+ if(!vflag)
+ printf(" ack");
+ else {
+ printf("\n\tAcknowledgment ");
+ if(len < 2) goto corrupt;
+ nonce = EXTRACT_16BITS(message + 2);
+ printf("%04x", nonce);
+ }
+ }
+ break;
+
+ case MESSAGE_HELLO: {
+ u_short seqno, interval;
+ if(!vflag)
+ printf(" hello");
+ else {
+ printf("\n\tHello ");
+ if(len < 6) goto corrupt;
+ seqno = EXTRACT_16BITS(message + 4);
+ interval = EXTRACT_16BITS(message + 6);
+ printf("seqno %u interval %u", seqno, interval);
+ }
+ }
+ break;
+
+ case MESSAGE_IHU: {
+ unsigned short txcost, interval;
+ if(!vflag)
+ printf(" ihu");
+ else {
+ u_char address[16];
+ int rc;
+ printf("\n\tIHU ");
+ if(len < 6) goto corrupt;
+ txcost = EXTRACT_16BITS(message + 4);
+ interval = EXTRACT_16BITS(message + 6);
+ rc = network_address(message[2], message + 8, len - 6, address);
+ if(rc < 0) { printf("[|babel]"); break; }
+ printf("%s txcost %u interval %d",
+ format_address(address), txcost, interval);
+ }
+ }
+ break;
+
+ case MESSAGE_ROUTER_ID: {
+ if(!vflag)
+ printf(" router-id");
+ else {
+ printf("\n\tRouter Id");
+ if(len < 10) goto corrupt;
+ printf(" %s", format_id(message + 4));
+ }
+ }
+ break;
+
+ case MESSAGE_NH: {
+ if(!vflag)
+ printf(" nh");
+ else {
+ int rc;
+ u_char nh[16];
+ printf("\n\tNext Hop");
+ if(len < 2) goto corrupt;
+ rc = network_address(message[2], message + 4, len - 2, nh);
+ if(rc < 0) goto corrupt;
+ printf(" %s", format_address(nh));
+ }
+ }
+ break;
+
+ case MESSAGE_UPDATE: {
+ if(!vflag) {
+ printf(" update");
+ if(len < 1)
+ printf("/truncated");
+ else
+ printf("%s%s%s",
+ (message[3] & 0x80) ? "/prefix": "",
+ (message[3] & 0x40) ? "/id" : "",
+ (message[3] & 0x3f) ? "/unknown" : "");
+ } else {
+ u_short interval, seqno, metric;
+ u_char plen;
+ int rc;
+ u_char prefix[16];
+ printf("\n\tUpdate");
+ if(len < 10) goto corrupt;
+ plen = message[4] + (message[2] == 1 ? 96 : 0);
+ rc = network_prefix(message[2], message[4], message[5],
+ message + 12,
+ message[2] == 1 ? v4_prefix : v6_prefix,
+ len - 10, prefix);
+ if(rc < 0) goto corrupt;
+ interval = EXTRACT_16BITS(message + 6);
+ seqno = EXTRACT_16BITS(message + 8);
+ metric = EXTRACT_16BITS(message + 10);
+ printf("%s%s%s %s metric %u seqno %u interval %u",
+ (message[3] & 0x80) ? "/prefix": "",
+ (message[3] & 0x40) ? "/id" : "",
+ (message[3] & 0x3f) ? "/unknown" : "",
+ format_prefix(prefix, plen),
+ metric, seqno, interval);
+ if(message[3] & 0x80) {
+ if(message[2] == 1)
+ memcpy(v4_prefix, prefix, 16);
+ else
+ memcpy(v6_prefix, prefix, 16);
+ }
+ }
+ }
+ break;
+
+ case MESSAGE_REQUEST: {
+ if(!vflag)
+ printf(" request");
+ else {
+ int rc;
+ u_char prefix[16], plen;
+ printf("\n\tRequest ");
+ if(len < 2) goto corrupt;
+ plen = message[3] + (message[2] == 1 ? 96 : 0);
+ rc = network_prefix(message[2], message[3], 0,
+ message + 4, NULL, len - 2, prefix);
+ if(rc < 0) goto corrupt;
+ plen = message[3] + (message[2] == 1 ? 96 : 0);
+ printf("for %s",
+ message[2] == 0 ? "any" : format_prefix(prefix, plen));
+ }
+ }
+ break;
+
+ case MESSAGE_MH_REQUEST : {
+ if(!vflag)
+ printf(" mh-request");
+ else {
+ int rc;
+ u_short seqno;
+ u_char prefix[16], plen;
+ printf("\n\tMH-Request ");
+ if(len < 14) goto corrupt;
+ seqno = EXTRACT_16BITS(message + 4);
+ rc = network_prefix(message[2], message[3], 0,
+ message + 16, NULL, len - 14, prefix);
+ if(rc < 0) goto corrupt;
+ plen = message[3] + (message[2] == 1 ? 96 : 0);
+ printf("(%u hops) for %s seqno %u id %s",
+ message[6], format_prefix(prefix, plen),
+ seqno, format_id(message + 8));
+ }
+ }
+ break;
+ default:
+ if(!vflag)
+ printf(" unknown");
+ else
+ printf("\n\tUnknown message type %d", type);
+ }
+ i += len + 2;
+ }
+ return;
+
+ trunc:
+ printf(" [|babel]");
+ return;
+
+ corrupt:
+ printf(" (corrupt)");
+ return;
+}
diff --git a/print-bgp.c b/print-bgp.c
index d77802dd734b..6460a59e0c47 100644
--- a/print-bgp.c
+++ b/print-bgp.c
@@ -401,8 +401,11 @@ static struct tok bgp_safi_values[] = {
#define BGP_EXT_COM_L2INFO 0x800a /* draft-kompella-ppvpn-l2vpn */
-#define BGP_EXT_COM_SOURCE_AS 0x0009 /* draft-ietf-l3vpn-2547bis-mcast-bgp-02.txt */
-#define BGP_EXT_COM_VRF_RT_IMP 0x010a /* draft-ietf-l3vpn-2547bis-mcast-bgp-02.txt */
+#define BGP_EXT_COM_SOURCE_AS 0x0009 /* RFC-ietf-l3vpn-2547bis-mcast-bgp-08.txt */
+#define BGP_EXT_COM_VRF_RT_IMP 0x010b /* RFC-ietf-l3vpn-2547bis-mcast-bgp-08.txt */
+#define BGP_EXT_COM_L2VPN_RT_0 0x000a /* L2VPN Identifier,Format AS(2bytes):AN(4bytes) */
+#define BGP_EXT_COM_L2VPN_RT_1 0xF10a /* L2VPN Identifier,Format IP address:AN(2bytes) */
+
/* http://www.cisco.com/en/US/tech/tk436/tk428/technologies_tech_note09186a00801eb09a.shtml */
#define BGP_EXT_COM_EIGRP_GEN 0x8800
@@ -443,6 +446,8 @@ static struct tok bgp_extd_comm_subtype_values[] = {
{ BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC , "eigrp-external-route (remote-proto, remote-metric)" },
{ BGP_EXT_COM_SOURCE_AS, "source-AS" },
{ BGP_EXT_COM_VRF_RT_IMP, "vrf-route-import"},
+ { BGP_EXT_COM_L2VPN_RT_0, "l2vpn-id"},
+ { BGP_EXT_COM_L2VPN_RT_1, "l2vpn-id"},
{ 0, NULL},
};
@@ -951,57 +956,84 @@ decode_labeled_vpn_l2(const u_char *pptr, char *buf, u_int buflen)
plen=EXTRACT_16BITS(pptr);
tlen=plen;
pptr+=2;
- TCHECK2(pptr[0],15);
- buf[0]='\0';
- strlen=snprintf(buf, buflen, "RD: %s, CE-ID: %u, Label-Block Offset: %u, Label Base %u",
- bgp_vpn_rd_print(pptr),
- EXTRACT_16BITS(pptr+8),
- EXTRACT_16BITS(pptr+10),
- EXTRACT_24BITS(pptr+12)>>4); /* the label is offsetted by 4 bits so lets shift it right */
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- pptr+=15;
- tlen-=15;
-
- /* ok now the variable part - lets read out TLVs*/
- while (tlen>0) {
- if (tlen < 3)
- return -1;
- TCHECK2(pptr[0], 3);
- tlv_type=*pptr++;
- tlv_len=EXTRACT_16BITS(pptr);
- ttlv_len=tlv_len;
- pptr+=2;
-
- switch(tlv_type) {
- case 1:
- if (buflen!=0) {
- strlen=snprintf(buf,buflen, "\n\t\tcircuit status vector (%u) length: %u: 0x",
- tlv_type,
- tlv_len);
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- }
- ttlv_len=ttlv_len/8+1; /* how many bytes do we need to read ? */
- while (ttlv_len>0) {
- TCHECK(pptr[0]);
- if (buflen!=0) {
- strlen=snprintf(buf,buflen, "%02x",*pptr++);
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- }
- ttlv_len--;
- }
- break;
- default:
- if (buflen!=0) {
- strlen=snprintf(buf,buflen, "\n\t\tunknown TLV #%u, length: %u",
- tlv_type,
- tlv_len);
- UPDATE_BUF_BUFLEN(buf, buflen, strlen);
- }
- break;
- }
- tlen-=(tlv_len<<3); /* the tlv-length is expressed in bits so lets shift it right */
+ /* Old and new L2VPN NLRI share AFI/SAFI
+ * -> Assume a 12 Byte-length NLRI is auto-discovery-only
+ * and > 17 as old format. Complain for the middle case
+ */
+ if (plen==12) {
+ /* assume AD-only with RD, BGPNH */
+ TCHECK2(pptr[0],12);
+ buf[0]='\0';
+ strlen=snprintf(buf, buflen, "RD: %s, BGPNH: %s",
+ bgp_vpn_rd_print(pptr),
+ /* need something like getname() here */
+ getname(pptr+8)
+ );
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ pptr+=12;
+ tlen-=12;
+ return plen;
+ } else if (plen>17) {
+ /* assume old format */
+ /* RD, ID, LBLKOFF, LBLBASE */
+
+ TCHECK2(pptr[0],15);
+ buf[0]='\0';
+ strlen=snprintf(buf, buflen, "RD: %s, CE-ID: %u, Label-Block Offset: %u, Label Base %u",
+ bgp_vpn_rd_print(pptr),
+ EXTRACT_16BITS(pptr+8),
+ EXTRACT_16BITS(pptr+10),
+ EXTRACT_24BITS(pptr+12)>>4); /* the label is offsetted by 4 bits so lets shift it right */
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ pptr+=15;
+ tlen-=15;
+
+ /* ok now the variable part - lets read out TLVs*/
+ while (tlen>0) {
+ if (tlen < 3)
+ return -1;
+ TCHECK2(pptr[0], 3);
+ tlv_type=*pptr++;
+ tlv_len=EXTRACT_16BITS(pptr);
+ ttlv_len=tlv_len;
+ pptr+=2;
+
+ switch(tlv_type) {
+ case 1:
+ if (buflen!=0) {
+ strlen=snprintf(buf,buflen, "\n\t\tcircuit status vector (%u) length: %u: 0x",
+ tlv_type,
+ tlv_len);
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ }
+ ttlv_len=ttlv_len/8+1; /* how many bytes do we need to read ? */
+ while (ttlv_len>0) {
+ TCHECK(pptr[0]);
+ if (buflen!=0) {
+ strlen=snprintf(buf,buflen, "%02x",*pptr++);
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ }
+ ttlv_len--;
+ }
+ break;
+ default:
+ if (buflen!=0) {
+ strlen=snprintf(buf,buflen, "\n\t\tunknown TLV #%u, length: %u",
+ tlv_type,
+ tlv_len);
+ UPDATE_BUF_BUFLEN(buf, buflen, strlen);
+ }
+ break;
+ }
+ tlen-=(tlv_len<<3); /* the tlv-length is expressed in bits so lets shift it right */
+ }
+ return plen+2;
+
+ } else {
+ /* complain bitterly ? */
+ /* fall through */
+ goto trunc;
}
- return plen+2;
trunc:
return -2;
@@ -1939,6 +1971,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
switch(extd_comm) {
case BGP_EXT_COM_RT_0:
case BGP_EXT_COM_RO_0:
+ case BGP_EXT_COM_L2VPN_RT_0:
printf(": %u:%u (= %s)",
EXTRACT_16BITS(tptr+2),
EXTRACT_32BITS(tptr+4),
@@ -1946,6 +1979,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
break;
case BGP_EXT_COM_RT_1:
case BGP_EXT_COM_RO_1:
+ case BGP_EXT_COM_L2VPN_RT_1:
case BGP_EXT_COM_VRF_RT_IMP:
printf(": %s:%u",
getname(tptr+2),
diff --git a/print-carp.c b/print-carp.c
new file mode 100644
index 000000000000..ba5be7c6217a
--- /dev/null
+++ b/print-carp.c
@@ -0,0 +1,88 @@
+/* $OpenBSD: print-carp.c,v 1.6 2009/10/27 23:59:55 deraadt Exp $ */
+
+/*
+ * Copyright (c) 2000 William C. Fenner.
+ * All rights reserved.
+ *
+ * Kevin Steves <ks@hp.se> July 2000
+ * Modified to:
+ * - print version, type string and packet length
+ * - print IP address count if > 1 (-v)
+ * - verify checksum (-v)
+ * - print authentication string (-v)
+ *
+ * Copyright (c) 2011 Advanced Computing Technologies
+ * George V. Neille-Neil
+ *
+ * Modified to:
+ * - work correctly with CARP
+ * - compile into the latest tcpdump
+ * - print out the counter
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * The name of William C. Fenner may not be used to endorse or
+ * promote products derived from this software without specific prior
+ * written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <netinet/in.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+void
+carp_print(register const u_char *bp, register u_int len, int ttl)
+{
+ int version, type;
+ const char *type_s;
+
+ TCHECK(bp[0]);
+ version = (bp[0] & 0xf0) >> 4;
+ type = bp[0] & 0x0f;
+ if (type == 1)
+ type_s = "advertise";
+ else
+ type_s = "unknown";
+ printf("CARPv%d-%s %d: ", version, type_s, len);
+ if (ttl != 255)
+ printf("[ttl=%d!] ", ttl);
+ if (version != 2 || type != 1)
+ return;
+ TCHECK(bp[2]);
+ TCHECK(bp[5]);
+ printf("vhid=%d advbase=%d advskew=%d authlen=%d ",
+ bp[1], bp[5], bp[2], bp[3]);
+ if (vflag) {
+ struct cksum_vec vec[1];
+ vec[0].ptr = (const u_int8_t *)bp;
+ vec[0].len = len;
+ if (TTEST2(bp[0], len) && in_cksum(vec, 1))
+ printf(" (bad carp cksum %x!)",
+ EXTRACT_16BITS(&bp[6]));
+ }
+ printf("counter=%" PRIu64, EXTRACT_64BITS(&bp[8]));
+
+ return;
+trunc:
+ printf("[|carp]");
+}
diff --git a/print-cdp.c b/print-cdp.c
index bef7f5eacadd..7bc617a96357 100644
--- a/print-cdp.c
+++ b/print-cdp.c
@@ -124,7 +124,7 @@ cdp_print(const u_char *pptr, u_int length, u_int caplen)
tok2str(cdp_tlv_values,"unknown field type", type),
type,
len,
- len>1 ? "s" : ""); /* plural */
+ PLURAL_SUFFIX(len)); /* plural */
switch (type) {
diff --git a/print-chdlc.c b/print-chdlc.c
index 238e91a98ce1..261b15ad7efd 100644
--- a/print-chdlc.c
+++ b/print-chdlc.c
@@ -85,7 +85,7 @@ chdlc_print(register const u_char *p, u_int length) {
break;
#ifdef INET6
case ETHERTYPE_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case CHDLC_TYPE_SLARP:
diff --git a/print-dccp.c b/print-dccp.c
index fee4a6e50574..79ea5f72ee5f 100644
--- a/print-dccp.c
+++ b/print-dccp.c
@@ -60,7 +60,7 @@ static const char *dccp_feature_nums[] = {
"check data checksum",
};
-static inline int dccp_csum_coverage(const struct dccp_hdr* dh, u_int len)
+static inline u_int dccp_csum_coverage(const struct dccp_hdr* dh, u_int len)
{
u_int cov;
@@ -73,61 +73,15 @@ static inline int dccp_csum_coverage(const struct dccp_hdr* dh, u_int len)
static int dccp_cksum(const struct ip *ip,
const struct dccp_hdr *dh, u_int len)
{
- int cov = dccp_csum_coverage(dh, len);
- union phu {
- struct phdr {
- u_int32_t src;
- u_int32_t dst;
- u_char mbz;
- u_char proto;
- u_int16_t len;
- } ph;
- u_int16_t pa[6];
- } phu;
- const u_int16_t *sp;
-
- /* pseudo-header.. */
- phu.ph.mbz = 0;
- phu.ph.len = htons(len);
- phu.ph.proto = IPPROTO_DCCP;
- memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
- if (IP_HL(ip) == 5)
- memcpy(&phu.ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
- else
- phu.ph.dst = ip_finddst(ip);
-
- sp = &phu.pa[0];
- return in_cksum((u_short *)dh, cov, sp[0]+sp[1]+sp[2]+sp[3]+sp[4]+sp[5]);
+ return nextproto4_cksum(ip, (const u_int8_t *)(void *)dh,
+ dccp_csum_coverage(dh, len), IPPROTO_DCCP);
}
#ifdef INET6
static int dccp6_cksum(const struct ip6_hdr *ip6, const struct dccp_hdr *dh, u_int len)
{
- size_t i;
- u_int32_t sum = 0;
- int cov = dccp_csum_coverage(dh, len);
- union {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
- } phu;
-
- /* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = IPPROTO_DCCP;
-
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++)
- sum += phu.pa[i];
-
- return in_cksum((u_short *)dh, cov, sum);
+ return nextproto6_cksum(ip6, (const u_int8_t *)(void *)dh,
+ dccp_csum_coverage(dh, len), IPPROTO_DCCP);
}
#endif
diff --git a/print-dhcp6.c b/print-dhcp6.c
index 26855ccbfb18..a75da823815a 100644
--- a/print-dhcp6.c
+++ b/print-dhcp6.c
@@ -229,15 +229,15 @@ dhcp6opt_name(int type)
case DH6OPT_SIP_SERVER_A:
return "SIP-servers-address";
case DH6OPT_DNS:
- return "DNS";
+ return "DNS-server";
case DH6OPT_DNSNAME:
- return "DNS-name";
+ return "DNS-search-list";
case DH6OPT_IA_PD:
return "IA_PD";
case DH6OPT_IA_PD_PREFIX:
return "IA_PD-prefix";
case DH6OPT_NTP_SERVERS:
- return "NTP-Server";
+ return "NTP-server";
case DH6OPT_LIFETIME:
return "lifetime";
case DH6OPT_NIS_SERVERS:
diff --git a/print-eigrp.c b/print-eigrp.c
index 2787bafb9d26..4f941d96629e 100644
--- a/print-eigrp.c
+++ b/print-eigrp.c
@@ -280,7 +280,7 @@ eigrp_print(register const u_char *pptr, register u_int len) {
if (eigrp_tlv_len < sizeof(struct eigrp_tlv_header) ||
eigrp_tlv_len > tlen) {
- print_unknown_data(tptr+sizeof(sizeof(struct eigrp_tlv_header)),"\n\t ",tlen);
+ print_unknown_data(tptr+sizeof(struct eigrp_tlv_header),"\n\t ",tlen);
return;
}
@@ -468,7 +468,7 @@ eigrp_print(register const u_char *pptr, register u_int len) {
}
/* do we want to see an additionally hexdump ? */
if (vflag > 1)
- print_unknown_data(tptr+sizeof(sizeof(struct eigrp_tlv_header)),"\n\t ",
+ print_unknown_data(tptr+sizeof(struct eigrp_tlv_header),"\n\t ",
eigrp_tlv_len-sizeof(struct eigrp_tlv_header));
tptr+=eigrp_tlv_len;
diff --git a/print-enc.c b/print-enc.c
index e98f7f78215c..5c01f3ef7b61 100644
--- a/print-enc.c
+++ b/print-enc.c
@@ -80,7 +80,7 @@ enc_if_print(const struct pcap_pkthdr *h, register const u_char *p)
break;
#ifdef INET6
case AF_INET6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif /*INET6*/
}
diff --git a/print-ether.c b/print-ether.c
index e086d1660c09..76505721af3e 100644
--- a/print-ether.c
+++ b/print-ether.c
@@ -23,6 +23,7 @@ static const char rcsid[] _U_ =
"@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.106 2008-02-06 10:47:53 guy Exp $ (LBL)";
#endif
+#define NETDISSECT_REWORKED
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -45,6 +46,9 @@ const struct tok ethertype_values[] = {
{ ETHERTYPE_MPLS_MULTI, "MPLS multicast" },
{ ETHERTYPE_IPV6, "IPv6" },
{ ETHERTYPE_8021Q, "802.1Q" },
+ { ETHERTYPE_8021Q9100, "802.1Q-9100" },
+ { ETHERTYPE_8021QinQ, "802.1Q-QinQ" },
+ { ETHERTYPE_8021Q9200, "802.1Q-9200" },
{ ETHERTYPE_VMAN, "VMAN" },
{ ETHERTYPE_PUP, "PUP" },
{ ETHERTYPE_ARP, "ARP"},
@@ -84,33 +88,34 @@ const struct tok ethertype_values[] = {
};
static inline void
-ether_hdr_print(register const u_char *bp, u_int length)
+ether_hdr_print(netdissect_options *ndo,
+ const u_char *bp, u_int length)
{
register const struct ether_header *ep;
u_int16_t ether_type;
ep = (const struct ether_header *)bp;
- (void)printf("%s > %s",
+ (void)ND_PRINT((ndo, "%s > %s",
etheraddr_string(ESRC(ep)),
- etheraddr_string(EDST(ep)));
+ etheraddr_string(EDST(ep))));
ether_type = EXTRACT_16BITS(&ep->ether_type);
- if (!qflag) {
+ if (!ndo->ndo_qflag) {
if (ether_type <= ETHERMTU)
- (void)printf(", 802.3");
+ (void)ND_PRINT((ndo, ", 802.3"));
else
- (void)printf(", ethertype %s (0x%04x)",
+ (void)ND_PRINT((ndo, ", ethertype %s (0x%04x)",
tok2str(ethertype_values,"Unknown", ether_type),
- ether_type);
+ ether_type));
} else {
if (ether_type <= ETHERMTU)
- (void)printf(", 802.3");
+ (void)ND_PRINT((ndo, ", 802.3"));
else
- (void)printf(", %s", tok2str(ethertype_values,"Unknown Ethertype (0x%04x)", ether_type));
+ (void)ND_PRINT((ndo, ", %s", tok2str(ethertype_values,"Unknown Ethertype (0x%04x)", ether_type)));
}
- (void)printf(", length %u: ", length);
+ (void)ND_PRINT((ndo, ", length %u: ", length));
}
/*
@@ -120,8 +125,9 @@ ether_hdr_print(register const u_char *bp, u_int length)
* frame's protocol, and an argument to pass to that function.
*/
void
-ether_print(const u_char *p, u_int length, u_int caplen,
- void (*print_encap_header)(const u_char *), const u_char *encap_header_arg)
+ether_print(netdissect_options *ndo,
+ const u_char *p, u_int length, u_int caplen,
+ void (*print_encap_header)(netdissect_options *ndo, const u_char *), const u_char *encap_header_arg)
{
struct ether_header *ep;
u_int orig_length;
@@ -129,14 +135,14 @@ ether_print(const u_char *p, u_int length, u_int caplen,
u_short extracted_ether_type;
if (caplen < ETHER_HDRLEN || length < ETHER_HDRLEN) {
- printf("[|ether]");
+ ND_PRINT((ndo, "[|ether]"));
return;
}
- if (eflag) {
+ if (ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print(p, length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, p, length);
}
orig_length = length;
@@ -156,36 +162,39 @@ recurse:
if (llc_print(p, length, caplen, ESRC(ep), EDST(ep),
&extracted_ether_type) == 0) {
/* ether_type not known, print raw packet */
- if (!eflag) {
+ if (!ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print((u_char *)ep, orig_length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
}
- if (!suppress_default_print)
- default_print(p, caplen);
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
}
- } else if (ether_type == ETHERTYPE_8021Q) {
+ } else if (ether_type == ETHERTYPE_8021Q ||
+ ether_type == ETHERTYPE_8021Q9100 ||
+ ether_type == ETHERTYPE_8021Q9200 ||
+ ether_type == ETHERTYPE_8021QinQ) {
/*
* Print VLAN information, and then go back and process
* the enclosed type field.
*/
if (caplen < 4 || length < 4) {
- printf("[|vlan]");
+ ND_PRINT((ndo, "[|vlan]"));
return;
}
- if (eflag) {
+ if (ndo->ndo_eflag) {
u_int16_t tag = EXTRACT_16BITS(p);
- printf("vlan %u, p %u%s, ",
+ ND_PRINT((ndo, "vlan %u, p %u%s, ",
tag & 0xfff,
tag >> 13,
- (tag & 0x1000) ? ", CFI" : "");
+ (tag & 0x1000) ? ", CFI" : ""));
}
ether_type = EXTRACT_16BITS(p + 2);
- if (eflag && ether_type > ETHERMTU)
- printf("ethertype %s, ", tok2str(ethertype_values,"0x%04x", ether_type));
+ if (ndo->ndo_eflag && ether_type > ETHERMTU)
+ ND_PRINT((ndo, "ethertype %s, ", tok2str(ethertype_values,"0x%04x", ether_type)));
p += 4;
length -= 4;
caplen -= 4;
@@ -204,26 +213,26 @@ recurse:
if (llc_print(p, length, caplen, ESRC(ep), EDST(ep),
&extracted_ether_type) == 0) {
/* ether_type not known, print raw packet */
- if (!eflag) {
+ if (!ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print((u_char *)ep, orig_length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
}
- if (!suppress_default_print)
- default_print(p, caplen);
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
}
} else {
- if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ if (ethertype_print(ndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
- if (!eflag) {
+ if (!ndo->ndo_eflag) {
if (print_encap_header != NULL)
- (*print_encap_header)(encap_header_arg);
- ether_hdr_print((u_char *)ep, orig_length);
+ (*print_encap_header)(ndo, encap_header_arg);
+ ether_hdr_print(ndo, (u_char *)ep, orig_length);
}
- if (!suppress_default_print)
- default_print(p, caplen);
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
}
}
}
@@ -235,14 +244,72 @@ recurse:
* is the number of bytes actually captured.
*/
u_int
-ether_if_print(const struct pcap_pkthdr *h, const u_char *p)
+ether_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
{
- ether_print(p, h->len, h->caplen, NULL, NULL);
+ ether_print(ndo, p, h->len, h->caplen, NULL, NULL);
return (ETHER_HDRLEN);
}
/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ *
+ * This is for DLT_NETANALYZER, which has a 4-byte pseudo-header
+ * before the Ethernet header.
+ */
+u_int
+netanalyzer_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ /*
+ * Fail if we don't have enough data for the Hilscher pseudo-header.
+ */
+ if (h->len < 4 || h->caplen < 4) {
+ printf("[|netanalyzer]");
+ return (h->caplen);
+ }
+
+ /* Skip the pseudo-header. */
+ ether_print(ndo, p + 4, h->len - 4, h->caplen - 4, NULL, NULL);
+
+ return (4 + ETHER_HDRLEN);
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ *
+ * This is for DLT_NETANALYZER_TRANSPARENT, which has a 4-byte
+ * pseudo-header, a 7-byte Ethernet preamble, and a 1-byte Ethernet SOF
+ * before the Ethernet header.
+ */
+u_int
+netanalyzer_transparent_if_print(netdissect_options *ndo,
+ const struct pcap_pkthdr *h,
+ const u_char *p)
+{
+ /*
+ * Fail if we don't have enough data for the Hilscher pseudo-header,
+ * preamble, and SOF.
+ */
+ if (h->len < 12 || h->caplen < 12) {
+ printf("[|netanalyzer-transparent]");
+ return (h->caplen);
+ }
+
+ /* Skip the pseudo-header, preamble, and SOF. */
+ ether_print(ndo, p + 12, h->len - 12, h->caplen - 12, NULL, NULL);
+
+ return (12 + ETHER_HDRLEN);
+}
+
+/*
* Prints the packet payload, given an Ethernet type code for the payload's
* protocol.
*
@@ -250,85 +317,87 @@ ether_if_print(const struct pcap_pkthdr *h, const u_char *p)
*/
int
-ethertype_print(u_short ether_type, const u_char *p, u_int length, u_int caplen)
+ethertype_print(netdissect_options *ndo,
+ u_short ether_type, const u_char *p,
+ u_int length, u_int caplen)
{
switch (ether_type) {
case ETHERTYPE_IP:
- ip_print(gndo, p, length);
+ ip_print(ndo, p, length);
return (1);
#ifdef INET6
case ETHERTYPE_IPV6:
- ip6_print(p, length);
+ ip6_print(ndo, p, length);
return (1);
#endif /*INET6*/
case ETHERTYPE_ARP:
case ETHERTYPE_REVARP:
- arp_print(gndo, p, length, caplen);
+ arp_print(ndo, p, length, caplen);
return (1);
case ETHERTYPE_DN:
- decnet_print(p, length, caplen);
+ decnet_print(/*ndo,*/p, length, caplen);
return (1);
case ETHERTYPE_ATALK:
- if (vflag)
+ if (ndo->ndo_vflag)
fputs("et1 ", stdout);
- atalk_print(p, length);
+ atalk_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_AARP:
- aarp_print(p, length);
+ aarp_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_IPX:
- printf("(NOV-ETHII) ");
- ipx_print(p, length);
+ ND_PRINT((ndo, "(NOV-ETHII) "));
+ ipx_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_ISO:
- isoclns_print(p+1, length-1, length-1);
+ isoclns_print(/*ndo,*/p+1, length-1, length-1);
return(1);
case ETHERTYPE_PPPOED:
case ETHERTYPE_PPPOES:
case ETHERTYPE_PPPOED2:
case ETHERTYPE_PPPOES2:
- pppoe_print(p, length);
+ pppoe_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_EAPOL:
- eap_print(gndo, p, length);
+ eap_print(ndo, p, length);
return (1);
case ETHERTYPE_RRCP:
- rrcp_print(gndo, p - 14 , length + 14);
+ rrcp_print(ndo, p - 14 , length + 14);
return (1);
case ETHERTYPE_PPP:
if (length) {
printf(": ");
- ppp_print(p, length);
+ ppp_print(/*ndo,*/p, length);
}
return (1);
case ETHERTYPE_MPCP:
- mpcp_print(p, length);
+ mpcp_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_SLOW:
- slow_print(p, length);
+ slow_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_CFM:
case ETHERTYPE_CFM_OLD:
- cfm_print(p, length);
+ cfm_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_LLDP:
- lldp_print(p, length);
+ lldp_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_LOOPBACK:
@@ -336,7 +405,7 @@ ethertype_print(u_short ether_type, const u_char *p, u_int length, u_int caplen)
case ETHERTYPE_MPLS:
case ETHERTYPE_MPLS_MULTI:
- mpls_print(p, length);
+ mpls_print(/*ndo,*/p, length);
return (1);
case ETHERTYPE_LAT:
diff --git a/print-forces.c b/print-forces.c
index 26e83d3167c7..033580e51bc2 100644
--- a/print-forces.c
+++ b/print-forces.c
@@ -213,7 +213,7 @@ trunc:
int
pdatacnt_print(register const u_char * pptr, register u_int len,
- u_int32_t IDcnt, u_int16_t op_msk, int indent)
+ u_int16_t IDcnt, u_int16_t op_msk, int indent)
{
u_int i;
int rc;
@@ -270,7 +270,7 @@ pdatacnt_print(register const u_char * pptr, register u_int len,
if (vflag >= 3 && ops->v != F_TLV_PDAT) {
if (pad)
printf
- ("%s %s (Length %d DataLen %d pad %d Bytes)\n",
+ ("%s %s (Length %d DataLen %d pad %d Bytes)\n",
ib, ops->s, EXTRACT_16BITS(&pdtlv->length),
tll, pad);
else
@@ -285,6 +285,7 @@ pdatacnt_print(register const u_char * pptr, register u_int len,
rc = ops->print((const u_char *)pdtlv,
tll + pad + TLV_HDRL, op_msk,
indent + 2);
+ len -= (TLV_HDRL + pad + tll);
} else {
printf("Invalid path data content type 0x%x len %d\n",
type, EXTRACT_16BITS(&pdtlv->length));
@@ -298,7 +299,7 @@ pd_err:
}
}
}
- return 0;
+ return len;
trunc:
fputs("[|forces]", stdout);
@@ -312,6 +313,8 @@ pdata_print(register const u_char * pptr, register u_int len,
const struct pathdata_h *pdh = (struct pathdata_h *)pptr;
char *ib = indent_pr(indent, 0);
u_int minsize = 0;
+ int more_pd = 0;
+ u_int16_t idcnt = 0;
TCHECK(*pdh);
if (len < sizeof(struct pathdata_h))
@@ -326,7 +329,8 @@ pdata_print(register const u_char * pptr, register u_int len,
}
pptr += sizeof(struct pathdata_h);
len -= sizeof(struct pathdata_h);
- minsize = EXTRACT_16BITS(&pdh->pIDcnt) * 4;
+ idcnt = EXTRACT_16BITS(&pdh->pIDcnt);
+ minsize = idcnt * 4;
if (len < minsize) {
printf("\t\t\ttruncated IDs expected %uB got %uB\n", minsize,
len);
@@ -334,7 +338,15 @@ pdata_print(register const u_char * pptr, register u_int len,
printf("]\n");
return -1;
}
- return pdatacnt_print(pptr, len, EXTRACT_16BITS(&pdh->pIDcnt), op_msk, indent);
+ more_pd = pdatacnt_print(pptr, len, idcnt, op_msk, indent);
+ if (more_pd > 0) {
+ int consumed = len - more_pd;
+ pptr += consumed;
+ len = more_pd;
+ /* XXX: Argh, recurse some more */
+ return recpdoptlv_print(pptr, len, op_msk, indent+1);
+ } else
+ return 0;
trunc:
fputs("[|forces]", stdout);
diff --git a/print-fr.c b/print-fr.c
index 8f1409e98592..51263066a77e 100644
--- a/print-fr.c
+++ b/print-fr.c
@@ -256,7 +256,7 @@ fr_print(register const u_char *p, u_int length)
if (eflag)
fr_hdr_print(length, addr_len, dlci, flags, extracted_ethertype);
- if (ethertype_print(extracted_ethertype,
+ if (ethertype_print(gndo, extracted_ethertype,
p+addr_len+ETHERTYPE_LEN,
length-addr_len-ETHERTYPE_LEN,
length-addr_len-ETHERTYPE_LEN) == 0)
@@ -286,7 +286,7 @@ fr_print(register const u_char *p, u_int length)
#ifdef INET6
case NLPID_IP6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case NLPID_CLNP:
diff --git a/print-gre.c b/print-gre.c
index 106e6fd3111a..b6fa52236695 100644
--- a/print-gre.c
+++ b/print-gre.c
@@ -210,7 +210,7 @@ gre_print_0(const u_char *bp, u_int length)
break;
#ifdef INET6
case ETHERTYPE_IPV6:
- ip6_print(bp, len);
+ ip6_print(gndo, bp, len);
break;
#endif
case ETHERTYPE_MPLS:
@@ -226,7 +226,7 @@ gre_print_0(const u_char *bp, u_int length)
isoclns_print(bp, len, len);
break;
case ETHERTYPE_TEB:
- ether_print(bp, len, len, NULL, NULL);
+ ether_print(gndo, bp, len, len, NULL, NULL);
break;
default:
printf("gre-proto-0x%x", prot);
diff --git a/print-icmp.c b/print-icmp.c
index 36bff6a41214..03b9505b1146 100644
--- a/print-icmp.c
+++ b/print-icmp.c
@@ -346,6 +346,7 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
const struct icmp_mpls_ext_object_header_t *icmp_mpls_ext_object_header;
u_int hlen, dport, mtu, obj_tlen, obj_class_num, obj_ctype;
char buf[MAXHOSTNAMELEN + 100];
+ struct cksum_vec vec[1];
dp = (struct icmp *)bp;
ext_dp = (struct icmp_ext_t *)bp;
@@ -560,8 +561,11 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
(void)printf("ICMP %s, length %u", str, plen);
if (vflag && !fragmented) { /* don't attempt checksumming if this is a frag */
u_int16_t sum, icmp_sum;
+ struct cksum_vec vec[1];
if (TTEST2(*bp, plen)) {
- sum = in_cksum((u_short*)dp, plen, 0);
+ vec[0].ptr = (const u_int8_t *)(void *)dp;
+ vec[0].len = plen;
+ sum = in_cksum(vec, 1);
if (sum != 0) {
icmp_sum = EXTRACT_16BITS(&dp->icmp_cksum);
(void)printf(" (wrong icmp cksum %x (->%x)!)",
@@ -598,10 +602,12 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
* to check if an extension header is present. This is expedient,
* however not all implementations set the length field proper.
*/
- if (!ext_dp->icmp_length &&
- in_cksum((const u_short *)&ext_dp->icmp_ext_version_res,
- plen - ICMP_EXTD_MINLEN, 0)) {
- return;
+ if (!ext_dp->icmp_length) {
+ vec[0].ptr = (const u_int8_t *)(void *)&ext_dp->icmp_ext_version_res;
+ vec[0].len = plen - ICMP_EXTD_MINLEN;
+ if (in_cksum(vec, 1)) {
+ return;
+ }
}
printf("\n\tMPLS extension v%u",
@@ -617,10 +623,11 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
}
hlen = plen - ICMP_EXTD_MINLEN;
+ vec[0].ptr = (const u_int8_t *)(void *)&ext_dp->icmp_ext_version_res;
+ vec[0].len = hlen;
printf(", checksum 0x%04x (%scorrect), length %u",
EXTRACT_16BITS(ext_dp->icmp_ext_checksum),
- in_cksum((const u_short *)&ext_dp->icmp_ext_version_res,
- plen - ICMP_EXTD_MINLEN, 0) ? "in" : "",
+ in_cksum(vec, 1) ? "in" : "",
hlen);
hlen -= 4; /* subtract common header size */
diff --git a/print-icmp6.c b/print-icmp6.c
index cc486150e32c..ce1046ed2ea7 100644
--- a/print-icmp6.c
+++ b/print-icmp6.c
@@ -197,50 +197,20 @@ print_lladdr(const u_int8_t *p, size_t l)
static int icmp6_cksum(const struct ip6_hdr *ip6, const struct icmp6_hdr *icp,
u_int len)
{
- size_t i;
- register const u_int16_t *sp;
- u_int32_t sum;
- union {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
- } phu;
-
- /* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = IPPROTO_ICMPV6;
-
- sum = 0;
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++)
- sum += phu.pa[i];
-
- sp = (const u_int16_t *)icp;
-
- for (i = 0; i < (len & ~1); i += 2)
- sum += *sp++;
-
- if (len & 1)
- sum += htons((*(const u_int8_t *)sp) << 8);
-
- while (sum > 0xffff)
- sum = (sum & 0xffff) + (sum >> 16);
- sum = ~sum & 0xffff;
-
- return (sum);
+ return (nextproto6_cksum(ip6, (const u_int8_t *)(void *)icp, len,
+ IPPROTO_ICMPV6));
}
enum ND_RPL_CODE {
- ND_RPL_DAG_IS=0x01,
- ND_RPL_DAG_IO=0x02,
- ND_RPL_DAO =0x04
+ ND_RPL_DIS =0x00,
+ ND_RPL_DIO =0x01,
+ ND_RPL_DAO =0x02,
+ ND_RPL_DAO_ACK=0x03,
+ ND_RPL_SDIS =0x80,
+ ND_RPL_SDIO =0x81,
+ ND_RPL_SDAO =0x82,
+ ND_RPL_SDAO_ACK=0x83,
+ ND_RPL_SCC =0x8A,
};
enum ND_RPL_DIO_FLAGS {
@@ -266,17 +236,25 @@ rpl_print(netdissect_options *ndo,
const u_char *bp, u_int length _U_)
{
struct nd_rpl_dio *dio = (struct nd_rpl_dio *)bp;
+ int secured = hdr->icmp6_code & 0x80;
+ int basecode= hdr->icmp6_code & 0x7f;
ND_TCHECK(dio->rpl_dagid);
- switch(hdr->icmp6_code) {
- case ND_RPL_DAG_IS:
- ND_PRINT((ndo, ", DAG Information Solicitation"));
+ if(secured) {
+ ND_PRINT((ndo, ", (SEC)"));
+ } else {
+ ND_PRINT((ndo, ", (CLR)"));
+ }
+
+ switch(basecode) {
+ case ND_RPL_DIS:
+ ND_PRINT((ndo, "DODAG Information Solicitation"));
if(ndo->ndo_vflag) {
}
break;
- case ND_RPL_DAG_IO:
- ND_PRINT((ndo, ", DAG Information Object"));
+ case ND_RPL_DIO:
+ ND_PRINT((ndo, "DODAG Information Object"));
if(ndo->ndo_vflag) {
char dagid[65];
char *d = dagid;
@@ -299,12 +277,17 @@ rpl_print(netdissect_options *ndo,
}
break;
case ND_RPL_DAO:
- ND_PRINT((ndo, ", Destination Advertisement Object"));
+ ND_PRINT((ndo, "Destination Advertisement Object"));
+ if(ndo->ndo_vflag) {
+ }
+ break;
+ case ND_RPL_DAO_ACK:
+ ND_PRINT((ndo, "Destination Advertisement Object Ack"));
if(ndo->ndo_vflag) {
}
break;
default:
- ND_PRINT((ndo, ", RPL message, unknown code %u",hdr->icmp6_code));
+ ND_PRINT((ndo, "RPL message, unknown code %u",hdr->icmp6_code));
break;
}
return;
@@ -336,12 +319,15 @@ icmp6_print(netdissect_options *ndo,
TCHECK(dp->icmp6_cksum);
if (vflag && !fragmented) {
- int sum = dp->icmp6_cksum;
+ u_int16_t sum, udp_sum;
if (TTEST2(bp[0], length)) {
+ udp_sum = EXTRACT_16BITS(&dp->icmp6_cksum);
sum = icmp6_cksum(ip, dp, length);
if (sum != 0)
- (void)printf("[bad icmp6 cksum %x!] ", sum);
+ (void)printf("[bad icmp6 cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
else
(void)printf("[icmp6 sum ok] ");
}
@@ -350,14 +336,13 @@ icmp6_print(netdissect_options *ndo,
printf("ICMP6, %s", tok2str(icmp6_type_values,"unknown icmp6 type (%u)",dp->icmp6_type));
/* display cosmetics: print the packet length for printer that use the vflag now */
- if (vflag && (dp->icmp6_type ==
- ND_ROUTER_SOLICIT ||
- ND_ROUTER_ADVERT ||
- ND_NEIGHBOR_ADVERT ||
- ND_NEIGHBOR_SOLICIT ||
- ND_REDIRECT ||
- ICMP6_HADISCOV_REPLY ||
- ICMP6_MOBILEPREFIX_ADVERT ))
+ if (vflag && (dp->icmp6_type == ND_ROUTER_SOLICIT ||
+ dp->icmp6_type == ND_ROUTER_ADVERT ||
+ dp->icmp6_type == ND_NEIGHBOR_ADVERT ||
+ dp->icmp6_type == ND_NEIGHBOR_SOLICIT ||
+ dp->icmp6_type == ND_REDIRECT ||
+ dp->icmp6_type == ICMP6_HADISCOV_REPLY ||
+ dp->icmp6_type == ICMP6_MOBILEPREFIX_ADVERT ))
printf(", length %u", length);
switch (dp->icmp6_type) {
diff --git a/print-igmp.c b/print-igmp.c
index a848562985d9..6522bc3044d0 100644
--- a/print-igmp.c
+++ b/print-igmp.c
@@ -259,6 +259,8 @@ trunc:
void
igmp_print(register const u_char *bp, register u_int len)
{
+ struct cksum_vec vec[1];
+
if (qflag) {
(void)printf("igmp");
return;
@@ -327,7 +329,9 @@ igmp_print(register const u_char *bp, register u_int len)
if (vflag && TTEST2(bp[0], len)) {
/* Check the IGMP checksum */
- if (in_cksum((const u_short*)bp, len, 0))
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
printf(" bad igmp cksum %x!", EXTRACT_16BITS(&bp[2]));
}
return;
diff --git a/print-ip.c b/print-ip.c
index acf3bd8be9fe..1fa7aab0d6ca 100644
--- a/print-ip.c
+++ b/print-ip.c
@@ -87,7 +87,7 @@ ip_printroute(register const u_char *cp, u_int length)
* This is used for UDP and TCP pseudo-header in the checksum
* calculation.
*/
-u_int32_t
+static u_int32_t
ip_finddst(const struct ip *ip)
{
int length;
@@ -129,6 +129,39 @@ trunc:
return retval;
}
+/*
+ * Compute a V4-style checksum by building a pseudoheader.
+ */
+int
+nextproto4_cksum(const struct ip *ip, const u_int8_t *data,
+ u_int len, u_int next_proto)
+{
+ struct phdr {
+ u_int32_t src;
+ u_int32_t dst;
+ u_char mbz;
+ u_char proto;
+ u_int16_t len;
+ } ph;
+ struct cksum_vec vec[2];
+
+ /* pseudo-header.. */
+ ph.len = htons((u_int16_t)len);
+ ph.mbz = 0;
+ ph.proto = next_proto;
+ memcpy(&ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
+ if (IP_HL(ip) == 5)
+ memcpy(&ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
+ else
+ ph.dst = ip_finddst(ip);
+
+ vec[0].ptr = (const u_int8_t *)(void *)&ph;
+ vec[0].len = sizeof(ph);
+ vec[1].ptr = data;
+ vec[1].len = len;
+ return (in_cksum(vec, 2));
+}
+
static void
ip_printts(register const u_char *cp, u_int length)
{
@@ -268,92 +301,6 @@ trunc:
printf("[|ip]");
}
-/*
- * compute an IP header checksum.
- * don't modifiy the packet.
- */
-u_short
-in_cksum(const u_short *addr, register u_int len, int csum)
-{
- int nleft = len;
- const u_short *w = addr;
- u_short answer;
- int sum = csum;
-
- /*
- * Our algorithm is simple, using a 32 bit accumulator (sum),
- * we add sequential 16 bit words to it, and at the end, fold
- * back all the carry bits from the top 16 bits into the lower
- * 16 bits.
- */
- while (nleft > 1) {
- sum += *w++;
- nleft -= 2;
- }
- if (nleft == 1)
- sum += htons(*(u_char *)w<<8);
-
- /*
- * add back carry outs from top 16 bits to low 16 bits
- */
- sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
- sum += (sum >> 16); /* add carry */
- answer = ~sum; /* truncate to 16 bits */
- return (answer);
-}
-
-/*
- * Given the host-byte-order value of the checksum field in a packet
- * header, and the network-byte-order computed checksum of the data
- * that the checksum covers (including the checksum itself), compute
- * what the checksum field *should* have been.
- */
-u_int16_t
-in_cksum_shouldbe(u_int16_t sum, u_int16_t computed_sum)
-{
- u_int32_t shouldbe;
-
- /*
- * The value that should have gone into the checksum field
- * is the negative of the value gotten by summing up everything
- * *but* the checksum field.
- *
- * We can compute that by subtracting the value of the checksum
- * field from the sum of all the data in the packet, and then
- * computing the negative of that value.
- *
- * "sum" is the value of the checksum field, and "computed_sum"
- * is the negative of the sum of all the data in the packets,
- * so that's -(-computed_sum - sum), or (sum + computed_sum).
- *
- * All the arithmetic in question is one's complement, so the
- * addition must include an end-around carry; we do this by
- * doing the arithmetic in 32 bits (with no sign-extension),
- * and then adding the upper 16 bits of the sum, which contain
- * the carry, to the lower 16 bits of the sum, and then do it
- * again in case *that* sum produced a carry.
- *
- * As RFC 1071 notes, the checksum can be computed without
- * byte-swapping the 16-bit words; summing 16-bit words
- * on a big-endian machine gives a big-endian checksum, which
- * can be directly stuffed into the big-endian checksum fields
- * in protocol headers, and summing words on a little-endian
- * machine gives a little-endian checksum, which must be
- * byte-swapped before being stuffed into a big-endian checksum
- * field.
- *
- * "computed_sum" is a network-byte-order value, so we must put
- * it in host byte order before subtracting it from the
- * host-byte-order value from the header; the adjusted checksum
- * will be in host byte order, which is what we'll return.
- */
- shouldbe = sum;
- shouldbe += ntohs(computed_sum);
- shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
- shouldbe = (shouldbe & 0xFFFF) + (shouldbe >> 16);
- return shouldbe;
-}
-
#define IP_RES 0x8000
static struct tok ip_frag_values[] = {
@@ -376,6 +323,7 @@ ip_print_demux(netdissect_options *ndo,
struct ip_print_demux_state *ipds)
{
struct protoent *proto;
+ struct cksum_vec vec[1];
again:
switch (ipds->nh) {
@@ -480,7 +428,7 @@ again:
case IPPROTO_IPV4:
/* DVMRP multicast tunnel (ip-in-ip encapsulation) */
- ip_print(gndo, ipds->cp, ipds->len);
+ ip_print(ndo, ipds->cp, ipds->len);
if (! vflag) {
ND_PRINT((ndo, " (ipip-proto-4)"));
return;
@@ -490,7 +438,7 @@ again:
#ifdef INET6
case IPPROTO_IPV6:
/* ip6-in-ip encapsulation */
- ip6_print(ipds->cp, ipds->len);
+ ip6_print(ndo, ipds->cp, ipds->len);
break;
#endif /*INET6*/
@@ -508,12 +456,25 @@ again:
break;
case IPPROTO_PIM:
- pim_print(ipds->cp, ipds->len,
- in_cksum((const u_short*)ipds->cp, ipds->len, 0));
+ vec[0].ptr = ipds->cp;
+ vec[0].len = ipds->len;
+ pim_print(ipds->cp, ipds->len, in_cksum(vec, 1));
break;
case IPPROTO_VRRP:
- vrrp_print(ipds->cp, ipds->len, ipds->ip->ip_ttl);
+ if (packettype == PT_CARP) {
+ if (vflag)
+ (void)printf("carp %s > %s: ",
+ ipaddr_string(&ipds->ip->ip_src),
+ ipaddr_string(&ipds->ip->ip_dst));
+ carp_print(ipds->cp, ipds->len, ipds->ip->ip_ttl);
+ } else {
+ if (vflag)
+ (void)printf("vrrp %s > %s: ",
+ ipaddr_string(&ipds->ip->ip_src),
+ ipaddr_string(&ipds->ip->ip_dst));
+ vrrp_print(ipds->cp, ipds->len, ipds->ip->ip_ttl);
+ }
break;
case IPPROTO_PGM:
@@ -561,6 +522,7 @@ ip_print(netdissect_options *ndo,
struct ip_print_demux_state *ipds=&ipd;
const u_char *ipend;
u_int hlen;
+ struct cksum_vec vec[1];
u_int16_t sum, ip_sum;
struct protoent *proto;
@@ -573,7 +535,7 @@ ip_print(netdissect_options *ndo,
else if (!eflag)
printf("IP ");
- if ((u_char *)(ipds->ip + 1) > snapend) {
+ if ((u_char *)(ipds->ip + 1) > ndo->ndo_snapend) {
printf("[|ip]");
return;
}
@@ -611,8 +573,8 @@ ip_print(netdissect_options *ndo,
* Cut off the snapshot length to the end of the IP payload.
*/
ipend = bp + ipds->len;
- if (ipend < snapend)
- snapend = ipend;
+ if (ipend < ndo->ndo_snapend)
+ ndo->ndo_snapend = ipend;
ipds->len -= hlen;
@@ -658,8 +620,10 @@ ip_print(netdissect_options *ndo,
printf(")");
}
- if (!Kflag && (u_char *)ipds->ip + hlen <= snapend) {
- sum = in_cksum((const u_short *)ipds->ip, hlen, 0);
+ if (!Kflag && (u_char *)ipds->ip + hlen <= ndo->ndo_snapend) {
+ vec[0].ptr = (const u_int8_t *)(void *)ipds->ip;
+ vec[0].len = hlen;
+ sum = in_cksum(vec, 1);
if (sum != 0) {
ip_sum = EXTRACT_16BITS(&ipds->ip->ip_sum);
(void)printf(", bad cksum %x (->%x)!", ip_sum,
@@ -722,7 +686,7 @@ ipN_print(register const u_char *bp, register u_int length)
return;
#ifdef INET6
case 6:
- ip6_print (bp, length);
+ ip6_print (gndo, bp, length);
return;
#endif
default:
diff --git a/print-ip6.c b/print-ip6.c
index 1599cf28b60f..f5e62441ea9e 100644
--- a/print-ip6.c
+++ b/print-ip6.c
@@ -48,32 +48,38 @@ static const char rcsid[] _U_ =
* Compute a V6-style checksum by building a pseudoheader.
*/
int
-nextproto6_cksum(const struct ip6_hdr *ip6, const u_short *data,
+nextproto6_cksum(const struct ip6_hdr *ip6, const u_int8_t *data,
u_int len, u_int next_proto)
{
- size_t i;
- u_int32_t sum = 0;
- union ip6_pseudo_hdr phu;
+ struct {
+ struct in6_addr ph_src;
+ struct in6_addr ph_dst;
+ u_int32_t ph_len;
+ u_int8_t ph_zero[3];
+ u_int8_t ph_nxt;
+ } ph;
+ struct cksum_vec vec[2];
/* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = next_proto;
-
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++) {
- sum += phu.pa[i];
- }
-
- return in_cksum(data, len, sum);
+ memset(&ph, 0, sizeof(ph));
+ ph.ph_src = ip6->ip6_src;
+ ph.ph_dst = ip6->ip6_dst;
+ ph.ph_len = htonl(len);
+ ph.ph_nxt = next_proto;
+
+ vec[0].ptr = (const u_int8_t *)(void *)&ph;
+ vec[0].len = sizeof(ph);
+ vec[1].ptr = data;
+ vec[1].len = len;
+
+ return in_cksum(vec, 2);
}
/*
* print an IP6 datagram.
*/
void
-ip6_print(register const u_char *bp, register u_int length)
+ip6_print(netdissect_options *ndo, const u_char *bp, u_int length)
{
register const struct ip6_hdr *ip6;
register int advance;
@@ -89,62 +95,62 @@ ip6_print(register const u_char *bp, register u_int length)
TCHECK(*ip6);
if (length < sizeof (struct ip6_hdr)) {
- (void)printf("truncated-ip6 %u", length);
+ (void)ND_PRINT((ndo, "truncated-ip6 %u", length));
return;
}
- if (!eflag)
- printf("IP6 ");
+ if (!ndo->ndo_eflag)
+ ND_PRINT((ndo, "IP6 "));
payload_len = EXTRACT_16BITS(&ip6->ip6_plen);
len = payload_len + sizeof(struct ip6_hdr);
if (length < len)
- (void)printf("truncated-ip6 - %u bytes missing!",
- len - length);
+ (void)ND_PRINT((ndo, "truncated-ip6 - %u bytes missing!",
+ len - length));
- if (vflag) {
+ if (ndo->ndo_vflag) {
flow = EXTRACT_32BITS(&ip6->ip6_flow);
- printf("(");
+ ND_PRINT((ndo, "("));
#if 0
/* rfc1883 */
if (flow & 0x0f000000)
- (void)printf("pri 0x%02x, ", (flow & 0x0f000000) >> 24);
+ (void)ND_PRINT((ndo, "pri 0x%02x, ", (flow & 0x0f000000) >> 24));
if (flow & 0x00ffffff)
- (void)printf("flowlabel 0x%06x, ", flow & 0x00ffffff);
+ (void)ND_PRINT((ndo, "flowlabel 0x%06x, ", flow & 0x00ffffff));
#else
/* RFC 2460 */
if (flow & 0x0ff00000)
- (void)printf("class 0x%02x, ", (flow & 0x0ff00000) >> 20);
+ (void)ND_PRINT((ndo, "class 0x%02x, ", (flow & 0x0ff00000) >> 20));
if (flow & 0x000fffff)
- (void)printf("flowlabel 0x%05x, ", flow & 0x000fffff);
+ (void)ND_PRINT((ndo, "flowlabel 0x%05x, ", flow & 0x000fffff));
#endif
- (void)printf("hlim %u, next-header %s (%u) payload length: %u) ",
+ (void)ND_PRINT((ndo, "hlim %u, next-header %s (%u) payload length: %u) ",
ip6->ip6_hlim,
tok2str(ipproto_values,"unknown",ip6->ip6_nxt),
ip6->ip6_nxt,
- payload_len);
+ payload_len));
}
/*
* Cut off the snapshot length to the end of the IP payload.
*/
ipend = bp + len;
- if (ipend < snapend)
- snapend = ipend;
+ if (ipend < ndo->ndo_snapend)
+ ndo->ndo_snapend = ipend;
cp = (const u_char *)ip6;
advance = sizeof(struct ip6_hdr);
nh = ip6->ip6_nxt;
- while (cp < snapend && advance > 0) {
+ while (cp < ndo->ndo_snapend && advance > 0) {
cp += advance;
len -= advance;
if (cp == (const u_char *)(ip6 + 1) &&
nh != IPPROTO_TCP && nh != IPPROTO_UDP &&
nh != IPPROTO_DCCP && nh != IPPROTO_SCTP) {
- (void)printf("%s > %s: ", ip6addr_string(&ip6->ip6_src),
- ip6addr_string(&ip6->ip6_dst));
+ (void)ND_PRINT((ndo, "%s > %s: ", ip6addr_string(&ip6->ip6_src),
+ ip6addr_string(&ip6->ip6_dst)));
}
switch (nh) {
@@ -158,7 +164,7 @@ ip6_print(register const u_char *bp, register u_int length)
break;
case IPPROTO_FRAGMENT:
advance = frag6_print(cp, (const u_char *)ip6);
- if (snapend <= cp + advance)
+ if (ndo->ndo_snapend <= cp + advance)
return;
nh = *cp;
fragmented = 1;
@@ -196,7 +202,7 @@ ip6_print(register const u_char *bp, register u_int length)
udp_print(cp, len, (const u_char *)ip6, fragmented);
return;
case IPPROTO_ICMPV6:
- icmp6_print(gndo, cp, len, (const u_char *)ip6, fragmented);
+ icmp6_print(ndo, cp, len, (const u_char *)ip6, fragmented);
return;
case IPPROTO_AH:
advance = ah_print(cp);
@@ -205,7 +211,7 @@ ip6_print(register const u_char *bp, register u_int length)
case IPPROTO_ESP:
{
int enh, padlen;
- advance = esp_print(gndo, cp, len, (const u_char *)ip6, &enh, &padlen);
+ advance = esp_print(ndo, cp, len, (const u_char *)ip6, &enh, &padlen);
nh = enh & 0xff;
len -= padlen;
break;
@@ -219,7 +225,7 @@ ip6_print(register const u_char *bp, register u_int length)
}
case IPPROTO_PIM:
- pim_print(cp, len, nextproto6_cksum(ip6, (u_short *)cp, len,
+ pim_print(cp, len, nextproto6_cksum(ip6, cp, len,
IPPROTO_PIM));
return;
@@ -228,11 +234,11 @@ ip6_print(register const u_char *bp, register u_int length)
return;
case IPPROTO_IPV6:
- ip6_print(cp, len);
+ ip6_print(ndo, cp, len);
return;
case IPPROTO_IPV4:
- ip_print(gndo, cp, len);
+ ip_print(ndo, cp, len);
return;
case IPPROTO_PGM:
@@ -248,18 +254,18 @@ ip6_print(register const u_char *bp, register u_int length)
return;
case IPPROTO_NONE:
- (void)printf("no next header");
+ (void)ND_PRINT((ndo, "no next header"));
return;
default:
- (void)printf("ip-proto-%d %d", nh, len);
+ (void)ND_PRINT((ndo, "ip-proto-%d %d", nh, len));
return;
}
}
return;
trunc:
- (void)printf("[|ip6]");
+ (void)ND_PRINT((ndo, "[|ip6]"));
}
#endif /* INET6 */
diff --git a/print-ipnet.c b/print-ipnet.c
index 957bd4f52341..187f939d3f8c 100644
--- a/print-ipnet.c
+++ b/print-ipnet.c
@@ -69,7 +69,7 @@ ipnet_print(struct netdissect_options *ndo, const u_char *p, u_int length, u_int
#ifdef INET6
case IPH_AF_INET6:
- ip6_print(p, length);
+ ip6_print(ndo, p, length);
break;
#endif /*INET6*/
diff --git a/print-ipx.c b/print-ipx.c
index 604561c60845..c9bde235a1fb 100644
--- a/print-ipx.c
+++ b/print-ipx.c
@@ -196,7 +196,7 @@ ipx_rip_print(const u_short *ipx, u_int length)
(void)printf("ipx-rip-req");
if (length > 0) {
TCHECK(ipx[3]);
- (void)printf(" %u/%d.%d", EXTRACT_32BITS(&ipx[0]),
+ (void)printf(" %08x/%d.%d", EXTRACT_32BITS(&ipx[0]),
EXTRACT_16BITS(&ipx[2]), EXTRACT_16BITS(&ipx[3]));
}
break;
@@ -204,7 +204,7 @@ ipx_rip_print(const u_short *ipx, u_int length)
(void)printf("ipx-rip-resp");
for (i = 0; i < 50 && length > 0; i++) {
TCHECK(ipx[3]);
- (void)printf(" %u/%d.%d", EXTRACT_32BITS(&ipx[0]),
+ (void)printf(" %08x/%d.%d", EXTRACT_32BITS(&ipx[0]),
EXTRACT_16BITS(&ipx[2]), EXTRACT_16BITS(&ipx[3]));
ipx += 4;
diff --git a/print-isoclns.c b/print-isoclns.c
index ea58d8a3d098..57637055377b 100644
--- a/print-isoclns.c
+++ b/print-isoclns.c
@@ -393,12 +393,14 @@ static struct tok isis_subtlv_link_attribute_values[] = {
};
#define ISIS_SUBTLV_AUTH_SIMPLE 1
+#define ISIS_SUBTLV_AUTH_GENERIC 3 /* rfc 5310 */
#define ISIS_SUBTLV_AUTH_MD5 54
#define ISIS_SUBTLV_AUTH_MD5_LEN 16
#define ISIS_SUBTLV_AUTH_PRIVATE 255
static struct tok isis_subtlv_auth_values[] = {
{ ISIS_SUBTLV_AUTH_SIMPLE, "simple text password"},
+ { ISIS_SUBTLV_AUTH_GENERIC, "Generic Crypto key-id"},
{ ISIS_SUBTLV_AUTH_MD5, "HMAC-MD5 password"},
{ ISIS_SUBTLV_AUTH_PRIVATE, "Routing Domain private password"},
{ 0, NULL }
@@ -439,8 +441,8 @@ static struct tok clnp_flag_values[] = {
#define ISIS_MASK_MTFLAGS(x) ((x)&0xf000)
static struct tok isis_mt_flag_values[] = {
- { 0x4000, "sub-TLVs present"},
- { 0x8000, "ATT bit set"},
+ { 0x4000, "ATT bit set"},
+ { 0x8000, "Overload bit set"},
{ 0, NULL}
};
@@ -616,10 +618,6 @@ struct isis_tlv_lsp {
void isoclns_print(const u_int8_t *p, u_int length, u_int caplen)
{
- const struct isis_common_header *header;
-
- header = (const struct isis_common_header *)p;
-
if (caplen <= 1) { /* enough bytes on the wire ? */
printf("|OSI");
return;
@@ -662,7 +660,7 @@ void isoclns_print(const u_int8_t *p, u_int length, u_int caplen)
#ifdef INET6
case NLPID_IP6:
- ip6_print(p+1, length-1);
+ ip6_print(gndo, p+1, length-1);
break;
#endif
@@ -1177,15 +1175,15 @@ esis_print(const u_int8_t *pptr, u_int length)
}
/* now walk the options */
- while (li >= 2) {
+ while (li != 0) {
u_int op, opli;
const u_int8_t *tptr;
- TCHECK2(*pptr, 2);
if (li < 2) {
printf(", bad opts/li");
return;
}
+ TCHECK2(*pptr, 2);
op = *pptr++;
opli = *pptr++;
li -= 2;
@@ -1204,8 +1202,11 @@ esis_print(const u_int8_t *pptr, u_int length)
switch (op) {
case ESIS_OPTION_ES_CONF_TIME:
- TCHECK2(*pptr, 2);
- printf("%us", EXTRACT_16BITS(tptr));
+ if (opli == 2) {
+ TCHECK2(*pptr, 2);
+ printf("%us", EXTRACT_16BITS(tptr));
+ } else
+ printf("(bad length)");
break;
case ESIS_OPTION_PROTOCOLS:
@@ -1777,7 +1778,7 @@ static int isis_print (const u_int8_t *p, u_int length)
u_int8_t pdu_type, max_area, id_length, tlv_type, tlv_len, tmp, alen, lan_alen, prefix_len;
u_int8_t ext_is_len, ext_ip_len, mt_len;
const u_int8_t *optr, *pptr, *tptr;
- u_short packet_len,pdu_len;
+ u_short packet_len,pdu_len, key_id;
u_int i,vendor_id;
int sigcheck;
@@ -2376,6 +2377,15 @@ static int isis_print (const u_int8_t *p, u_int length)
printf(" (%s)", tok2str(signature_check_values, "Unknown", sigcheck));
break;
+ case ISIS_SUBTLV_AUTH_GENERIC:
+ key_id = EXTRACT_16BITS((tptr+1));
+ printf("%u, password: ", key_id);
+ for(i=1 + sizeof(u_int16_t);i<tlv_len;i++) {
+ if (!TTEST2(*(tptr+i), 1))
+ goto trunctlv;
+ printf("%02x",*(tptr+i));
+ }
+ break;
case ISIS_SUBTLV_AUTH_PRIVATE:
default:
if(!print_unknown_data(tptr+1,"\n\t\t ",tlv_len-1))
diff --git a/print-juniper.c b/print-juniper.c
index 55ca1c9c6405..3bf68c382797 100644
--- a/print-juniper.c
+++ b/print-juniper.c
@@ -486,7 +486,7 @@ juniper_ggsn_print(const struct pcap_pkthdr *h, register const u_char *p)
break;
#ifdef INET6
case JUNIPER_PROTO_IPV6:
- ip6_print(p, l2info.length);
+ ip6_print(gndo, p, l2info.length);
break;
#endif /* INET6 */
default:
@@ -647,7 +647,7 @@ juniper_pppoe_print(const struct pcap_pkthdr *h, register const u_char *p)
p+=l2info.header_len;
/* this DLT contains nothing but raw ethernet frames */
- ether_print(p, l2info.length, l2info.caplen, NULL, NULL);
+ ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
return l2info.header_len;
}
#endif
@@ -664,7 +664,7 @@ juniper_ether_print(const struct pcap_pkthdr *h, register const u_char *p)
p+=l2info.header_len;
/* this DLT contains nothing but raw Ethernet frames */
- ether_print(p, l2info.length, l2info.caplen, NULL, NULL);
+ ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
return l2info.header_len;
}
#endif
@@ -736,7 +736,7 @@ juniper_pppoe_atm_print(const struct pcap_pkthdr *h, register const u_char *p)
extracted_ethertype = EXTRACT_16BITS(p);
/* this DLT contains nothing but raw PPPoE frames,
* prepended with a type field*/
- if (ethertype_print(extracted_ethertype,
+ if (ethertype_print(gndo, extracted_ethertype,
p+ETHERTYPE_LEN,
l2info.length-ETHERTYPE_LEN,
l2info.caplen-ETHERTYPE_LEN) == 0)
@@ -779,7 +779,7 @@ juniper_mlppp_print(const struct pcap_pkthdr *h, register const u_char *p)
return l2info.header_len;
#ifdef INET6
case JUNIPER_LSQ_L3_PROTO_IPV6:
- ip6_print(p,l2info.length);
+ ip6_print(gndo, p,l2info.length);
return l2info.header_len;
#endif
case JUNIPER_LSQ_L3_PROTO_MPLS:
@@ -834,7 +834,7 @@ juniper_mfr_print(const struct pcap_pkthdr *h, register const u_char *p)
return l2info.header_len;
#ifdef INET6
case JUNIPER_LSQ_L3_PROTO_IPV6:
- ip6_print(p,l2info.length);
+ ip6_print(gndo, p,l2info.length);
return l2info.header_len;
#endif
case JUNIPER_LSQ_L3_PROTO_MPLS:
@@ -987,7 +987,7 @@ juniper_atm2_print(const struct pcap_pkthdr *h, register const u_char *p)
if (l2info.direction != JUNIPER_BPF_PKT_IN && /* ether-over-1483 encaps ? */
(EXTRACT_32BITS(l2info.cookie) & ATM2_GAP_COUNT_MASK)) {
- ether_print(p, l2info.length, l2info.caplen, NULL, NULL);
+ ether_print(gndo, p, l2info.length, l2info.caplen, NULL, NULL);
return l2info.header_len;
}
@@ -1073,7 +1073,7 @@ ip_heuristic_guess(register const u_char *p, u_int length) {
case 0x6d:
case 0x6e:
case 0x6f:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
default:
diff --git a/print-lane.c b/print-lane.c
index 54c68c82aa2b..aa7931154911 100644
--- a/print-lane.c
+++ b/print-lane.c
@@ -61,9 +61,9 @@ static const struct tok lecop2str[] = {
};
static void
-lane_hdr_print(const u_char *bp)
+lane_hdr_print(netdissect_options *ndo, const u_char *bp)
{
- (void)printf("lecid:%x ", EXTRACT_16BITS(bp));
+ (void)ND_PRINT((ndo, "lecid:%x ", EXTRACT_16BITS(bp)));
}
/*
@@ -106,7 +106,7 @@ lane_print(const u_char *p, u_int length, u_int caplen)
* Now print the encapsulated frame, under the assumption
* that it's an Ethernet frame.
*/
- ether_print(p, length, caplen, lane_hdr_print, p - 2);
+ ether_print(gndo, p, length, caplen, lane_hdr_print, p - 2);
}
u_int
diff --git a/print-ldp.c b/print-ldp.c
index de3b34e5b54f..1243104855b7 100644
--- a/print-ldp.c
+++ b/print-ldp.c
@@ -609,7 +609,7 @@ ldp_msg_print(register const u_char *pptr) {
}
/* do we want to see an additionally hexdump ? */
if (vflag > 1 || hexdump==TRUE)
- print_unknown_data(tptr+sizeof(sizeof(struct ldp_msg_header)),"\n\t ",
+ print_unknown_data(tptr+sizeof(struct ldp_msg_header),"\n\t ",
msg_len);
tptr += msg_len+4;
diff --git a/print-llc.c b/print-llc.c
index d20fbdf13c36..a1934715c188 100644
--- a/print-llc.c
+++ b/print-llc.c
@@ -417,7 +417,7 @@ snap_print(const u_char *p, u_int length, u_int caplen, u_int bridge_pad)
* Cisco hardware; the protocol ID is
* an Ethernet protocol type.
*/
- ret = ethertype_print(et, p, length, caplen);
+ ret = ethertype_print(gndo, et, p, length, caplen);
if (ret)
return (ret);
break;
@@ -432,7 +432,7 @@ snap_print(const u_char *p, u_int length, u_int caplen, u_int bridge_pad)
* but used 0x000000 and an Ethernet
* packet type for AARP packets.
*/
- ret = ethertype_print(et, p, length, caplen);
+ ret = ethertype_print(gndo, et, p, length, caplen);
if (ret)
return (ret);
}
@@ -479,7 +479,7 @@ snap_print(const u_char *p, u_int length, u_int caplen, u_int bridge_pad)
/*
* What remains is an Ethernet packet.
*/
- ether_print(p, length, caplen, NULL, NULL);
+ ether_print(gndo, p, length, caplen, NULL, NULL);
return (1);
case PID_RFC2684_802_5_FCS:
diff --git a/print-lldp.c b/print-lldp.c
index e8f67fd23a53..0ee2f955db0b 100644
--- a/print-lldp.c
+++ b/print-lldp.c
@@ -12,10 +12,11 @@
* LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE.
*
- * support for the IEEE Link Discovery Protocol as per 802.1ab
+ * support for the IEEE Link Discovery Protocol as per 802.1AB
*
* Original code by Hannes Gredler (hannes@juniper.net)
* IEEE and TIA extensions by Carles Kishimoto <carles.kishimoto@gmail.com>
+ * DCBX extensions by Kaladhar Musunuru <kaladharm@sourceforge.net>
*/
#ifndef lint
@@ -542,6 +543,23 @@ static const struct tok lldp_aggregation_values[] = {
};
/*
+ * DCBX protocol subtypes.
+ */
+#define LLDP_DCBX_SUBTYPE_1 1
+#define LLDP_DCBX_SUBTYPE_2 2
+
+static const struct tok lldp_dcbx_subtype_values[] = {
+ { LLDP_DCBX_SUBTYPE_1, "DCB Capability Exchange Protocol Rev 1" },
+ { LLDP_DCBX_SUBTYPE_2, "DCB Capability Exchange Protocol Rev 1.01" },
+ { 0, NULL}
+};
+
+#define LLDP_DCBX_CONTROL_TLV 1
+#define LLDP_DCBX_PRIORITY_GROUPS_TLV 2
+#define LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV 3
+#define LLDP_DCBX_APPLICATION_TLV 4
+
+/*
* Interface numbering subtypes.
*/
#define LLDP_INTF_NUMB_IFX_SUBTYPE 2
@@ -556,13 +574,17 @@ static const struct tok lldp_intf_numb_subtype_values[] = {
#define LLDP_INTF_NUM_LEN 5
/*
- * Print IEEE private extensions. (802.1 annex F)
+ * Print IEEE 802.1 private extensions. (802.1AB annex E)
*/
static int
-lldp_private_8021_print(const u_char *tptr)
+lldp_private_8021_print(const u_char *tptr, u_int tlv_len)
{
int subtype, hexdump = FALSE;
+ u_int sublen;
+ if (tlv_len < 4) {
+ return hexdump;
+ }
subtype = *(tptr+3);
printf("\n\t %s Subtype (%u)",
@@ -571,24 +593,47 @@ lldp_private_8021_print(const u_char *tptr)
switch (subtype) {
case LLDP_PRIVATE_8021_SUBTYPE_PORT_VLAN_ID:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
printf("\n\t port vlan id (PVID): %u",
EXTRACT_16BITS(tptr+4));
break;
case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_VLAN_ID:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t port and protocol vlan id (PPVID): %u, flags [%s] (0x%02x)",
EXTRACT_16BITS(tptr+5),
bittok2str(lldp_8021_port_protocol_id_values, "none", *(tptr+4)),
*(tptr+4));
break;
case LLDP_PRIVATE_8021_SUBTYPE_VLAN_NAME:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
printf("\n\t vlan id (VID): %u",
EXTRACT_16BITS(tptr+4));
+ if (tlv_len < 7) {
+ return hexdump;
+ }
+ sublen = *(tptr+6);
+ if (tlv_len < 7+sublen) {
+ return hexdump;
+ }
printf("\n\t vlan name: ");
- safeputs((const char *)tptr+7, *(tptr+6));
+ safeputs((const char *)tptr+7, sublen);
break;
case LLDP_PRIVATE_8021_SUBTYPE_PROTOCOL_IDENTITY:
+ if (tlv_len < 5) {
+ return hexdump;
+ }
+ sublen = *(tptr+4);
+ if (tlv_len < 5+sublen) {
+ return hexdump;
+ }
printf("\n\t protocol identity: ");
- safeputs((const char *)tptr+5, *(tptr+4));
+ safeputs((const char *)tptr+5, sublen);
break;
default:
@@ -600,13 +645,16 @@ lldp_private_8021_print(const u_char *tptr)
}
/*
- * Print IEEE private extensions. (802.3)
+ * Print IEEE 802.3 private extensions. (802.3bc)
*/
static int
-lldp_private_8023_print(const u_char *tptr)
+lldp_private_8023_print(const u_char *tptr, u_int tlv_len)
{
int subtype, hexdump = FALSE;
+ if (tlv_len < 4) {
+ return hexdump;
+ }
subtype = *(tptr+3);
printf("\n\t %s Subtype (%u)",
@@ -615,6 +663,9 @@ lldp_private_8023_print(const u_char *tptr)
switch (subtype) {
case LLDP_PRIVATE_8023_SUBTYPE_MACPHY:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
printf("\n\t autonegotiation [%s] (0x%02x)",
bittok2str(lldp_8023_autonegotiation_values, "none", *(tptr+4)),
*(tptr+4));
@@ -627,6 +678,9 @@ lldp_private_8023_print(const u_char *tptr)
break;
case LLDP_PRIVATE_8023_SUBTYPE_MDIPOWER:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t MDI power support [%s], power pair %s, power class %s",
bittok2str(lldp_mdi_values, "none", *(tptr+4)),
tok2str(lldp_mdi_power_pairs_values, "unknown", *(tptr+5)),
@@ -634,6 +688,9 @@ lldp_private_8023_print(const u_char *tptr)
break;
case LLDP_PRIVATE_8023_SUBTYPE_LINKAGGR:
+ if (tlv_len < 9) {
+ return hexdump;
+ }
printf("\n\t aggregation status [%s], aggregation port ID %u",
bittok2str(lldp_aggregation_values, "none", *(tptr+4)),
EXTRACT_32BITS(tptr+5));
@@ -674,8 +731,12 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
int subtype, hexdump = FALSE;
u_int8_t location_format;
u_int16_t power_val;
- u_int8_t lci_len, ca_type, ca_len;
+ u_int lci_len;
+ u_int8_t ca_type, ca_len;
+ if (tlv_len < 4) {
+ return hexdump;
+ }
subtype = *(tptr+3);
printf("\n\t %s Subtype (%u)",
@@ -684,6 +745,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
switch (subtype) {
case LLDP_PRIVATE_TIA_SUBTYPE_CAPABILITIES:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t Media capabilities [%s] (0x%04x)",
bittok2str(lldp_tia_capabilities_values, "none",
EXTRACT_16BITS(tptr+4)), EXTRACT_16BITS(tptr+4));
@@ -693,6 +757,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_PRIVATE_TIA_SUBTYPE_NETWORK_POLICY:
+ if (tlv_len < 8) {
+ return hexdump;
+ }
printf("\n\t Application type [%s] (0x%02x)",
tok2str(lldp_tia_application_type_values, "none", *(tptr+4)),
*(tptr+4));
@@ -707,6 +774,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_PRIVATE_TIA_SUBTYPE_LOCAL_ID:
+ if (tlv_len < 5) {
+ return hexdump;
+ }
location_format = *(tptr+4);
printf("\n\t Location data format %s (0x%02x)",
tok2str(lldp_tia_location_data_format_values, "unknown", location_format),
@@ -714,6 +784,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
switch (location_format) {
case LLDP_TIA_LOCATION_DATA_FORMAT_COORDINATE_BASED:
+ if (tlv_len < 21) {
+ return hexdump;
+ }
printf("\n\t Latitude resolution %u, latitude value %" PRIu64,
(*(tptr+5)>>2), lldp_extract_latlon(tptr+5));
printf("\n\t Longitude resolution %u, longitude value %" PRIu64,
@@ -730,7 +803,16 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_TIA_LOCATION_DATA_FORMAT_CIVIC_ADDRESS:
+ if (tlv_len < 6) {
+ return hexdump;
+ }
lci_len = *(tptr+5);
+ if (lci_len < 3) {
+ return hexdump;
+ }
+ if (tlv_len < 7+lci_len) {
+ return hexdump;
+ }
printf("\n\t LCI length %u, LCI what %s (0x%02x), Country-code ",
lci_len,
tok2str(lldp_tia_location_lci_what_values, "unknown", *(tptr+6)),
@@ -744,6 +826,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
/* Decode each civic address element */
while (lci_len > 0) {
+ if (lci_len < 2) {
+ return hexdump;
+ }
ca_type = *(tptr);
ca_len = *(tptr+1);
@@ -758,6 +843,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
if ( ca_type == 0 || ca_len == 0) {
return hexdump;
}
+ if (lci_len < ca_len) {
+ return hexdump;
+ }
safeputs((const char *)tptr, ca_len);
tptr += ca_len;
@@ -777,6 +865,9 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
break;
case LLDP_PRIVATE_TIA_SUBTYPE_EXTENDED_POWER_MDI:
+ if (tlv_len < 7) {
+ return hexdump;
+ }
printf("\n\t Power type [%s]",
(*(tptr+4)&0xC0>>6) ? "PD device" : "PSE device");
printf(", Power source [%s]",
@@ -812,24 +903,196 @@ lldp_private_tia_print(const u_char *tptr, u_int tlv_len)
return hexdump;
}
+/*
+ * Print DCBX Protocol fields (V 1.01).
+ */
+static int
+lldp_private_dcbx_print(const u_char *pptr, u_int len)
+{
+ int subtype, hexdump = FALSE;
+ u_int8_t tval;
+ u_int16_t tlv;
+ u_int32_t i, pgval, uval;
+ u_int tlen, tlv_type, tlv_len;
+ const u_char *tptr, *mptr;
+
+ if (len < 4) {
+ return hexdump;
+ }
+ subtype = *(pptr+3);
+
+ printf("\n\t %s Subtype (%u)",
+ tok2str(lldp_dcbx_subtype_values, "unknown", subtype),
+ subtype);
+
+ /* by passing old version */
+ if (subtype == LLDP_DCBX_SUBTYPE_1)
+ return TRUE;
+
+ tptr = pptr + 4;
+ tlen = len - 4;
+
+ while (tlen >= sizeof(tlv)) {
+
+ TCHECK2(*tptr, sizeof(tlv));
+
+ tlv = EXTRACT_16BITS(tptr);
+
+ tlv_type = LLDP_EXTRACT_TYPE(tlv);
+ tlv_len = LLDP_EXTRACT_LEN(tlv);
+ hexdump = FALSE;
+
+ tlen -= sizeof(tlv);
+ tptr += sizeof(tlv);
+
+ /* loop check */
+ if (!tlv_type || !tlv_len) {
+ break;
+ }
+
+ TCHECK2(*tptr, tlv_len);
+ if (tlen < tlv_len) {
+ goto trunc;
+ }
+
+ /* decode every tlv */
+ switch (tlv_type) {
+ case LLDP_DCBX_CONTROL_TLV:
+ if (tlv_len < 10) {
+ goto trunc;
+ }
+ printf("\n\t Control - Protocol Control (type 0x%x, length %d)",
+ LLDP_DCBX_CONTROL_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Sequence Number: %d", EXTRACT_32BITS(tptr+2));
+ printf("\n\t Acknowledgement Number: %d",
+ EXTRACT_32BITS(tptr+6));
+ break;
+ case LLDP_DCBX_PRIORITY_GROUPS_TLV:
+ if (tlv_len < 17) {
+ goto trunc;
+ }
+ printf("\n\t Feature - Priority Group (type 0x%x, length %d)",
+ LLDP_DCBX_PRIORITY_GROUPS_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Info block(0x%02X): ", *(tptr+2));
+ tval = *(tptr+2);
+ printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ printf("\n\t SubType: %d", *(tptr+3));
+ printf("\n\t Priority Allocation");
+
+ pgval = EXTRACT_32BITS(tptr+4);
+ for (i = 0; i <= 7; i++) {
+ tval = *(tptr+4+(i/2));
+ printf("\n\t PgId_%d: %d",
+ i, (pgval >> (28-4*i)) & 0xF);
+ }
+ printf("\n\t Priority Group Allocation");
+ for (i = 0; i <= 7; i++)
+ printf("\n\t Pg percentage[%d]: %d", i, *(tptr+8+i));
+ printf("\n\t NumTCsSupported: %d", *(tptr+8+8));
+ break;
+ case LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV:
+ if (tlv_len < 6) {
+ goto trunc;
+ }
+ printf("\n\t Feature - Priority Flow Control");
+ printf(" (type 0x%x, length %d)",
+ LLDP_DCBX_PRIORITY_FLOW_CONTROL_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Info block(0x%02X): ", *(tptr+2));
+ tval = *(tptr+2);
+ printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ printf("\n\t SubType: %d", *(tptr+3));
+ tval = *(tptr+4);
+ printf("\n\t PFC Config (0x%02X)", *(tptr+4));
+ for (i = 0; i <= 7; i++)
+ printf("\n\t Priority Bit %d: %s",
+ i, (tval & (1 << i)) ? "Enabled" : "Disabled");
+ printf("\n\t NumTCPFCSupported: %d", *(tptr+5));
+ break;
+ case LLDP_DCBX_APPLICATION_TLV:
+ if (tlv_len < 4) {
+ goto trunc;
+ }
+ printf("\n\t Feature - Application (type 0x%x, length %d)",
+ LLDP_DCBX_APPLICATION_TLV, tlv_len);
+ printf("\n\t Oper_Version: %d", *tptr);
+ printf("\n\t Max_Version: %d", *(tptr+1));
+ printf("\n\t Info block(0x%02X): ", *(tptr+2));
+ tval = *(tptr+2);
+ printf("Enable bit: %d, Willing bit: %d, Error Bit: %d",
+ (tval & 0x80) ? 1 : 0, (tval & 0x40) ? 1 : 0,
+ (tval & 0x20) ? 1 : 0);
+ printf("\n\t SubType: %d", *(tptr+3));
+ tval = tlv_len - 4;
+ mptr = tptr + 4;
+ while (tval >= 6) {
+ printf("\n\t Application Value");
+ printf("\n\t Application Protocol ID: 0x%04x",
+ EXTRACT_16BITS(mptr));
+ uval = EXTRACT_24BITS(mptr+2);
+ printf("\n\t SF (0x%x) Application Protocol ID is %s",
+ (uval >> 22),
+ (uval >> 22) ? "Socket Number" : "L2 EtherType");
+ printf("\n\t OUI: 0x%06x", uval & 0x3fffff);
+ printf("\n\t User Priority Map: 0x%02x", *(mptr+5));
+ tval = tval - 6;
+ mptr = mptr + 6;
+ }
+ break;
+ default:
+ hexdump = TRUE;
+ break;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (vflag > 1 || (vflag && hexdump)) {
+ print_unknown_data(tptr,"\n\t ", tlv_len);
+ }
+
+ tlen -= tlv_len;
+ tptr += tlv_len;
+ }
+
+ trunc:
+ return hexdump;
+}
+
static char *
-lldp_network_addr_print(const u_char *tptr) {
+lldp_network_addr_print(const u_char *tptr, u_int len) {
u_int8_t af;
static char buf[BUFSIZE];
const char * (*pfunc)(const u_char *);
+ if (len < 1)
+ return NULL;
+ len--;
af = *tptr;
switch (af) {
case AFNUM_INET:
+ if (len < 4)
+ return NULL;
pfunc = getname;
break;
#ifdef INET6
case AFNUM_INET6:
+ if (len < 16)
+ return NULL;
pfunc = getname6;
break;
#endif
case AFNUM_802:
+ if (len < 6)
+ return NULL;
pfunc = etheraddr_string;
break;
default:
@@ -854,10 +1117,14 @@ lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
u_int8_t mgmt_addr_len, intf_num_subtype, oid_len;
const u_char *tptr;
u_int tlen;
+ char *mgmt_addr;
tlen = len;
tptr = pptr;
+ if (tlen < 1) {
+ return 0;
+ }
mgmt_addr_len = *tptr++;
tlen--;
@@ -865,9 +1132,12 @@ lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
return 0;
}
+ mgmt_addr = lldp_network_addr_print(tptr, mgmt_addr_len);
+ if (mgmt_addr == NULL) {
+ return 0;
+ }
printf("\n\t Management Address length %u, %s",
- mgmt_addr_len,
- lldp_network_addr_print(tptr));
+ mgmt_addr_len, mgmt_addr);
tptr += mgmt_addr_len;
tlen -= mgmt_addr_len;
@@ -890,6 +1160,9 @@ lldp_mgmt_addr_tlv_print(const u_char *pptr, u_int len) {
if (tlen) {
oid_len = *tptr;
+ if (tlen < oid_len) {
+ return 0;
+ }
if (oid_len) {
printf("\n\t OID length %u", oid_len);
safeputs((const char *)tptr+1, oid_len);
@@ -906,6 +1179,7 @@ lldp_print(register const u_char *pptr, register u_int len) {
u_int16_t tlv, cap, ena_cap;
u_int oui, tlen, hexdump, tlv_type, tlv_len;
const u_char *tptr;
+ char *network_addr;
tptr = pptr;
tlen = len;
@@ -939,47 +1213,17 @@ lldp_print(register const u_char *pptr, register u_int len) {
}
TCHECK2(*tptr, tlv_len);
+ if (tlen < tlv_len) {
+ goto trunc;
+ }
switch (tlv_type) {
- case LLDP_TTL_TLV:
- if (vflag) {
- printf(": TTL %us", EXTRACT_16BITS(tptr));
- }
- break;
-
- case LLDP_SYSTEM_NAME_TLV:
-
- /*
- * The system name is also print in non-verbose mode
- * similar to the CDP printer.
- */
- if (vflag) {
- printf(": ");
- safeputs((const char *)tptr, tlv_len);
- } else {
- printf("LLDP, name ");
- safeputs((const char *)tptr, tlv_len);
- printf(", length %u", len);
- }
- break;
-
- case LLDP_PORT_DESCR_TLV:
- if (vflag) {
- printf(": ");
- safeputs((const char *)tptr, tlv_len);
- }
- break;
-
- case LLDP_SYSTEM_DESCR_TLV:
- if (vflag) {
- printf("\n\t ");
- safeputs((const char *)tptr, tlv_len);
- }
- break;
-
case LLDP_CHASSIS_ID_TLV:
if (vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
subtype = *tptr;
printf("\n\t Subtype %s (%u): ",
tok2str(lldp_chassis_subtype_values, "Unknown", subtype),
@@ -987,6 +1231,9 @@ lldp_print(register const u_char *pptr, register u_int len) {
switch (subtype) {
case LLDP_CHASSIS_MAC_ADDR_SUBTYPE:
+ if (tlv_len < 1+6) {
+ goto trunc;
+ }
printf("%s", etheraddr_string(tptr+1));
break;
@@ -999,7 +1246,11 @@ lldp_print(register const u_char *pptr, register u_int len) {
break;
case LLDP_CHASSIS_NETWORK_ADDR_SUBTYPE:
- printf("%s", lldp_network_addr_print(tptr+1));
+ network_addr = lldp_network_addr_print(tptr+1, tlv_len-1);
+ if (network_addr == NULL) {
+ goto trunc;
+ }
+ printf("%s", network_addr);
break;
default:
@@ -1011,6 +1262,9 @@ lldp_print(register const u_char *pptr, register u_int len) {
case LLDP_PORT_ID_TLV:
if (vflag) {
+ if (tlv_len < 2) {
+ goto trunc;
+ }
subtype = *tptr;
printf("\n\t Subtype %s (%u): ",
tok2str(lldp_port_subtype_values, "Unknown", subtype),
@@ -1018,6 +1272,9 @@ lldp_print(register const u_char *pptr, register u_int len) {
switch (subtype) {
case LLDP_PORT_MAC_ADDR_SUBTYPE:
+ if (tlv_len < 1+6) {
+ goto trunc;
+ }
printf("%s", etheraddr_string(tptr+1));
break;
@@ -1030,7 +1287,11 @@ lldp_print(register const u_char *pptr, register u_int len) {
break;
case LLDP_PORT_NETWORK_ADDR_SUBTYPE:
- printf("%s", lldp_network_addr_print(tptr+1));
+ network_addr = lldp_network_addr_print(tptr+1, tlv_len-1);
+ if (network_addr == NULL) {
+ goto trunc;
+ }
+ printf("%s", network_addr);
break;
default:
@@ -1040,30 +1301,55 @@ lldp_print(register const u_char *pptr, register u_int len) {
}
break;
- case LLDP_PRIVATE_TLV:
+ case LLDP_TTL_TLV:
if (vflag) {
- oui = EXTRACT_24BITS(tptr);
- printf(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
-
- switch (oui) {
- case OUI_IEEE_8021_PRIVATE:
- hexdump = lldp_private_8021_print(tptr);
- break;
- case OUI_IEEE_8023_PRIVATE:
- hexdump = lldp_private_8023_print(tptr);
- break;
- case OUI_TIA:
- hexdump = lldp_private_tia_print(tptr, tlv_len);
- break;
- default:
- hexdump = TRUE;
- break;
+ if (tlv_len < 2) {
+ goto trunc;
}
+ printf(": TTL %us", EXTRACT_16BITS(tptr));
+ }
+ break;
+
+ case LLDP_PORT_DESCR_TLV:
+ if (vflag) {
+ printf(": ");
+ safeputs((const char *)tptr, tlv_len);
+ }
+ break;
+
+ case LLDP_SYSTEM_NAME_TLV:
+ /*
+ * The system name is also print in non-verbose mode
+ * similar to the CDP printer.
+ */
+ if (vflag) {
+ printf(": ");
+ safeputs((const char *)tptr, tlv_len);
+ } else {
+ printf("LLDP, name ");
+ safeputs((const char *)tptr, tlv_len);
+ printf(", length %u", len);
+ }
+ break;
+
+ case LLDP_SYSTEM_DESCR_TLV:
+ if (vflag) {
+ printf("\n\t ");
+ safeputs((const char *)tptr, tlv_len);
}
break;
case LLDP_SYSTEM_CAP_TLV:
if (vflag) {
+ /*
+ * XXX - IEEE Std 802.1AB-2009 says the first octet
+ * if a chassis ID subtype, with the system
+ * capabilities and enabled capabilities following
+ * it.
+ */
+ if (tlv_len < 4) {
+ goto trunc;
+ }
cap = EXTRACT_16BITS(tptr);
ena_cap = EXTRACT_16BITS(tptr+2);
printf("\n\t System Capabilities [%s] (0x%04x)",
@@ -1075,9 +1361,37 @@ lldp_print(register const u_char *pptr, register u_int len) {
case LLDP_MGMT_ADDR_TLV:
if (vflag) {
- if (!lldp_mgmt_addr_tlv_print(tptr, tlen)) {
+ if (!lldp_mgmt_addr_tlv_print(tptr, tlv_len)) {
+ goto trunc;
+ }
+ }
+ break;
+
+ case LLDP_PRIVATE_TLV:
+ if (vflag) {
+ if (tlv_len < 3) {
goto trunc;
}
+ oui = EXTRACT_24BITS(tptr);
+ printf(": OUI %s (0x%06x)", tok2str(oui_values, "Unknown", oui), oui);
+
+ switch (oui) {
+ case OUI_IEEE_8021_PRIVATE:
+ hexdump = lldp_private_8021_print(tptr, tlv_len);
+ break;
+ case OUI_IEEE_8023_PRIVATE:
+ hexdump = lldp_private_8023_print(tptr, tlv_len);
+ break;
+ case OUI_TIA:
+ hexdump = lldp_private_tia_print(tptr, tlv_len);
+ break;
+ case OUI_DCBX:
+ hexdump = lldp_private_dcbx_print(tptr, tlv_len);
+ break;
+ default:
+ hexdump = TRUE;
+ break;
+ }
}
break;
diff --git a/print-lmp.c b/print-lmp.c
index 556db173e49b..e09b89fc22ed 100644
--- a/print-lmp.c
+++ b/print-lmp.c
@@ -871,7 +871,7 @@ lmp_print(register const u_char *pptr, register u_int len) {
}
/* do we want to see an additionally hexdump ? */
if (vflag > 1 || hexdump==TRUE)
- print_unknown_data(tptr+sizeof(sizeof(struct lmp_object_header)),"\n\t ",
+ print_unknown_data(tptr+sizeof(struct lmp_object_header),"\n\t ",
lmp_obj_len-sizeof(struct lmp_object_header));
tptr+=lmp_obj_len;
diff --git a/print-lspping.c b/print-lspping.c
index 6958bdac7e73..2ca57fb05cf9 100644
--- a/print-lspping.c
+++ b/print-lspping.c
@@ -878,7 +878,7 @@ lspping_print(register const u_char *pptr, register u_int len) {
}
/* do we want to see an additionally tlv hexdump ? */
if (vflag > 1 || tlv_hexdump==TRUE)
- print_unknown_data(tptr+sizeof(sizeof(struct lspping_tlv_header)),"\n\t ",
+ print_unknown_data(tptr+sizeof(struct lspping_tlv_header),"\n\t ",
lspping_tlv_len);
diff --git a/print-mobile.c b/print-mobile.c
index 816ffd6e6585..de4eab1dce3b 100644
--- a/print-mobile.c
+++ b/print-mobile.c
@@ -72,6 +72,7 @@ mobile_print(const u_char *bp, u_int length)
{
const u_char *cp = bp +8 ;
const struct mobile_ip *mob;
+ struct cksum_vec vec[1];
u_short proto,crc;
u_char osp =0; /* old source address present */
@@ -101,7 +102,9 @@ mobile_print(const u_char *bp, u_int length)
(void)printf("> %s ",ipaddr_string(&mob->odst));
(void)printf("(oproto=%d)",proto>>8);
}
- if (in_cksum((u_short *)mob, osp ? 12 : 8, 0)!=0) {
+ vec[0].ptr = (const u_int8_t *)(void *)mob;
+ vec[0].len = osp ? 12 : 8;
+ if (in_cksum(vec, 1)!=0) {
(void)printf(" (bad checksum %d)",crc);
}
diff --git a/print-mpls.c b/print-mpls.c
index c6b0814ffefc..d97cce5278b4 100644
--- a/print-mpls.c
+++ b/print-mpls.c
@@ -54,6 +54,13 @@ static const char *mpls_labelname[] = {
/*15*/ "rsvd",
};
+enum mpls_packet_type {
+ PT_UNKNOWN,
+ PT_IPV4,
+ PT_IPV6,
+ PT_OSI
+};
+
/*
* RFC3032: MPLS label stack encoding
*/
@@ -62,7 +69,8 @@ mpls_print(const u_char *bp, u_int length)
{
const u_char *p;
u_int32_t label_entry;
- u_int16_t label_stack_depth = 0;
+ u_int16_t label_stack_depth = 0;
+ enum mpls_packet_type pt = PT_UNKNOWN;
p = bp;
printf("MPLS");
@@ -70,9 +78,9 @@ mpls_print(const u_char *bp, u_int length)
TCHECK2(*p, sizeof(label_entry));
label_entry = EXTRACT_32BITS(p);
printf("%s(label %u",
- label_stack_depth ? "\n\t" : " ",
- MPLS_LABEL(label_entry));
- label_stack_depth++;
+ (label_stack_depth && vflag) ? "\n\t" : " ",
+ MPLS_LABEL(label_entry));
+ label_stack_depth++;
if (vflag &&
MPLS_LABEL(label_entry) < sizeof(mpls_labelname) / sizeof(mpls_labelname[0]))
printf(" (%s)", mpls_labelname[MPLS_LABEL(label_entry)]);
@@ -84,97 +92,127 @@ mpls_print(const u_char *bp, u_int length)
p += sizeof(label_entry);
} while (!MPLS_STACK(label_entry));
+ /*
+ * Try to figure out the packet type.
+ */
switch (MPLS_LABEL(label_entry)) {
+
case 0: /* IPv4 explicit NULL label */
- case 3: /* IPv4 implicit NULL label */
- if (vflag>0) {
- printf("\n\t");
- ip_print(gndo, p, length - (p - bp));
- }
- else printf(", IP, length: %u",length);
+ case 3: /* IPv4 implicit NULL label */
+ pt = PT_IPV4;
break;
-#ifdef INET6
+
case 2: /* IPv6 explicit NULL label */
- if (vflag>0) {
- printf("\n\t");
- ip6_print(p, length - (p - bp));
- }
- else printf(", IPv6, length: %u",length);
+ pt = PT_IPV6;
break;
-#endif
+
default:
/*
* Generally there's no indication of protocol in MPLS label
- * encoding, however draft-hsmit-isis-aal5mux-00.txt describes
- * a technique that looks at the first payload byte if the BOS (bottom of stack)
- * bit is set and tries to determine the network layer protocol
- * 0x45-0x4f is IPv4
- * 0x60-0x6f is IPv6
- * 0x81-0x83 is OSI (CLNP,ES-IS,IS-IS)
- * this technique is sometimes known as NULL encapsulation
- * and decoding is particularly useful for control-plane traffic [BGP]
- * which cisco by default sends MPLS encapsulated
+ * encoding.
+ *
+ * However, draft-hsmit-isis-aal5mux-00.txt describes a
+ * technique for encapsulating IS-IS and IP traffic on the
+ * same ATM virtual circuit; you look at the first payload
+ * byte to determine the network layer protocol, based on
+ * the fact that
+ *
+ * 1) the first byte of an IP header is 0x45-0x4f
+ * for IPv4 and 0x60-0x6f for IPv6;
+ *
+ * 2) the first byte of an OSI CLNP packet is 0x81,
+ * the first byte of an OSI ES-IS packet is 0x82,
+ * and the first byte of an OSI IS-IS packet is
+ * 0x83;
+ *
+ * so the network layer protocol can be inferred from the
+ * first byte of the packet, if the protocol is one of the
+ * ones listed above.
+ *
+ * Cisco sends control-plane traffic MPLS-encapsulated in
+ * this fashion.
*/
+ switch(*p) {
+
+ case 0x45:
+ case 0x46:
+ case 0x47:
+ case 0x48:
+ case 0x49:
+ case 0x4a:
+ case 0x4b:
+ case 0x4c:
+ case 0x4d:
+ case 0x4e:
+ case 0x4f:
+ pt = PT_IPV4;
+ break;
+
+ case 0x60:
+ case 0x61:
+ case 0x62:
+ case 0x63:
+ case 0x64:
+ case 0x65:
+ case 0x66:
+ case 0x67:
+ case 0x68:
+ case 0x69:
+ case 0x6a:
+ case 0x6b:
+ case 0x6c:
+ case 0x6d:
+ case 0x6e:
+ case 0x6f:
+ pt = PT_IPV6;
+ break;
+
+ case 0x81:
+ case 0x82:
+ case 0x83:
+ pt = PT_OSI;
+ break;
+
+ default:
+ /* ok bail out - we did not figure out what it is*/
+ break;
+ }
+ }
- if (MPLS_STACK(label_entry)) { /* only do this if the stack bit is set */
- switch(*p) {
- case 0x45:
- case 0x46:
- case 0x47:
- case 0x48:
- case 0x49:
- case 0x4a:
- case 0x4b:
- case 0x4c:
- case 0x4d:
- case 0x4e:
- case 0x4f:
- if (vflag>0) {
- printf("\n\t");
- ip_print(gndo, p, length - (p - bp));
- }
- else printf(", IP, length: %u",length);
- break;
+ /*
+ * Print the payload.
+ */
+ if (pt == PT_UNKNOWN) {
+ if (!suppress_default_print)
+ default_print(p, length - (p - bp));
+ return;
+ }
+ if (vflag)
+ printf("\n\t");
+ else
+ printf(" ");
+ switch (pt) {
+
+ case PT_IPV4:
+ ip_print(gndo, p, length - (p - bp));
+ break;
+
+ case PT_IPV6:
#ifdef INET6
- case 0x60:
- case 0x61:
- case 0x62:
- case 0x63:
- case 0x64:
- case 0x65:
- case 0x66:
- case 0x67:
- case 0x68:
- case 0x69:
- case 0x6a:
- case 0x6b:
- case 0x6c:
- case 0x6d:
- case 0x6e:
- case 0x6f:
- if (vflag>0) {
- printf("\n\t");
- ip6_print(p, length - (p - bp));
- }
- else printf(", IPv6, length: %u",length);
- break;
+ ip6_print(gndo, p, length - (p - bp));
+#else
+ printf("IPv6, length: %u", length);
#endif
- case 0x81:
- case 0x82:
- case 0x83:
- if (vflag>0) {
- printf("\n\t");
- isoclns_print(p, length - (p - bp), length - (p - bp));
- }
- else printf(", OSI, length: %u",length);
- break;
- default:
- /* ok bail out - we did not figure out what it is*/
- break;
- }
- }
- return;
+ break;
+
+ case PT_OSI:
+ isoclns_print(p, length - (p - bp), length - (p - bp));
+ break;
+
+ default:
+ break;
}
+ return;
trunc:
printf("[|MPLS]");
diff --git a/print-null.c b/print-null.c
index a69997da12e3..8eabe5dd994a 100644
--- a/print-null.c
+++ b/print-null.c
@@ -125,7 +125,7 @@ null_if_print(const struct pcap_pkthdr *h, const u_char *p)
case BSD_AFNUM_INET6_BSD:
case BSD_AFNUM_INET6_FREEBSD:
case BSD_AFNUM_INET6_DARWIN:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
diff --git a/print-ospf.c b/print-ospf.c
index 983c14f40e12..f8ff4aeac5b0 100644
--- a/print-ospf.c
+++ b/print-ospf.c
@@ -197,7 +197,7 @@ static int ospf_decode_v2(const struct ospfhdr *, const u_char *);
static int ospf_decode_lls(const struct ospfhdr *, register u_int);
int
-ospf_print_grace_lsa (u_int8_t *tptr, u_int ls_length) {
+ospf_print_grace_lsa (const u_int8_t *tptr, u_int ls_length) {
u_int tlv_type, tlv_length;
@@ -279,7 +279,7 @@ trunc:
}
int
-ospf_print_te_lsa (u_int8_t *tptr, u_int ls_length) {
+ospf_print_te_lsa (const u_int8_t *tptr, u_int ls_length) {
u_int tlv_type, tlv_length, subtlv_type, subtlv_length;
u_int priority_level, te_class, count_srlg;
@@ -1028,7 +1028,7 @@ ospf_decode_v2(register const struct ospfhdr *op,
lsap = op->ospf_lsu.lsu_lsa;
TCHECK(op->ospf_lsu.lsu_count);
lsa_count_max = EXTRACT_32BITS(&op->ospf_lsu.lsu_count);
- printf(", %d LSA%s",lsa_count_max, lsa_count_max > 1 ? "s" : "");
+ printf(", %d LSA%s",lsa_count_max, PLURAL_SUFFIX(lsa_count_max));
for (lsa_count=1;lsa_count <= lsa_count_max;lsa_count++) {
printf("\n\t LSA #%u",lsa_count);
lsap = (const struct lsa *)ospf_print_lsa(lsap);
diff --git a/print-pflog.c b/print-pflog.c
index 0cacabfc6e44..ac325f4b0e63 100644
--- a/print-pflog.c
+++ b/print-pflog.c
@@ -162,7 +162,7 @@ pflog_if_print(const struct pcap_pkthdr *h, register const u_char *p)
#if OPENBSD_AF_INET6 != AF_INET6
case OPENBSD_AF_INET6: /* XXX: read pcap files */
#endif
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
diff --git a/print-pgm.c b/print-pgm.c
index 73a42914c7bd..2d4d7449c91b 100644
--- a/print-pgm.c
+++ b/print-pgm.c
@@ -72,6 +72,12 @@ struct pgm_nak {
/* ... options */
};
+struct pgm_ack {
+ u_int32_t pgma_rx_max_seq;
+ u_int32_t pgma_bitmap;
+ /* ... options */
+};
+
struct pgm_poll {
u_int32_t pgmp_seq;
u_int16_t pgmp_round;
@@ -133,6 +139,9 @@ typedef enum _pgm_type {
#define PGM_OPT_RST 0x0F
#define PGM_OPT_CR 0x10
#define PGM_OPT_CRQST 0x11
+
+#define PGM_OPT_PGMCC_DATA 0x12
+#define PGM_OPT_PGMCC_FEEDBACK 0x13
#define PGM_OPT_MASK 0x7f
@@ -446,6 +455,17 @@ pgm_print(register const u_char *bp, register u_int length,
break;
}
+ case PGM_ACK: {
+ struct pgm_ack *ack;
+
+ ack = (struct pgm_ack *)(pgm + 1);
+ TCHECK(*ack);
+ (void)printf("ACK seq %u",
+ EXTRACT_32BITS(&ack->pgma_rx_max_seq));
+ bp = (u_char *) (ack + 1);
+ break;
+ }
+
case PGM_SPMR:
(void)printf("SPMR");
break;
@@ -736,6 +756,74 @@ pgm_print(register const u_char *bp, register u_int length,
opts_len -= 4;
break;
+ case PGM_OPT_PGMCC_DATA:
+ flags1 = *bp++;
+ flags2 = *bp++;
+ offset = EXTRACT_32BITS(bp);
+ bp += sizeof(u_int32_t);
+ switch (EXTRACT_16BITS(bp)) {
+ case AFI_IP:
+ addr_size = sizeof(struct in_addr);
+ nla_af = AF_INET;
+ break;
+#ifdef INET6
+ case AFI_IP6:
+ addr_size = sizeof(struct in6_addr);
+ nla_af = AF_INET6;
+ break;
+#endif
+ default:
+ goto trunc;
+ break;
+ }
+ bp += (2 * sizeof(u_int16_t));
+ if (opt_len != 12 + addr_size) {
+ (void)printf("[Bad OPT_PGMCC_DATA option, length %u != 12 + address size]", opt_len);
+ return;
+ }
+ TCHECK2(*bp, addr_size);
+ nla = bp;
+ bp += addr_size;
+
+ inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
+ (void)printf(" PGMCC DATA %u %s", offset, (char*)nla);
+ opts_len -= 16;
+ break;
+
+ case PGM_OPT_PGMCC_FEEDBACK:
+ flags1 = *bp++;
+ flags2 = *bp++;
+ offset = EXTRACT_32BITS(bp);
+ bp += sizeof(u_int32_t);
+ switch (EXTRACT_16BITS(bp)) {
+ case AFI_IP:
+ addr_size = sizeof(struct in_addr);
+ nla_af = AF_INET;
+ break;
+#ifdef INET6
+ case AFI_IP6:
+ addr_size = sizeof(struct in6_addr);
+ nla_af = AF_INET6;
+ break;
+#endif
+ default:
+ goto trunc;
+ break;
+ }
+ bp += (2 * sizeof(u_int16_t));
+ if (opt_len != 12 + addr_size) {
+ (void)printf("[Bad OPT_PGMCC_FEEDBACK option, length %u != 12 + address size]", opt_len);
+ return;
+ }
+ TCHECK2(*bp, addr_size);
+ nla = bp;
+ bp += addr_size;
+
+ inet_ntop(nla_af, nla, nla_buf, sizeof(nla_buf));
+ (void)printf(" PGMCC FEEDBACK %u %s", offset, (char*)nla);
+ opts_len -= 16;
+ break;
+
default:
(void)printf(" OPT_%02X [%d] ", opt_type, opt_len);
bp += opt_len;
diff --git a/print-pim.c b/print-pim.c
index f9fd0c69f553..0f558af13573 100644
--- a/print-pim.c
+++ b/print-pim.c
@@ -29,7 +29,15 @@ static const char rcsid[] _U_ =
#endif
#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
#include "interface.h"
+#include "addrtoname.h"
+#include "extract.h"
+
+#include "ip.h"
#define PIMV2_TYPE_HELLO 0
#define PIMV2_TYPE_REGISTER 1
@@ -108,16 +116,6 @@ struct pim {
u_short pim_cksum; /* IP style check sum */
};
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "interface.h"
-#include "addrtoname.h"
-#include "extract.h"
-
-#include "ip.h"
-
static void pimv2_print(register const u_char *bp, register u_int len, u_int cksum);
static void
@@ -399,8 +397,12 @@ cisco_autorp_print(register const u_char *bp, register u_int len)
TCHECK2(bp[0], 6);
(void)printf("%c%s%s/%d", s, bp[0] & 1 ? "!" : "",
ipaddr_string(&bp[2]), bp[1]);
- if (bp[0] & 0xfe)
- (void)printf("[rsvd=0x%02x]", bp[0] & 0xfe);
+ if (bp[0] & 0x02) {
+ (void)printf(" bidir");
+ }
+ if (bp[0] & 0xfc) {
+ (void)printf("[rsvd=0x%02x]", bp[0] & 0xfc);
+ }
s = ',';
bp += 6; len -= 6;
}
@@ -768,7 +770,7 @@ pimv2_print(register const u_char *bp, register u_int len, u_int cksum)
break;
#ifdef INET6
case 6: /* IPv6 */
- ip6_print(bp, len);
+ ip6_print(gndo, bp, len);
break;
#endif
default:
diff --git a/print-ppi.c b/print-ppi.c
new file mode 100644
index 000000000000..38873c84c5ae
--- /dev/null
+++ b/print-ppi.c
@@ -0,0 +1,104 @@
+/*
+ * Oracle
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <pcap.h>
+
+#include "netdissect.h"
+#include "interface.h"
+#include "extract.h"
+#include "ppi.h"
+
+#ifdef DLT_PPI
+
+static inline void
+ppi_header_print(struct netdissect_options *ndo, const u_char *bp, u_int length)
+{
+ const ppi_header_t *hdr;
+ u_int32_t dlt;
+ u_int16_t len;
+
+ hdr = (const ppi_header_t *)bp;
+
+ len = EXTRACT_16BITS(&hdr->ppi_len);
+ dlt = EXTRACT_32BITS(&hdr->ppi_dlt);
+
+ if (!ndo->ndo_qflag) {
+ ND_PRINT((ndo,", V.%d DLT %s (%d) len %d", hdr->ppi_ver,
+ pcap_datalink_val_to_name(dlt), dlt,
+ len));
+ } else {
+ ND_PRINT((ndo,", %s", pcap_datalink_val_to_name(dlt)));
+ }
+
+ ND_PRINT((ndo, ", length %u: ", length));
+}
+
+static void
+ppi_print(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ if_ndo_printer ndo_printer;
+ if_printer printer;
+ ppi_header_t *hdr;
+ u_int caplen = h->caplen;
+ u_int length = h->len;
+ u_int32_t dlt;
+
+ if (caplen < sizeof(ppi_header_t)) {
+ ND_PRINT((ndo, "[|ppi]"));
+ return;
+ }
+ hdr = (ppi_header_t *)p;
+ dlt = EXTRACT_32BITS(&hdr->ppi_dlt);
+
+ if (ndo->ndo_eflag)
+ ppi_header_print(ndo, p, length);
+
+ length -= sizeof(ppi_header_t);
+ caplen -= sizeof(ppi_header_t);
+ p += sizeof(ppi_header_t);
+
+ if ((printer = lookup_printer(dlt)) != NULL) {
+ printer(h, p);
+ } else if ((ndo_printer = lookup_ndo_printer(dlt)) != NULL) {
+ ndo_printer(ndo, h, p);
+ } else {
+ if (!ndo->ndo_eflag)
+ ppi_header_print(ndo, (u_char *)hdr,
+ length + sizeof(ppi_header_t));
+
+ if (!ndo->ndo_suppress_default_print)
+ ndo->ndo_default_print(ndo, p, caplen);
+ }
+}
+
+/*
+ * This is the top level routine of the printer. 'p' points
+ * to the ether header of the packet, 'h->ts' is the timestamp,
+ * 'h->len' is the length of the packet off the wire, and 'h->caplen'
+ * is the number of bytes actually captured.
+ */
+u_int
+ppi_if_print(struct netdissect_options *ndo,
+ const struct pcap_pkthdr *h, const u_char *p)
+{
+ ppi_print(ndo, h, p);
+
+ return (sizeof(ppi_header_t));
+}
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 8
+ * End:
+ */
+
+#endif /* DLT_PPI */
diff --git a/print-ppp.c b/print-ppp.c
index 7f231ead9cdc..ea8e00b244f9 100644
--- a/print-ppp.c
+++ b/print-ppp.c
@@ -1303,11 +1303,11 @@ ppp_hdlc(const u_char *p, int length)
goto cleanup;
#ifdef INET6
case PPP_IPV6:
- ip6_print(b+1, t - b - 1);
- goto cleanup;
+ ip6_print(gndo, b+1, t - b - 1);
+ goto cleanup;
#endif
default: /* no luck - try next guess */
- break;
+ break;
}
proto = EXTRACT_16BITS(b); /* next guess - load two octets */
@@ -1368,7 +1368,7 @@ handle_ppp(u_int proto, const u_char *p, int length)
#ifdef INET6
case ETHERTYPE_IPV6: /*XXX*/
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case ETHERTYPE_IPX: /*XXX*/
@@ -1675,11 +1675,11 @@ ppp_bsdos_if_print(const struct pcap_pkthdr *h _U_, register const u_char *p _U_
p += hdrlength;
switch (ptype) {
case PPP_IP:
- ip_print(p, length);
+ ip_print(gndo, p, length);
break;
#ifdef INET6
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case PPP_MPLS_UCAST:
@@ -1694,11 +1694,11 @@ ppp_bsdos_if_print(const struct pcap_pkthdr *h _U_, register const u_char *p _U_
p += hdrlength;
switch (ptype) {
case PPP_IP:
- ip_print(p, length);
+ ip_print(gndo, p, length);
break;
#ifdef INET6
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case PPP_MPLS_UCAST:
@@ -1730,12 +1730,12 @@ ppp_bsdos_if_print(const struct pcap_pkthdr *h _U_, register const u_char *p _U_
break;
#ifdef INET6
case PPP_IPV6:
- ip6_print(p, length);
+ ip6_print(gndo, p, length);
break;
#endif
case PPP_MPLS_UCAST:
case PPP_MPLS_MCAST:
- mpls_print(p, length);
+ mpls_print(gndo, p, length);
break;
default:
printf("%s ", tok2str(ppptype2str, "unknown PPP protocol (0x%04x)", ptype));
diff --git a/print-rpki-rtr.c b/print-rpki-rtr.c
new file mode 100644
index 000000000000..8679759ef8df
--- /dev/null
+++ b/print-rpki-rtr.c
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) 1998-2011 The TCPDUMP project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that: (1) source code
+ * distributions retain the above copyright notice and this paragraph
+ * in its entirety, and (2) distributions including binary code include
+ * the above copyright notice and this paragraph in its entirety in
+ * the documentation or other materials provided with the distribution.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+ * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE.
+ *
+ * support for the The RPKI/Router Protocol Protocol as per draft-ietf-sidr-rpki-rtr-12
+ *
+ * Original code by Hannes Gredler (hannes@juniper.net)
+ */
+
+#ifndef lint
+static const char rcsid[] _U_ =
+"@(#) $Header: /tcpdump/master/tcpdump/print-rpki_rtr.c,v 1.10 2008-03-20 09:30:56 hannes Exp $";
+#endif
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <tcpdump-stdinc.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "interface.h"
+#include "extract.h"
+#include "addrtoname.h"
+
+/*
+ * RPKI/Router PDU header
+ *
+ * Here's what the PDU header looks like.
+ * The length does include the version and length fields.
+ */
+typedef struct rpki_rtr_pdu_ {
+ u_char version; /* Version number */
+ u_char pdu_type; /* PDU type */
+ union {
+ u_char cache_nonce[2]; /* Cache Nonce */
+ u_char error_code[2]; /* Error code */
+ } u;
+ u_char length[4];
+} rpki_rtr_pdu;
+#define RPKI_RTR_PDU_OVERHEAD (offsetof(rpki_rtr_pdu, rpki_rtr_pdu_msg))
+
+/*
+ * IPv4 Prefix PDU.
+ */
+typedef struct rpki_rtr_pdu_ipv4_prefix_ {
+ rpki_rtr_pdu pdu_header;
+ u_char flags;
+ u_char prefix_length;
+ u_char max_length;
+ u_char zero;
+ u_char prefix[4];
+ u_char as[4];
+} rpki_rtr_pdu_ipv4_prefix;
+
+/*
+ * IPv6 Prefix PDU.
+ */
+typedef struct rpki_rtr_pdu_ipv6_prefix_ {
+ rpki_rtr_pdu pdu_header;
+ u_char flags;
+ u_char prefix_length;
+ u_char max_length;
+ u_char zero;
+ u_char prefix[16];
+ u_char as[4];
+} rpki_rtr_pdu_ipv6_prefix;
+
+/*
+ * Error report PDU.
+ */
+typedef struct rpki_rtr_pdu_error_report_ {
+ rpki_rtr_pdu pdu_header;
+ u_char encapsulated_pdu_length[4]; /* Encapsulated PDU length */
+} rpki_rtr_pdu_error_report;
+
+/*
+ * PDU type codes
+ */
+#define RPKI_RTR_SERIAL_NOTIFY_PDU 0
+#define RPKI_RTR_SERIAL_QUERY_PDU 1
+#define RPKI_RTR_RESET_QUERY_PDU 2
+#define RPKI_RTR_CACHE_RESPONSE_PDU 3
+#define RPKI_RTR_IPV4_PREFIX_PDU 4
+#define RPKI_RTR_IPV6_PREFIX_PDU 6
+#define RPKI_RTR_END_OF_DATA_PDU 7
+#define RPKI_RTR_CACHE_RESET_PDU 8
+#define RPKI_RTR_ERROR_REPORT_PDU 10
+
+static const struct tok rpki_rtr_pdu_values[] = {
+ { RPKI_RTR_SERIAL_NOTIFY_PDU, "Serial Notify" },
+ { RPKI_RTR_SERIAL_QUERY_PDU, "Serial Query" },
+ { RPKI_RTR_RESET_QUERY_PDU, "Reset Query" },
+ { RPKI_RTR_CACHE_RESPONSE_PDU, "Cache Response" },
+ { RPKI_RTR_IPV4_PREFIX_PDU, "IPV4 Prefix" },
+ { RPKI_RTR_IPV6_PREFIX_PDU, "IPV6 Prefix" },
+ { RPKI_RTR_END_OF_DATA_PDU, "End of Data" },
+ { RPKI_RTR_CACHE_RESET_PDU, "Cache Reset" },
+ { RPKI_RTR_ERROR_REPORT_PDU, "Error Report" },
+ { 0, NULL}
+};
+
+static const struct tok rpki_rtr_error_codes[] = {
+ { 0, "Corrupt Data" },
+ { 1, "Internal Error" },
+ { 2, "No Data Available" },
+ { 3, "Invalid Request" },
+ { 4, "Unsupported Protocol Version" },
+ { 5, "Unsupported PDU Type" },
+ { 6, "Withdrawal of Unknown Record" },
+ { 7, "Duplicate Announcement Received" },
+ { 0, NULL}
+};
+
+/*
+ * Build a identation string for a given identation level.
+ * XXX this should be really in util.c
+ */
+static char *
+indent_string (u_int indent)
+{
+ static char buf[20];
+ u_int idx;
+
+ idx = 0;
+ buf[idx] = '\0';
+
+ /*
+ * Does the static buffer fit ?
+ */
+ if (sizeof(buf) < ((indent/8) + (indent %8) + 2)) {
+ return buf;
+ }
+
+ /*
+ * Heading newline.
+ */
+ buf[idx] = '\n';
+ idx++;
+
+ while (indent >= 8) {
+ buf[idx] = '\t';
+ idx++;
+ indent -= 8;
+ }
+
+ while (indent > 0) {
+ buf[idx] = ' ';
+ idx++;
+ indent--;
+ }
+
+ /*
+ * Trailing zero.
+ */
+ buf[idx] = '\0';
+
+ return buf;
+}
+
+/*
+ * Print a single PDU.
+ */
+static void
+rpki_rtr_pdu_print (const u_char *tptr, u_int indent)
+{
+ const rpki_rtr_pdu *pdu_header;
+ u_int pdu_type, pdu_len, hexdump;
+ const u_char *msg;
+
+ pdu_header = (rpki_rtr_pdu *)tptr;
+ pdu_type = pdu_header->pdu_type;
+ pdu_len = EXTRACT_32BITS(pdu_header->length);
+ hexdump = FALSE;
+
+ printf("%sRPKI-RTRv%u, %s PDU (%u), length: %u",
+ indent_string(8),
+ pdu_header->version,
+ tok2str(rpki_rtr_pdu_values, "Unknown", pdu_type),
+ pdu_type, pdu_len);
+
+ switch (pdu_type) {
+
+ /*
+ * The following PDUs share the message format.
+ */
+ case RPKI_RTR_SERIAL_NOTIFY_PDU:
+ case RPKI_RTR_SERIAL_QUERY_PDU:
+ case RPKI_RTR_END_OF_DATA_PDU:
+ msg = (const u_char *)(pdu_header + 1);
+ printf("%sCache-Nonce: 0x%04x, Serial: %u",
+ indent_string(indent+2),
+ EXTRACT_16BITS(pdu_header->u.cache_nonce),
+ EXTRACT_32BITS(msg));
+ break;
+
+ /*
+ * The following PDUs share the message format.
+ */
+ case RPKI_RTR_RESET_QUERY_PDU:
+ case RPKI_RTR_CACHE_RESET_PDU:
+
+ /*
+ * Zero payload PDUs.
+ */
+ break;
+
+ case RPKI_RTR_CACHE_RESPONSE_PDU:
+ printf("%sCache-Nonce: 0x%04x",
+ indent_string(indent+2),
+ EXTRACT_16BITS(pdu_header->u.cache_nonce));
+ break;
+
+ case RPKI_RTR_IPV4_PREFIX_PDU:
+ {
+ rpki_rtr_pdu_ipv4_prefix *pdu;
+
+ pdu = (rpki_rtr_pdu_ipv4_prefix *)tptr;
+ printf("%sIPv4 Prefix %s/%u-%u, origin-as %u, flags 0x%02x",
+ indent_string(indent+2),
+ ipaddr_string(pdu->prefix),
+ pdu->prefix_length, pdu->max_length,
+ EXTRACT_32BITS(pdu->as), pdu->flags);
+ }
+ break;
+
+#ifdef INET6
+ case RPKI_RTR_IPV6_PREFIX_PDU:
+ {
+ rpki_rtr_pdu_ipv6_prefix *pdu;
+
+ pdu = (rpki_rtr_pdu_ipv6_prefix *)tptr;
+ printf("%sIPv6 Prefix %s/%u-%u, origin-as %u, flags 0x%02x",
+ indent_string(indent+2),
+ ip6addr_string(pdu->prefix),
+ pdu->prefix_length, pdu->max_length,
+ EXTRACT_32BITS(pdu->as), pdu->flags);
+ }
+ break;
+#endif
+
+ case RPKI_RTR_ERROR_REPORT_PDU:
+ {
+ rpki_rtr_pdu_error_report *pdu;
+ u_int encapsulated_pdu_length, text_length, tlen, error_code;
+ u_char buf[80];
+
+ pdu = (rpki_rtr_pdu_error_report *)tptr;
+ encapsulated_pdu_length = EXTRACT_32BITS(pdu->encapsulated_pdu_length);
+ tlen = pdu_len;
+
+ error_code = EXTRACT_16BITS(pdu->pdu_header.u.error_code);
+ printf("%sError code: %s (%u), Encapsulated PDU length: %u",
+ indent_string(indent+2),
+ tok2str(rpki_rtr_error_codes, "Unknown", error_code),
+ error_code, encapsulated_pdu_length);
+
+ tptr += sizeof(*pdu);
+ tlen -= sizeof(*pdu);
+
+ /*
+ * Recurse if there is an encapsulated PDU.
+ */
+ if (encapsulated_pdu_length &&
+ (encapsulated_pdu_length <= tlen)) {
+ printf("%s-----encapsulated PDU-----", indent_string(indent+4));
+ rpki_rtr_pdu_print(tptr, indent+2);
+ }
+
+ tptr += encapsulated_pdu_length;
+ tlen -= encapsulated_pdu_length;
+
+ /*
+ * Extract, trail-zero and print the Error message.
+ */
+ text_length = 0;
+ if (tlen > 4) {
+ text_length = EXTRACT_32BITS(tptr);
+ tptr += 4;
+ tlen -= 4;
+ }
+ if (text_length && (text_length <= tlen )) {
+ memcpy(buf, tptr, MIN(sizeof(buf)-1, text_length));
+ buf[text_length] = '\0';
+ printf("%sError text: %s", indent_string(indent+2), buf);
+ }
+ }
+ break;
+
+ default:
+
+ /*
+ * Unknown data, please hexdump.
+ */
+ hexdump = TRUE;
+ }
+
+ /* do we also want to see a hex dump ? */
+ if (vflag > 1 || (vflag && hexdump)) {
+ print_unknown_data(tptr,"\n\t ", pdu_len);
+ }
+}
+
+void
+rpki_rtr_print(register const u_char *pptr, register u_int len) {
+
+ u_int tlen, pdu_type, pdu_len;
+ const u_char *tptr;
+ const rpki_rtr_pdu *pdu_header;
+
+ tptr = pptr;
+ tlen = len;
+
+ if (!vflag) {
+ printf(", RPKI-RTR");
+ return;
+ }
+
+ while (tlen >= sizeof(rpki_rtr_pdu)) {
+
+ TCHECK2(*tptr, sizeof(rpki_rtr_pdu));
+
+ pdu_header = (rpki_rtr_pdu *)tptr;
+ pdu_type = pdu_header->pdu_type;
+ pdu_len = EXTRACT_32BITS(pdu_header->length);
+
+ /* infinite loop check */
+ if (!pdu_type || !pdu_len) {
+ break;
+ }
+
+ TCHECK2(*tptr, pdu_len);
+ if (tlen < pdu_len) {
+ goto trunc;
+ }
+
+ /*
+ * Print the PDU.
+ */
+ rpki_rtr_pdu_print(tptr, 8);
+
+ tlen -= pdu_len;
+ tptr += pdu_len;
+ }
+ return;
+ trunc:
+ printf("\n\t[|RPKI-RTR]");
+}
+
+/*
+ * Local Variables:
+ * c-style: whitesmith
+ * c-basic-offset: 4
+ * End:
+ */
diff --git a/print-rrcp.c b/print-rrcp.c
index 961fb87309c6..64cb7dec312d 100644
--- a/print-rrcp.c
+++ b/print-rrcp.c
@@ -111,8 +111,8 @@ rrcp_print(netdissect_options *ndo,
if (rrcp_opcode==1 || rrcp_opcode==2){
ND_TCHECK2(*(rrcp + RRCP_REG_ADDR_OFFSET), 6);
ND_PRINT((ndo, " addr=0x%04x, data=0x%08x",
- EXTRACT_16BITS(rrcp + RRCP_REG_ADDR_OFFSET),
- EXTRACT_32BITS(rrcp + RRCP_REG_DATA_OFFSET)));
+ EXTRACT_LE_16BITS(rrcp + RRCP_REG_ADDR_OFFSET),
+ EXTRACT_LE_32BITS(rrcp + RRCP_REG_DATA_OFFSET)));
}
if (rrcp_proto==1){
ND_TCHECK2(*(rrcp + RRCP_AUTHKEY_OFFSET), 2);
diff --git a/print-rsvp.c b/print-rsvp.c
index 6aa2f6d71bd6..1c76dcbbf6a9 100644
--- a/print-rsvp.c
+++ b/print-rsvp.c
@@ -1790,7 +1790,7 @@ _U_
}
/* do we also want to see a hex dump ? */
if (vflag > 1 || hexdump==TRUE)
- print_unknown_data(tptr+sizeof(sizeof(struct rsvp_object_header)),"\n\t ", /* FIXME indentation */
+ print_unknown_data(tptr+sizeof(struct rsvp_object_header),"\n\t ", /* FIXME indentation */
rsvp_obj_len-sizeof(struct rsvp_object_header));
tptr+=rsvp_obj_len;
diff --git a/print-sctp.c b/print-sctp.c
index 0229396de66d..a8990a9ae005 100644
--- a/print-sctp.c
+++ b/print-sctp.c
@@ -59,9 +59,9 @@ static const char rcsid[] _U_ =
#include "ip6.h"
#endif
-#define CHAN_HP 6700
-#define CHAN_MP 6701
-#define CHAN_LP 6702
+#define CHAN_HP 6704
+#define CHAN_MP 6705
+#define CHAN_LP 6706
struct tok ForCES_channels[] = {
{ CHAN_HP, "ForCES HP" },
diff --git a/print-sflow.c b/print-sflow.c
index baa55300b66a..79a3fdf1d9c7 100644
--- a/print-sflow.c
+++ b/print-sflow.c
@@ -15,6 +15,8 @@
* The SFLOW protocol as per http://www.sflow.org/developers/specifications.php
*
* Original code by Carles Kishimoto <carles.kishimoto@gmail.com>
+ *
+ * Expansion and refactoring by Rick Jones <rick.jones2@hp.com>
*/
#ifndef lint
@@ -87,6 +89,18 @@ static const struct tok sflow_format_values[] = {
{ 0, NULL}
};
+struct sflow_flow_sample_t {
+ u_int8_t seqnum[4];
+ u_int8_t typesource[4];
+ u_int8_t rate[4];
+ u_int8_t pool[4];
+ u_int8_t drops[4];
+ u_int8_t in_interface[4];
+ u_int8_t out_interface[4];
+ u_int8_t records[4];
+
+};
+
struct sflow_expanded_flow_sample_t {
u_int8_t seqnum[4];
u_int8_t type[4];
@@ -156,6 +170,36 @@ struct sflow_expanded_flow_raw_t {
u_int8_t header_size[4];
};
+struct sflow_ethernet_frame_t {
+ u_int8_t length[4];
+ u_int8_t src_mac[8];
+ u_int8_t dst_mac[8];
+ u_int8_t type[4];
+};
+
+struct sflow_extended_switch_data_t {
+ u_int8_t src_vlan[4];
+ u_int8_t src_pri[4];
+ u_int8_t dst_vlan[4];
+ u_int8_t dst_pri[4];
+};
+
+struct sflow_counter_record_t {
+ u_int8_t format[4];
+ u_int8_t length[4];
+};
+
+struct sflow_flow_record_t {
+ u_int8_t format[4];
+ u_int8_t length[4];
+};
+
+struct sflow_counter_sample_t {
+ u_int8_t seqnum[4];
+ u_int8_t typesource[4];
+ u_int8_t records[4];
+};
+
struct sflow_expanded_counter_sample_t {
u_int8_t seqnum[4];
u_int8_t type[4];
@@ -259,24 +303,525 @@ struct sflow_vlan_counter_t {
u_int8_t discards[4];
};
-void
-sflow_print(const u_char *pptr, u_int len) {
+static int
+print_sflow_counter_generic(const u_char *pointer, u_int len) {
- const struct sflow_datagram_t *sflow_datagram;
- const struct sflow_sample_header *sflow_sample;
- const struct sflow_expanded_flow_sample_t *sflow_expanded_flow_sample;
- const struct sflow_expanded_flow_raw_t *sflow_flow_raw;
- const struct sflow_expanded_counter_sample_t *sflow_expanded_counter_sample;
const struct sflow_generic_counter_t *sflow_gen_counter;
+
+ if (len < sizeof(struct sflow_generic_counter_t))
+ return 1;
+
+
+ sflow_gen_counter = (const struct sflow_generic_counter_t *)pointer;
+ printf("\n\t ifindex %u, iftype %u, ifspeed %" PRIu64 ", ifdirection %u (%s)",
+ EXTRACT_32BITS(sflow_gen_counter->ifindex),
+ EXTRACT_32BITS(sflow_gen_counter->iftype),
+ EXTRACT_64BITS(sflow_gen_counter->ifspeed),
+ EXTRACT_32BITS(sflow_gen_counter->ifdirection),
+ tok2str(sflow_iface_direction_values, "Unknown",
+ EXTRACT_32BITS(sflow_gen_counter->ifdirection)));
+ printf("\n\t ifstatus %u, adminstatus: %s, operstatus: %s",
+ EXTRACT_32BITS(sflow_gen_counter->ifstatus),
+ EXTRACT_32BITS(sflow_gen_counter->ifstatus)&1 ? "up" : "down",
+ (EXTRACT_32BITS(sflow_gen_counter->ifstatus)>>1)&1 ? "up" : "down");
+ printf("\n\t In octets %" PRIu64
+ ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
+ EXTRACT_64BITS(sflow_gen_counter->ifinoctets),
+ EXTRACT_32BITS(sflow_gen_counter->ifinunicastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifinmulticastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifinbroadcastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifindiscards));
+ printf("\n\t In errors %u, unknown protos %u",
+ EXTRACT_32BITS(sflow_gen_counter->ifinerrors),
+ EXTRACT_32BITS(sflow_gen_counter->ifinunkownprotos));
+ printf("\n\t Out octets %" PRIu64
+ ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
+ EXTRACT_64BITS(sflow_gen_counter->ifoutoctets),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutunicastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutmulticastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutbroadcastpkts),
+ EXTRACT_32BITS(sflow_gen_counter->ifoutdiscards));
+ printf("\n\t Out errors %u, promisc mode %u",
+ EXTRACT_32BITS(sflow_gen_counter->ifouterrors),
+ EXTRACT_32BITS(sflow_gen_counter->ifpromiscmode));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_ethernet(const u_char *pointer, u_int len){
+
const struct sflow_ethernet_counter_t *sflow_eth_counter;
+
+ if (len < sizeof(struct sflow_ethernet_counter_t))
+ return 1;
+
+ sflow_eth_counter = (const struct sflow_ethernet_counter_t *)pointer;
+ printf("\n\t align errors %u, fcs errors %u, single collision %u, multiple collision %u, test error %u",
+ EXTRACT_32BITS(sflow_eth_counter->alignerrors),
+ EXTRACT_32BITS(sflow_eth_counter->fcserrors),
+ EXTRACT_32BITS(sflow_eth_counter->single_collision_frames),
+ EXTRACT_32BITS(sflow_eth_counter->multiple_collision_frames),
+ EXTRACT_32BITS(sflow_eth_counter->test_errors));
+ printf("\n\t deferred %u, late collision %u, excessive collision %u, mac trans error %u",
+ EXTRACT_32BITS(sflow_eth_counter->deferred_transmissions),
+ EXTRACT_32BITS(sflow_eth_counter->late_collisions),
+ EXTRACT_32BITS(sflow_eth_counter->excessive_collisions),
+ EXTRACT_32BITS(sflow_eth_counter->mac_transmit_errors));
+ printf("\n\t carrier error %u, frames too long %u, mac receive errors %u, symbol errors %u",
+ EXTRACT_32BITS(sflow_eth_counter->carrier_sense_errors),
+ EXTRACT_32BITS(sflow_eth_counter->frame_too_longs),
+ EXTRACT_32BITS(sflow_eth_counter->mac_receive_errors),
+ EXTRACT_32BITS(sflow_eth_counter->symbol_errors));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_token_ring(const u_char *pointer _U_, u_int len _U_) {
+
+ return 0;
+}
+
+static int
+print_sflow_counter_basevg(const u_char *pointer, u_int len) {
+
const struct sflow_100basevg_counter_t *sflow_100basevg_counter;
+
+ if (len < sizeof(struct sflow_100basevg_counter_t))
+ return 1;
+
+ sflow_100basevg_counter = (const struct sflow_100basevg_counter_t *)pointer;
+ printf("\n\t in high prio frames %u, in high prio octets %" PRIu64,
+ EXTRACT_32BITS(sflow_100basevg_counter->in_highpriority_frames),
+ EXTRACT_64BITS(sflow_100basevg_counter->in_highpriority_octets));
+ printf("\n\t in norm prio frames %u, in norm prio octets %" PRIu64,
+ EXTRACT_32BITS(sflow_100basevg_counter->in_normpriority_frames),
+ EXTRACT_64BITS(sflow_100basevg_counter->in_normpriority_octets));
+ printf("\n\t in ipm errors %u, oversized %u, in data errors %u, null addressed frames %u",
+ EXTRACT_32BITS(sflow_100basevg_counter->in_ipmerrors),
+ EXTRACT_32BITS(sflow_100basevg_counter->in_oversized),
+ EXTRACT_32BITS(sflow_100basevg_counter->in_data_errors),
+ EXTRACT_32BITS(sflow_100basevg_counter->in_null_addressed_frames));
+ printf("\n\t out high prio frames %u, out high prio octets %" PRIu64
+ ", trans into frames %u",
+ EXTRACT_32BITS(sflow_100basevg_counter->out_highpriority_frames),
+ EXTRACT_64BITS(sflow_100basevg_counter->out_highpriority_octets),
+ EXTRACT_32BITS(sflow_100basevg_counter->transitioninto_frames));
+ printf("\n\t in hc high prio octets %" PRIu64
+ ", in hc norm prio octets %" PRIu64
+ ", out hc high prio octets %" PRIu64,
+ EXTRACT_64BITS(sflow_100basevg_counter->hc_in_highpriority_octets),
+ EXTRACT_64BITS(sflow_100basevg_counter->hc_in_normpriority_octets),
+ EXTRACT_64BITS(sflow_100basevg_counter->hc_out_highpriority_octets));
+
+ return 0;
+}
+
+static int
+print_sflow_counter_vlan(const u_char *pointer, u_int len) {
+
const struct sflow_vlan_counter_t *sflow_vlan_counter;
+
+ if (len < sizeof(struct sflow_vlan_counter_t))
+ return 1;
+
+ sflow_vlan_counter = (const struct sflow_vlan_counter_t *)pointer;
+ printf("\n\t vlan_id %u, octets %" PRIu64
+ ", unicast_pkt %u, multicast_pkt %u, broadcast_pkt %u, discards %u",
+ EXTRACT_32BITS(sflow_vlan_counter->vlan_id),
+ EXTRACT_64BITS(sflow_vlan_counter->octets),
+ EXTRACT_32BITS(sflow_vlan_counter->unicast_pkt),
+ EXTRACT_32BITS(sflow_vlan_counter->multicast_pkt),
+ EXTRACT_32BITS(sflow_vlan_counter->broadcast_pkt),
+ EXTRACT_32BITS(sflow_vlan_counter->discards));
+
+ return 0;
+}
+
+struct sflow_processor_counter_t {
+ u_int8_t five_sec_util[4];
+ u_int8_t one_min_util[4];
+ u_int8_t five_min_util[4];
+ u_int8_t total_memory[8];
+ u_int8_t free_memory[8];
+};
+
+static int
+print_sflow_counter_processor(const u_char *pointer, u_int len) {
+
+ const struct sflow_processor_counter_t *sflow_processor_counter;
+
+ if (len < sizeof(struct sflow_processor_counter_t))
+ return 1;
+
+ sflow_processor_counter = (const struct sflow_processor_counter_t *)pointer;
+ printf("\n\t 5sec %u, 1min %u, 5min %u, total_mem %" PRIu64
+ ", total_mem %" PRIu64,
+ EXTRACT_32BITS(sflow_processor_counter->five_sec_util),
+ EXTRACT_32BITS(sflow_processor_counter->one_min_util),
+ EXTRACT_32BITS(sflow_processor_counter->five_min_util),
+ EXTRACT_64BITS(sflow_processor_counter->total_memory),
+ EXTRACT_64BITS(sflow_processor_counter->free_memory));
+
+ return 0;
+}
+
+static int
+sflow_print_counter_records(const u_char *pointer, u_int len, u_int records) {
+
+ u_int nrecords;
const u_char *tptr;
- int tlen;
+ u_int tlen;
+ u_int counter_type;
+ u_int counter_len;
+ u_int enterprise;
+ const struct sflow_counter_record_t *sflow_counter_record;
+
+ nrecords = records;
+ tptr = pointer;
+ tlen = len;
+
+ while (nrecords > 0) {
+ /* do we have the "header?" */
+ if (tlen < sizeof(struct sflow_counter_record_t))
+ return 1;
+ sflow_counter_record = (const struct sflow_counter_record_t *)tptr;
+
+ enterprise = EXTRACT_32BITS(sflow_counter_record->format);
+ counter_type = enterprise & 0x0FFF;
+ enterprise = enterprise >> 20;
+ counter_len = EXTRACT_32BITS(sflow_counter_record->length);
+ printf("\n\t enterprise %u, %s (%u) length %u",
+ enterprise,
+ (enterprise == 0) ? tok2str(sflow_counter_type_values,"Unknown",counter_type) : "Unknown",
+ counter_type,
+ counter_len);
+
+ tptr += sizeof(struct sflow_counter_record_t);
+ tlen -= sizeof(struct sflow_counter_record_t);
+
+ if (tlen < counter_len)
+ return 1;
+ if (enterprise == 0) {
+ switch (counter_type) {
+ case SFLOW_COUNTER_GENERIC:
+ if (print_sflow_counter_generic(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_ETHERNET:
+ if (print_sflow_counter_ethernet(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_TOKEN_RING:
+ if (print_sflow_counter_token_ring(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_BASEVG:
+ if (print_sflow_counter_basevg(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_VLAN:
+ if (print_sflow_counter_vlan(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_COUNTER_PROCESSOR:
+ if (print_sflow_counter_processor(tptr,tlen))
+ return 1;
+ break;
+ default:
+ if (vflag <= 1)
+ print_unknown_data(tptr, "\n\t\t", counter_len);
+ break;
+ }
+ }
+ tptr += counter_len;
+ tlen -= counter_len;
+ nrecords--;
+
+ }
+
+ return 0;
+}
+
+
+static int
+sflow_print_counter_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_counter_sample_t *sflow_counter_sample;
+ u_int nrecords;
+ u_int typesource;
+ u_int type;
+ u_int index;
+
+
+ if (len < sizeof(struct sflow_counter_sample_t))
+ return 1;
+
+ sflow_counter_sample = (const struct sflow_counter_sample_t *)pointer;
+
+ typesource = EXTRACT_32BITS(sflow_counter_sample->typesource);
+ nrecords = EXTRACT_32BITS(sflow_counter_sample->records);
+ type = typesource >> 24;
+ index = typesource & 0x0FFF;
+
+ printf(" seqnum %u, type %u, idx %u, records %u",
+ EXTRACT_32BITS(sflow_counter_sample->seqnum),
+ type,
+ index,
+ nrecords);
+
+ return sflow_print_counter_records(pointer + sizeof(struct sflow_counter_sample_t),
+ len - sizeof(struct sflow_counter_sample_t),
+ nrecords);
+
+}
+
+static int
+sflow_print_expanded_counter_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_expanded_counter_sample_t *sflow_expanded_counter_sample;
+ u_int nrecords;
+
+
+ if (len < sizeof(struct sflow_expanded_counter_sample_t))
+ return 1;
+
+ sflow_expanded_counter_sample = (const struct sflow_expanded_counter_sample_t *)pointer;
+
+ nrecords = EXTRACT_32BITS(sflow_expanded_counter_sample->records);
+
+ printf(" seqnum %u, type %u, idx %u, records %u",
+ EXTRACT_32BITS(sflow_expanded_counter_sample->seqnum),
+ EXTRACT_32BITS(sflow_expanded_counter_sample->type),
+ EXTRACT_32BITS(sflow_expanded_counter_sample->index),
+ nrecords);
+
+ return sflow_print_counter_records(pointer + sizeof(struct sflow_expanded_counter_sample_t),
+ len - sizeof(struct sflow_expanded_counter_sample_t),
+ nrecords);
+
+}
+
+static int
+print_sflow_raw_packet(const u_char *pointer, u_int len) {
+
+ const struct sflow_expanded_flow_raw_t *sflow_flow_raw;
+
+ if (len < sizeof(struct sflow_expanded_flow_raw_t))
+ return 1;
+
+ sflow_flow_raw = (const struct sflow_expanded_flow_raw_t *)pointer;
+ printf("\n\t protocol %s (%u), length %u, stripped bytes %u, header_size %u",
+ tok2str(sflow_flow_raw_protocol_values,"Unknown",EXTRACT_32BITS(sflow_flow_raw->protocol)),
+ EXTRACT_32BITS(sflow_flow_raw->protocol),
+ EXTRACT_32BITS(sflow_flow_raw->length),
+ EXTRACT_32BITS(sflow_flow_raw->stripped_bytes),
+ EXTRACT_32BITS(sflow_flow_raw->header_size));
+
+ /* QUESTION - should we attempt to print the raw header itself?
+ assuming of course there is wnough data present to do so... */
+
+ return 0;
+}
+
+static int
+print_sflow_ethernet_frame(const u_char *pointer, u_int len) {
+
+ const struct sflow_ethernet_frame_t *sflow_ethernet_frame;
+
+ if (len < sizeof(struct sflow_ethernet_frame_t))
+ return 1;
+
+ sflow_ethernet_frame = (const struct sflow_ethernet_frame_t *)pointer;
+
+ printf("\n\t frame len %u, type %u",
+ EXTRACT_32BITS(sflow_ethernet_frame->length),
+ EXTRACT_32BITS(sflow_ethernet_frame->type));
+
+ return 0;
+}
+
+static int
+print_sflow_extended_switch_data(const u_char *pointer, u_int len) {
+
+ const struct sflow_extended_switch_data_t *sflow_extended_sw_data;
+
+ if (len < sizeof(struct sflow_extended_switch_data_t))
+ return 1;
+
+ sflow_extended_sw_data = (const struct sflow_extended_switch_data_t *)pointer;
+ printf("\n\t src vlan %u, src pri %u, dst vlan %u, dst pri %u",
+ EXTRACT_32BITS(sflow_extended_sw_data->src_vlan),
+ EXTRACT_32BITS(sflow_extended_sw_data->src_pri),
+ EXTRACT_32BITS(sflow_extended_sw_data->dst_vlan),
+ EXTRACT_32BITS(sflow_extended_sw_data->dst_pri));
+
+ return 0;
+}
+
+static int
+sflow_print_flow_records(const u_char *pointer, u_int len, u_int records) {
+
+ u_int nrecords;
+ const u_char *tptr;
+ u_int tlen;
+ u_int flow_type;
+ u_int enterprise;
+ u_int flow_len;
+ const struct sflow_flow_record_t *sflow_flow_record;
+
+ nrecords = records;
+ tptr = pointer;
+ tlen = len;
+
+ while (nrecords > 0) {
+ /* do we have the "header?" */
+ if (tlen < sizeof(struct sflow_flow_record_t))
+ return 1;
+
+ sflow_flow_record = (const struct sflow_flow_record_t *)tptr;
+
+ /* so, the funky encoding means we cannot blythly mask-off
+ bits, we must also check the enterprise. */
+
+ enterprise = EXTRACT_32BITS(sflow_flow_record->format);
+ flow_type = enterprise & 0x0FFF;
+ enterprise = enterprise >> 12;
+ flow_len = EXTRACT_32BITS(sflow_flow_record->length);
+ printf("\n\t enterprise %u %s (%u) length %u",
+ enterprise,
+ (enterprise == 0) ? tok2str(sflow_flow_type_values,"Unknown",flow_type) : "Unknown",
+ flow_type,
+ flow_len);
+
+ tptr += sizeof(struct sflow_flow_record_t);
+ tlen -= sizeof(struct sflow_flow_record_t);
+
+ if (tlen < flow_len)
+ return 1;
+
+ if (enterprise == 0) {
+ switch (flow_type) {
+ case SFLOW_FLOW_RAW_PACKET:
+ if (print_sflow_raw_packet(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_FLOW_EXTENDED_SWITCH_DATA:
+ if (print_sflow_extended_switch_data(tptr,tlen))
+ return 1;
+ break;
+ case SFLOW_FLOW_ETHERNET_FRAME:
+ if (print_sflow_ethernet_frame(tptr,tlen))
+ return 1;
+ break;
+ /* FIXME these need a decoder */
+ case SFLOW_FLOW_IPV4_DATA:
+ case SFLOW_FLOW_IPV6_DATA:
+ case SFLOW_FLOW_EXTENDED_ROUTER_DATA:
+ case SFLOW_FLOW_EXTENDED_GATEWAY_DATA:
+ case SFLOW_FLOW_EXTENDED_USER_DATA:
+ case SFLOW_FLOW_EXTENDED_URL_DATA:
+ case SFLOW_FLOW_EXTENDED_MPLS_DATA:
+ case SFLOW_FLOW_EXTENDED_NAT_DATA:
+ case SFLOW_FLOW_EXTENDED_MPLS_TUNNEL:
+ case SFLOW_FLOW_EXTENDED_MPLS_VC:
+ case SFLOW_FLOW_EXTENDED_MPLS_FEC:
+ case SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC:
+ case SFLOW_FLOW_EXTENDED_VLAN_TUNNEL:
+ break;
+ default:
+ if (vflag <= 1)
+ print_unknown_data(tptr, "\n\t\t", flow_len);
+ break;
+ }
+ }
+ tptr += flow_len;
+ tlen -= flow_len;
+ nrecords--;
+
+ }
+
+ return 0;
+}
+
+static int
+sflow_print_flow_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_flow_sample_t *sflow_flow_sample;
+ u_int nrecords;
+ u_int typesource;
+ u_int type;
+ u_int index;
+
+ if (len < sizeof(struct sflow_flow_sample_t))
+ return 1;
+
+ sflow_flow_sample = (struct sflow_flow_sample_t *)pointer;
+
+ typesource = EXTRACT_32BITS(sflow_flow_sample->typesource);
+ nrecords = EXTRACT_32BITS(sflow_flow_sample->records);
+ type = typesource >> 24;
+ index = typesource & 0x0FFF;
+
+ printf(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, input %u output %u records %u",
+ EXTRACT_32BITS(sflow_flow_sample->seqnum),
+ type,
+ index,
+ EXTRACT_32BITS(sflow_flow_sample->rate),
+ EXTRACT_32BITS(sflow_flow_sample->pool),
+ EXTRACT_32BITS(sflow_flow_sample->drops),
+ EXTRACT_32BITS(sflow_flow_sample->in_interface),
+ EXTRACT_32BITS(sflow_flow_sample->out_interface),
+ nrecords);
+
+ return sflow_print_flow_records(pointer + sizeof(struct sflow_flow_sample_t),
+ len - sizeof(struct sflow_flow_sample_t),
+ nrecords);
+
+}
+
+static int
+sflow_print_expanded_flow_sample(const u_char *pointer, u_int len) {
+
+ const struct sflow_expanded_flow_sample_t *sflow_expanded_flow_sample;
+ u_int nrecords;
+
+ if (len < sizeof(struct sflow_expanded_flow_sample_t))
+ return 1;
+
+ sflow_expanded_flow_sample = (const struct sflow_expanded_flow_sample_t *)pointer;
+
+ nrecords = EXTRACT_32BITS(sflow_expanded_flow_sample->records);
+
+ printf(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, records %u",
+ EXTRACT_32BITS(sflow_expanded_flow_sample->seqnum),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->type),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->index),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->rate),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->pool),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->drops),
+ EXTRACT_32BITS(sflow_expanded_flow_sample->records));
+
+ return sflow_print_flow_records(pointer + sizeof(struct sflow_expanded_flow_sample_t),
+ len - sizeof(struct sflow_expanded_flow_sample_t),
+ nrecords);
+
+}
+
+void
+sflow_print(const u_char *pptr, u_int len) {
+
+ const struct sflow_datagram_t *sflow_datagram;
+ const struct sflow_sample_header *sflow_sample;
+
+ const u_char *tptr;
+ u_int tlen;
u_int32_t sflow_sample_type, sflow_sample_len;
- int nsamples, nrecords, counter_len, counter_type, flow_len, flow_type;
+ u_int32_t nsamples;
+
- tptr=pptr;
+ tptr = pptr;
tlen = len;
sflow_datagram = (const struct sflow_datagram_t *)pptr;
TCHECK(*sflow_datagram);
@@ -313,16 +858,21 @@ sflow_print(const u_char *pptr, u_int len) {
len);
/* skip Common header */
- tptr+=sizeof(const struct sflow_datagram_t);
- tlen-=sizeof(const struct sflow_datagram_t);
+ tptr += sizeof(const struct sflow_datagram_t);
+ tlen -= sizeof(const struct sflow_datagram_t);
while (nsamples > 0 && tlen > 0) {
sflow_sample = (const struct sflow_sample_header *)tptr;
+ TCHECK(*sflow_sample);
+
sflow_sample_type = (EXTRACT_32BITS(sflow_sample->format)&0x0FFF);
sflow_sample_len = EXTRACT_32BITS(sflow_sample->len);
- tptr+=sizeof(struct sflow_sample_header);
- tlen-=sizeof(struct sflow_sample_header);
+ if (tlen < sizeof(struct sflow_sample_header))
+ goto trunc;
+
+ tptr += sizeof(struct sflow_sample_header);
+ tlen -= sizeof(struct sflow_sample_header);
printf("\n\t%s (%u), length %u,",
tok2str(sflow_format_values, "Unknown", sflow_sample_type),
@@ -334,226 +884,33 @@ sflow_print(const u_char *pptr, u_int len) {
return;
}
+ if (tlen < sflow_sample_len)
+ goto trunc;
+
/* did we capture enough for fully decoding the sample ? */
- if (!TTEST2(*tptr, sflow_sample_len))
- goto trunc;
+ TCHECK2(*tptr, sflow_sample_len);
switch(sflow_sample_type) {
- case SFLOW_FLOW_SAMPLE: /* XXX */
+ case SFLOW_FLOW_SAMPLE:
+ if (sflow_print_flow_sample(tptr,tlen))
+ goto trunc;
break;
- case SFLOW_COUNTER_SAMPLE: /* XXX */
+ case SFLOW_COUNTER_SAMPLE:
+ if (sflow_print_counter_sample(tptr,tlen))
+ goto trunc;
break;
case SFLOW_EXPANDED_FLOW_SAMPLE:
- sflow_expanded_flow_sample = (const struct sflow_expanded_flow_sample_t *)tptr;
- nrecords = EXTRACT_32BITS(sflow_expanded_flow_sample->records);
-
- printf(" seqnum %u, type %u, idx %u, rate %u, pool %u, drops %u, records %u",
- EXTRACT_32BITS(sflow_expanded_flow_sample->seqnum),
- EXTRACT_32BITS(sflow_expanded_flow_sample->type),
- EXTRACT_32BITS(sflow_expanded_flow_sample->index),
- EXTRACT_32BITS(sflow_expanded_flow_sample->rate),
- EXTRACT_32BITS(sflow_expanded_flow_sample->pool),
- EXTRACT_32BITS(sflow_expanded_flow_sample->drops),
- EXTRACT_32BITS(sflow_expanded_flow_sample->records));
-
- tptr+= sizeof(struct sflow_expanded_flow_sample_t);
- tlen-= sizeof(struct sflow_expanded_flow_sample_t);
-
- while ( nrecords > 0 && tlen > 0) {
-
- /* decode Flow record - 2 bytes */
- flow_type = EXTRACT_32BITS(tptr)&0x0FFF;
- flow_len = EXTRACT_32BITS(tptr+4);
- printf("\n\t %s (%u) length %u",
- tok2str(sflow_flow_type_values,"Unknown",flow_type),
- flow_type,
- flow_len);
-
- tptr += 8;
- tlen -= 8;
-
- /* did we capture enough for fully decoding the flow ? */
- if (!TTEST2(*tptr, flow_len))
- goto trunc;
-
- switch(flow_type) {
- case SFLOW_FLOW_RAW_PACKET:
- sflow_flow_raw = (const struct sflow_expanded_flow_raw_t *)tptr;
- printf("\n\t protocol %s (%u), length %u, stripped bytes %u, header_size %u",
- tok2str(sflow_flow_raw_protocol_values,"Unknown",EXTRACT_32BITS(sflow_flow_raw->protocol)),
- EXTRACT_32BITS(sflow_flow_raw->protocol),
- EXTRACT_32BITS(sflow_flow_raw->length),
- EXTRACT_32BITS(sflow_flow_raw->stripped_bytes),
- EXTRACT_32BITS(sflow_flow_raw->header_size));
- break;
-
- /*
- * FIXME those are the defined flow types that lack a decoder
- */
- case SFLOW_FLOW_ETHERNET_FRAME:
- case SFLOW_FLOW_IPV4_DATA:
- case SFLOW_FLOW_IPV6_DATA:
- case SFLOW_FLOW_EXTENDED_SWITCH_DATA:
- case SFLOW_FLOW_EXTENDED_ROUTER_DATA:
- case SFLOW_FLOW_EXTENDED_GATEWAY_DATA:
- case SFLOW_FLOW_EXTENDED_USER_DATA:
- case SFLOW_FLOW_EXTENDED_URL_DATA:
- case SFLOW_FLOW_EXTENDED_MPLS_DATA:
- case SFLOW_FLOW_EXTENDED_NAT_DATA:
- case SFLOW_FLOW_EXTENDED_MPLS_TUNNEL:
- case SFLOW_FLOW_EXTENDED_MPLS_VC:
- case SFLOW_FLOW_EXTENDED_MPLS_FEC:
- case SFLOW_FLOW_EXTENDED_MPLS_LVP_FEC:
- case SFLOW_FLOW_EXTENDED_VLAN_TUNNEL:
- break;
- default:
- if (vflag <= 1)
- print_unknown_data(tptr, "\n\t ", flow_len);
- break;
-
- }
- tptr += flow_len;
- tlen -= flow_len;
- nrecords--;
- }
- break;
+ if (sflow_print_expanded_flow_sample(tptr,tlen))
+ goto trunc;
+ break;
case SFLOW_EXPANDED_COUNTER_SAMPLE:
- sflow_expanded_counter_sample = (const struct sflow_expanded_counter_sample_t *)tptr;
- nrecords = EXTRACT_32BITS(sflow_expanded_counter_sample->records);
-
- printf(" seqnum %u, type %u, idx %u, records %u",
- EXTRACT_32BITS(sflow_expanded_counter_sample->seqnum),
- EXTRACT_32BITS(sflow_expanded_counter_sample->type),
- EXTRACT_32BITS(sflow_expanded_counter_sample->index),
- nrecords);
-
- tptr+= sizeof(struct sflow_expanded_counter_sample_t);
- tlen-= sizeof(struct sflow_expanded_counter_sample_t);
-
- while ( nrecords > 0 && tlen > 0) {
-
- /* decode counter record - 2 bytes */
- counter_type = EXTRACT_32BITS(tptr)&0x0FFF;
- counter_len = EXTRACT_32BITS(tptr+4);
- printf("\n\t %s (%u) length %u",
- tok2str(sflow_counter_type_values,"Unknown",counter_type),
- counter_type,
- counter_len);
-
- tptr += 8;
- tlen -= 8;
-
- /* did we capture enough for fully decoding the counter ? */
- if (!TTEST2(*tptr, counter_len))
- goto trunc;
-
- switch(counter_type) {
- case SFLOW_COUNTER_GENERIC:
- sflow_gen_counter = (const struct sflow_generic_counter_t *)tptr;
- printf("\n\t ifindex %u, iftype %u, ifspeed %u, ifdirection %u (%s)",
- EXTRACT_32BITS(sflow_gen_counter->ifindex),
- EXTRACT_32BITS(sflow_gen_counter->iftype),
- EXTRACT_32BITS(sflow_gen_counter->ifspeed),
- EXTRACT_32BITS(sflow_gen_counter->ifdirection),
- tok2str(sflow_iface_direction_values, "Unknown",
- EXTRACT_32BITS(sflow_gen_counter->ifdirection)));
- printf("\n\t ifstatus %u, adminstatus: %s, operstatus: %s",
- EXTRACT_32BITS(sflow_gen_counter->ifstatus),
- EXTRACT_32BITS(sflow_gen_counter->ifstatus)&1 ? "up" : "down",
- (EXTRACT_32BITS(sflow_gen_counter->ifstatus)>>1)&1 ? "up" : "down");
- printf("\n\t In octets %" PRIu64
- ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
- EXTRACT_64BITS(sflow_gen_counter->ifinoctets),
- EXTRACT_32BITS(sflow_gen_counter->ifinunicastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifinmulticastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifinbroadcastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifindiscards));
- printf("\n\t In errors %u, unknown protos %u",
- EXTRACT_32BITS(sflow_gen_counter->ifinerrors),
- EXTRACT_32BITS(sflow_gen_counter->ifinunkownprotos));
- printf("\n\t Out octets %" PRIu64
- ", unicast pkts %u, multicast pkts %u, broadcast pkts %u, discards %u",
- EXTRACT_64BITS(sflow_gen_counter->ifoutoctets),
- EXTRACT_32BITS(sflow_gen_counter->ifoutunicastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifoutmulticastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifoutbroadcastpkts),
- EXTRACT_32BITS(sflow_gen_counter->ifoutdiscards));
- printf("\n\t Out errors %u, promisc mode %u",
- EXTRACT_32BITS(sflow_gen_counter->ifouterrors),
- EXTRACT_32BITS(sflow_gen_counter->ifpromiscmode));
- break;
- case SFLOW_COUNTER_ETHERNET:
- sflow_eth_counter = (const struct sflow_ethernet_counter_t *)tptr;
- printf("\n\t align errors %u, fcs errors %u, single collision %u, multiple collision %u, test error %u",
- EXTRACT_32BITS(sflow_eth_counter->alignerrors),
- EXTRACT_32BITS(sflow_eth_counter->fcserrors),
- EXTRACT_32BITS(sflow_eth_counter->single_collision_frames),
- EXTRACT_32BITS(sflow_eth_counter->multiple_collision_frames),
- EXTRACT_32BITS(sflow_eth_counter->test_errors));
- printf("\n\t deferred %u, late collision %u, excessive collision %u, mac trans error %u",
- EXTRACT_32BITS(sflow_eth_counter->deferred_transmissions),
- EXTRACT_32BITS(sflow_eth_counter->late_collisions),
- EXTRACT_32BITS(sflow_eth_counter->excessive_collisions),
- EXTRACT_32BITS(sflow_eth_counter->mac_transmit_errors));
- printf("\n\t carrier error %u, frames too long %u, mac receive errors %u, symbol errors %u",
- EXTRACT_32BITS(sflow_eth_counter->carrier_sense_errors),
- EXTRACT_32BITS(sflow_eth_counter->frame_too_longs),
- EXTRACT_32BITS(sflow_eth_counter->mac_receive_errors),
- EXTRACT_32BITS(sflow_eth_counter->symbol_errors));
- break;
- case SFLOW_COUNTER_TOKEN_RING: /* XXX */
- break;
- case SFLOW_COUNTER_BASEVG:
- sflow_100basevg_counter = (const struct sflow_100basevg_counter_t *)tptr;
- printf("\n\t in high prio frames %u, in high prio octets %" PRIu64,
- EXTRACT_32BITS(sflow_100basevg_counter->in_highpriority_frames),
- EXTRACT_64BITS(sflow_100basevg_counter->in_highpriority_octets));
- printf("\n\t in norm prio frames %u, in norm prio octets %" PRIu64,
- EXTRACT_32BITS(sflow_100basevg_counter->in_normpriority_frames),
- EXTRACT_64BITS(sflow_100basevg_counter->in_normpriority_octets));
- printf("\n\t in ipm errors %u, oversized %u, in data errors %u, null addressed frames %u",
- EXTRACT_32BITS(sflow_100basevg_counter->in_ipmerrors),
- EXTRACT_32BITS(sflow_100basevg_counter->in_oversized),
- EXTRACT_32BITS(sflow_100basevg_counter->in_data_errors),
- EXTRACT_32BITS(sflow_100basevg_counter->in_null_addressed_frames));
- printf("\n\t out high prio frames %u, out high prio octets %" PRIu64
- ", trans into frames %u",
- EXTRACT_32BITS(sflow_100basevg_counter->out_highpriority_frames),
- EXTRACT_64BITS(sflow_100basevg_counter->out_highpriority_octets),
- EXTRACT_32BITS(sflow_100basevg_counter->transitioninto_frames));
- printf("\n\t in hc high prio octets %" PRIu64
- ", in hc norm prio octets %" PRIu64
- ", out hc high prio octets %" PRIu64,
- EXTRACT_64BITS(sflow_100basevg_counter->hc_in_highpriority_octets),
- EXTRACT_64BITS(sflow_100basevg_counter->hc_in_normpriority_octets),
- EXTRACT_64BITS(sflow_100basevg_counter->hc_out_highpriority_octets));
- break;
- case SFLOW_COUNTER_VLAN:
- sflow_vlan_counter = (const struct sflow_vlan_counter_t *)tptr;
- printf("\n\t vlan_id %u, octets %" PRIu64
- ", unicast_pkt %u, multicast_pkt %u, broadcast_pkt %u, discards %u",
- EXTRACT_32BITS(sflow_vlan_counter->vlan_id),
- EXTRACT_64BITS(sflow_vlan_counter->octets),
- EXTRACT_32BITS(sflow_vlan_counter->unicast_pkt),
- EXTRACT_32BITS(sflow_vlan_counter->multicast_pkt),
- EXTRACT_32BITS(sflow_vlan_counter->broadcast_pkt),
- EXTRACT_32BITS(sflow_vlan_counter->discards));
- break;
- case SFLOW_COUNTER_PROCESSOR: /* XXX */
- break;
- default:
- if (vflag <= 1)
- print_unknown_data(tptr, "\n\t\t", counter_len);
- break;
- }
- tptr += counter_len;
- tlen -= counter_len;
- nrecords--;
- }
- break;
+ if (sflow_print_expanded_counter_sample(tptr,tlen))
+ goto trunc;
+ break;
+
default:
if (vflag <= 1)
print_unknown_data(tptr, "\n\t ", sflow_sample_len);
diff --git a/print-sl.c b/print-sl.c
index f00d3943d320..91dbaadc275b 100644
--- a/print-sl.c
+++ b/print-sl.c
@@ -73,7 +73,7 @@ sl_if_print(const struct pcap_pkthdr *h, const u_char *p)
break;
#ifdef INET6
case 6:
- ip6_print((u_char *)ip, length);
+ ip6_print(gndo, (u_char *)ip, length);
break;
#endif
default:
diff --git a/print-sll.c b/print-sll.c
index c9546585dcb1..a044de6709fb 100644
--- a/print-sll.c
+++ b/print-sll.c
@@ -218,7 +218,7 @@ recurse:
caplen -= 4;
goto recurse;
} else {
- if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ if (ethertype_print(gndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
sll_print(sllp, length + SLL_HDR_LEN);
diff --git a/print-slow.c b/print-slow.c
index eaf94ed9bbbc..fdfefccf386a 100644
--- a/print-slow.c
+++ b/print-slow.c
@@ -368,7 +368,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) {
tlv_header->type != LACP_TLV_TERMINATOR &&
tlv_header->type != MARKER_TLV_TERMINATOR) {
printf("\n\t-----trailing data-----");
- print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),"\n\t ",tlen);
+ print_unknown_data(tptr+sizeof(struct tlv_header_t),"\n\t ",tlen);
return;
}
@@ -441,7 +441,7 @@ void slow_marker_lacp_print(register const u_char *tptr, register u_int tlen) {
}
/* do we want to see an additional hexdump ? */
if (vflag > 1) {
- print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),"\n\t ",
+ print_unknown_data(tptr+sizeof(struct tlv_header_t),"\n\t ",
tlv_len-sizeof(struct tlv_header_t));
}
diff --git a/print-sunrpc.c b/print-sunrpc.c
index e33b7625e14e..21cd85a9c509 100644
--- a/print-sunrpc.c
+++ b/print-sunrpc.c
@@ -45,12 +45,12 @@ static const char rcsid[] _U_ =
#include <tcpdump-stdinc.h>
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
#include <rpc/rpc.h>
#ifdef HAVE_RPC_RPCENT_H
#include <rpc/rpcent.h>
#endif /* HAVE_RPC_RPCENT_H */
-#endif /* HAVE_GETRPCBYNUMBER */
+#endif /* defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H) */
#include <stdio.h>
#include <string.h>
@@ -151,7 +151,7 @@ static char *
progstr(prog)
u_int32_t prog;
{
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
register struct rpcent *rp;
#endif
static char buf[32];
@@ -159,12 +159,12 @@ progstr(prog)
if (lastprog != 0 && prog == lastprog)
return (buf);
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
rp = getrpcbynumber(prog);
if (rp == NULL)
#endif
(void) snprintf(buf, sizeof(buf), "#%u", prog);
-#ifdef HAVE_GETRPCBYNUMBER
+#if defined(HAVE_GETRPCBYNUMBER) && defined(HAVE_RPC_RPC_H)
else
strlcpy(buf, rp->r_name, sizeof(buf));
#endif
diff --git a/print-symantec.c b/print-symantec.c
index 0fba8e534de4..8b4ee38c4093 100644
--- a/print-symantec.c
+++ b/print-symantec.c
@@ -107,7 +107,7 @@ symantec_if_print(const struct pcap_pkthdr *h, const u_char *p)
if (!suppress_default_print)
default_print(p, caplen);
- } else if (ethertype_print(ether_type, p, length, caplen) == 0) {
+ } else if (ethertype_print(gndo, ether_type, p, length, caplen) == 0) {
/* ether_type not known, print raw packet */
if (!eflag)
symantec_hdr_print((u_char *)sp, length + sizeof (struct symantec_header));
diff --git a/print-tcp.c b/print-tcp.c
index e2559ecf64ca..88b461576df9 100644
--- a/print-tcp.c
+++ b/print-tcp.c
@@ -129,31 +129,8 @@ static int tcp_cksum(register const struct ip *ip,
register const struct tcphdr *tp,
register u_int len)
{
- union phu {
- struct phdr {
- u_int32_t src;
- u_int32_t dst;
- u_char mbz;
- u_char proto;
- u_int16_t len;
- } ph;
- u_int16_t pa[6];
- } phu;
- const u_int16_t *sp;
-
- /* pseudo-header.. */
- phu.ph.len = htons((u_int16_t)len);
- phu.ph.mbz = 0;
- phu.ph.proto = IPPROTO_TCP;
- memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
- if (IP_HL(ip) == 5)
- memcpy(&phu.ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
- else
- phu.ph.dst = ip_finddst(ip);
-
- sp = &phu.pa[0];
- return in_cksum((u_short *)tp, len,
- sp[0]+sp[1]+sp[2]+sp[3]+sp[4]+sp[5]);
+ return (nextproto4_cksum(ip, (const u_int8_t *)tp, len,
+ IPPROTO_TCP));
}
void
@@ -294,7 +271,6 @@ tcp_print(register const u_char *bp, register u_int length,
* both directions).
*/
#ifdef INET6
- memset(&tha, 0, sizeof(tha));
rev = 0;
if (ip6) {
src = &ip6->ip6_src;
@@ -315,6 +291,27 @@ tcp_print(register const u_char *bp, register u_int length,
tha.port = sport << 16 | dport;
}
} else {
+ /*
+ * Zero out the tha structure; the src and dst
+ * fields are big enough to hold an IPv6
+ * address, but we only have IPv4 addresses
+ * and thus must clear out the remaining 124
+ * bits.
+ *
+ * XXX - should we just clear those bytes after
+ * copying the IPv4 addresses, rather than
+ * zeroing out the entire structure and then
+ * overwriting some of the zeroes?
+ *
+ * XXX - this could fail if we see TCP packets
+ * with an IPv6 address with the lower 124 bits
+ * all zero and also see TCP packes with an
+ * IPv4 address with the same 32 bits as the
+ * upper 32 bits of the IPv6 address in question.
+ * Can that happen? Is it likely enough to be
+ * an issue?
+ */
+ memset(&tha, 0, sizeof(tha));
src = &ip->ip_src;
dst = &ip->ip_dst;
if (sport > dport)
@@ -393,34 +390,40 @@ tcp_print(register const u_char *bp, register u_int length,
return;
}
- if (IP_V(ip) == 4 && vflag && !Kflag && !fragmented) {
+ if (vflag && !Kflag && !fragmented) {
+ /* Check the checksum, if possible. */
u_int16_t sum, tcp_sum;
- if (TTEST2(tp->th_sport, length)) {
- sum = tcp_cksum(ip, tp, length);
- (void)printf(", cksum 0x%04x",EXTRACT_16BITS(&tp->th_sum));
- if (sum != 0) {
+ if (IP_V(ip) == 4) {
+ if (TTEST2(tp->th_sport, length)) {
+ sum = tcp_cksum(ip, tp, length);
tcp_sum = EXTRACT_16BITS(&tp->th_sum);
- (void)printf(" (incorrect -> 0x%04x)",in_cksum_shouldbe(tcp_sum, sum));
- } else
- (void)printf(" (correct)");
+
+ (void)printf(", cksum 0x%04x", tcp_sum);
+ if (sum != 0)
+ (void)printf(" (incorrect -> 0x%04x)",
+ in_cksum_shouldbe(tcp_sum, sum));
+ else
+ (void)printf(" (correct)");
+ }
}
- }
#ifdef INET6
- if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !Kflag && !fragmented) {
- u_int16_t sum,tcp_sum;
- if (TTEST2(tp->th_sport, length)) {
- sum = nextproto6_cksum(ip6, (u_short *)tp, length, IPPROTO_TCP);
- (void)printf(", cksum 0x%04x",EXTRACT_16BITS(&tp->th_sum));
- if (sum != 0) {
+ else if (IP_V(ip) == 6 && ip6->ip6_plen) {
+ if (TTEST2(tp->th_sport, length)) {
+ sum = nextproto6_cksum(ip6, (const u_int8_t *)tp, length, IPPROTO_TCP);
tcp_sum = EXTRACT_16BITS(&tp->th_sum);
- (void)printf(" (incorrect -> 0x%04x)",in_cksum_shouldbe(tcp_sum, sum));
- } else
- (void)printf(" (correct)");
+ (void)printf(", cksum 0x%04x", tcp_sum);
+ if (sum != 0)
+ (void)printf(" (incorrect -> 0x%04x)",
+ in_cksum_shouldbe(tcp_sum, sum));
+ else
+ (void)printf(" (correct)");
+
+ }
}
- }
#endif
+ }
length -= hlen;
if (vflag > 1 || length > 0 || flags & (TH_SYN | TH_FIN | TH_RST)) {
@@ -661,6 +664,8 @@ tcp_print(register const u_char *bp, register u_int length,
ns_print(bp + 2, length - 2, 0);
} else if (sport == MSDP_PORT || dport == MSDP_PORT) {
msdp_print(bp, length);
+ } else if (sport == RPKI_RTR_PORT || dport == RPKI_RTR_PORT) {
+ rpki_rtr_print(bp, length);
}
else if (length > 0 && (sport == LDP_PORT || dport == LDP_PORT)) {
ldp_print(bp, length);
diff --git a/print-tftp.c b/print-tftp.c
index 0caff4284323..84cde3969d08 100644
--- a/print-tftp.c
+++ b/print-tftp.c
@@ -99,15 +99,7 @@ tftp_print(register const u_char *bp, u_int length)
case RRQ:
case WRQ:
case OACK:
- /*
- * XXX Not all arpa/tftp.h's specify th_stuff as any
- * array; use address of th_block instead
- */
-#ifdef notdef
p = (u_char *)tp->th_stuff;
-#else
- p = (u_char *)&tp->th_block;
-#endif
putchar(' ');
/* Print filename or first option */
if (opcode != OACK)
diff --git a/print-udp.c b/print-udp.c
index 0f1528e019f1..885d42e4da0c 100644
--- a/print-udp.c
+++ b/print-udp.c
@@ -33,7 +33,6 @@ static const char rcsid[] _U_ =
#ifdef SEGSIZE
#undef SEGSIZE
#endif
-#include <arpa/tftp.h>
#include <stdio.h>
#include <string.h>
@@ -287,75 +286,16 @@ static int udp_cksum(register const struct ip *ip,
register const struct udphdr *up,
register u_int len)
{
- union phu {
- struct phdr {
- u_int32_t src;
- u_int32_t dst;
- u_char mbz;
- u_char proto;
- u_int16_t len;
- } ph;
- u_int16_t pa[6];
- } phu;
- register const u_int16_t *sp;
-
- /* pseudo-header.. */
- phu.ph.len = htons((u_int16_t)len);
- phu.ph.mbz = 0;
- phu.ph.proto = IPPROTO_UDP;
- memcpy(&phu.ph.src, &ip->ip_src.s_addr, sizeof(u_int32_t));
- if (IP_HL(ip) == 5)
- memcpy(&phu.ph.dst, &ip->ip_dst.s_addr, sizeof(u_int32_t));
- else
- phu.ph.dst = ip_finddst(ip);
-
- sp = &phu.pa[0];
- return in_cksum((u_short *)up, len,
- sp[0]+sp[1]+sp[2]+sp[3]+sp[4]+sp[5]);
+ return (nextproto4_cksum(ip, (const u_int8_t *)(void *)up, len,
+ IPPROTO_UDP));
}
#ifdef INET6
static int udp6_cksum(const struct ip6_hdr *ip6, const struct udphdr *up,
u_int len)
{
- size_t i;
- register const u_int16_t *sp;
- u_int32_t sum;
- union {
- struct {
- struct in6_addr ph_src;
- struct in6_addr ph_dst;
- u_int32_t ph_len;
- u_int8_t ph_zero[3];
- u_int8_t ph_nxt;
- } ph;
- u_int16_t pa[20];
- } phu;
-
- /* pseudo-header */
- memset(&phu, 0, sizeof(phu));
- phu.ph.ph_src = ip6->ip6_src;
- phu.ph.ph_dst = ip6->ip6_dst;
- phu.ph.ph_len = htonl(len);
- phu.ph.ph_nxt = IPPROTO_UDP;
-
- sum = 0;
- for (i = 0; i < sizeof(phu.pa) / sizeof(phu.pa[0]); i++)
- sum += phu.pa[i];
-
- sp = (const u_int16_t *)up;
-
- for (i = 0; i < (len & ~1); i += 2)
- sum += *sp++;
-
- if (len & 1)
- sum += htons((*(const u_int8_t *)sp) << 8);
-
- while (sum > 0xffff)
- sum = (sum & 0xffff) + (sum >> 16);
- sum = ~sum & 0xffff;
-
- return (sum);
+ return (nextproto6_cksum(ip6, (const u_int8_t *)(void *)up, len,
+ IPPROTO_UDP));
}
#endif
@@ -568,31 +508,46 @@ udp_print(register const u_char *bp, u_int length,
}
udpipaddr_print(ip, sport, dport);
- if (IP_V(ip) == 4 && (vflag > 1) && !Kflag && !fragmented) {
- int sum = up->uh_sum;
- if (sum == 0) {
- (void)printf("[no cksum] ");
- } else if (TTEST2(cp[0], length)) {
- sum = udp_cksum(ip, up, length + sizeof(struct udphdr));
- if (sum != 0)
- (void)printf("[bad udp cksum %x!] ", sum);
- else
- (void)printf("[udp sum ok] ");
+ if (vflag && !Kflag && !fragmented) {
+ /* Check the checksum, if possible. */
+ u_int16_t sum, udp_sum;
+
+ /*
+ * XXX - do this even if vflag == 1?
+ * TCP does, and we do so for UDP-over-IPv6.
+ */
+ if (IP_V(ip) == 4 && (vflag > 1)) {
+ udp_sum = EXTRACT_16BITS(&up->uh_sum);
+ if (udp_sum == 0) {
+ (void)printf("[no cksum] ");
+ } else if (TTEST2(cp[0], length)) {
+ sum = udp_cksum(ip, up, length + sizeof(struct udphdr));
+
+ if (sum != 0) {
+ (void)printf("[bad udp cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ } else
+ (void)printf("[udp sum ok] ");
+ }
}
- }
#ifdef INET6
- if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !Kflag && !fragmented) {
- int sum = up->uh_sum;
- /* for IPv6, UDP checksum is mandatory */
- if (TTEST2(cp[0], length)) {
- sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr));
- if (sum != 0)
- (void)printf("[bad udp cksum %x!] ", sum);
- else
- (void)printf("[udp sum ok] ");
+ else if (IP_V(ip) == 6 && ip6->ip6_plen) {
+ /* for IPv6, UDP checksum is mandatory */
+ if (TTEST2(cp[0], length)) {
+ sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr));
+ udp_sum = EXTRACT_16BITS(&up->uh_sum);
+
+ if (sum != 0) {
+ (void)printf("[bad udp cksum 0x%04x -> 0x%04x!] ",
+ udp_sum,
+ in_cksum_shouldbe(udp_sum, sum));
+ } else
+ (void)printf("[udp sum ok] ");
+ }
}
- }
#endif
+ }
if (!qflag) {
#define ISPORT(p) (dport == (p) || sport == (p))
@@ -652,9 +607,10 @@ udp_print(register const u_char *bp, u_int length,
#ifdef INET6
else if (ISPORT(RIPNG_PORT))
ripng_print((const u_char *)(up + 1), length);
- else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT)) {
+ else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT))
dhcp6_print((const u_char *)(up + 1), length);
- }
+ else if (ISPORT(BABEL_PORT) || ISPORT(BABEL_PORT_OLD))
+ babel_print((const u_char *)(up + 1), length);
#endif /*INET6*/
/*
* Kludge in test for whiteboard packets.
diff --git a/print-vrrp.c b/print-vrrp.c
index 899542dac429..8b733d228c3c 100644
--- a/print-vrrp.c
+++ b/print-vrrp.c
@@ -110,9 +110,15 @@ vrrp_print(register const u_char *bp, register u_int len, int ttl)
int i;
char c;
- if (TTEST2(bp[0], len) && in_cksum((const u_short*)bp, len, 0))
- printf(", (bad vrrp cksum %x)",
- EXTRACT_16BITS(&bp[6]));
+ if (TTEST2(bp[0], len)) {
+ struct cksum_vec vec[1];
+
+ vec[0].ptr = bp;
+ vec[0].len = len;
+ if (in_cksum(vec, 1))
+ printf(", (bad vrrp cksum %x)",
+ EXTRACT_16BITS(&bp[6]));
+ }
printf(", addrs");
if (naddrs > 1)
printf("(%d)", naddrs);
diff --git a/tcp.h b/tcp.h
index ac83714fe29e..45fc21c0d504 100644
--- a/tcp.h
+++ b/tcp.h
@@ -105,6 +105,7 @@ struct tcphdr {
#define NFS_PORT 2049
#endif
#define MSDP_PORT 639
+#define RPKI_RTR_PORT 2222 /* experimental up until sidr-wg registers a well-known port */
#define LDP_PORT 646
#ifndef SMB_PORT
#define SMB_PORT 445
diff --git a/tcpdump-stdinc.h b/tcpdump-stdinc.h
index c437cc10fe9a..d350d1be126b 100644
--- a/tcpdump-stdinc.h
+++ b/tcpdump-stdinc.h
@@ -131,10 +131,43 @@ typedef char* caddr_t;
#endif /* WIN32 */
-#ifdef INET6
-#include "ip6.h"
+#ifndef HAVE___ATTRIBUTE__
+#define __attribute__(x)
#endif
+/*
+ * Used to declare a structure unaligned, so that the C compiler,
+ * if necessary, generates code that doesn't assume alignment.
+ * This is required because there is no guarantee that the packet
+ * data we get from libpcap/WinPcap is properly aligned.
+ *
+ * This assumes that, for all compilers that support __attribute__:
+ *
+ * 1) they support __attribute__((packed));
+ *
+ * 2) for all instruction set architectures requiring strict
+ * alignment, declaring a structure with that attribute
+ * causes the compiler to generate code that handles
+ * misaligned 2-byte, 4-byte, and 8-byte integral
+ * quantities.
+ *
+ * It does not (yet) handle compilers where you can get the compiler
+ * to generate code of that sort by some other means.
+ *
+ * This is required in order to, for example, keep the compiler from
+ * generating, for
+ *
+ * if (bp->bp_htype == 1 && bp->bp_hlen == 6 && bp->bp_op == BOOTPREQUEST) {
+ *
+ * in print-bootp.c, code that loads the first 4-byte word of a
+ * "struct bootp", masking out the bp_hops field, and comparing the result
+ * against 0x01010600.
+ *
+ * Note: this also requires that padding be put into the structure,
+ * at least for compilers where it's implemented as __attribute__((packed)).
+ */
+#define UNALIGNED __attribute__((packed))
+
#if defined(WIN32) || defined(MSDOS)
#define FOPEN_READ_TXT "rt"
#define FOPEN_READ_BIN "rb"
@@ -147,7 +180,7 @@ typedef char* caddr_t;
#define FOPEN_WRITE_BIN FOPEN_WRITE_TXT
#endif
-#if defined(__GNUC__) && defined(__i386__) && !defined(__ntohl)
+#if defined(__GNUC__) && defined(__i386__) && !defined(__APPLE__) && !defined(__ntohl)
#undef ntohl
#undef ntohs
#undef htonl
diff --git a/tcpdump.1.in b/tcpdump.1.in
index 5e1a00f82848..aabda7714900 100644
--- a/tcpdump.1.in
+++ b/tcpdump.1.in
@@ -29,7 +29,7 @@ tcpdump \- dump traffic on a network
.na
.B tcpdump
[
-.B \-AbdDefIKlLnNOpqRStuUvxX
+.B \-AbdDefhHIJKlLnNOpqRStuUvxX
] [
.B \-B
.I buffer_size
@@ -56,6 +56,10 @@ tcpdump \- dump traffic on a network
.I interface
]
[
+.B \-j
+.I tstamp_type
+]
+[
.B \-m
.I module
]
@@ -256,7 +260,7 @@ Print the link-level header on each dump line.
.B \-E
Use \fIspi@ipaddr algo:secret\fP for decrypting IPsec ESP packets that
are addressed to \fIaddr\fP and contain Security Parameter Index value
-\fIspi\fP. This combination may be repeated with comma or newline seperation.
+\fIspi\fP. This combination may be repeated with comma or newline separation.
.IP
Note that setting the secret for IPv4 ESP packets is supported at this time.
.IP
@@ -272,7 +276,7 @@ The ability to decrypt packets is only present if \fItcpdump\fP was compiled
with cryptography enabled.
.IP
\fIsecret\fP is the ASCII text for ESP secret key.
-If preceeded by 0x, then a hex value will be read.
+If preceded by 0x, then a hex value will be read.
.IP
The option assumes RFC2406 ESP, not RFC1827 ESP.
The option is only for debugging purposes, and
@@ -319,6 +323,13 @@ If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.
.TP
+.B \-h
+Print the tcpdump and libpcap version strings, print a usage message,
+and exit.
+.TP
+.B \-H
+Attempt to detect 802.11s draft mesh headers.
+.TP
.B \-i
Listen on \fIinterface\fP.
If unspecified, \fItcpdump\fP searches the system interface list for the
@@ -359,6 +370,18 @@ monitor mode will be shown; if
is specified, only those link-layer types available when in monitor mode
will be shown.
.TP
+.B \-j
+Set the time stamp type for the capture to \fItstamp_type\fP. The names
+to use for the time stamp types are given in
+.BR pcap-tstamp-type (@MAN_MISC_INFO@);
+not all the types listed there will necessarily be valid for any given
+interface.
+.TP
+.B \-J
+List the supported time stamp types for the interface and exit. If the
+time stamp type cannot be set for the interface, no time stamp types are
+listed.
+.TP
.B \-K
Don't attempt to verify IP, TCP, or UDP checksums. This is useful for
interfaces that perform some or all of those checksum calculation in
@@ -615,7 +638,10 @@ savefile name as the only argument, make the flags & arguments arrangements
and execute the command that you want.
.TP
.B \-Z
-Drops privileges (if root) and changes user ID to
+If
+.I tcpdump
+is running as root, after opening the capture device or input savefile,
+but before opening any savefiles for output, change the user ID to
.I user
and the group ID to the primary group of
.IR user .
@@ -871,8 +897,8 @@ The general format of a tcp protocol line is:
\fISrc\fP and \fIdst\fP are the source and destination IP
addresses and ports.
\fIFlags\fP are some combination of S (SYN),
-F (FIN), P (PUSH), R (RST), W (ECN CWR) or E (ECN-Echo), or a single
-`.' (no flags).
+F (FIN), P (PUSH), R (RST), U (URG), W (ECN CWR), E (ECN-Echo) or
+`.' (ACK), or `none' if no flags are set.
\fIData-seqno\fP describes the portion of sequence space covered
by the data in this packet (see example below).
\fIAck\fP is sequence number of the next data expected the other
@@ -919,8 +945,7 @@ bytes and there was a max-segment-size option requesting an mss of
Csam replies with a similar packet except it includes a piggy-backed
ack for rtsg's SYN.
Rtsg then acks csam's SYN.
-The `.' means no
-flags were set.
+The `.' means the ACK flag was set.
The packet contained no data so there is no data sequence number.
Note that the ack sequence
number is a small integer (1).
@@ -1266,7 +1291,6 @@ RA, \fInot\fP set) and `|' (truncated message, TC, set).
If the
`question' section doesn't contain exactly one entry, `[\fIn\fPq]'
is printed.
-
.HD
SMB/CIFS decoding
.LP
@@ -1274,19 +1298,18 @@ SMB/CIFS decoding
on UDP/137, UDP/138 and TCP/139.
Some primitive decoding of IPX and
NetBEUI SMB data is also done.
-
+.LP
By default a fairly minimal decode is done, with a much more detailed
decode done if -v is used.
Be warned that with -v a single SMB packet
may take up a page or more, so only use -v if you really want all the
gory details.
-
-For information on SMB packet formats and what all te fields mean see
+.LP
+For information on SMB packet formats and what all the fields mean see
www.cifs.org or the pub/samba/specs/ directory on your favorite
samba.org mirror site.
The SMB patches were written by Andrew Tridgell
(tridge@samba.org).
-
.HD
NFS Requests and Replies
.LP
@@ -1639,7 +1662,7 @@ Ethernet interface removed the packet from the wire and when the kernel
serviced the `new packet' interrupt.
.SH "SEE ALSO"
stty(1), pcap(3PCAP), bpf(4), nit(4P), pcap-savefile(@MAN_FILE_FORMATS@),
-pcap-filter(@MAN_MISC_INFO@)
+pcap-filter(@MAN_MISC_INFO@), pcap-tstamp-type(@MAN_MISC_INFO@)
.SH AUTHORS
The original authors are:
.LP
diff --git a/tcpdump.c b/tcpdump.c
index 06683af344a4..ac35b2b34909 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -92,6 +92,9 @@ netdissect_options *gndo = &Gndo;
static int dflag; /* print filter code */
static int Lflag; /* list available data link types and exit */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static int Jflag; /* list available time stamp types */
+#endif
static char *zflag = NULL; /* compress each savefile using a specified command (like gzip or bzip2) */
static int infodelay;
@@ -112,7 +115,8 @@ static void ndo_default_print(netdissect_options *, const u_char *, u_int);
static void dump_packet_and_trunc(u_char *, const struct pcap_pkthdr *, const u_char *);
static void dump_packet(u_char *, const struct pcap_pkthdr *, const u_char *);
static void droproot(const char *, const char *);
-static void ndo_error(netdissect_options *ndo, const char *fmt, ...);
+static void ndo_error(netdissect_options *ndo, const char *fmt, ...)
+ __attribute__ ((noreturn, format (printf, 2, 3)));
static void ndo_warning(netdissect_options *ndo, const char *fmt, ...);
#ifdef SIGINFO
@@ -130,10 +134,6 @@ RETSIGTYPE requestinfo(int);
static void info(int);
static u_int packets_captured;
-typedef u_int (*if_printer)(const struct pcap_pkthdr *, const u_char *);
-typedef u_int (*if_ndo_printer)(struct netdissect_options *ndo,
- const struct pcap_pkthdr *, const u_char *);
-
struct printer {
if_printer f;
int type;
@@ -151,7 +151,6 @@ static struct printer printers[] = {
#ifdef DLT_ARCNET_LINUX
{ arcnet_linux_if_print, DLT_ARCNET_LINUX },
#endif
- { ether_if_print, DLT_EN10MB },
{ token_if_print, DLT_IEEE802 },
#ifdef DLT_LANE8023
{ lane_if_print, DLT_LANE8023 },
@@ -303,13 +302,29 @@ static struct printer printers[] = {
};
static struct ndo_printer ndo_printers[] = {
+ { ether_if_print, DLT_EN10MB },
#ifdef DLT_IPNET
{ ipnet_if_print, DLT_IPNET },
#endif
+#ifdef DLT_IEEE802_15_4
+ { ieee802_15_4_if_print, DLT_IEEE802_15_4 },
+#endif
+#ifdef DLT_IEEE802_15_4_NOFCS
+ { ieee802_15_4_if_print, DLT_IEEE802_15_4_NOFCS },
+#endif
+#ifdef DLT_PPI
+ { ppi_if_print, DLT_PPI },
+#endif
+#ifdef DLT_NETANALYZER
+ { netanalyzer_if_print, DLT_NETANALYZER },
+#endif
+#ifdef DLT_NETANALYZER_TRANSPARENT
+ { netanalyzer_transparent_if_print, DLT_NETANALYZER_TRANSPARENT },
+#endif
{ NULL, 0 },
};
-static if_printer
+if_printer
lookup_printer(int type)
{
struct printer *p;
@@ -322,7 +337,7 @@ lookup_printer(int type)
/* NOTREACHED */
}
-static if_ndo_printer
+if_ndo_printer
lookup_ndo_printer(int type)
{
struct ndo_printer *p;
@@ -359,6 +374,40 @@ struct dump_info {
pcap_dumper_t *p;
};
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+static void
+show_tstamp_types_and_exit(const char *device, pcap_t *pd)
+{
+ int n_tstamp_types;
+ int *tstamp_types = 0;
+ const char *tstamp_type_name;
+ int i;
+
+ n_tstamp_types = pcap_list_tstamp_types(pd, &tstamp_types);
+ if (n_tstamp_types < 0)
+ error("%s", pcap_geterr(pd));
+
+ if (n_tstamp_types == 0) {
+ fprintf(stderr, "Time stamp type cannot be set for %s\n",
+ device);
+ exit(0);
+ }
+ fprintf(stderr, "Time stamp types for %s (use option -j to set):\n",
+ device);
+ for (i = 0; i < n_tstamp_types; i++) {
+ tstamp_type_name = pcap_tstamp_type_val_to_name(tstamp_types[i]);
+ if (tstamp_type_name != NULL) {
+ (void) fprintf(stderr, " %s (%s)\n", tstamp_type_name,
+ pcap_tstamp_type_val_to_description(tstamp_types[i]));
+ } else {
+ (void) fprintf(stderr, " %d\n", tstamp_types[i]);
+ }
+ }
+ pcap_free_tstamp_types(tstamp_types);
+ exit(0);
+}
+#endif
+
static void
show_dlts_and_exit(const char *device, pcap_t *pd)
{
@@ -400,13 +449,13 @@ show_dlts_and_exit(const char *device, pcap_t *pd)
if (lookup_printer(dlts[n_dlts]) == NULL
&& lookup_ndo_printer(dlts[n_dlts]) == NULL)
(void) fprintf(stderr, " (printing not supported)");
- putchar('\n');
+ fprintf(stderr, "\n");
} else {
(void) fprintf(stderr, " DLT %d (printing not supported)\n",
dlts[n_dlts]);
}
}
- free(dlts);
+ pcap_free_datalinks(dlts);
exit(0);
}
@@ -428,6 +477,16 @@ show_dlts_and_exit(const char *device, pcap_t *pd)
#define I_FLAG
#endif /* HAVE_PCAP_CREATE */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+#define j_FLAG "j:"
+#define j_FLAG_USAGE " [ -j tstamptype ]"
+#define J_FLAG "J"
+#else /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */
+#define j_FLAG
+#define j_FLAG_USAGE
+#define J_FLAG
+#endif /* PCAP_ERROR_TSTAMP_TYPE_NOTSUP */
+
#ifdef HAVE_PCAP_FINDALLDEVS
#ifndef HAVE_PCAP_IF_T
#undef HAVE_PCAP_FINDALLDEVS
@@ -572,6 +631,7 @@ main(int argc, char **argv)
if(wsockinit() != 0) return 1;
#endif /* WIN32 */
+ jflag=-1; /* not set */
gndo->ndo_Oflag=1;
gndo->ndo_Rflag=1;
gndo->ndo_dlt=-1;
@@ -598,9 +658,8 @@ main(int argc, char **argv)
smiInit("tcpdump");
#endif
- opterr = 0;
while (
- (op = getopt(argc, argv, "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:i:" I_FLAG "KlLm:M:nNOpqr:Rs:StT:u" U_FLAG "vw:W:xXy:Yz:Z:")) != -1)
+ (op = getopt(argc, argv, "aAb" B_FLAG "c:C:d" D_FLAG "eE:fF:G:hHi:" I_FLAG j_FLAG J_FLAG "KlLm:M:nNOpqr:Rs:StT:u" U_FLAG "vw:W:xXy:Yz:Z:")) != -1)
switch (op) {
case 'a':
@@ -693,6 +752,14 @@ main(int argc, char **argv)
}
break;
+ case 'h':
+ usage();
+ break;
+
+ case 'H':
+ ++Hflag;
+ break;
+
case 'i':
if (optarg[0] == '0' && optarg[1] == 0)
error("Invalid adapter index");
@@ -740,6 +807,18 @@ main(int argc, char **argv)
break;
#endif /* HAVE_PCAP_CREATE */
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ case 'j':
+ jflag = pcap_tstamp_type_name_to_val(optarg);
+ if (jflag < 0)
+ error("invalid time stamp type %s", optarg);
+ break;
+
+ case 'J':
+ Jflag++;
+ break;
+#endif
+
case 'l':
#ifdef WIN32
/*
@@ -854,6 +933,8 @@ main(int argc, char **argv)
packettype = PT_TFTP;
else if (strcasecmp(optarg, "aodv") == 0)
packettype = PT_AODV;
+ else if (strcasecmp(optarg, "carp") == 0)
+ packettype = PT_CARP;
else
error("unknown packet type `%s'", optarg);
break;
@@ -1032,6 +1113,10 @@ main(int argc, char **argv)
pd = pcap_create(device, ebuf);
if (pd == NULL)
error("%s", ebuf);
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ if (Jflag)
+ show_tstamp_types_and_exit(device, pd);
+#endif
/*
* Is this an interface that supports monitor mode?
*/
@@ -1041,16 +1126,16 @@ main(int argc, char **argv)
supports_monitor_mode = 0;
status = pcap_set_snaplen(pd, snaplen);
if (status != 0)
- error("%s: pcap_set_snaplen failed: %s",
+ error("%s: Can't set snapshot length: %s",
device, pcap_statustostr(status));
status = pcap_set_promisc(pd, !pflag);
if (status != 0)
- error("%s: pcap_set_promisc failed: %s",
+ error("%s: Can't set promiscuous mode: %s",
device, pcap_statustostr(status));
if (Iflag) {
status = pcap_set_rfmon(pd, 1);
if (status != 0)
- error("%s: pcap_set_rfmon failed: %s",
+ error("%s: Can't set monitor mode: %s",
device, pcap_statustostr(status));
}
status = pcap_set_timeout(pd, 1000);
@@ -1060,9 +1145,17 @@ main(int argc, char **argv)
if (Bflag != 0) {
status = pcap_set_buffer_size(pd, Bflag);
if (status != 0)
- error("%s: pcap_set_buffer_size failed: %s",
+ error("%s: Can't set buffer size: %s",
device, pcap_statustostr(status));
}
+#ifdef HAVE_PCAP_SET_TSTAMP_TYPE
+ if (jflag != -1) {
+ status = pcap_set_tstamp_type(pd, jflag);
+ if (status < 0)
+ error("%s: Can't set time stamp type: %s",
+ device, pcap_statustostr(status));
+ }
+#endif
status = pcap_activate(pd);
if (status < 0) {
/*
@@ -1168,14 +1261,40 @@ main(int argc, char **argv)
(void)setsignal(SIGPIPE, cleanup);
(void)setsignal(SIGTERM, cleanup);
(void)setsignal(SIGINT, cleanup);
- (void)setsignal(SIGCHLD, child_cleanup);
#endif /* WIN32 */
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+ (void)setsignal(SIGCHLD, child_cleanup);
+#endif
/* Cooperate with nohup(1) */
#ifndef WIN32
if ((oldhandler = setsignal(SIGHUP, cleanup)) != SIG_DFL)
(void)setsignal(SIGHUP, oldhandler);
#endif /* WIN32 */
+#ifndef WIN32
+ /*
+ * If a user name was specified with "-Z", attempt to switch to
+ * that user's UID. This would probably be used with sudo,
+ * to allow tcpdump to be run in a special restricted
+ * account (if you just want to allow users to open capture
+ * devices, and can't just give users that permission,
+ * you'd make tcpdump set-UID or set-GID).
+ *
+ * Tcpdump doesn't necessarily write only to one savefile;
+ * the general only way to allow a -Z instance to write to
+ * savefiles as the user under whose UID it's run, rather
+ * than as the user specified with -Z, would thus be to switch
+ * to the original user ID before opening a capture file and
+ * then switch back to the -Z user ID after opening the savefile.
+ * Switching to the -Z user ID only after opening the first
+ * savefile doesn't handle the general case.
+ */
+ if (getuid() == 0 || geteuid() == 0) {
+ if (username || chroot_dir)
+ droproot(username, chroot_dir);
+ }
+#endif /* WIN32 */
+
if (pcap_setfilter(pd, &fcode) < 0)
error("%s", pcap_geterr(pd));
if (WFileName) {
@@ -1205,6 +1324,10 @@ main(int argc, char **argv)
callback = dump_packet;
pcap_userdata = (u_char *)p;
}
+#ifdef HAVE_PCAP_DUMP_FLUSH
+ if (Uflag)
+ pcap_dump_flush(p);
+#endif
} else {
type = pcap_datalink(pd);
printinfo.ndo_type = 1;
@@ -1225,16 +1348,7 @@ main(int argc, char **argv)
callback = print_packet;
pcap_userdata = (u_char *)&printinfo;
}
-#ifndef WIN32
- /*
- * We cannot do this earlier, because we want to be able to open
- * the file (if done) for writing before giving up permissions.
- */
- if (getuid() == 0 || geteuid() == 0) {
- if (username || chroot_dir)
- droproot(username, chroot_dir);
- }
-#endif /* WIN32 */
+
#ifdef SIGINFO
/*
* We can't get statistics when reading from a file rather
@@ -1363,13 +1477,13 @@ cleanup(int signo _U_)
On windows, we do not use a fork, so we do not care less about
waiting a child processes to die
*/
-#ifndef WIN32
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
static RETSIGTYPE
child_cleanup(int signo _U_)
{
wait(NULL);
}
-#endif /* WIN32 */
+#endif /* HAVE_FORK && HAVE_VFORK */
static void
info(register int verbose)
@@ -1390,34 +1504,41 @@ info(register int verbose)
if (!verbose)
fprintf(stderr, "%s: ", program_name);
- (void)fprintf(stderr, "%u packets captured", packets_captured);
+ (void)fprintf(stderr, "%u packet%s captured", packets_captured,
+ PLURAL_SUFFIX(packets_captured));
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%u packets received by filter", stat.ps_recv);
+ (void)fprintf(stderr, "%u packet%s received by filter", stat.ps_recv,
+ PLURAL_SUFFIX(stat.ps_recv));
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%u packets dropped by kernel", stat.ps_drop);
+ (void)fprintf(stderr, "%u packet%s dropped by kernel", stat.ps_drop,
+ PLURAL_SUFFIX(stat.ps_drop));
if (stat.ps_ifdrop != 0) {
if (!verbose)
fputs(", ", stderr);
else
putc('\n', stderr);
- (void)fprintf(stderr, "%u packets dropped by interface\n",
- stat.ps_ifdrop);
+ (void)fprintf(stderr, "%u packet%s dropped by interface\n",
+ stat.ps_ifdrop, PLURAL_SUFFIX(stat.ps_ifdrop));
} else
putc('\n', stderr);
infoprint = 0;
}
-#ifndef WIN32
+#if defined(HAVE_FORK) || defined(HAVE_VFORK)
static void
compress_savefile(const char *filename)
{
+# ifdef HAVE_FORK
if (fork())
+# else
+ if (vfork())
+# endif
return;
/*
* Set to lowest priority so that this doesn't disturb the capture
@@ -1433,15 +1554,20 @@ compress_savefile(const char *filename)
zflag,
filename,
strerror(errno));
+# ifdef HAVE_FORK
+ exit(1);
+# else
+ _exit(1);
+# endif
}
-#else /* WIN32 */
+#else /* HAVE_FORK && HAVE_VFORK */
static void
compress_savefile(const char *filename)
{
fprintf(stderr,
- "compress_savefile failed. Functionality not implemented under windows\n");
+ "compress_savefile failed. Functionality not implemented under your system\n");
}
-#endif /* WIN32 */
+#endif /* HAVE_FORK && HAVE_VFORK */
static void
dump_packet_and_trunc(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
@@ -1780,17 +1906,17 @@ usage(void)
#endif /* WIN32 */
#endif /* HAVE_PCAP_LIB_VERSION */
(void)fprintf(stderr,
-"Usage: %s [-aAbd" D_FLAG "ef" I_FLAG "KlLnNOpqRStu" U_FLAG "vxX]" B_FLAG_USAGE " [ -c count ]\n", program_name);
+"Usage: %s [-aAbd" D_FLAG "efhH" I_FLAG J_FLAG "KlLnNOpqRStu" U_FLAG "vxX]" B_FLAG_USAGE " [ -c count ]\n", program_name);
(void)fprintf(stderr,
"\t\t[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]\n");
(void)fprintf(stderr,
-"\t\t[ -i interface ] [ -M secret ] [ -r file ]\n");
+"\t\t[ -i interface ]" j_FLAG_USAGE " [ -M secret ]\n");
(void)fprintf(stderr,
-"\t\t[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]\n");
+"\t\t[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]\n");
(void)fprintf(stderr,
-"\t\t[ -y datalinktype ] [ -z command ] [ -Z user ]\n");
+"\t\t[ -W filecount ] [ -y datalinktype ] [ -z command ]\n");
(void)fprintf(stderr,
-"\t\t[ expression ]\n");
+"\t\t[ -Z user ] [ expression ]\n");
exit(1);
}
diff --git a/tests/02-sunrise-sunset-esp.pcap b/tests/02-sunrise-sunset-esp.pcap
new file mode 100644
index 000000000000..e52af9888c73
--- /dev/null
+++ b/tests/02-sunrise-sunset-esp.pcap
Binary files differ
diff --git a/tests/02-sunrise-sunset-esp.puu b/tests/02-sunrise-sunset-esp.puu
deleted file mode 100644
index 0ceffc1c1c83..000000000000
--- a/tests/02-sunrise-sunset-esp.puu
+++ /dev/null
@@ -1,34 +0,0 @@
-begin 644 02-sunrise-sunset-esp.pcap
-MU,.RH0(`!``````````````&```!``````````````"6````E@```!```&1D
-M11```&1D(P@`10``B/]G``!`,O:5P`$"%\`!`BT2-%9X`````4P@12\\L)(1
-MTZ=(S>7($>.<3N@\_I:AY"K/TKAZJP719"NCKYP;PT(0+$"M%=]-X"`*8V.'
-M-'$1A]02"3N#OZI#&1R]A*1;`G8S@YFQ]<H7S))417Y9!E4:<$'CW)%VZ&_3
-M_]T`L+P1^!`PEP``````````E@```)8````0``!D9$40``!D9",(`$4``(C_
-M:```0#+VE,`!`A?``0(M$C16>`````(:<$'CW)%VZ',2KQMB@CN?'"^GJ<=:
-MD-0`+.V^J'2AK).'XQ_B"B8:[%A_+K[6KS2'XR[UN`,R"BJP?^].ZM#/[$)#
-M17^!D"8_[BZ>GU4Z*$7I"N$U*>J47?C-4;I>#`%6+#0%]D75YC']*Z\`````
-M`````)8```"6````$```9&1%$```9&0C"`!%``"(_VD``$`R]I/``0(7P`$"
-M+1(T5G@````#7?C-4;I>#`%@W%89?QJ#$TJ,4G\FO&HO=F+,,%1E(]);XI]T
-MV7W.RY$2=JZ1%!QCNX[;^.JD4W91;7)NJWV2MF4?7`=&_3OWW%V&6RIXKB75
-M#;2TWNL"A:MF!I@_5R^]L6;Z`L?E@1:T&71G``````````"6````E@```!``
-M`&1D11```&1D(P@`10``B/]J``!`,O:2P`$"%\`!`BT2-%9X````!*MF!I@_
-M5R^]%';9*Q:S_B]]O_8FV:2K1A!]/SQHI7>OS815*I?4%/:.=BBJUEGJ(X8\
-M<SZ>P1E/@&P\9MR)DP3[UCWI@,MR%A$\CR]=G(("[CFB7AUN$AENZOO&\:7%
-M2KLW<'NP,L(I=!;8=0``````````E@```)8````0``!D9$40``!D9",(`$4`
-M`(C_:P``0#+VD<`!`A?``0(M$C16>`````5NZOO&\:7%2J12,9;LOK"-S,=$
-MO0]X+J(OJQED#PLBRY[\^352UZK&57<R0L9JQ:KH6`)BUN$`5]1WU@"A!8TM
-MO^)<;`-SW;1HQO$CE\#`O[W[17GW[0G&M,^T?7>6,Z<:%73AWV3:;Y/:=@(`
-M`````````)8```"6````$```9&1%$```9&0C"`!%``"(_VP``$`R]I#``0(7
-MP`$"+1(T5G@````&M,^T?7>6,Z=>N_YZQFV[H1^6\!/I*IMAOHZE\E0M.Z!X
-M#[0EG3#>%]7`]*2F?@S4X2''TK09J@NG/.HEXCE./..K^'-@":X[\?0L+B`S
-MQA\HTK\'J]:S]N6O`]\)NQD)9;H2P\K`^NX37`R5``````````"6````E@``
-M`!```&1D11```&1D(P@`10``B/]M``!`,O:/P`$"%\`!`BT2-%9X````!^6O
-M`]\)NQD)>BYZ>`/DA=N;A2...3-7FZOK?:5KGXBN`/E?$\[-11-$G#E;(>N"
-M+<$/YP'SM$>16LU18&Q]9)$]0)/M]:2Z#A6]-,SM*>FI/`X*K-*-:KS3IW<"
-MO(>(P(K=:X::SJ;O[J>0K```````````E@```)8````0``!D9$40``!D9",(
-M`$4``(C_;@``0#+VCL`!`A?``0(M$C16>`````C3IW<"O(>(P'-43;C[`MCD
-M`BMZAX]F!?'Z$8Q"5HYMVDC9"8I^O(Z4!/)`/IVD-(ZK)_52-H2XK+,(-LR)
-MM)K#XLF">KY0>C?\[MA%3F%$?ORJ@:>O]5H>?-$OQH)J<ZFOW_+K%G=UG0"[
-"G'T`
-`
-end
diff --git a/tests/08-sunrise-sunset-aes.pcap b/tests/08-sunrise-sunset-aes.pcap
new file mode 100644
index 000000000000..1ebe3deac5a7
--- /dev/null
+++ b/tests/08-sunrise-sunset-aes.pcap
Binary files differ
diff --git a/tests/08-sunrise-sunset-aes.puu b/tests/08-sunrise-sunset-aes.puu
deleted file mode 100644
index ec8793d02238..000000000000
--- a/tests/08-sunrise-sunset-aes.puu
+++ /dev/null
@@ -1,36 +0,0 @@
-begin 644 08-sunrise-sunset-aes.pcap
-MU,.RH0(`!``````````````&```!``````````````"F````I@```!```&1D
-M11```&1D(P@`10``F/SJ``!`,OD"P`$"%\`!`BW1(T5G`````>:['.C0J(%P
-MVF'>(TU6&*"9A,`,/KS\:>DH>O_L(51)_[YY"L<H#LJ/;(BQ)=[*$<APY/A1
-M-"T@(`_Q&)S!C)$*7S?G3Q4H\F=)OYF+P@S&11%^*]S)N@L*TZ@!:&&:QFZT
-ML'#7<>9?8'?J4V:_.]B+6UR\T>39D+=NA;$``````````*8```"F````$```
-M9&1%$```9&0C"`!%``"8_.L``$`R^0'``0(7P`$"+=$C16<````";K2P<-=Q
-MYE]@=^I39K\[V$1HDU9'L,6BVK.^B4]E6QY&:?3?T)G?"RSU;X!J]]7S)<`,
-M*L!SYO^RUWR?!EIJMWU=5B406YL-I`]LK`^;-3%(NEY#R`ST=W40=:*[M$*8
-M#<KX)19@.`.4_5YD^:V;G@3>`GLTK(5ZCS"BC@``````````I@```*8````0
-M``!D9$40``!D9",(`$4``)C\[```0#+Y`,`!`A?``0(MT2-%9P````,-RO@E
-M%F`X`Y3]7F3YK9N>=6-;U&'6">_4H80DMY^Z9E3ZL3[ONN*L<"Z@7(VO]XT^
-M/2JP<(/^8NTO-4\/B5AJEC4N;,\"7-&(;9AM_2G5A1C.[LBK3')P?AE;$I[)
-M!8N&RC?OTD7<V)AIU4,*E>7ELURFXRD/JD(:@RER``````````"F````I@``
-M`!```&1D11```&1D(P@`10``F/SM``!`,OC_P`$"%\`!`BW1(T5G````!(;*
-M-^_21=S8F&G50PJ5Y>5K%@R;)A(E<5YD'@86@GT"-&&MHP*.A=?%=:FDZH=4
-M*9":>]'G'CB4%2?PJ"2^H*51\8P!9T`X3#;F+H$[<GW7=?K.R30-'6'L3AO8
-MR=:M3S$GIZ>4Z$7ZL0<\S=S\%`:BW9U2'@U^@D,,:.P``````````*8```"F
-M````$```9&1%$```9&0C"`!%``"8_.X``$`R^/[``0(7P`$"+=$C16<````%
-M,2>GIY3H1?JQ!SS-W/P4!BW&*&A[$!XGK<^M^>_X193"G"1QTWG>Q"CO25$"
-MPM+1+8[6&(17\EE\P:6-WVPT=911?@'-Z,,/UVZ2!QV(X4513U9]P62CJMS>
-M^ODBGHU=%T.H2&Z<4,8(!4,2[&A4^H="L:+`=4G?*(7,2@``````````I@``
-M`*8````0``!D9$40``!D9",(`$4``)C\[P``0#+X_<`!`A?``0(MT2-%9P``
-M``870ZA(;IQ0Q@@%0Q+L:%3Z@*HQPZA]3STWDY#CYJGOJH)K<KVT9G61>>I'
-MEHMF"X!^G,H@,YWT7^=60.3/$7?AYH)G9GBD%%#,D]!EDA]B*?UE>U96+"5\
-MK=""/.LO'__^;$N<E@!.2&3^@U:P__8_'D^YC!41E,!@!6<K``````````"F
-M````I@```!```&1D11```&1D(P@`10``F/SP``!`,OC\P`$"%\`!`BW1(T5G
-M````!_YL2YR6`$Y(9/Z#5K#_]C_ZJU%7M?L23>I`L#D]@&G?Z7B2O#GI?NDK
-MF[7JPN,8V\H>%G+)'+%+FL*&\8+H2^KFWF5YQ:$4V!,1?G;=OYD;!,3YD'V(
-MW[Y!I(U=X9[\:L)(5GBJ,B!-5N$.CGV$VLD^R?Z,KL[AMI(ZC-P`````````
-M`*8```"F````$```9&1%$```9&0C"`!%``"8_/$``$`R^/O``0(7P`$"+=$C
-M16<````(PDA6>*HR($U6X0Z.?83:R;Y0<E/4SN)UX;Q:D$D%K(DZZ:^_\K$'
-MZQ81NT4KBGD#Z=_^`E^!HS*KHEJ!)!KE>&'2065/"*M'ELXD?1%3\L3TC.UK
-HKWB(C5O@78>9LQ^<0Z6]F=:<;@[>L^;/\-6WB81[GX)<MS0B=>LGD@``
-`
-end
diff --git a/tests/08-sunrise-sunset-esp2.pcap b/tests/08-sunrise-sunset-esp2.pcap
new file mode 100644
index 000000000000..c3e54cbe917a
--- /dev/null
+++ b/tests/08-sunrise-sunset-esp2.pcap
Binary files differ
diff --git a/tests/08-sunrise-sunset-esp2.puu b/tests/08-sunrise-sunset-esp2.puu
deleted file mode 100644
index 4785f2b808c9..000000000000
--- a/tests/08-sunrise-sunset-esp2.puu
+++ /dev/null
@@ -1,43 +0,0 @@
-begin 644 08-sunrise-sunset-esp2.pcap
-MU,.RH0(`!``````````````&```!``````````````#.````S@```!```&1D
-M11```&1D(P@`10``P"E-``!`,LQXP`$"%\`!`BT2-%9X`````4=!+\5+F8`+
-M[[NOU-#98*AO5\780X[VDXF@2W8<10:J!'!Z!-[7N4CFNRKIH;PUA1SL"Y9\
-M-?_3N_,W/@*T+C/"]=S[`;D!/;`SR5,3+><9K.^\9N><18TY9Z\!I\S./L8R
-MFE53,S6Y5X_Z\(T)ZIUS?X$8>&(_MT1"!SV:VPP!\XU$[3S-5L)4-O"&>]`Z
-M1:./61=%C6`6U1/65"A&KUE902]*``````````#.````S@```!```&1D11``
-M`&1D(P@`10``P"E/``!`,LQVP`$"%\`!`BT2-%9X`````CIU^SX%;G^!GUSP
-MSA<?/8FY?L/'^2]6'&3[\-NES3E]33Z$Q]#7D9$8TFS5);?S?)ZJOP4;ZD-M
-M+0_/@#*U=7A9;FYR*5&/^V%MSFEM`DAZY,8'<0.9M^'::<M+M2G0LG6*S/[3
-M?T`IIJUJ[GW,L+&PH<AR&K(]^=[K7IMGD[`8[ONL8LD3AM`N@$S!*?=;*8=>
-ML7P6FM81),N>T/1Z'"P7H5;```````````#.````S@```!```&1D11```&1D
-M(P@`10``P"E1``!`,LQTP`$"%\`!`BT2-%9X`````R4)-P&F>HPK/?_$MTFC
-M^TOO=/L#W_APTK6MIH_BC*I7\L<,9(?/0M"HK3[T3F;(Y2V70$P5?D'7GFIB
-MJZ/C",S/BD!9N8GV"\.;GVME[P!@!B1"DT=1W0_75FMI23H!T2^C);4GY>`I
-M-2T^O_0_WU&$)&+/P)%[TQUQ-T7G%\RXYJT0HO</^*)F`^2<W8KTY.W<FK4K
-M8UC+J'.*X)NH%<UTK+K+``````````#.````S@```!```&1D11```&1D(P@`
-M10``P"E3``!`,LQRP`$"%\`!`BT2-%9X````!)`9]]SHKI[EGW4M?W8>[$=<
-M`@@TL1#(Y980]E*/!^2@G`*&S9O^QMS1S?/`TL=5F9B(12?(145>Y2I+;+T?
-MKWUD@&.7U36]K-$[.%9CB*FK^E8>N:K/)4#$]ZO/:=#;MRH-)_139\,W6M4T
-M7SQ?BBX&GT,+A3#BB5^O=>+GKIC-4]5VBP)D-S<X2O)H[_/#M*T+&$\7PL.M
-M>7-)\W&;<@_J@,*!``````````#.````S@```!```&1D11```&1D(P@`10``
-MP"E5``!`,LQPP`$"%\`!`BT2-%9X````!0OIFA;,@2C4HF3>5!-C(0>5LR0"
-M='1\OQ.!-?@D(U0!453"<Q/!\*CDK.&OU'+WE:^7J8"AMS<@UYX*,<(&YA2Q
-MGQ(.3+0\#`!+`.TE,;\3:.<+F:?=T@.KOBL%VAAX9_RY$/^%$C+I*4&S<AM]
-MP*]SZ"RD'G.AJH76?SV&2HQLF+!J/QZ;.:<LB::-]+AE1+&);M^]`XZ-W2CX
-M+&CPZINP*9?>``````````#.````S@```!```&1D11```&1D(P@`10``P"E7
-M``!`,LQNP`$"%\`!`BT2-%9X````!I0M"-THEF=+!L=>A3N,\1+"'Z7(J?O0
-M.B?)(#X=/5F-.">%3.X'(=JKK:W<MZF2^8#73C[US$-O&ZZ+L:94R9E2#=J=
-M18HP?AN`5^)A+HW6EB*5P=AZ(S"\TIBZ'\.=]4A,#18'0/R_#C:4XX_?>ZMN
-M=B+^Q3"(KE\1299]=5E,'.&U(`H9N)+>9FS/`CA*>D^>AV.-C(S\)BM&)*XM
-M^BF__^<_``````````#.````S@```!```&1D11```&1D(P@`10``P"E9``!`
-M,LQLP`$"%\`!`BT2-%9X````!R"SQ'[6%(;Q>>O+]CS6D*+AD3IMC\^MMK8[
-M:T3)KM06!G^.H\>%UAT@)X6JL9\3V.HR"+_Q^_T-O$Y_S":_TP;V,LIV1O]H
-M-G@DOL'V-5)O@%<%!#O$2V,AS@W7(&$IX.YKK]\K#>FITU)<>O42T2GKFW+^
-M\/[,>E4P[Q"+7O,Y1(R22LND[H+469(%3,SN&3:U:/I`'&R@<`<TR"-4:&8+
-MQ5SX``````````#.````S@```!```&1D11```&1D(P@`10``P"E;``!`,LQJ
-MP`$"%\`!`BT2-%9X````"*',]A6A,Q(*B+]=&6X&T*L^\)Z6N%,G)(.;6X-K
-MM@&4<FRJ]#IJ%Y'-^T+4[&;0;_%7HM85LR8W(>HKGOV,^#L9,QF%)W^9!VFM
-MXG'XY]CWI5VF33?7,*P?6:.PS'&[\N$7W<*==+;P*$./4*OH&=O,6G!JIN>I
-M'ZDP*D&4K>SK-\/!7\Z&<&5J4%NU?NRM&25'*_"'UE3VH&?U]/V@932UYZT\
-`
-end
diff --git a/tests/QinQpacket.out b/tests/QinQpacket.out
new file mode 100644
index 000000000000..0ef70156a680
--- /dev/null
+++ b/tests/QinQpacket.out
@@ -0,0 +1,249 @@
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548
diff --git a/tests/QinQpacket.pcap b/tests/QinQpacket.pcap
new file mode 100644
index 000000000000..eeabfe4ebab5
--- /dev/null
+++ b/tests/QinQpacket.pcap
Binary files differ
diff --git a/tests/QinQpacketv.out b/tests/QinQpacketv.out
new file mode 100644
index 000000000000..03ed7cf686cd
--- /dev/null
+++ b/tests/QinQpacketv.out
@@ -0,0 +1,1977 @@
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51417, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51427, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51435, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51451, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a090, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51482, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51486, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51493, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51509, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a090, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51540, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51551, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51558, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51574, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696a015, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51605, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51608, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51616, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51632, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696a015, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51664, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51675, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51683, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51699, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f99, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51731, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51734, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51742, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51757, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f99, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51788, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51802, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51809, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51824, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969f1d, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51855, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51859, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51867, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51883, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969f1d, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51915, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51925, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51932, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51947, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e9e, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51979, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51983, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 51990, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52006, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e9e, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52037, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52048, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52056, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52072, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969e24, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52104, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52107, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52115, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52130, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969e24, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52162, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52167, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52175, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52191, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969da7, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52223, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52227, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52234, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52250, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969da7, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52281, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52289, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (6f:6e:02:63:61:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52297, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52312, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969d30, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52343, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52347, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52355, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52371, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969d30, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52403, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52413, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52420, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52435, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969cb6, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52467, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52470, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52478, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52493, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969cb6, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52524, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52534, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52541, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52556, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969c3d, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52588, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52591, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52598, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52613, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969c3d, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52645, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52649, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52656, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52672, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969bc4, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52704, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52708, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52715, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52731, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969bc4, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52762, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52772, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52779, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52794, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969b4f, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52825, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52829, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52836, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52851, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969b4f, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52882, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52893, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52900, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52915, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969ad7, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52947, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52950, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52957, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 52973, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969ad7, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53004, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53010, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53018, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, secs 12, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53034, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x96969a5d, secs 28, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53065, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53068, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53075, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53090, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x96969a5d, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53122, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53134, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53141, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53156, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969699e7, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53187, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53191, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53198, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, secs 11, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53214, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969699e7, secs 27, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53246, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 (03:6f:72:67:00:00) tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53250, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53257, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53273, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x9696996b, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53304, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53307, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53314, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53329, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x9696996b, secs 25, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53360, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53372, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, secs 3, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53379, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, secs 10, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 344: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53395, offset 0, flags [DF], proto UDP (17), length 326)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 298, xid 0x969698f9, secs 26, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 64: vlan 200, p 0, ethertype ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 172.17.0.2 tell 172.17.0.20, length 46
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53426, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969698f9, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+ MSZ Option 57, length 2: 1500
+ Parameter-Request Option 55, length 9:
+ Subnet-Mask, Default-Gateway, Domain-Name-Server, NTP
+ Vendor-Option, Time-Zone, TFTP, Option 159
+ Option 160
+ Hostname Option 12, length 17: "6731i00085D230C3F"
+ Vendor-Class Option 60, length 18: "AastraIPPhone6731i"
+00:08:5d:23:0c:3f > ff:ff:ff:ff:ff:ff, ethertype 802.1Q-QinQ (0x88a8), length 594: vlan 200, p 0, ethertype IPv4, (tos 0x0, ttl 32, id 53430, offset 0, flags [DF], proto UDP (17), length 576)
+ 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:08:5d:23:0c:3f, length 548, xid 0x969698f9, secs 4, Flags [none]
+ Client-Ethernet-Address 00:08:5d:23:0c:3f
+ Vendor-rfc1048 Extensions
+ Magic Cookie 0x63825363
+ DHCP-Message Option 53, length 1: Discover
+