mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-27 04:53:28 +00:00
MFC:
Import of tcpdump 3.9.8 and libpcap 0.9.8 Approved by: re (kensmith)
This commit is contained in:
parent
1eb2ad1e4e
commit
efb96a3f45
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/7/; revision=172786
@ -1,4 +1,88 @@
|
||||
@(#) $Header: /tcpdump/master/libpcap/CHANGES,v 1.59.2.8 2005/09/05 09:17:47 guy Exp $ (LBL)
|
||||
@(#) $Header: /tcpdump/master/libpcap/CHANGES,v 1.59.2.13 2007/09/12 22:40:04 ken Exp $ (LBL)
|
||||
|
||||
Mon. September 10, 2007. ken@xelerance.com. Summary for 0.9.8 libpcap release
|
||||
Change build process to put public libpcap headers into pcap subir
|
||||
DLT: Add value for IPMI IPMB packets
|
||||
DLT: Add value for u10 Networks boards
|
||||
Require <net/pfvar.h> for pf definitions - allows reading of pflog formatted
|
||||
libpcap files on an OS other than where the file was generated
|
||||
|
||||
Wed. July 23, 2007. mcr@xelerance.com. Summary for 0.9.7 libpcap release
|
||||
|
||||
FIXED version file to be 0.9.7 instead of 0.9.5.
|
||||
added flags/configuration for cloning bpf device.
|
||||
added DLT_MTP2_WITH_PHDR support (PPI)
|
||||
"fix" the "memory leak" in icode_to_fcode() -- documentation bug
|
||||
Various link-layer types, with a pseudo-header, for SITA http://www.sita.aero/
|
||||
introduces support for the DAG ERF type TYPE_COLOR_MC_HDLC_POS.
|
||||
Basic BPF filtering support for DLT_MTP2_WITH_PHDR is also added.
|
||||
check for IPv4 and IPv6, even for DLT_RAW
|
||||
add support for DLT_JUNIPER_ISM
|
||||
Pick up changes from NetBSD: many from tron, christos, drochner
|
||||
Allocate DLT_ for 802.15.4 without any header munging, for Mikko Saarnivala.
|
||||
Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header
|
||||
|
||||
Wed. April 25, 2007. ken@xelerance.com. Summary for 0.9.6 libpcap release
|
||||
|
||||
Put the public libpcap headers into a pcap subdirectory in both the
|
||||
source directory and the target include directory, and have include
|
||||
files at the top-level directory to include those headers, for
|
||||
backwards compatibility.
|
||||
Add Bluetooth support
|
||||
Add USB capturing support on Linux
|
||||
Add support for the binary USB sniffing interface in Linux
|
||||
Add support for new FreeBSD BIOCSDIRECTION ioctl
|
||||
Add additional filter operations for 802.11 frame types
|
||||
Add support for filtering on MTP2 frame types
|
||||
Propagate some changes from the main branch, so the x.9 branch has
|
||||
all the DLT_ and LINKTYPE_ values that the main branch does
|
||||
Reserved a DLT_ and SAVEFILE_ value for PPI (Per Packet Info)
|
||||
encapsulated packets
|
||||
Add LINKTYPE_ for IEEE 802.15.4, with address fields padded as done
|
||||
by Linux drivers
|
||||
Add LINKTYPE_ value corresponding to DLT_IEEE802_16_MAC_CPS.
|
||||
Add DLT for IEEE 802.16 (WiMAX) MAC Common Part Sublayer
|
||||
Add DLT for Bluetooth HCI UART transport layer
|
||||
When building a shared library, build with "-fPIC" on Linux to support x86_64
|
||||
Link with "$(CC) -shared" rather than "ld -shared" when building a
|
||||
".so" shared library
|
||||
Add support for autoconf 2.60
|
||||
Fixes to discard unread packets when changing filters
|
||||
Changes to handle name changes in the DAG library resulting from
|
||||
switching to libtool.
|
||||
Add support for new DAG ERF types.
|
||||
Add an explicit "-ldag" when building the shared library, so the DAG
|
||||
library dependency is explicit.
|
||||
Mac OSX fixes for dealing with "wlt" devices
|
||||
Fixes in add_or_find_if() & pcap_findalldevs() to optimize generating
|
||||
device lists
|
||||
Fixed a bug in pcap_open_live(). The return value of PacketSetHwFilter
|
||||
was not checked.
|
||||
|
||||
Tue. September 19, 2006. ken@xelerance.com. Summary for 0.9.5 libpcap release
|
||||
|
||||
Support for LAPD frames with vISDN
|
||||
Support for ERF on channelized T1/E1 cards via DAG API
|
||||
Fix capitalization that caused issues crossc compiling on Linux
|
||||
Better failure detection on PacketGetAdapterNames()
|
||||
Fixes for MPLS packet generation (link layer)
|
||||
OP_PACKET now matches the beginning of the packet, instead of
|
||||
beginning+link-layer
|
||||
Add DLT/LINKTYPE for carrying FRF.16 Multi-link Frame Relay
|
||||
Fix allocation of buffer for list of link-layer types
|
||||
Added a new DLT and LINKTYPE value for ARINC 653 Interpartition Communcation Messages
|
||||
Fixed a typo in a DLT value: it should start with DLT_ and not LINKTYPE_
|
||||
Redefined DLT_CAN20B and LINKTYPE_CAN20B as #190 (as this is the right value for CAN).
|
||||
Added definition for DLT_A429 and LINKTYPE_A429 as #184.
|
||||
Added a new DLT and LINKTYPE value for CAN v2.0B frames.
|
||||
Add support for DLT_JUNIPER_VP.
|
||||
Don't double-count received packets on Linux systems that
|
||||
support the PACKET_STATISTICS getsockopt() argument on
|
||||
PF_PACKET sockets.
|
||||
Add support for DLT_IEEE802_11 and DLT_IEEE802_11_RADIO link
|
||||
layers in Windows
|
||||
Add support to build libpcap.lib and wpcap.dll under Cygnus and
|
||||
MingW32.
|
||||
|
||||
Mon. September 5, 2005. ken@xelerance.com. Summary for 0.9.4 libpcap release
|
||||
|
||||
|
@ -23,6 +23,7 @@ Additional people who have contributed patches:
|
||||
Chris G. Demetriou <cgd@netbsd.org>
|
||||
Chris Lightfoot <cwrl@users.sourceforge.net>
|
||||
Chris Pepper <pepper@mail.reppep.com>
|
||||
Daniele Orlandi <daniele@orlandi.com>
|
||||
Darren Reed <darrenr@reed.wattle.id.au>
|
||||
David Kaelbling <drk@sgi.com>
|
||||
David Young <dyoung@ojctech.com>
|
||||
@ -31,6 +32,7 @@ Additional people who have contributed patches:
|
||||
Dug Song <dugsong@monkey.org>
|
||||
Eric Anderson <anderse@hpl.hp.com>
|
||||
Erik de Castro Lopo <erik.de.castro.lopo@sensorynetworks.com>
|
||||
Florent Drouin <Florent.Drouin@alcatel-lucent.fr>
|
||||
Franz Schaefer <schaefer@mond.at>
|
||||
Gianluca Varenni <varenni@netgroup-serv.polito.it>
|
||||
Gilbert Hoyek <gil_hoyek@hotmail.com>
|
||||
@ -50,6 +52,7 @@ Additional people who have contributed patches:
|
||||
John Bankier <jbankier@rainfinity.com>
|
||||
Jon Lindgren <jonl@yubyub.net>
|
||||
Juergen Schoenwaelder <schoenw@ibr.cs.tu-bs.de>
|
||||
Jung-uk Kim <jkim@FreeBSD.org>
|
||||
Kazushi Sugyo <sugyo@pb.jp.nec.com>
|
||||
Klaus Klein <kleink@netbsd.org>
|
||||
Koryn Grant <koryn@endace.com>
|
||||
@ -63,12 +66,14 @@ Additional people who have contributed patches:
|
||||
Mark Pizzolato <List-tcpdump-workers@subscriptions.pizzolato.net>
|
||||
Martin Husemann <martin@netbsd.org>
|
||||
Matthew Luckie <mjl@luckie.org.nz>
|
||||
Max Laier <max@love2party.net>
|
||||
Mike Kershaw <dragorn@kismetwireless.net>
|
||||
Mike Wiacek <mike@iroot.net>
|
||||
Monroe Williams <monroe@pobox.com>
|
||||
Nicolas Dade <ndade@nsd.dyndns.org>
|
||||
Octavian Cerna <tavy@ylabs.com>
|
||||
Olaf Kirch <okir@caldera.de>
|
||||
Ollie Wild <aaw@users.sourceforge.net>
|
||||
Onno van der Linden <onno@simplex.nl>
|
||||
Patrick Marie <mycroft@virgaria.org>
|
||||
Paul Mundt <lethal@linux-sh.org>
|
||||
@ -78,6 +83,7 @@ Additional people who have contributed patches:
|
||||
Peter Jeremy <peter.jeremy@alcatel.com.au>
|
||||
Phil Wood <cpw@lanl.gov>
|
||||
Rafal Maszkowski <rzm@icm.edu.pl>
|
||||
<rcb-isis@users.sourceforge.net>
|
||||
Rick Jones <raj@cup.hp.com>
|
||||
Scott Barron <sb125499@ohiou.edu>
|
||||
Scott Gifford <sgifford@tir.com>
|
||||
@ -85,6 +91,7 @@ Additional people who have contributed patches:
|
||||
Shaun Clowes <delius@progsoc.uts.edu.au>
|
||||
Solomon Peachy <pizza@shaftnet.org>
|
||||
Stefan Hudson <hudson@mbay.net>
|
||||
Stephen Donnelly <stephen@endace.com>
|
||||
Takashi Yamamoto <yamt@mwd.biglobe.ne.jp>
|
||||
Tanaka Shin-ya <zstanaka@archer.livedoor.com>
|
||||
Tony Li <tli@procket.com>
|
||||
|
@ -97,7 +97,6 @@ pcap-win32.c
|
||||
pcap.3
|
||||
pcap.c
|
||||
pcap.h
|
||||
pf.h
|
||||
ppp.h
|
||||
savefile.c
|
||||
scanner.l
|
||||
|
@ -1,342 +0,0 @@
|
||||
@(#) $Header: /tcpdump/master/libpcap/INSTALL,v 1.46 2000/12/16 09:05:11 guy Exp $ (LBL)
|
||||
|
||||
To build libpcap, run "./configure" (a shell script). The configure
|
||||
script will determine your system attributes and generate an
|
||||
appropriate Makefile from Makefile.in. Next run "make". If everything
|
||||
goes well you can su to root and run "make install". However, you need
|
||||
not install libpcap if you just want to build tcpdump; just make sure
|
||||
the tcpdump and libpcap directory trees have the same parent
|
||||
directory.
|
||||
|
||||
If configure says:
|
||||
|
||||
configure: warning: cannot determine packet capture interface
|
||||
configure: warning: (see INSTALL for more info)
|
||||
|
||||
then your system either does not support packet capture or your system
|
||||
does support packet capture but libpcap does not support that
|
||||
particular type. (If you have HP-UX, see below.) If your system uses a
|
||||
packet capture not supported by libpcap, please send us patches; don't
|
||||
forget to include an autoconf fragment suitable for use in
|
||||
configure.in.
|
||||
|
||||
It is possible to override the default packet capture type, although
|
||||
the circumstance where this works are limited. For example if you have
|
||||
installed bpf under SunOS 4 and wish to build a snit libpcap:
|
||||
|
||||
./configure --with-pcap=snit
|
||||
|
||||
Another example is to force a supported packet capture type in the case
|
||||
where the configure scripts fails to detect it.
|
||||
|
||||
You will need an ANSI C compiler to build libpcap. The configure script
|
||||
will abort if your compiler is not ANSI compliant. If this happens, use
|
||||
the GNU C compiler, available via anonymous ftp:
|
||||
|
||||
ftp://ftp.gnu.org/pub/gnu/gcc/
|
||||
|
||||
If you use flex, you must use version 2.4.6 or higher. The configure
|
||||
script automatically detects the version of flex and will not use it
|
||||
unless it is new enough. You can use "flex -V" to see what version you
|
||||
have (unless it's really old). The current version of flex is available
|
||||
via anonymous ftp:
|
||||
|
||||
ftp://ftp.ee.lbl.gov/flex-*.tar.Z
|
||||
|
||||
As of this writing, the current version is 2.5.4.
|
||||
|
||||
If you use bison, you must use flex (and visa versa). The configure
|
||||
script automatically falls back to lex and yacc if both flex and bison
|
||||
are not found.
|
||||
|
||||
Sometimes the stock C compiler does not interact well with flex and
|
||||
bison. The list of problems includes undefined references for alloca.
|
||||
You can get around this by installing gcc or manually disabling flex
|
||||
and bison with:
|
||||
|
||||
./configure --without-flex --without-bison
|
||||
|
||||
If your system only has AT&T lex, this is okay unless your libpcap
|
||||
program uses other lex/yacc generated code. (Although it's possible to
|
||||
map the yy* identifiers with a script, we use flex and bison so we
|
||||
don't feel this is necessary.)
|
||||
|
||||
Some systems support the Berkeley Packet Filter natively; for example
|
||||
out of the box OSF and BSD/OS have bpf. If your system does not support
|
||||
bpf, you will need to pick up:
|
||||
|
||||
ftp://ftp.ee.lbl.gov/bpf-*.tar.Z
|
||||
|
||||
Note well: you MUST have kernel source for your operating system in
|
||||
order to install bpf. An exception is SunOS 4; the bpf distribution
|
||||
includes replacement kernel objects for some of the standard SunOS 4
|
||||
network device drivers. See the bpf INSTALL document for more
|
||||
information.
|
||||
|
||||
If you use Solaris, there is a bug with bufmod(7) that is fixed in
|
||||
Solaris 2.3.2 (aka SunOS 5.3.2). Setting a snapshot length with the
|
||||
broken bufmod(7) results in data be truncated from the FRONT of the
|
||||
packet instead of the end. The work around is to not set a snapshot
|
||||
length but this results in performance problems since the entire packet
|
||||
is copied to user space. If you must run an older version of Solaris,
|
||||
there is a patch available from Sun; ask for bugid 1149065. After
|
||||
installing the patch, use "setenv BUFMOD_FIXED" to enable use of
|
||||
bufmod(7). However, we recommend you run a more current release of
|
||||
Solaris.
|
||||
|
||||
If you use the SPARCompiler, you must be careful to not use the
|
||||
/usr/ucb/cc interface. If you do, you will get bogus warnings and
|
||||
perhaps errors. Either make sure your path has /opt/SUNWspro/bin
|
||||
before /usr/ucb or else:
|
||||
|
||||
setenv CC /opt/SUNWspro/bin/cc
|
||||
|
||||
before running configure. (You might have to do a "make distclean"
|
||||
if you already ran configure once).
|
||||
|
||||
Also note that "make depend" won't work; while all of the known
|
||||
universe uses -M, the SPARCompiler uses -xM to generate makefile
|
||||
dependencies.
|
||||
|
||||
If you are trying to do packet capture with a FORE ATM card, you may or
|
||||
may not be able to. They usually only release their driver in object
|
||||
code so unless their driver supports packet capture, there's not much
|
||||
libpcap can do.
|
||||
|
||||
If you get an error like:
|
||||
|
||||
tcpdump: recv_ack: bind error 0x???
|
||||
|
||||
when using DLPI, look for the DL_ERROR_ACK error return values, usually
|
||||
in /usr/include/sys/dlpi.h, and find the corresponding value.
|
||||
|
||||
Under {DEC OSF/1, Digital UNIX, Tru64 UNIX}, packet capture must be
|
||||
enabled before it can be used. For instructions on how to enable packet
|
||||
filter support, see:
|
||||
|
||||
ftp://ftp.digital.com/pub/Digital/dec-faq/Digital-UNIX
|
||||
|
||||
Look for the "How do I configure the Berkeley Packet Filter and capture
|
||||
tcpdump traces?" item.
|
||||
|
||||
Once you enable packet filter support, your OSF system will support bpf
|
||||
natively.
|
||||
|
||||
Under Ultrix, packet capture must be enabled before it can be used. For
|
||||
instructions on how to enable packet filter support, see:
|
||||
|
||||
ftp://ftp.digital.com/pub/Digital/dec-faq/ultrix
|
||||
|
||||
If you use HP-UX, you must have at least version 9 and either the
|
||||
version of cc that supports ANSI C (cc -Aa) or else use the GNU C
|
||||
compiler. You must also buy the optional streams package. If you don't
|
||||
have:
|
||||
|
||||
/usr/include/sys/dlpi.h
|
||||
/usr/include/sys/dlpi_ext.h
|
||||
|
||||
then you don't have the streams package. In addition, we believe you
|
||||
need to install the "9.X LAN and DLPI drivers cumulative" patch
|
||||
(PHNE_6855) to make the version 9 DLPI work with libpcap.
|
||||
|
||||
The DLPI streams package is standard starting with HP-UX 10.
|
||||
|
||||
The HP implementation of DLPI is a little bit eccentric. Unlike
|
||||
Solaris, you must attach /dev/dlpi instead of the specific /dev/*
|
||||
network pseudo device entry in order to capture packets. The PPA is
|
||||
based on the ifnet "index" number. Under HP-UX 9, it is necessary to
|
||||
read /dev/kmem and the kernel symbol file (/hp-ux). Under HP-UX 10,
|
||||
DLPI can provide information for determining the PPA. It does not seem
|
||||
to be possible to trace the loopback interface. Unlike other DLPI
|
||||
implementations, PHYS implies MULTI and SAP and you get an error if you
|
||||
try to enable more than one promiscuous mode at a time.
|
||||
|
||||
It is impossible to capture outbound packets on HP-UX 9. To do so on
|
||||
HP-UX 10, you will, apparently, need a late "LAN products cumulative
|
||||
patch" (at one point, it was claimed that this would be PHNE_18173 for
|
||||
s700/10.20; at another point, it was claimed that the required patches
|
||||
were PHNE_20892, PHNE_20725 and PHCO_10947, or newer patches), and to do
|
||||
so on HP-UX 11 you will, apparently, need the latest lancommon/DLPI
|
||||
patches and the latest driver patch for the interface(s) in use on HP-UX
|
||||
11 (at one point, it was claimed that patches PHNE_19766, PHNE_19826,
|
||||
PHNE_20008, and PHNE_20735 did the trick).
|
||||
|
||||
Furthermore, on HP-UX 10, you will need to turn on a kernel switch by
|
||||
doing
|
||||
|
||||
echo 'lanc_outbound_promisc_flag/W 1' | adb -w /stand/vmunix /dev/mem
|
||||
|
||||
You would have to arrange that this happen on reboots; the right way to
|
||||
do that would probably be to put it into an executable script file
|
||||
"/sbin/init.d/outbound_promisc" and making
|
||||
"/sbin/rc2.d/S350outbound_promisc" a symbolic link to that script.
|
||||
|
||||
Finally, testing shows that there can't be more than one simultaneous
|
||||
DLPI user per network interface.
|
||||
|
||||
If you use Linux, this version of libpcap is known to compile and run
|
||||
under Red Hat 4.0 with the 2.0.25 kernel. It may work with earlier 2.X
|
||||
versions but is guaranteed not to work with 1.X kernels. Running more
|
||||
than one libpcap program at a time, on a system with a 2.0.X kernel, can
|
||||
cause problems since promiscuous mode is implemented by twiddling the
|
||||
interface flags from the libpcap application; the packet capture
|
||||
mechanism in the 2.2 and later kernels doesn't have this problem. Also,
|
||||
packet timestamps aren't very good. This appears to be due to haphazard
|
||||
handling of the timestamp in the kernel.
|
||||
|
||||
Note well: there is rumoured to be a version of tcpdump floating around
|
||||
called 3.0.3 that includes libpcap and is supposed to support Linux.
|
||||
You should be advised that neither the Network Research Group at LBNL
|
||||
nor the Tcpdump Group ever generated a release with this version number.
|
||||
The LBNL Network Research Group notes with interest that a standard
|
||||
cracker trick to get people to install trojans is to distribute bogus
|
||||
packages that have a version number higher than the current release.
|
||||
They also noted with annoyance that 90% of the Linux related bug reports
|
||||
they got are due to changes made to unofficial versions of their page.
|
||||
If you are having trouble but aren't using a version that came from
|
||||
tcpdump.org, please try that before submitting a bug report!
|
||||
|
||||
On Linux, libpcap will not work if the kernel does not have the packet
|
||||
socket option enabled; see the README.linux file for information about
|
||||
this.
|
||||
|
||||
If you use AIX, you may not be able to build libpcap from this release.
|
||||
libpcap. We do not have an AIX system in house so it's impossible for
|
||||
us to test AIX patches submitted to us. We are told that you must link
|
||||
against /lib/pse.exp, that you must use AIX cc or a GNU C compiler
|
||||
newer than 2.7.2 and that you may need to run strload before running a
|
||||
libpcap application.
|
||||
|
||||
Read the README.aix file for information on installing libpcap and
|
||||
configuring your system to be able to support libpcap.
|
||||
|
||||
If you use NeXTSTEP, you will not be able to build libpcap from this
|
||||
release. We hope to support this operating system in some future
|
||||
release of libpcap.
|
||||
|
||||
If you use SINIX, you should be able to build libpcap from this
|
||||
release. It is known to compile and run on SINIX-Y/N 5.42 with the C-DS
|
||||
V1.0 or V1.1 compiler. But note that in some releases of SINIX, yacc
|
||||
emits incorrect code; if grammar.y fails to compile, change every
|
||||
occurence of:
|
||||
|
||||
#ifdef YYDEBUG
|
||||
|
||||
to:
|
||||
#if YYDEBUG
|
||||
|
||||
Another workaround is to use flex and bison.
|
||||
|
||||
If you use SCO, you might have trouble building libpcap from this
|
||||
release. We do not have a machine running SCO and have not had reports
|
||||
of anyone successfully building on it. Since SCO apparently supports
|
||||
DLPI, it's possible the current version works. Meanwhile, SCO provides
|
||||
a tcpdump binary as part of their "Network/Security Tools" package:
|
||||
|
||||
http://www.sco.com/technology/internet/goodies/#SECURITY
|
||||
|
||||
There is also a README that explains how to enable packet capture.
|
||||
|
||||
If you use UnixWare, you will not be able to build libpcap from this
|
||||
release. We hope to support this operating system in some future
|
||||
release of libpcap. Meanwhile, there appears to be an UnixWare port of
|
||||
libpcap 0.0 (and tcpdump 3.0) in:
|
||||
|
||||
ftp://ftp1.freebird.org/pub/mirror/freebird/internet/systools/
|
||||
|
||||
UnixWare appears to use a hacked version of DLPI.
|
||||
|
||||
If linking tcpdump fails with "Undefined: _alloca" when using bison on
|
||||
a Sun4, your version of bison is broken. In any case version 1.16 or
|
||||
higher is recommended (1.14 is known to cause problems 1.16 is known to
|
||||
work). Either pick up a current version from:
|
||||
|
||||
ftp://ftp.gnu.org/pub/gnu/bison
|
||||
|
||||
or hack around it by inserting the lines:
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define alloca __builtin_alloca
|
||||
#else
|
||||
#ifdef sparc
|
||||
#include <alloca.h>
|
||||
#else
|
||||
char *alloca ();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
right after the (100 line!) GNU license comment in bison.simple, remove
|
||||
grammar.[co] and fire up make again.
|
||||
|
||||
If you use SunOS 4, your kernel must support streams NIT. If you run a
|
||||
libpcap program and it dies with:
|
||||
|
||||
/dev/nit: No such device
|
||||
|
||||
You must add streams NIT support to your kernel configuration, run
|
||||
config and boot the new kernel.
|
||||
|
||||
If you are running a version of SunOS earlier than 4.1, you will need
|
||||
to replace the Sun supplied /sys/sun{3,4,4c}/OBJ/nit_if.o with the
|
||||
appropriate version from this distribution's SUNOS4 subdirectory and
|
||||
build a new kernel:
|
||||
|
||||
nit_if.o.sun3-sunos4 (any flavor of sun3)
|
||||
nit_if.o.sun4c-sunos4.0.3c (SS1, SS1+, IPC, SLC, etc.)
|
||||
nit_if.o.sun4-sunos4 (Sun4's not covered by
|
||||
nit_if.o.sun4c-sunos4.0.3c)
|
||||
|
||||
These nit replacements fix a bug that makes nit essentially unusable in
|
||||
pre-SunOS 4.1. In addition, our sun4c-sunos4.0.3c nit gives you
|
||||
timestamps to the resolution of the SS-1 clock (1 us) rather than the
|
||||
lousy 20ms timestamps Sun gives you (tcpdump will print out the full
|
||||
timestamp resolution if it finds it's running on a SS-1).
|
||||
|
||||
FILES
|
||||
-----
|
||||
CHANGES - description of differences between releases
|
||||
FILES - list of files exported as part of the distribution
|
||||
INSTALL - this file
|
||||
Makefile.in - compilation rules (input to the configure script)
|
||||
README - description of distribution
|
||||
SUNOS4 - pre-SunOS 4.1 replacement kernel nit modules
|
||||
VERSION - version of this release
|
||||
aclocal.m4 - autoconf macros
|
||||
bpf/net - copies of bpf_filter.c and bpf.h
|
||||
bpf_filter.c - symlink to bpf/net/bpf_filter.c
|
||||
bpf_image.c - bpf disassembly routine
|
||||
config.guess - autoconf support
|
||||
config.sub - autoconf support
|
||||
configure - configure script (run this first)
|
||||
configure.in - configure script source
|
||||
etherent.c - /etc/ethers support routines
|
||||
ethertype.h - ethernet protocol types and names definitions
|
||||
gencode.c - bpf code generation routines
|
||||
gencode.h - bpf code generation definitions
|
||||
grammar.y - filter string grammar
|
||||
inet.c - network routines
|
||||
install-sh - BSD style install script
|
||||
lbl/gnuc.h - gcc macros and defines
|
||||
lbl/os-*.h - os dependent defines and prototypes
|
||||
mkdep - construct Makefile dependency list
|
||||
nametoaddr.c - hostname to address routines
|
||||
net - symlink to bpf/net
|
||||
optimize.c - bpf optimization routines
|
||||
pcap-bpf.c - BSD Packet Filter support
|
||||
pcap-dlpi.c - Data Link Provider Interface support
|
||||
pcap-enet.c - enet support
|
||||
pcap-int.h - internal libpcap definitions
|
||||
pcap-namedb.h - public libpcap name database definitions
|
||||
pcap-nit.c - Network Interface Tap support
|
||||
pcap-nit.h - Network Interface Tap definitions
|
||||
pcap-null.c - dummy monitor support (allows offline use of libpcap)
|
||||
pcap-pf.c - Packet Filter support
|
||||
pcap-pf.h - Packet Filter definitions
|
||||
pcap-snit.c - Streams based Network Interface Tap support
|
||||
pcap-snoop.c - Snoop network monitoring support
|
||||
pcap.3 - manual entry
|
||||
pcap.c - pcap utility routines
|
||||
pcap.h - public libpcap definitions
|
||||
ppp.h - Point to Point Protocol definitions
|
||||
savefile.c - offline support
|
||||
scanner.l - filter string scanner
|
@ -1,4 +1,4 @@
|
||||
@(#) $Header: /tcpdump/master/libpcap/INSTALL.txt,v 1.12.2.1 2005/06/20 21:30:14 guy Exp $ (LBL)
|
||||
@(#) $Header: /tcpdump/master/libpcap/INSTALL.txt,v 1.12.2.2 2007/09/12 19:17:24 guy Exp $ (LBL)
|
||||
|
||||
To build libpcap, run "./configure" (a shell script). The configure
|
||||
script will determine your system attributes and generate an
|
||||
@ -373,7 +373,6 @@ pcap-win32.c - WinPcap capture support
|
||||
pcap.3 - manual entry
|
||||
pcap.c - pcap utility routines
|
||||
pcap.h - public libpcap definitions
|
||||
pf.h - OpenBSD DLT_PFLOG definitions
|
||||
ppp.h - Point to Point Protocol definitions
|
||||
rawss7.h - information on DLT_ types for SS7
|
||||
savefile.c - offline support
|
||||
|
@ -17,7 +17,7 @@
|
||||
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# @(#) $Header: /tcpdump/master/libpcap/Makefile.in,v 1.99 2003/12/15 01:35:03 guy Exp $ (LBL)
|
||||
# @(#) $Header: /tcpdump/master/libpcap/Makefile.in,v 1.99.2.2 2007/07/24 02:35:15 mcr Exp $ (LBL)
|
||||
|
||||
#
|
||||
# Various configurable paths (remember to edit Makefile.in, not Makefile)
|
||||
@ -46,7 +46,9 @@ CCOPT = @V_CCOPT@
|
||||
INCLS = -I. @V_INCLS@
|
||||
DEFS = @DEFS@ @V_DEFS@
|
||||
LIBS = @V_LIBS@
|
||||
DAGLIBS = @DAGLIBS@
|
||||
DYEXT = @DYEXT@
|
||||
PROG=libpcap
|
||||
|
||||
# Standard CFLAGS
|
||||
CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
|
||||
@ -112,7 +114,7 @@ shared: libpcap.$(DYEXT)
|
||||
#
|
||||
libpcap.so: $(OBJ)
|
||||
@rm -f $@
|
||||
ld -shared -o $@.`cat VERSION` $(OBJ)
|
||||
$(CC) -shared -o $@.`cat VERSION` $(OBJ) $(DAGLIBS)
|
||||
|
||||
# the following rule succeeds, but the result is untested.
|
||||
libpcap.dylib: $(OBJ)
|
||||
@ -216,19 +218,10 @@ packaging/pcap.spec: packaging/pcap.spec.in VERSION
|
||||
RPMVERSION=`cat VERSION | sed s/-.*//g`; \
|
||||
sed -e s/@VERSION@/$$RPMVERSION/ -e s/@NAME@/libpcap-`cat VERSION`/ $< > $@
|
||||
|
||||
tar: Makefile packaging/pcap.spec
|
||||
@cwd=`pwd` ; dir=`basename $$cwd` ; name=libpcap-`cat VERSION` ; \
|
||||
list="" ; tar="tar chf" ; \
|
||||
for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
|
||||
echo \
|
||||
"rm -f ../$$name; ln -s $$dir ../$$name" ; \
|
||||
rm -f ../$$name; ln -s $$dir ../$$name ; \
|
||||
echo \
|
||||
"(cd .. ; $$tar - [lots of files]) | gzip -c > /tmp/$$name.tar.gz" ; \
|
||||
(cd .. ; $$tar - $$list) | gzip -c > /tmp/$$name.tar.gz ; \
|
||||
echo \
|
||||
"rm -f ../$$name" ; \
|
||||
rm -f ../$$name
|
||||
releasetar:
|
||||
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
|
||||
list="" ; make distclean; cd ..; mkdir -p n; cd n; ln -s ../$$dir $$name; \
|
||||
tar -c -z -f $$name.tar.gz $$name/. ;
|
||||
|
||||
depend: $(GENSRC) $(GENHDR) bpf_filter.c
|
||||
./mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
|
||||
|
@ -77,11 +77,32 @@ RX stream buffer overflow, this count is before filters are applied (it will
|
||||
include packets that would have been dropped by the filter). The RX stream
|
||||
buffer size is user configurable outside libpcap, typically 16-512MB.
|
||||
|
||||
pcap_get_selectable_fd() is not supported, DAG cards do not support
|
||||
pcap_get_selectable_fd() is not supported, as DAG cards do not support
|
||||
poll/select methods.
|
||||
|
||||
pcap_inject() and pcap_sendpacket() are not supported.
|
||||
|
||||
Some DAG cards now support capturing to multiple virtual interfaces, called
|
||||
streams. Capture streams have even numbers. These are available via libpcap
|
||||
as separate interfaces, e.g. dag0:0, dag0:2, dag0:4 etc. dag0:0 is the same
|
||||
as dag0. These are visible via pcap_findalldevs().
|
||||
|
||||
libpcap now does NOT set the card's hardware snaplen (slen). This must now be
|
||||
set using the appropriate DAG coniguration program, e.g. dagthree, dagfour,
|
||||
dagsix, dagconfig. This is because the snaplen is currently shared between
|
||||
all of the streams. In future this may change if per-stream slen is
|
||||
implemented.
|
||||
|
||||
DAG cards by default capture entire packets including the L2
|
||||
CRC/FCS. If the card is not configured to discard the CRC/FCS, this
|
||||
can confuse applications that use libpcap if they're not prepared for
|
||||
packets to have an FCS. Libpcap now reads the environment variable
|
||||
ERF_FCS_BITS to determine how many bits of CRC/FCS to strip from the
|
||||
end of the captured frame. This defaults to 32 for use with
|
||||
Ethernet. If the card is configured to strip the CRC/FCS, then set
|
||||
ERF_FCS_BITS=0. If used with a HDLC/PoS/PPP/Frame Relay link with 16
|
||||
bit CRC/FCS, then set ERF_FCS_BITS=16.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Please submit bug reports via <support@endace.com>.
|
||||
|
@ -15,13 +15,6 @@ General
|
||||
style (okay, you can guess that by looking at the code) and a guide for
|
||||
what needs to be documented.
|
||||
|
||||
Linux kernel interface
|
||||
|
||||
- Currently there is a race condition in that a socket is activated at the
|
||||
same time it is opened - before applying a filter. This has to
|
||||
be corrected so that capture starts when pcap_read is called for the
|
||||
first time.
|
||||
|
||||
Less urgent items
|
||||
-----------------
|
||||
|
||||
|
@ -1 +1 @@
|
||||
0.9.4
|
||||
0.9.8
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.26 2003/11/15 23:23:57 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.26.2.1 2007/06/11 09:52:04 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -43,7 +43,7 @@ bpf_image(p, n)
|
||||
int n;
|
||||
{
|
||||
int v;
|
||||
char *fmt, *op;
|
||||
const char *fmt, *op;
|
||||
static char image[256];
|
||||
char operand[64];
|
||||
|
||||
|
@ -10,9 +10,15 @@
|
||||
/* Enable optimizer debugging */
|
||||
#undef BDEBUG
|
||||
|
||||
/* define if you have a cloning BPF device */
|
||||
#undef HAVE_CLONING_BPF
|
||||
|
||||
/* define if you have the DAG API */
|
||||
#undef HAVE_DAG_API
|
||||
|
||||
/* define if you have dag_get_erf_types() */
|
||||
#undef HAVE_DAG_GET_ERF_TYPES
|
||||
|
||||
/* define if you have streams capable DAG API */
|
||||
#undef HAVE_DAG_STREAMS_API
|
||||
|
||||
@ -50,9 +56,15 @@
|
||||
/* Define to 1 if you have the <netinet/if_ether.h> header file. */
|
||||
#undef HAVE_NETINET_IF_ETHER_H
|
||||
|
||||
/* Define to 1 if you have the <net/pfvar.h> header file. */
|
||||
#undef HAVE_NET_PFVAR_H
|
||||
|
||||
/* if there's an os_proto.h */
|
||||
#undef HAVE_OS_PROTO_H
|
||||
|
||||
/* Define to 1 if you have the <paths.h> header file. */
|
||||
#undef HAVE_PATHS_H
|
||||
|
||||
/* define if you have a /proc/net/dev */
|
||||
#undef HAVE_PROC_NET_DEV
|
||||
|
||||
|
6627
contrib/libpcap/configure
vendored
6627
contrib/libpcap/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.120.2.7 2005/07/07 06:56:03 guy Exp $ (LBL)
|
||||
dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.120.2.13 2007/09/12 19:17:24 guy Exp $ (LBL)
|
||||
dnl
|
||||
dnl Copyright (c) 1994, 1995, 1996, 1997
|
||||
dnl The Regents of the University of California. All rights reserved.
|
||||
@ -6,7 +6,7 @@ dnl
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl
|
||||
|
||||
AC_REVISION($Revision: 1.120.2.7 $)
|
||||
AC_REVISION($Revision: 1.120.2.13 $)
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(pcap.c)
|
||||
|
||||
@ -26,7 +26,10 @@ dnl in "AC_LBL_FIXINCLUDES" in "aclocal.m4" uses it, so we have to
|
||||
dnl test for it and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
|
||||
dnl "AC_LBL_FIXINCLUDES" won't work on some platforms such as Solaris.
|
||||
dnl
|
||||
AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h)
|
||||
AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h paths.h)
|
||||
AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>])
|
||||
AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
|
||||
#include <sys/socket.h>])
|
||||
if test "$ac_cv_header_netinet_if_ether_h" != yes; then
|
||||
@ -184,6 +187,12 @@ AC_ARG_WITH(pcap, [ --with-pcap=TYPE use packet capture TYPE])
|
||||
AC_MSG_CHECKING(packet capture type)
|
||||
if test ! -z "$with_pcap" ; then
|
||||
V_PCAP="$withval"
|
||||
elif test -r /dev/bpf ; then
|
||||
#
|
||||
# Cloning BPF device.
|
||||
#
|
||||
V_PCAP=bpf
|
||||
AC_DEFINE(HAVE_CLONING_BPF,1,[define if you have a cloning BPF device])
|
||||
elif test -r /dev/bpf0 ; then
|
||||
V_PCAP=bpf
|
||||
elif test -r /usr/include/net/pfilt.h ; then
|
||||
@ -492,6 +501,11 @@ if test $ac_cv_lbl_dag_api = yes; then
|
||||
ar x $dag_lib_dir/libdag.a dagapi.o
|
||||
if test -r ./dagapi.o; then
|
||||
dagapi_obj=./dagapi.o
|
||||
else
|
||||
ar x $dag_lib_dir/libdag.a libdag_la-dagapi.o
|
||||
if test -r ./libdag_la-dagapi.o; then
|
||||
dagapi_obj=./libdag_la-dagapi.o
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -518,6 +532,11 @@ if test $ac_cv_lbl_dag_api = yes; then
|
||||
ar x $dag_lib_dir/libdag.a dagopts.o
|
||||
if test -r ./dagopts.o; then
|
||||
dagopts_obj=./dagopts.o
|
||||
else
|
||||
ar x $dag_lib_dir/libdag.a libdag_la-dagopts.o
|
||||
if test -r ./libdag_la-dagopts.o; then
|
||||
dagopts_obj=./libdag_la-dagopts.o
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -542,6 +561,11 @@ if test $ac_cv_lbl_dag_api = yes; then
|
||||
ar x $dag_lib_dir/libdag.a dagreg.o
|
||||
if test -r ./dagreg.o; then
|
||||
dagreg_obj=./dagreg.o
|
||||
else
|
||||
ar x $dag_lib_dir/libdag.a libdag_la-dagreg.o
|
||||
if test -r ./libdag_la-dagreg.o; then
|
||||
dagreg_obj=./libdag_la-dagreg.o
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -567,10 +591,14 @@ if test $ac_cv_lbl_dag_api = yes; then
|
||||
saved_ldflags=$LDFLAGS
|
||||
LDFLAGS="-L$dag_lib_dir"
|
||||
AC_CHECK_LIB([dag], [dag_attach_stream], [dag_version="2.5.x"], [dag_version="2.4.x"])
|
||||
AC_CHECK_LIB([dag],[dag_get_erf_types], [
|
||||
AC_DEFINE(HAVE_DAG_GET_ERF_TYPES, 1, [define if you have dag_get_erf_types()])]
|
||||
)
|
||||
LDFLAGS=$saved_ldflags
|
||||
|
||||
if test "$dag_version" = 2.5.x; then
|
||||
AC_DEFINE(HAVE_DAG_STREAMS_API, 1, [define if you have streams capable DAG API])
|
||||
DAGLIBS="-ldag"
|
||||
fi
|
||||
|
||||
# See if we can find a specific version string.
|
||||
@ -746,6 +774,11 @@ darwin*)
|
||||
DYEXT="dylib"
|
||||
V_CCOPT="$V_CCOPT -fno-common"
|
||||
;;
|
||||
|
||||
linux*)
|
||||
V_CCOPT="$V_CCOPT -fPIC"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
AC_PROG_RANLIB
|
||||
@ -780,6 +813,7 @@ AC_SUBST(V_RANLIB)
|
||||
AC_SUBST(V_YACC)
|
||||
AC_SUBST(SSRC)
|
||||
AC_SUBST(DYEXT)
|
||||
AC_SUBST(DAGLIBS)
|
||||
|
||||
AC_PROG_INSTALL
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-getad.c,v 1.10.2.1 2005/04/10 18:04:49 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-getad.c,v 1.10.2.2 2007/09/14 00:45:17 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -61,7 +61,11 @@ static const char rcsid[] _U_ =
|
||||
#endif
|
||||
|
||||
#ifdef AF_PACKET
|
||||
# include <linux/if_packet.h>
|
||||
# ifdef __Lynx__
|
||||
# include <netpacket/if_packet.h> /* LynxOS */
|
||||
# else
|
||||
# include <linux/if_packet.h> /* Linux */
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2002 - 2003
|
||||
* NetGroup, Politecnico di Torino (Italy)
|
||||
* Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)
|
||||
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -12,9 +12,10 @@
|
||||
* 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 Politecnico di Torino nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
|
||||
* 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 COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
@ -32,7 +33,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-win32.c,v 1.11.2.1 2005/09/01 22:07:41 risso Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-win32.c,v 1.11.2.3 2006/02/22 17:09:32 gianluca Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -41,7 +42,7 @@ static const char rcsid[] _U_ =
|
||||
|
||||
#include <pcap.h>
|
||||
#include <pcap-int.h>
|
||||
#include <packet32.h>
|
||||
#include <Packet32.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
@ -224,22 +225,23 @@ pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
|
||||
ULONG NameLength;
|
||||
char *name;
|
||||
|
||||
if(!PacketGetAdapterNames(NULL, &NameLength) && NameLength == 0)
|
||||
if (!PacketGetAdapterNames(NULL, &NameLength))
|
||||
{
|
||||
/*
|
||||
* If PacketGetAdapterNames *and* sets the lenght of the buffer to zero,
|
||||
* it means there was an error.
|
||||
*/
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE, "PacketGetAdapterNames failed: %s", pcap_win32strerror());
|
||||
*alldevsp = NULL;
|
||||
return -1;
|
||||
DWORD last_error = GetLastError();
|
||||
|
||||
if (last_error != ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"PacketGetAdapterNames: %s",
|
||||
pcap_win32strerror());
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (NameLength > 0)
|
||||
AdaptersName = (char*) malloc(NameLength);
|
||||
else
|
||||
{
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE, "no adapters found.");
|
||||
*alldevsp = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,7 @@
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
* @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.60.2.6 2005/09/05 09:08:06 guy Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.60.2.11 2007/06/11 09:52:04 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -174,11 +174,16 @@
|
||||
end-to-end circuits, ILMI circuits or
|
||||
connection signalling circuit. */
|
||||
|
||||
/*MTP3 field types */
|
||||
#define M_SIO 1
|
||||
#define M_OPC 2
|
||||
#define M_DPC 3
|
||||
#define M_SLS 4
|
||||
/* MTP2 types */
|
||||
#define M_FISU 22 /* FISU */
|
||||
#define M_LSSU 23 /* LSSU */
|
||||
#define M_MSU 24 /* MSU */
|
||||
|
||||
/* MTP3 field types */
|
||||
#define M_SIO 1
|
||||
#define M_OPC 2
|
||||
#define M_DPC 3
|
||||
#define M_SLS 4
|
||||
|
||||
|
||||
struct slist;
|
||||
@ -297,6 +302,7 @@ struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtyp
|
||||
struct block *gen_atmtype_abbrev(int type);
|
||||
struct block *gen_atmmulti_abbrev(int type);
|
||||
|
||||
struct block *gen_mtp2type_abbrev(int type);
|
||||
struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
|
||||
|
||||
struct block *gen_pf_ifname(const char *);
|
||||
@ -316,7 +322,7 @@ char *sdup(const char *);
|
||||
|
||||
struct bpf_insn *icode_to_fcode(struct block *, int *);
|
||||
int pcap_parse(void);
|
||||
void lex_init(char *);
|
||||
void lex_init(const char *);
|
||||
void lex_cleanup(void);
|
||||
void sappend(struct slist *, struct slist *);
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.86.2.5 2005/09/05 09:08:06 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.86.2.9 2007/09/12 19:17:25 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -53,7 +53,11 @@ struct rtentry;
|
||||
#include "pcap-int.h"
|
||||
|
||||
#include "gencode.h"
|
||||
#include "pf.h"
|
||||
#ifdef HAVE_NET_PFVAR_H
|
||||
#include <net/if.h>
|
||||
#include <net/pfvar.h>
|
||||
#include <net/if_pflog.h>
|
||||
#endif
|
||||
#include <pcap-namedb.h>
|
||||
|
||||
#ifdef HAVE_OS_PROTO_H
|
||||
@ -69,7 +73,7 @@ int n_errors = 0;
|
||||
static struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF };
|
||||
|
||||
static void
|
||||
yyerror(char *msg)
|
||||
yyerror(const char *msg)
|
||||
{
|
||||
++n_errors;
|
||||
bpf_error("%s", msg);
|
||||
@ -86,6 +90,50 @@ pcap_parse()
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NET_PFVAR_H
|
||||
static int
|
||||
pfreason_to_num(const char *reason)
|
||||
{
|
||||
const char *reasons[] = PFRES_NAMES;
|
||||
int i;
|
||||
|
||||
for (i = 0; reasons[i]; i++) {
|
||||
if (pcap_strcasecmp(reason, reasons[i]) == 0)
|
||||
return (i);
|
||||
}
|
||||
bpf_error("unknown PF reason");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
static int
|
||||
pfaction_to_num(const char *action)
|
||||
{
|
||||
if (pcap_strcasecmp(action, "pass") == 0 ||
|
||||
pcap_strcasecmp(action, "accept") == 0)
|
||||
return (PF_PASS);
|
||||
else if (pcap_strcasecmp(action, "drop") == 0 ||
|
||||
pcap_strcasecmp(action, "block") == 0)
|
||||
return (PF_DROP);
|
||||
else {
|
||||
bpf_error("unknown PF action");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
}
|
||||
#else /* !HAVE_NET_PFVAR_H */
|
||||
static int
|
||||
pfreason_to_num(const char *reason)
|
||||
{
|
||||
bpf_error("libpcap was compiled on a machine without pf support");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
static int
|
||||
pfaction_to_num(const char *action)
|
||||
{
|
||||
bpf_error("libpcap was compiled on a machine without pf support");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
#endif /* HAVE_NET_PFVAR_H */
|
||||
%}
|
||||
|
||||
%union {
|
||||
@ -114,8 +162,9 @@ pcap_parse()
|
||||
%type <i> atmtype atmmultitype
|
||||
%type <blk> atmfield
|
||||
%type <blk> atmfieldvalue atmvalue atmlistvalue
|
||||
%type <blk> mtp3field
|
||||
%type <blk> mtp3fieldvalue mtp3value mtp3listvalue
|
||||
%type <i> mtp2type
|
||||
%type <blk> mtp3field
|
||||
%type <blk> mtp3fieldvalue mtp3value mtp3listvalue
|
||||
|
||||
|
||||
%token DST SRC HOST GATEWAY
|
||||
@ -141,7 +190,8 @@ pcap_parse()
|
||||
%token OAM OAMF4 CONNECTMSG METACONNECT
|
||||
%token VPI VCI
|
||||
%token RADIO
|
||||
%token SIO OPC DPC SLS
|
||||
%token FISU LSSU MSU
|
||||
%token SIO OPC DPC SLS
|
||||
|
||||
%type <s> ID
|
||||
%type <e> EID
|
||||
@ -262,6 +312,7 @@ rterm: head id { $$ = $2; }
|
||||
| atmtype { $$.b = gen_atmtype_abbrev($1); $$.q = qerr; }
|
||||
| atmmultitype { $$.b = gen_atmmulti_abbrev($1); $$.q = qerr; }
|
||||
| atmfield atmvalue { $$.b = $2.b; $$.q = qerr; }
|
||||
| mtp2type { $$.b = gen_mtp2type_abbrev($1); $$.q = qerr; }
|
||||
| mtp3field mtp3value { $$.b = $2.b; $$.q = qerr; }
|
||||
;
|
||||
/* protocol level qualifiers */
|
||||
@ -349,28 +400,10 @@ pfvar: PF_IFNAME ID { $$ = gen_pf_ifname($2); }
|
||||
;
|
||||
|
||||
reason: NUM { $$ = $1; }
|
||||
| ID { const char *reasons[] = PFRES_NAMES;
|
||||
int i;
|
||||
for (i = 0; reasons[i]; i++) {
|
||||
if (pcap_strcasecmp($1, reasons[i]) == 0) {
|
||||
$$ = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (reasons[i] == NULL)
|
||||
bpf_error("unknown PF reason");
|
||||
}
|
||||
| ID { $$ = pfreason_to_num($1); }
|
||||
;
|
||||
|
||||
action: ID { if (pcap_strcasecmp($1, "pass") == 0 ||
|
||||
pcap_strcasecmp($1, "accept") == 0)
|
||||
$$ = PF_PASS;
|
||||
else if (pcap_strcasecmp($1, "drop") == 0 ||
|
||||
pcap_strcasecmp($1, "block") == 0)
|
||||
$$ = PF_DROP;
|
||||
else
|
||||
bpf_error("unknown PF action");
|
||||
}
|
||||
action: ID { $$ = pfaction_to_num($1); }
|
||||
;
|
||||
|
||||
relop: '>' { $$ = BPF_JGT; }
|
||||
@ -440,6 +473,11 @@ atmfieldvalue: NUM {
|
||||
atmlistvalue: atmfieldvalue
|
||||
| atmlistvalue or atmfieldvalue { gen_or($1.b, $3.b); $$ = $3; }
|
||||
;
|
||||
/* MTP2 types quantifier */
|
||||
mtp2type: FISU { $$ = M_FISU; }
|
||||
| LSSU { $$ = M_LSSU; }
|
||||
| MSU { $$ = M_MSU; }
|
||||
;
|
||||
/* MTP3 field types quantifier */
|
||||
mtp3field: SIO { $$.mtp3fieldtype = M_SIO; }
|
||||
| OPC { $$.mtp3fieldtype = M_OPC; }
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.66.2.1 2005/06/20 21:30:17 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.66.2.6 2007/06/11 09:52:04 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -134,28 +134,6 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
pcap_if_t *curdev, *prevdev, *nextdev;
|
||||
int this_instance;
|
||||
|
||||
/*
|
||||
* Can we open this interface for live capture?
|
||||
*
|
||||
* We do this check so that interfaces that ae supplied
|
||||
* by the interface enumeration mechanism we're using
|
||||
* but that don't support packet capture aren't included
|
||||
* in the list. An example of this is loopback interfaces
|
||||
* on Solaris; we don't just omit loopback interfaces
|
||||
* becaue you *can* capture on loopback interfaces on some
|
||||
* OSes.
|
||||
*/
|
||||
p = pcap_open_live(name, 68, 0, 0, errbuf);
|
||||
if (p == NULL) {
|
||||
/*
|
||||
* No. Don't bother including it.
|
||||
* Don't treat this as an error, though.
|
||||
*/
|
||||
*curdev_ret = NULL;
|
||||
return (0);
|
||||
}
|
||||
pcap_close(p);
|
||||
|
||||
/*
|
||||
* Is there already an entry in the list for this interface?
|
||||
*/
|
||||
@ -163,9 +141,74 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
if (strcmp(name, curdev->name) == 0)
|
||||
break; /* yes, we found it */
|
||||
}
|
||||
|
||||
if (curdev == NULL) {
|
||||
/*
|
||||
* No, we didn't find it.
|
||||
*
|
||||
* Can we open this interface for live capture?
|
||||
*
|
||||
* We do this check so that interfaces that are
|
||||
* supplied by the interface enumeration mechanism
|
||||
* we're using but that don't support packet capture
|
||||
* aren't included in the list. Loopback interfaces
|
||||
* on Solaris are an example of this; we don't just
|
||||
* omit loopback interfaces on all platforms because
|
||||
* you *can* capture on loopback interfaces on some
|
||||
* OSes.
|
||||
*
|
||||
* On OS X, we don't do this check if the device
|
||||
* name begins with "wlt"; at least some versions
|
||||
* of OS X offer monitor mode capturing by having
|
||||
* a separate "monitor mode" device for each wireless
|
||||
* adapter, rather than by implementing the ioctls
|
||||
* that {Free,Net,Open,DragonFly}BSD provide.
|
||||
* Opening that device puts the adapter into monitor
|
||||
* mode, which, at least for some adapters, causes
|
||||
* them to deassociate from the network with which
|
||||
* they're associated.
|
||||
*
|
||||
* Instead, we try to open the corresponding "en"
|
||||
* device (so that we don't end up with, for users
|
||||
* without sufficient privilege to open capture
|
||||
* devices, a list of adapters that only includes
|
||||
* the wlt devices).
|
||||
*/
|
||||
#ifdef __APPLE__
|
||||
if (strncmp(name, "wlt", 3) == 0) {
|
||||
char *en_name;
|
||||
size_t en_name_len;
|
||||
|
||||
/*
|
||||
* Try to allocate a buffer for the "en"
|
||||
* device's name.
|
||||
*/
|
||||
en_name_len = strlen(name) - 1;
|
||||
en_name = malloc(en_name_len + 1);
|
||||
if (en_name == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
strcpy(en_name, "en");
|
||||
strcat(en_name, name + 3);
|
||||
p = pcap_open_live(en_name, 68, 0, 0, errbuf);
|
||||
free(en_name);
|
||||
} else
|
||||
#endif /* __APPLE */
|
||||
p = pcap_open_live(name, 68, 0, 0, errbuf);
|
||||
if (p == NULL) {
|
||||
/*
|
||||
* No. Don't bother including it.
|
||||
* Don't treat this as an error, though.
|
||||
*/
|
||||
*curdev_ret = NULL;
|
||||
return (0);
|
||||
}
|
||||
pcap_close(p);
|
||||
|
||||
/*
|
||||
* Yes, we can open it.
|
||||
* Allocate a new entry.
|
||||
*/
|
||||
curdev = malloc(sizeof(pcap_if_t));
|
||||
@ -179,14 +222,25 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
* Fill in the entry.
|
||||
*/
|
||||
curdev->next = NULL;
|
||||
curdev->name = malloc(strlen(name) + 1);
|
||||
strcpy(curdev->name, name);
|
||||
curdev->name = strdup(name);
|
||||
if (curdev->name == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
free(curdev);
|
||||
return (-1);
|
||||
}
|
||||
if (description != NULL) {
|
||||
/*
|
||||
* We have a description for this interface.
|
||||
*/
|
||||
curdev->description = malloc(strlen(description) + 1);
|
||||
strcpy(curdev->description, description);
|
||||
curdev->description = strdup(description);
|
||||
if (curdev->description == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
free(curdev->name);
|
||||
free(curdev);
|
||||
return (-1);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* We don't.
|
||||
@ -357,6 +411,8 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
if (curaddr->netmask == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
if (curaddr->addr != NULL)
|
||||
free(curaddr->addr);
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
@ -368,6 +424,10 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
if (curaddr->broadaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
if (curaddr->netmask != NULL)
|
||||
free(curaddr->netmask);
|
||||
if (curaddr->addr != NULL)
|
||||
free(curaddr->addr);
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
@ -379,6 +439,12 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
if (curaddr->dstaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
if (curaddr->broadaddr != NULL)
|
||||
free(curaddr->broadaddr);
|
||||
if (curaddr->netmask != NULL)
|
||||
free(curaddr->netmask);
|
||||
if (curaddr->addr != NULL)
|
||||
free(curaddr->addr);
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
@ -527,7 +593,7 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
||||
register char *errbuf;
|
||||
{
|
||||
register int fd;
|
||||
register struct sockaddr_in *sin;
|
||||
register struct sockaddr_in *sin4;
|
||||
struct ifreq ifr;
|
||||
|
||||
/*
|
||||
@ -571,8 +637,8 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
||||
(void)close(fd);
|
||||
return (-1);
|
||||
}
|
||||
sin = (struct sockaddr_in *)&ifr.ifr_addr;
|
||||
*netp = sin->sin_addr.s_addr;
|
||||
sin4 = (struct sockaddr_in *)&ifr.ifr_addr;
|
||||
*netp = sin4->sin_addr.s_addr;
|
||||
if (ioctl(fd, SIOCGIFNETMASK, (char *)&ifr) < 0) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"SIOCGIFNETMASK: %s: %s", device, pcap_strerror(errno));
|
||||
@ -580,7 +646,7 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
||||
return (-1);
|
||||
}
|
||||
(void)close(fd);
|
||||
*maskp = sin->sin_addr.s_addr;
|
||||
*maskp = sin4->sin_addr.s_addr;
|
||||
if (*maskp == 0) {
|
||||
if (IN_CLASSA(*netp))
|
||||
*maskp = IN_CLASSA_NET;
|
||||
|
@ -1,43 +0,0 @@
|
||||
/* @(#) $Header: /tcpdump/master/libpcap/lbl/gnuc.h,v 1.3.1.1 1999/10/07 23:46:41 mcr Exp $ (LBL) */
|
||||
|
||||
/* Define __P() macro, if necessary */
|
||||
#ifndef __P
|
||||
#if __STDC__
|
||||
#define __P(protos) protos
|
||||
#else
|
||||
#define __P(protos) ()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* inline foo */
|
||||
#ifdef __GNUC__
|
||||
#define inline __inline
|
||||
#else
|
||||
#define inline
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Handle new and old "dead" routine prototypes
|
||||
*
|
||||
* For example:
|
||||
*
|
||||
* __dead void foo(void) __attribute__((volatile));
|
||||
*
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#ifndef __dead
|
||||
#define __dead volatile
|
||||
#endif
|
||||
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#ifndef __dead
|
||||
#define __dead
|
||||
#endif
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
@ -26,7 +26,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/nametoaddr.c,v 1.77.2.3 2005/04/20 11:13:51 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/nametoaddr.c,v 1.77.2.4 2007/06/11 09:52:05 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -278,7 +278,7 @@ pcap_nametoproto(const char *str)
|
||||
#include "ethertype.h"
|
||||
|
||||
struct eproto {
|
||||
char *s;
|
||||
const char *s;
|
||||
u_short p;
|
||||
};
|
||||
|
||||
@ -399,7 +399,7 @@ __pcap_atodn(const char *s, bpf_u_int32 *addr)
|
||||
|
||||
u_int node, area;
|
||||
|
||||
if (sscanf((char *)s, "%d.%d", &area, &node) != 2)
|
||||
if (sscanf(s, "%d.%d", &area, &node) != 2)
|
||||
bpf_error("malformed decnet address '%s'", s);
|
||||
|
||||
*addr = (area << AREASHIFT) & AREAMASK;
|
||||
@ -485,7 +485,7 @@ pcap_ether_hostton(const char *name)
|
||||
u_char a[6];
|
||||
|
||||
ap = NULL;
|
||||
if (ether_hostton((char *)name, (struct ether_addr *)a) == 0) {
|
||||
if (ether_hostton(name, (struct ether_addr *)a) == 0) {
|
||||
ap = (u_char *)malloc(6);
|
||||
if (ap != NULL)
|
||||
memcpy((char *)ap, (char *)a, 6);
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/optimize.c,v 1.85 2005/04/04 08:42:18 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/optimize.c,v 1.85.2.3 2007/09/12 21:29:45 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -624,7 +624,7 @@ fold_op(s, v0, v1)
|
||||
struct stmt *s;
|
||||
int v0, v1;
|
||||
{
|
||||
bpf_int32 a, b;
|
||||
bpf_u_int32 a, b;
|
||||
|
||||
a = vmap[v0].const_val;
|
||||
b = vmap[v1].const_val;
|
||||
@ -1823,9 +1823,9 @@ intern_blocks(root)
|
||||
{
|
||||
struct block *p;
|
||||
int i, j;
|
||||
int done;
|
||||
int done1; /* don't shadow global */
|
||||
top:
|
||||
done = 1;
|
||||
done1 = 1;
|
||||
for (i = 0; i < n_blocks; ++i)
|
||||
blocks[i]->link = 0;
|
||||
|
||||
@ -1849,15 +1849,15 @@ intern_blocks(root)
|
||||
if (JT(p) == 0)
|
||||
continue;
|
||||
if (JT(p)->link) {
|
||||
done = 0;
|
||||
done1 = 0;
|
||||
JT(p) = JT(p)->link;
|
||||
}
|
||||
if (JF(p)->link) {
|
||||
done = 0;
|
||||
done1 = 0;
|
||||
JF(p) = JF(p)->link;
|
||||
}
|
||||
}
|
||||
if (!done)
|
||||
if (!done1)
|
||||
goto top;
|
||||
}
|
||||
|
||||
@ -1972,7 +1972,7 @@ opt_init(root)
|
||||
*/
|
||||
unMarkAll();
|
||||
n = count_blocks(root);
|
||||
blocks = (struct block **)malloc(n * sizeof(*blocks));
|
||||
blocks = (struct block **)calloc(n, sizeof(*blocks));
|
||||
if (blocks == NULL)
|
||||
bpf_error("malloc");
|
||||
unMarkAll();
|
||||
@ -1980,14 +1980,14 @@ opt_init(root)
|
||||
number_blks_r(root);
|
||||
|
||||
n_edges = 2 * n_blocks;
|
||||
edges = (struct edge **)malloc(n_edges * sizeof(*edges));
|
||||
edges = (struct edge **)calloc(n_edges, sizeof(*edges));
|
||||
if (edges == NULL)
|
||||
bpf_error("malloc");
|
||||
|
||||
/*
|
||||
* The number of levels is bounded by the number of nodes.
|
||||
*/
|
||||
levels = (struct block **)malloc(n_blocks * sizeof(*levels));
|
||||
levels = (struct block **)calloc(n_blocks, sizeof(*levels));
|
||||
if (levels == NULL)
|
||||
bpf_error("malloc");
|
||||
|
||||
@ -2034,8 +2034,8 @@ opt_init(root)
|
||||
* we'll need.
|
||||
*/
|
||||
maxval = 3 * max_stmts;
|
||||
vmap = (struct vmapinfo *)malloc(maxval * sizeof(*vmap));
|
||||
vnode_base = (struct valnode *)malloc(maxval * sizeof(*vnode_base));
|
||||
vmap = (struct vmapinfo *)calloc(maxval, sizeof(*vmap));
|
||||
vnode_base = (struct valnode *)calloc(maxval, sizeof(*vnode_base));
|
||||
if (vmap == NULL || vnode_base == NULL)
|
||||
bpf_error("malloc");
|
||||
}
|
||||
@ -2124,7 +2124,7 @@ convert_code_r(p)
|
||||
{
|
||||
int i;
|
||||
int jt, jf;
|
||||
char *ljerr = "%s for block-local relative jump: off=%d";
|
||||
const char *ljerr = "%s for block-local relative jump: off=%d";
|
||||
|
||||
#if 0
|
||||
printf("code=%x off=%d %x %x\n", src->s.code,
|
||||
@ -2216,6 +2216,20 @@ filled:
|
||||
/*
|
||||
* Convert flowgraph intermediate representation to the
|
||||
* BPF array representation. Set *lenp to the number of instructions.
|
||||
*
|
||||
* This routine does *NOT* leak the memory pointed to by fp. It *must
|
||||
* not* do free(fp) before returning fp; doing so would make no sense,
|
||||
* as the BPF array pointed to by the return value of icode_to_fcode()
|
||||
* must be valid - it's being returned for use in a bpf_program structure.
|
||||
*
|
||||
* If it appears that icode_to_fcode() is leaking, the problem is that
|
||||
* the program using pcap_compile() is failing to free the memory in
|
||||
* the BPF program when it's done - the leak is in the program, not in
|
||||
* the routine that happens to be allocating the memory. (By analogy, if
|
||||
* a program calls fopen() without ever calling fclose() on the FILE *,
|
||||
* it will leak the FILE structure; the leak is not in fopen(), it's in
|
||||
* the program.) Change the program to use pcap_freecode() when it's
|
||||
* done with the filter program. See the pcap man page.
|
||||
*/
|
||||
struct bpf_insn *
|
||||
icode_to_fcode(root, lenp)
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-bpf.c,v 1.86.2.8 2005/07/10 10:55:31 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-bpf.c,v 1.86.2.12 2007/06/15 17:57:27 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -525,8 +525,12 @@ static inline int
|
||||
bpf_open(pcap_t *p, char *errbuf)
|
||||
{
|
||||
int fd;
|
||||
#ifdef HAVE_CLONING_BPF
|
||||
static const char device[] = "/dev/bpf";
|
||||
#else
|
||||
int n = 0;
|
||||
char device[sizeof "/dev/bpf0000000000"];
|
||||
#endif
|
||||
|
||||
#ifdef _AIX
|
||||
/*
|
||||
@ -538,6 +542,12 @@ bpf_open(pcap_t *p, char *errbuf)
|
||||
return (-1);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CLONING_BPF
|
||||
if ((fd = open(device, O_RDWR)) == -1 &&
|
||||
(errno != EACCES || (fd = open(device, O_RDONLY)) == -1))
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"(cannot open device) %s: %s", device, pcap_strerror(errno));
|
||||
#else
|
||||
/*
|
||||
* Go through all the minors and find one that isn't in use.
|
||||
*/
|
||||
@ -568,6 +578,7 @@ bpf_open(pcap_t *p, char *errbuf)
|
||||
if (fd < 0)
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE, "(no devices found) %s: %s",
|
||||
device, pcap_strerror(errno));
|
||||
#endif
|
||||
|
||||
return (fd);
|
||||
}
|
||||
|
@ -37,7 +37,7 @@
|
||||
*
|
||||
* @(#)bpf.h 7.1 (Berkeley) 5/7/91
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.34.2.6 2005/08/13 22:29:47 hannes Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.34.2.24 2007/09/19 02:52:12 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -132,7 +132,7 @@ struct bpf_version {
|
||||
#define DLT_AX25 3 /* Amateur Radio AX.25 */
|
||||
#define DLT_PRONET 4 /* Proteon ProNET Token Ring */
|
||||
#define DLT_CHAOS 5 /* Chaos */
|
||||
#define DLT_IEEE802 6 /* IEEE 802 Networks */
|
||||
#define DLT_IEEE802 6 /* 802.5 Token Ring */
|
||||
#define DLT_ARCNET 7 /* ARCNET, with BSD-style header */
|
||||
#define DLT_SLIP 8 /* Serial Line IP */
|
||||
#define DLT_PPP 9 /* Point-to-point Protocol */
|
||||
@ -246,12 +246,14 @@ struct bpf_version {
|
||||
* OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except
|
||||
* that the AF_ type in the link-layer header is in network byte order.
|
||||
*
|
||||
* OpenBSD defines it as 12, but that collides with DLT_RAW, so we
|
||||
* define it as 108 here. If OpenBSD picks up this file, it should
|
||||
* define DLT_LOOP as 12 in its version, as per the comment above -
|
||||
* and should not use 108 as a DLT_ value.
|
||||
* DLT_LOOP is 12 in OpenBSD, but that's DLT_RAW in other OSes, so
|
||||
* we don't use 12 for it in OSes other than OpenBSD.
|
||||
*/
|
||||
#ifdef __OpenBSD__
|
||||
#define DLT_LOOP 12
|
||||
#else
|
||||
#define DLT_LOOP 108
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's
|
||||
@ -605,6 +607,141 @@ struct bpf_version {
|
||||
#define DLT_JUNIPER_FRELAY 180
|
||||
#define DLT_JUNIPER_CHDLC 181
|
||||
|
||||
/*
|
||||
* Multi Link Frame Relay (FRF.16)
|
||||
*/
|
||||
#define DLT_MFR 182
|
||||
|
||||
/*
|
||||
* Juniper-private data link type, as per request from
|
||||
* Hannes Gredler <hannes@juniper.net>.
|
||||
* The DLT_ is used for internal communication with a
|
||||
* voice Adapter Card (PIC)
|
||||
*/
|
||||
#define DLT_JUNIPER_VP 183
|
||||
|
||||
/*
|
||||
* Arinc 429 frames.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
* Every frame contains a 32bit A429 label.
|
||||
* More documentation on Arinc 429 can be found at
|
||||
* http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf
|
||||
*/
|
||||
#define DLT_A429 184
|
||||
|
||||
/*
|
||||
* Arinc 653 Interpartition Communication messages.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
* Please refer to the A653-1 standard for more information.
|
||||
*/
|
||||
#define DLT_A653_ICM 185
|
||||
|
||||
/*
|
||||
* USB packets, beginning with a USB setup header; requested by
|
||||
* Paolo Abeni <paolo.abeni@email.it>.
|
||||
*/
|
||||
#define DLT_USB 186
|
||||
|
||||
/*
|
||||
* Bluetooth HCI UART transport layer (part H:4); requested by
|
||||
* Paolo Abeni.
|
||||
*/
|
||||
#define DLT_BLUETOOTH_HCI_H4 187
|
||||
|
||||
/*
|
||||
* IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz
|
||||
* <cruz_petagay@bah.com>.
|
||||
*/
|
||||
#define DLT_IEEE802_16_MAC_CPS 188
|
||||
|
||||
/*
|
||||
* USB packets, beginning with a Linux USB header; requested by
|
||||
* Paolo Abeni <paolo.abeni@email.it>.
|
||||
*/
|
||||
#define DLT_USB_LINUX 189
|
||||
|
||||
/*
|
||||
* Controller Area Network (CAN) v. 2.0B packets.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
* Used to dump CAN packets coming from a CAN Vector board.
|
||||
* More documentation on the CAN v2.0B frames can be found at
|
||||
* http://www.can-cia.org/downloads/?269
|
||||
*/
|
||||
#define DLT_CAN20B 190
|
||||
|
||||
/*
|
||||
* IEEE 802.15.4, with address fields padded, as is done by Linux
|
||||
* drivers; requested by Juergen Schimmer.
|
||||
*/
|
||||
#define DLT_IEEE802_15_4_LINUX 191
|
||||
|
||||
/*
|
||||
* Per Packet Information encapsulated packets.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
*/
|
||||
#define DLT_PPI 192
|
||||
|
||||
/*
|
||||
* Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header;
|
||||
* requested by Charles Clancy.
|
||||
*/
|
||||
#define DLT_IEEE802_16_MAC_CPS_RADIO 193
|
||||
|
||||
/*
|
||||
* Juniper-private data link type, as per request from
|
||||
* Hannes Gredler <hannes@juniper.net>.
|
||||
* The DLT_ is used for internal communication with a
|
||||
* integrated service module (ISM).
|
||||
*/
|
||||
#define DLT_JUNIPER_ISM 194
|
||||
|
||||
/*
|
||||
* IEEE 802.15.4, exactly as it appears in the spec (no padding, no
|
||||
* nothing); requested by Mikko Saarnivala <mikko.saarnivala@sensinode.com>.
|
||||
*/
|
||||
#define DLT_IEEE802_15_4 195
|
||||
|
||||
/*
|
||||
* Various link-layer types, with a pseudo-header, for SITA
|
||||
* (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com).
|
||||
*/
|
||||
#define DLT_SITA 196
|
||||
|
||||
/*
|
||||
* Various link-layer types, with a pseudo-header, for Endace DAG cards;
|
||||
* encapsulates Endace ERF records. Requested by Stephen Donnelly
|
||||
* <stephen@endace.com>.
|
||||
*/
|
||||
#define DLT_ERF 197
|
||||
|
||||
/*
|
||||
* Special header prepended to Ethernet packets when capturing from a
|
||||
* u10 Networks board. Requested by Phil Mulholland
|
||||
* <phil@u10networks.com>.
|
||||
*/
|
||||
#define DLT_RAIF1 198
|
||||
|
||||
/*
|
||||
* IPMB packet for IPMI, beginning with the I2C slave address, followed
|
||||
* by the netFn and LUN, etc.. Requested by Chanthy Toeung
|
||||
* <chanthy.toeung@ca.kontron.com>.
|
||||
*/
|
||||
#define DLT_IPMB 199
|
||||
|
||||
/*
|
||||
* Juniper-private data link type, as per request from
|
||||
* Hannes Gredler <hannes@juniper.net>.
|
||||
* The DLT_ is used for capturing data on a secure tunnel interface.
|
||||
*/
|
||||
#define DLT_JUNIPER_ST 200
|
||||
|
||||
/*
|
||||
* Bluetooth HCI UART transport layer (part H:4), with pseudo-header
|
||||
* that includes direction information; requested by Paolo Abeni.
|
||||
*/
|
||||
#define DLT_BLUETOOTH_HCI_H4_WITH_PHDR 201
|
||||
|
||||
|
||||
/*
|
||||
* The instruction encodings.
|
||||
*/
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-dag.c,v 1.21.2.3 2005/07/10 22:09:34 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-dag.c,v 1.21.2.7 2007/06/22 06:43:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -46,11 +46,21 @@ struct rtentry; /* declarations in <net/if.h> */
|
||||
#include "dagnew.h"
|
||||
#include "dagapi.h"
|
||||
|
||||
#define MIN_DAG_SNAPLEN 12
|
||||
#define MAX_DAG_SNAPLEN 2040
|
||||
#define ATM_CELL_SIZE 52
|
||||
#define ATM_HDR_SIZE 4
|
||||
|
||||
/*
|
||||
* A header containing additional MTP information.
|
||||
*/
|
||||
#define MTP2_SENT_OFFSET 0 /* 1 byte */
|
||||
#define MTP2_ANNEX_A_USED_OFFSET 1 /* 1 byte */
|
||||
#define MTP2_LINK_NUMBER_OFFSET 2 /* 2 bytes */
|
||||
#define MTP2_HDR_LEN 4 /* length of the header */
|
||||
|
||||
#define MTP2_ANNEX_A_NOT_USED 0
|
||||
#define MTP2_ANNEX_A_USED 1
|
||||
#define MTP2_ANNEX_A_USED_UNKNOWN 2
|
||||
|
||||
/* SunATM pseudo header */
|
||||
struct sunatm_hdr {
|
||||
unsigned char flags; /* destination and traffic type */
|
||||
@ -70,19 +80,6 @@ static const unsigned short endian_test_word = 0x0100;
|
||||
|
||||
#define IS_BIGENDIAN() (*((unsigned char *)&endian_test_word))
|
||||
|
||||
/*
|
||||
* Swap byte ordering of unsigned long long timestamp on a big endian
|
||||
* machine.
|
||||
*/
|
||||
#define SWAP_TS(ull) ((ull & 0xff00000000000000LL) >> 56) | \
|
||||
((ull & 0x00ff000000000000LL) >> 40) | \
|
||||
((ull & 0x0000ff0000000000LL) >> 24) | \
|
||||
((ull & 0x000000ff00000000LL) >> 8) | \
|
||||
((ull & 0x00000000ff000000LL) << 8) | \
|
||||
((ull & 0x0000000000ff0000LL) << 24) | \
|
||||
((ull & 0x000000000000ff00LL) << 40) | \
|
||||
((ull & 0x00000000000000ffLL) << 56)
|
||||
|
||||
|
||||
#ifdef DAG_ONLY
|
||||
/* This code is required when compiling for a DAG device only. */
|
||||
@ -93,6 +90,10 @@ static const unsigned short endian_test_word = 0x0100;
|
||||
#define dag_platform_finddevs pcap_platform_finddevs
|
||||
#endif /* DAG_ONLY */
|
||||
|
||||
#define MAX_DAG_PACKET 65536
|
||||
|
||||
static unsigned char TempPkt[MAX_DAG_PACKET];
|
||||
|
||||
static int dag_setfilter(pcap_t *p, struct bpf_program *fp);
|
||||
static int dag_stats(pcap_t *p, struct pcap_stat *ps);
|
||||
static int dag_set_datalink(pcap_t *p, int dlt);
|
||||
@ -139,9 +140,6 @@ dag_platform_close(pcap_t *p)
|
||||
#endif /* HAVE_DAG_STREAMS_API */
|
||||
if(dag_close(p->fd) < 0)
|
||||
fprintf(stderr,"dag_close: %s\n", strerror(errno));
|
||||
#ifdef linux
|
||||
free(p->md.device);
|
||||
#endif
|
||||
}
|
||||
delete_pcap_dag(p);
|
||||
/* Note: don't need to call close(p->fd) here as dag_close(p->fd) does this. */
|
||||
@ -222,7 +220,7 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
* If non-block is specified it will return immediately. The user
|
||||
* is then responsible for efficiency.
|
||||
*/
|
||||
p->md.dag_mem_top = dag_advance_stream(p->fd, p->md.dag_stream, (void**)&(p->md.dag_mem_bottom));
|
||||
p->md.dag_mem_top = dag_advance_stream(p->fd, p->md.dag_stream, &(p->md.dag_mem_bottom));
|
||||
#else
|
||||
/* dag_offset does not support timeouts */
|
||||
p->md.dag_mem_top = dag_offset(p->fd, &(p->md.dag_mem_bottom), flags);
|
||||
@ -282,8 +280,14 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
p->md.dag_mem_bottom += rlen;
|
||||
|
||||
switch(header->type) {
|
||||
case TYPE_AAL5:
|
||||
case TYPE_ATM:
|
||||
#ifdef TYPE_AAL5
|
||||
case TYPE_AAL5:
|
||||
if (header->type == TYPE_AAL5) {
|
||||
packet_len = ntohs(header->wlen);
|
||||
caplen = rlen - dag_record_size;
|
||||
}
|
||||
#endif
|
||||
#ifdef TYPE_MC_ATM
|
||||
case TYPE_MC_ATM:
|
||||
if (header->type == TYPE_MC_ATM) {
|
||||
@ -299,10 +303,7 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
dp+=4;
|
||||
}
|
||||
#endif
|
||||
if (header->type == TYPE_AAL5) {
|
||||
packet_len = ntohs(header->wlen);
|
||||
caplen = rlen - dag_record_size;
|
||||
} else if(header->type == TYPE_ATM) {
|
||||
if (header->type == TYPE_ATM) {
|
||||
caplen = packet_len = ATM_CELL_SIZE;
|
||||
}
|
||||
if (p->linktype == DLT_SUNATM) {
|
||||
@ -326,6 +327,9 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef TYPE_DSM_COLOR_ETH
|
||||
case TYPE_DSM_COLOR_ETH:
|
||||
#endif
|
||||
#ifdef TYPE_COLOR_ETH
|
||||
case TYPE_COLOR_ETH:
|
||||
#endif
|
||||
@ -338,6 +342,9 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
}
|
||||
dp += 2;
|
||||
break;
|
||||
#ifdef TYPE_DSM_COLOR_HDLC_POS
|
||||
case TYPE_DSM_COLOR_HDLC_POS:
|
||||
#endif
|
||||
#ifdef TYPE_COLOR_HDLC_POS
|
||||
case TYPE_COLOR_HDLC_POS:
|
||||
#endif
|
||||
@ -349,6 +356,9 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
caplen = packet_len;
|
||||
}
|
||||
break;
|
||||
#ifdef TYPE_COLOR_MC_HDLC_POS
|
||||
case TYPE_COLOR_MC_HDLC_POS:
|
||||
#endif
|
||||
#ifdef TYPE_MC_HDLC
|
||||
case TYPE_MC_HDLC:
|
||||
packet_len = ntohs(header->wlen);
|
||||
@ -357,9 +367,27 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
if (caplen > packet_len) {
|
||||
caplen = packet_len;
|
||||
}
|
||||
/* jump the MC_HDLC_HEADER */
|
||||
dp += 4;
|
||||
if (p->linktype == DLT_MTP2_WITH_PHDR) {
|
||||
/* Add the MTP2 Pseudo Header */
|
||||
caplen += MTP2_HDR_LEN;
|
||||
packet_len += MTP2_HDR_LEN;
|
||||
|
||||
TempPkt[MTP2_SENT_OFFSET] = 0;
|
||||
TempPkt[MTP2_ANNEX_A_USED_OFFSET] = MTP2_ANNEX_A_USED_UNKNOWN;
|
||||
*(TempPkt+MTP2_LINK_NUMBER_OFFSET) = ((header->rec.mc_hdlc.mc_header>>16)&0x01);
|
||||
*(TempPkt+MTP2_LINK_NUMBER_OFFSET+1) = ((header->rec.mc_hdlc.mc_header>>24)&0xff);
|
||||
memcpy(TempPkt+MTP2_HDR_LEN, dp, caplen);
|
||||
dp = TempPkt;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
/* Unhandled ERF type.
|
||||
* Ignore rather than generating error
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
if (caplen > p->snapshot)
|
||||
@ -377,6 +405,21 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
case TYPE_COLOR_ETH:
|
||||
break;
|
||||
#endif
|
||||
#ifdef TYPE_DSM_COLOR_HDLC_POS
|
||||
/* in this type the color value overwrites the lctr */
|
||||
case TYPE_DSM_COLOR_HDLC_POS:
|
||||
break;
|
||||
#endif
|
||||
#ifdef TYPE_DSM_COLOR_ETH
|
||||
/* in this type the color value overwrites the lctr */
|
||||
case TYPE_DSM_COLOR_ETH:
|
||||
break;
|
||||
#endif
|
||||
#ifdef TYPE_COLOR_MC_HDLC_POS
|
||||
case TYPE_COLOR_MC_HDLC_POS:
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
if (header->lctr) {
|
||||
if (p->md.stat.ps_drop > (UINT_MAX - ntohs(header->lctr))) {
|
||||
@ -394,7 +437,7 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
register unsigned long long ts;
|
||||
|
||||
if (IS_BIGENDIAN()) {
|
||||
ts = SWAP_TS(header->ts);
|
||||
ts = SWAPLL(header->ts);
|
||||
} else {
|
||||
ts = header->ts;
|
||||
}
|
||||
@ -445,6 +488,9 @@ dag_inject(pcap_t *p, const void *buf _U_, size_t size _U_)
|
||||
* cards are always promiscuous. The to_ms parameter is also ignored as it is
|
||||
* not supported in hardware.
|
||||
*
|
||||
* snaplen is now also ignored, until we get per-stream slen support. Set
|
||||
* slen with approprite DAG tool BEFORE pcap_open_live().
|
||||
*
|
||||
* See also pcap(3).
|
||||
*/
|
||||
pcap_t *
|
||||
@ -455,7 +501,7 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
char *s;
|
||||
int n;
|
||||
daginf_t* daginf;
|
||||
char * newDev;
|
||||
char * newDev = NULL;
|
||||
#ifdef HAVE_DAG_STREAMS_API
|
||||
uint32_t mindata;
|
||||
struct timeval maxwait;
|
||||
@ -478,9 +524,12 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
|
||||
memset(handle, 0, sizeof(*handle));
|
||||
|
||||
newDev = (char *)malloc(strlen(device) + 16);
|
||||
|
||||
#ifdef HAVE_DAG_STREAMS_API
|
||||
newDev = (char *)malloc(strlen(device) + 16);
|
||||
if (newDev == NULL) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "Can't allocate string for device name: %s\n", pcap_strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Parse input name to get dag device and stream number if provided */
|
||||
if (dag_parse_name(device, newDev, strlen(device) + 16, &handle->md.dag_stream) < 0) {
|
||||
@ -494,18 +543,15 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
goto fail;
|
||||
}
|
||||
#else
|
||||
if (strstr(device, "/dev") == NULL) {
|
||||
newDev[0] = '\0';
|
||||
strcat(newDev, "/dev/");
|
||||
strcat(newDev,device);
|
||||
if (strncmp(device, "/dev/", 5) != 0) {
|
||||
newDev = (char *)malloc(strlen(device) + 5);
|
||||
if (newDev == NULL) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "Can't allocate string for device name: %s\n", pcap_strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
strcpy(newDev, "/dev/");
|
||||
strcat(newDev, device);
|
||||
device = newDev;
|
||||
} else {
|
||||
device = strdup(device);
|
||||
}
|
||||
|
||||
if (device == NULL) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "str_dup: %s\n", pcap_strerror(errno));
|
||||
goto fail;
|
||||
}
|
||||
#endif /* HAVE_DAG_STREAMS_API */
|
||||
|
||||
@ -519,7 +565,7 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
/* Open requested stream. Can fail if already locked or on error */
|
||||
if (dag_attach_stream(handle->fd, handle->md.dag_stream, 0, 0) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "dag_attach_stream: %s\n", pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto failclose;
|
||||
}
|
||||
|
||||
/* Set up default poll parameters for stream
|
||||
@ -528,7 +574,7 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
if (dag_get_stream_poll(handle->fd, handle->md.dag_stream,
|
||||
&mindata, &maxwait, &poll) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "dag_get_stream_poll: %s\n", pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto faildetach;
|
||||
}
|
||||
|
||||
/* Amount of data to collect in Bytes before calling callbacks.
|
||||
@ -546,18 +592,25 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
if (dag_set_stream_poll(handle->fd, handle->md.dag_stream,
|
||||
mindata, &maxwait, &poll) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "dag_set_stream_poll: %s\n", pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto faildetach;
|
||||
}
|
||||
|
||||
#else
|
||||
if((handle->md.dag_mem_base = dag_mmap(handle->fd)) == MAP_FAILED) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,"dag_mmap %s: %s\n", device, pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto failclose;
|
||||
}
|
||||
|
||||
#endif /* HAVE_DAG_STREAMS_API */
|
||||
|
||||
/* XXX Not calling dag_configure() to set slen; this is unsafe in
|
||||
* multi-stream environments as the gpp config is global.
|
||||
* Once the firmware provides 'per-stream slen' this can be supported
|
||||
* again via the Config API without side-effects */
|
||||
#if 0
|
||||
/* set the card snap length to the specified snaplen parameter */
|
||||
/* This is a really bad idea, as different cards have different
|
||||
* valid slen ranges. Should fix in Config API. */
|
||||
if (snaplen == 0 || snaplen > MAX_DAG_SNAPLEN) {
|
||||
snaplen = MAX_DAG_SNAPLEN;
|
||||
} else if (snaplen < MIN_DAG_SNAPLEN) {
|
||||
@ -568,18 +621,19 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
|
||||
if(dag_configure(handle->fd, conf) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,"dag_configure %s: %s\n", device, pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto faildetach;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DAG_STREAMS_API
|
||||
if(dag_start_stream(handle->fd, handle->md.dag_stream) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "dag_start_stream %s: %s\n", device, pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto faildetach;
|
||||
}
|
||||
#else
|
||||
if(dag_start(handle->fd) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "dag_start %s: %s\n", device, pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto failclose;
|
||||
}
|
||||
#endif /* HAVE_DAG_STREAMS_API */
|
||||
|
||||
@ -607,7 +661,7 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
} else {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,
|
||||
"pcap_open_live %s: bad ERF_FCS_BITS value (%d) in environment\n", device, n);
|
||||
goto fail;
|
||||
goto failstop;
|
||||
}
|
||||
}
|
||||
|
||||
@ -617,14 +671,14 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
handle->linktype = -1;
|
||||
if (dag_get_datalink(handle) < 0) {
|
||||
strcpy(ebuf, handle->errbuf);
|
||||
goto fail;
|
||||
goto failstop;
|
||||
}
|
||||
|
||||
handle->bufsize = 0;
|
||||
|
||||
if (new_pcap_dag(handle) < 0) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "new_pcap_dag %s: %s\n", device, pcap_strerror(errno));
|
||||
goto fail;
|
||||
goto failstop;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -632,13 +686,9 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
*/
|
||||
handle->selectable_fd = -1;
|
||||
|
||||
#ifdef linux
|
||||
handle->md.device = (char *)device;
|
||||
handle->md.timeout = to_ms;
|
||||
#else
|
||||
free((char *)device);
|
||||
device = NULL;
|
||||
#endif
|
||||
if (newDev != NULL) {
|
||||
free((char *)newDev);
|
||||
}
|
||||
|
||||
handle->read_op = dag_read;
|
||||
handle->inject_op = dag_inject;
|
||||
@ -649,9 +699,38 @@ dag_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebu
|
||||
handle->setnonblock_op = dag_setnonblock;
|
||||
handle->stats_op = dag_stats;
|
||||
handle->close_op = dag_platform_close;
|
||||
|
||||
handle->md.stat.ps_drop = 0;
|
||||
handle->md.stat.ps_recv = 0;
|
||||
return handle;
|
||||
|
||||
#ifdef HAVE_DAG_STREAMS_API
|
||||
failstop:
|
||||
if (handle != NULL) {
|
||||
if (dag_stop_stream(handle->fd, handle->md.dag_stream) < 0)
|
||||
fprintf(stderr,"dag_stop_stream: %s\n", strerror(errno));
|
||||
}
|
||||
|
||||
faildetach:
|
||||
if (handle != NULL) {
|
||||
if (dag_detach_stream(handle->fd, handle->md.dag_stream) < 0)
|
||||
fprintf(stderr,"dag_detach_stream: %s\n", strerror(errno));
|
||||
}
|
||||
#else
|
||||
failstop:
|
||||
if (handle != NULL) {
|
||||
if (dag_stop(p->fd) < 0)
|
||||
fprintf(stderr,"dag_stop: %s\n", strerror(errno));
|
||||
}
|
||||
#endif /* HAVE_DAG_STREAMS_API */
|
||||
|
||||
failclose:
|
||||
if (handle != NULL) {
|
||||
if (dag_close(handle->fd) < 0)
|
||||
fprintf(stderr,"dag_close: %s\n", strerror(errno));
|
||||
}
|
||||
if (handle != NULL)
|
||||
delete_pcap_dag(handle);
|
||||
|
||||
fail:
|
||||
if (newDev != NULL) {
|
||||
free((char *)newDev);
|
||||
@ -806,81 +885,123 @@ dag_setnonblock(pcap_t *p, int nonblock, char *errbuf)
|
||||
static int
|
||||
dag_get_datalink(pcap_t *p)
|
||||
{
|
||||
int daglinktype;
|
||||
int index=0;
|
||||
uint8_t types[255];
|
||||
|
||||
if (p->dlt_list == NULL && (p->dlt_list = malloc(2*sizeof(*(p->dlt_list)))) == NULL) {
|
||||
memset(types, 0, 255);
|
||||
|
||||
if (p->dlt_list == NULL && (p->dlt_list = malloc(255*sizeof(*(p->dlt_list)))) == NULL) {
|
||||
(void)snprintf(p->errbuf, sizeof(p->errbuf), "malloc: %s", pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
/* Check the type through a dagapi call. */
|
||||
daglinktype = dag_linktype(p->fd);
|
||||
|
||||
switch(daglinktype) {
|
||||
|
||||
case TYPE_HDLC_POS:
|
||||
case TYPE_COLOR_HDLC_POS:
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_count = 2;
|
||||
p->dlt_list[0] = DLT_CHDLC;
|
||||
p->dlt_list[1] = DLT_PPP_SERIAL;
|
||||
p->dlt_list[2] = DLT_FRELAY;
|
||||
}
|
||||
p->linktype = DLT_CHDLC;
|
||||
break;
|
||||
|
||||
case TYPE_ETH:
|
||||
case TYPE_COLOR_ETH:
|
||||
/*
|
||||
* This is (presumably) a real Ethernet capture; give it a
|
||||
* link-layer-type list with DLT_EN10MB and DLT_DOCSIS, so
|
||||
* that an application can let you choose it, in case you're
|
||||
* capturing DOCSIS traffic that a Cisco Cable Modem
|
||||
* Termination System is putting out onto an Ethernet (it
|
||||
* doesn't put an Ethernet header onto the wire, it puts raw
|
||||
* DOCSIS frames out on the wire inside the low-level
|
||||
* Ethernet framing).
|
||||
*/
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_count = 2;
|
||||
p->dlt_list[0] = DLT_EN10MB;
|
||||
p->dlt_list[1] = DLT_DOCSIS;
|
||||
}
|
||||
p->linktype = DLT_EN10MB;
|
||||
break;
|
||||
|
||||
case TYPE_AAL5:
|
||||
case TYPE_ATM:
|
||||
case TYPE_MC_ATM:
|
||||
case TYPE_MC_AAL5:
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_count = 2;
|
||||
p->dlt_list[0] = DLT_ATM_RFC1483;
|
||||
p->dlt_list[1] = DLT_SUNATM;
|
||||
}
|
||||
p->linktype = DLT_ATM_RFC1483;
|
||||
break;
|
||||
|
||||
case TYPE_MC_HDLC:
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_count = 4;
|
||||
p->dlt_list[0] = DLT_CHDLC;
|
||||
p->dlt_list[1] = DLT_PPP_SERIAL;
|
||||
p->dlt_list[2] = DLT_FRELAY;
|
||||
p->dlt_list[3] = DLT_MTP2;
|
||||
}
|
||||
p->linktype = DLT_CHDLC;
|
||||
break;
|
||||
|
||||
case TYPE_LEGACY:
|
||||
p->linktype = DLT_NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
snprintf(p->errbuf, sizeof(p->errbuf), "unknown DAG linktype %d\n", daglinktype);
|
||||
return (-1);
|
||||
p->linktype = 0;
|
||||
|
||||
#ifdef HAVE_DAG_GET_ERF_TYPES
|
||||
/* Get list of possible ERF types for this card */
|
||||
if (dag_get_erf_types(p->fd, types, 255) < 0) {
|
||||
snprintf(p->errbuf, sizeof(p->errbuf), "dag_get_erf_types: %s", pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
while (types[index]) {
|
||||
#else
|
||||
/* Check the type through a dagapi call. */
|
||||
types[index] = dag_linktype(p->fd);
|
||||
|
||||
{
|
||||
#endif
|
||||
switch(types[index]) {
|
||||
|
||||
case TYPE_HDLC_POS:
|
||||
#ifdef TYPE_COLOR_HDLC_POS
|
||||
case TYPE_COLOR_HDLC_POS:
|
||||
#endif
|
||||
#ifdef TYPE_DSM_COLOR_HDLC_POS
|
||||
case TYPE_DSM_COLOR_HDLC_POS:
|
||||
#endif
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_list[index++] = DLT_CHDLC;
|
||||
p->dlt_list[index++] = DLT_PPP_SERIAL;
|
||||
p->dlt_list[index++] = DLT_FRELAY;
|
||||
}
|
||||
if(!p->linktype)
|
||||
p->linktype = DLT_CHDLC;
|
||||
break;
|
||||
|
||||
case TYPE_ETH:
|
||||
#ifdef TYPE_COLOR_ETH
|
||||
case TYPE_COLOR_ETH:
|
||||
#endif
|
||||
#ifdef TYPE_DSM_COLOR_ETH
|
||||
case TYPE_DSM_COLOR_ETH:
|
||||
#endif
|
||||
/*
|
||||
* This is (presumably) a real Ethernet capture; give it a
|
||||
* link-layer-type list with DLT_EN10MB and DLT_DOCSIS, so
|
||||
* that an application can let you choose it, in case you're
|
||||
* capturing DOCSIS traffic that a Cisco Cable Modem
|
||||
* Termination System is putting out onto an Ethernet (it
|
||||
* doesn't put an Ethernet header onto the wire, it puts raw
|
||||
* DOCSIS frames out on the wire inside the low-level
|
||||
* Ethernet framing).
|
||||
*/
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_list[index++] = DLT_EN10MB;
|
||||
p->dlt_list[index++] = DLT_DOCSIS;
|
||||
}
|
||||
if(!p->linktype)
|
||||
p->linktype = DLT_EN10MB;
|
||||
break;
|
||||
|
||||
case TYPE_ATM:
|
||||
#ifdef TYPE_AAL5
|
||||
case TYPE_AAL5:
|
||||
#endif
|
||||
#ifdef TYPE_MC_ATM
|
||||
case TYPE_MC_ATM:
|
||||
#endif
|
||||
#ifdef TYPE_MC_AAL5
|
||||
case TYPE_MC_AAL5:
|
||||
#endif
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_list[index++] = DLT_ATM_RFC1483;
|
||||
p->dlt_list[index++] = DLT_SUNATM;
|
||||
}
|
||||
if(!p->linktype)
|
||||
p->linktype = DLT_ATM_RFC1483;
|
||||
break;
|
||||
|
||||
#ifdef TYPE_COLOR_MC_HDLC_POS
|
||||
case TYPE_COLOR_MC_HDLC_POS:
|
||||
#endif
|
||||
#ifdef TYPE_MC_HDLC
|
||||
case TYPE_MC_HDLC:
|
||||
if (p->dlt_list != NULL) {
|
||||
p->dlt_list[index++] = DLT_CHDLC;
|
||||
p->dlt_list[index++] = DLT_PPP_SERIAL;
|
||||
p->dlt_list[index++] = DLT_FRELAY;
|
||||
p->dlt_list[index++] = DLT_MTP2;
|
||||
p->dlt_list[index++] = DLT_MTP2_WITH_PHDR;
|
||||
}
|
||||
if(!p->linktype)
|
||||
p->linktype = DLT_CHDLC;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TYPE_LEGACY:
|
||||
if(!p->linktype)
|
||||
p->linktype = DLT_NULL;
|
||||
break;
|
||||
|
||||
default:
|
||||
snprintf(p->errbuf, sizeof(p->errbuf), "unknown DAG linktype %d", types[index]);
|
||||
return (-1);
|
||||
|
||||
} /* switch */
|
||||
}
|
||||
|
||||
p->dlt_count = index;
|
||||
|
||||
return p->linktype;
|
||||
}
|
||||
|
@ -70,7 +70,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-dlpi.c,v 1.108.2.6 2005/08/13 23:15:58 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-dlpi.c,v 1.108.2.7 2006/04/04 05:33:02 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -396,6 +396,14 @@ pcap_inject_dlpi(pcap_t *p, const void *buf, size_t size)
|
||||
pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
/*
|
||||
* putmsg() returns either 0 or -1; it doesn't indicate how
|
||||
* many bytes were written (presumably they were all written
|
||||
* or none of them were written). OpenBSD's pcap_inject()
|
||||
* returns the number of bytes written, so, for API compatibility,
|
||||
* we return the number of bytes we were told to write.
|
||||
*/
|
||||
ret = size;
|
||||
#else /* no raw mode */
|
||||
/*
|
||||
* XXX - this is a pain, because you might have to extract
|
||||
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-int.h,v 1.68.2.6 2005/07/07 06:56:04 guy Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-int.h,v 1.68.2.11 2007/06/22 06:43:58 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef pcap_int_h
|
||||
@ -44,7 +44,7 @@ extern "C" {
|
||||
#include <pcap.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <packet32.h>
|
||||
#include <Packet32.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifdef MSDOS
|
||||
@ -52,6 +52,19 @@ extern "C" {
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Swap byte ordering of unsigned long long timestamp on a big endian
|
||||
* machine.
|
||||
*/
|
||||
#define SWAPLL(ull) ((ull & 0xff00000000000000LL) >> 56) | \
|
||||
((ull & 0x00ff000000000000LL) >> 40) | \
|
||||
((ull & 0x0000ff0000000000LL) >> 24) | \
|
||||
((ull & 0x000000ff00000000LL) >> 8) | \
|
||||
((ull & 0x00000000ff000000LL) << 8) | \
|
||||
((ull & 0x0000000000ff0000LL) << 24) | \
|
||||
((ull & 0x000000000000ff00LL) << 40) | \
|
||||
((ull & 0x00000000000000ffLL) << 56)
|
||||
|
||||
/*
|
||||
* Savefile
|
||||
*/
|
||||
@ -89,6 +102,7 @@ struct pcap_md {
|
||||
int ifindex; /* interface index of device we're bound to */
|
||||
int lo_ifindex; /* interface index of the loopback device */
|
||||
struct pcap *next; /* list of open promiscuous sock_packet pcaps */
|
||||
u_int packets_read; /* count of packets read with recvfrom() */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DAG_API
|
||||
@ -111,8 +125,13 @@ struct pcap_md {
|
||||
|
||||
/*
|
||||
* Ultrix, DEC OSF/1^H^H^H^H^H^H^H^H^HDigital UNIX^H^H^H^H^H^H^H^H^H^H^H^H
|
||||
* Tru64 UNIX, and NetBSD pad to make everything line up on a nice boundary.
|
||||
* Tru64 UNIX, and some versions of NetBSD pad FDDI packets to make everything
|
||||
* line up on a nice boundary.
|
||||
*/
|
||||
#ifdef __NetBSD__
|
||||
#include <sys/param.h> /* needed to declare __NetBSD_Version__ */
|
||||
#endif
|
||||
|
||||
#if defined(ultrix) || defined(__osf__) || (defined(__NetBSD__) && __NetBSD_Version__ > 106000000)
|
||||
#define PCAP_FDDIPAD 3
|
||||
#endif
|
||||
@ -189,9 +208,13 @@ struct pcap {
|
||||
};
|
||||
|
||||
/*
|
||||
* This is a timeval as stored in disk in a dumpfile.
|
||||
* This is a timeval as stored in a savefile.
|
||||
* It has to use the same types everywhere, independent of the actual
|
||||
* `struct timeval'
|
||||
* `struct timeval'; `struct timeval' has 32-bit tv_sec values on some
|
||||
* platforms and 64-bit tv_sec values on other platforms, and writing
|
||||
* out native `struct timeval' values would mean files could only be
|
||||
* read on systems with the same tv_sec size as the system on which
|
||||
* the file was written.
|
||||
*/
|
||||
|
||||
struct pcap_timeval {
|
||||
@ -200,7 +223,7 @@ struct pcap_timeval {
|
||||
};
|
||||
|
||||
/*
|
||||
* How a `pcap_pkthdr' is actually stored in the dumpfile.
|
||||
* This is a `pcap_pkthdr' as actually stored in a savefile.
|
||||
*
|
||||
* Do not change the format of this structure, in any way (this includes
|
||||
* changes that only affect the length of fields in this structure),
|
||||
@ -232,7 +255,7 @@ struct pcap_sf_pkthdr {
|
||||
};
|
||||
|
||||
/*
|
||||
* How a `pcap_pkthdr' is actually stored in dumpfiles written
|
||||
* How a `pcap_pkthdr' is actually stored in savefiles written
|
||||
* by some patched versions of libpcap (e.g. the ones in Red
|
||||
* Hat Linux 6.1 and 6.2).
|
||||
*
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-linux.c,v 1.110.2.6 2005/08/16 04:25:26 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-linux.c,v 1.110.2.14 2006/10/12 17:26:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -394,7 +394,16 @@ pcap_open_live(const char *device, int snaplen, int promisc, int to_ms,
|
||||
*
|
||||
* We can safely pass "recvfrom()" a byte count
|
||||
* based on the snapshot length.
|
||||
*
|
||||
* If we're in cooked mode, make the snapshot length
|
||||
* large enough to hold a "cooked mode" header plus
|
||||
* 1 byte of packet data (so we don't pass a byte
|
||||
* count of 0 to "recvfrom()").
|
||||
*/
|
||||
if (handle->md.cooked) {
|
||||
if (handle->snapshot < SLL_HDR_LEN + 1)
|
||||
handle->snapshot = SLL_HDR_LEN + 1;
|
||||
}
|
||||
handle->bufsize = handle->snapshot;
|
||||
}
|
||||
|
||||
@ -517,6 +526,22 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata)
|
||||
|
||||
#ifdef HAVE_PF_PACKET_SOCKETS
|
||||
if (!handle->md.sock_packet) {
|
||||
/*
|
||||
* Unfortunately, there is a window between socket() and
|
||||
* bind() where the kernel may queue packets from any
|
||||
* interface. If we're bound to a particular interface,
|
||||
* discard packets not from that interface.
|
||||
*
|
||||
* (If socket filters are supported, we could do the
|
||||
* same thing we do when changing the filter; however,
|
||||
* that won't handle packet sockets without socket
|
||||
* filter support, and it's a bit more complicated.
|
||||
* It would save some instructions per packet, however.)
|
||||
*/
|
||||
if (handle->md.ifindex != -1 &&
|
||||
from.sll_ifindex != handle->md.ifindex)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Do checks based on packet direction.
|
||||
* We can only do this if we're using PF_PACKET; the
|
||||
@ -657,7 +682,7 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata)
|
||||
|
||||
if (ioctl(handle->fd, SIOCGSTAMP, &pcap_header.ts) == -1) {
|
||||
snprintf(handle->errbuf, sizeof(handle->errbuf),
|
||||
"ioctl: %s", pcap_strerror(errno));
|
||||
"SIOCGSTAMP: %s", pcap_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
pcap_header.caplen = caplen;
|
||||
@ -695,8 +720,18 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata)
|
||||
* here, but it's not clear that always incrementing
|
||||
* the count is more expensive than always testing a flag
|
||||
* in memory.
|
||||
*
|
||||
* We keep the count in "md.packets_read", and use that for
|
||||
* "ps_recv" if we can't get the statistics from the kernel.
|
||||
* We do that because, if we *can* get the statistics from
|
||||
* the kernel, we use "md.stat.ps_recv" and "md.stat.ps_drop"
|
||||
* as running counts, as reading the statistics from the
|
||||
* kernel resets the kernel statistics, and if we directly
|
||||
* increment "md.stat.ps_recv" here, that means it will
|
||||
* count packets *twice* on systems where we can get kernel
|
||||
* statistics - once here, and once in pcap_stats_linux().
|
||||
*/
|
||||
handle->md.stat.ps_recv++;
|
||||
handle->md.packets_read++;
|
||||
|
||||
/* Call the user supplied callback function */
|
||||
callback(userdata, &pcap_header, bp);
|
||||
@ -770,6 +805,23 @@ pcap_stats_linux(pcap_t *handle, struct pcap_stat *stats)
|
||||
if (getsockopt(handle->fd, SOL_PACKET, PACKET_STATISTICS,
|
||||
&kstats, &len) > -1) {
|
||||
/*
|
||||
* On systems where the PACKET_STATISTICS "getsockopt()"
|
||||
* argument is supported on PF_PACKET sockets:
|
||||
*
|
||||
* "ps_recv" counts only packets that *passed* the
|
||||
* filter, not packets that didn't pass the filter.
|
||||
* This includes packets later dropped because we
|
||||
* ran out of buffer space.
|
||||
*
|
||||
* "ps_drop" counts packets dropped because we ran
|
||||
* out of buffer space. It doesn't count packets
|
||||
* dropped by the interface driver. It counts only
|
||||
* packets that passed the filter.
|
||||
*
|
||||
* Both statistics include packets not yet read from
|
||||
* the kernel by libpcap, and thus not yet seen by
|
||||
* the application.
|
||||
*
|
||||
* In "linux/net/packet/af_packet.c", at least in the
|
||||
* 2.4.9 kernel, "tp_packets" is incremented for every
|
||||
* packet that passes the packet filter *and* is
|
||||
@ -799,6 +851,8 @@ pcap_stats_linux(pcap_t *handle, struct pcap_stat *stats)
|
||||
*/
|
||||
handle->md.stat.ps_recv += kstats.tp_packets;
|
||||
handle->md.stat.ps_drop += kstats.tp_drops;
|
||||
*stats = handle->md.stat;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -817,21 +871,6 @@ pcap_stats_linux(pcap_t *handle, struct pcap_stat *stats)
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* On systems where the PACKET_STATISTICS "getsockopt()" argument
|
||||
* is supported on PF_PACKET sockets:
|
||||
*
|
||||
* "ps_recv" counts only packets that *passed* the filter,
|
||||
* not packets that didn't pass the filter. This includes
|
||||
* packets later dropped because we ran out of buffer space.
|
||||
*
|
||||
* "ps_drop" counts packets dropped because we ran out of
|
||||
* buffer space. It doesn't count packets dropped by the
|
||||
* interface driver. It counts only packets that passed
|
||||
* the filter.
|
||||
*
|
||||
* Both statistics include packets not yet read from the
|
||||
* kernel by libpcap, and thus not yet seen by the application.
|
||||
*
|
||||
* On systems where the PACKET_STATISTICS "getsockopt()" argument
|
||||
* is not supported on PF_PACKET sockets:
|
||||
*
|
||||
@ -844,8 +883,14 @@ pcap_stats_linux(pcap_t *handle, struct pcap_stat *stats)
|
||||
*
|
||||
* "ps_recv" doesn't include packets not yet read from
|
||||
* the kernel by libpcap.
|
||||
*
|
||||
* We maintain the count of packets processed by libpcap in
|
||||
* "md.packets_read", for reasons described in the comment
|
||||
* at the end of pcap_read_packet(). We have no idea how many
|
||||
* packets were dropped.
|
||||
*/
|
||||
*stats = handle->md.stat;
|
||||
stats->ps_recv = handle->md.packets_read;
|
||||
stats->ps_drop = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -917,6 +962,7 @@ pcap_setfilter_linux(pcap_t *handle, struct bpf_program *filter)
|
||||
* sake of correctness I added this check.
|
||||
*/
|
||||
fprintf(stderr, "Warning: Filter too complex for kernel\n");
|
||||
fcode.len = 0;
|
||||
fcode.filter = NULL;
|
||||
can_filter_in_kernel = 0;
|
||||
} else
|
||||
@ -1315,6 +1361,16 @@ static void map_arphrd_to_dlt(pcap_t *handle, int arptype, int cooked_ok)
|
||||
//handle->md.cooked = 1;
|
||||
break;
|
||||
|
||||
/* ARPHRD_LAPD is unofficial and randomly allocated, if reallocation
|
||||
* is needed, please report it to <daniele@orlandi.com> */
|
||||
#ifndef ARPHRD_LAPD
|
||||
#define ARPHRD_LAPD 8445
|
||||
#endif
|
||||
case ARPHRD_LAPD:
|
||||
/* Don't expect IP packet out of this interfaces... */
|
||||
handle->linktype = DLT_LINUX_LAPD;
|
||||
break;
|
||||
|
||||
default:
|
||||
handle->linktype = -1;
|
||||
break;
|
||||
@ -1396,6 +1452,7 @@ live_open_new(pcap_t *handle, const char *device, int promisc,
|
||||
if (handle->linktype == -1 ||
|
||||
handle->linktype == DLT_LINUX_SLL ||
|
||||
handle->linktype == DLT_LINUX_IRDA ||
|
||||
handle->linktype == DLT_LINUX_LAPD ||
|
||||
(handle->linktype == DLT_EN10MB &&
|
||||
(strncmp("isdn", device, 4) == 0 ||
|
||||
strncmp("isdY", device, 4) == 0))) {
|
||||
@ -1449,7 +1506,8 @@ live_open_new(pcap_t *handle, const char *device, int promisc,
|
||||
}
|
||||
/* IrDA capture is not a real "cooked" capture,
|
||||
* it's IrLAP frames, not IP packets. */
|
||||
if (handle->linktype != DLT_LINUX_IRDA)
|
||||
if (handle->linktype != DLT_LINUX_IRDA &&
|
||||
handle->linktype != DLT_LINUX_LAPD)
|
||||
handle->linktype = DLT_LINUX_SLL;
|
||||
}
|
||||
|
||||
@ -1557,7 +1615,7 @@ iface_get_id(int fd, const char *device, char *ebuf)
|
||||
|
||||
if (ioctl(fd, SIOCGIFINDEX, &ifr) == -1) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,
|
||||
"ioctl: %s", pcap_strerror(errno));
|
||||
"SIOCGIFINDEX: %s", pcap_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1774,7 +1832,7 @@ live_open_old(pcap_t *handle, const char *device, int promisc,
|
||||
strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
||||
if (ioctl(handle->fd, SIOCGIFFLAGS, &ifr) == -1) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,
|
||||
"ioctl: %s", pcap_strerror(errno));
|
||||
"SIOCGIFFLAGS: %s", pcap_strerror(errno));
|
||||
break;
|
||||
}
|
||||
if ((ifr.ifr_flags & IFF_PROMISC) == 0) {
|
||||
@ -1808,7 +1866,7 @@ live_open_old(pcap_t *handle, const char *device, int promisc,
|
||||
ifr.ifr_flags |= IFF_PROMISC;
|
||||
if (ioctl(handle->fd, SIOCSIFFLAGS, &ifr) == -1) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,
|
||||
"ioctl: %s",
|
||||
"SIOCSIFFLAGS: %s",
|
||||
pcap_strerror(errno));
|
||||
break;
|
||||
}
|
||||
@ -1892,7 +1950,7 @@ iface_get_mtu(int fd, const char *device, char *ebuf)
|
||||
|
||||
if (ioctl(fd, SIOCGIFMTU, &ifr) == -1) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,
|
||||
"ioctl: %s", pcap_strerror(errno));
|
||||
"SIOCGIFMTU: %s", pcap_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1912,7 +1970,7 @@ iface_get_arptype(int fd, const char *device, char *ebuf)
|
||||
|
||||
if (ioctl(fd, SIOCGIFHWADDR, &ifr) == -1) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE,
|
||||
"ioctl: %s", pcap_strerror(errno));
|
||||
"SIOCGIFHWADDR: %s", pcap_strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -2149,8 +2207,13 @@ set_kernel_filter(pcap_t *handle, struct sock_fprog *fcode)
|
||||
static int
|
||||
reset_kernel_filter(pcap_t *handle)
|
||||
{
|
||||
/* setsockopt() barfs unless it get a dummy parameter */
|
||||
int dummy;
|
||||
/*
|
||||
* setsockopt() barfs unless it get a dummy parameter.
|
||||
* valgrind whines unless the value is initialized,
|
||||
* as it has no idea that setsockopt() ignores its
|
||||
* parameter.
|
||||
*/
|
||||
int dummy = 0;
|
||||
|
||||
return setsockopt(handle->fd, SOL_SOCKET, SO_DETACH_FILTER,
|
||||
&dummy, sizeof(dummy));
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 1999 - 2003
|
||||
* NetGroup, Politecnico di Torino (Italy)
|
||||
* Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)
|
||||
* Copyright (c) 2005 - 2007 CACE Technologies, Davis (California)
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -12,9 +12,10 @@
|
||||
* 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 Politecnico di Torino nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
* 3. Neither the name of the Politecnico di Torino, CACE Technologies
|
||||
* 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 COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
@ -32,11 +33,11 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-win32.c,v 1.25.2.3 2005/07/10 17:52:54 risso Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-win32.c,v 1.25.2.7 2007/06/14 22:07:14 gianluca Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#include <pcap-int.h>
|
||||
#include <packet32.h>
|
||||
#include <Packet32.h>
|
||||
#include <Ntddndis.h>
|
||||
#ifdef HAVE_DAG_API
|
||||
#include <dagnew.h>
|
||||
@ -486,14 +487,41 @@ pcap_open_live(const char *device, int snaplen, int promisc, int to_ms,
|
||||
p->linktype = DLT_NULL;
|
||||
break;
|
||||
|
||||
case NdisMediumBare80211:
|
||||
p->linktype = DLT_IEEE802_11;
|
||||
break;
|
||||
|
||||
case NdisMediumRadio80211:
|
||||
p->linktype = DLT_IEEE802_11_RADIO;
|
||||
break;
|
||||
|
||||
case NdisMediumPpi:
|
||||
p->linktype = DLT_PPI;
|
||||
break;
|
||||
|
||||
default:
|
||||
p->linktype = DLT_EN10MB; /*an unknown adapter is assumed to be ethernet*/
|
||||
break;
|
||||
}
|
||||
|
||||
/* Set promisquous mode */
|
||||
if (promisc) PacketSetHwFilter(p->adapter,NDIS_PACKET_TYPE_PROMISCUOUS);
|
||||
else PacketSetHwFilter(p->adapter,NDIS_PACKET_TYPE_ALL_LOCAL);
|
||||
/* Set promiscuous mode */
|
||||
if (promisc)
|
||||
{
|
||||
|
||||
if (PacketSetHwFilter(p->adapter,NDIS_PACKET_TYPE_PROMISCUOUS) == FALSE)
|
||||
{
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "failed to set hardware filter to promiscuous mode");
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PacketSetHwFilter(p->adapter,NDIS_PACKET_TYPE_ALL_LOCAL) == FALSE)
|
||||
{
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "failed to set hardware filter to non-promiscuous mode");
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the buffer size */
|
||||
p->bufsize = PcapBufSize;
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" @(#) $Header: /tcpdump/master/libpcap/pcap.3,v 1.64.2.8 2005/09/07 08:29:17 guy Exp $
|
||||
.\" @(#) $Header: /tcpdump/master/libpcap/pcap.3,v 1.64.2.11 2007/06/11 09:52:05 guy Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1994, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
@ -79,7 +79,7 @@ u_char *sp)
|
||||
.ft B
|
||||
int pcap_compile(pcap_t *p, struct bpf_program *fp,
|
||||
.ti +8
|
||||
char *str, int optimize, bpf_u_int32 netmask)
|
||||
const char *str, int optimize, bpf_u_int32 netmask)
|
||||
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
|
||||
void pcap_freecode(struct bpf_program *)
|
||||
int pcap_setdirection(pcap_t *p, pcap_direction_t d)
|
||||
@ -118,7 +118,7 @@ int pcap_fileno(pcap_t *p)
|
||||
int pcap_get_selectable_fd(pcap_t *p);
|
||||
void pcap_perror(pcap_t *p, char *prefix)
|
||||
char *pcap_geterr(pcap_t *p)
|
||||
char *pcap_strerror(int error)
|
||||
const char *pcap_strerror(int error)
|
||||
const char *pcap_lib_version(void)
|
||||
.ft
|
||||
.LP
|
||||
@ -1081,6 +1081,11 @@ and type bytes.
|
||||
Linux-IrDA packets, with a
|
||||
.B DLT_LINUX_SLL
|
||||
header followed by the IrLAP header.
|
||||
.TP 5
|
||||
.B DLT_LINUX_LAPD
|
||||
LAPD (Q.921) frames, with a
|
||||
.B DLT_LINUX_SLL
|
||||
header captured via vISDN.
|
||||
.RE
|
||||
.PP
|
||||
.B pcap_list_datalinks()
|
||||
@ -1160,12 +1165,13 @@ or NULL, if a network device was opened with
|
||||
.BR pcap_open_live() .
|
||||
.PP
|
||||
.B pcap_stats()
|
||||
returns 0 and fills in a
|
||||
returns 0 and fills in the
|
||||
.B pcap_stat
|
||||
struct. The values represent packet statistics from the start of the
|
||||
run to the time of the call. If there is an error or the underlying
|
||||
packet capture doesn't support packet statistics, \-1 is returned and
|
||||
the error text can be obtained with
|
||||
structure pointed to by its second argument. The values represent
|
||||
packet statistics from the start of the run to the time of the call. If
|
||||
there is an error or the underlying packet capture doesn't support
|
||||
packet statistics, \-1 is returned and the error text can be obtained
|
||||
with
|
||||
.B pcap_perror()
|
||||
or
|
||||
.BR pcap_geterr() .
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap.c,v 1.88.2.8 2005/08/13 22:29:46 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap.c,v 1.88.2.19 2007/09/19 02:50:52 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -240,7 +240,7 @@ pcap_list_datalinks(pcap_t *p, int **dlt_buffer)
|
||||
**dlt_buffer = p->linktype;
|
||||
return (1);
|
||||
} else {
|
||||
*dlt_buffer = (int*)malloc(sizeof(**dlt_buffer) * p->dlt_count);
|
||||
*dlt_buffer = (int*)calloc(sizeof(**dlt_buffer), p->dlt_count);
|
||||
if (*dlt_buffer == NULL) {
|
||||
(void)snprintf(p->errbuf, sizeof(p->errbuf),
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
@ -354,30 +354,40 @@ static struct dlt_choice dlt_choices[] = {
|
||||
DLT_CHOICE(DLT_ARCNET_LINUX, "Linux ARCNET"),
|
||||
DLT_CHOICE(DLT_DOCSIS, "DOCSIS"),
|
||||
DLT_CHOICE(DLT_LINUX_IRDA, "Linux IrDA"),
|
||||
DLT_CHOICE(DLT_LINUX_LAPD, "Linux vISDN LAPD"),
|
||||
DLT_CHOICE(DLT_IEEE802_11_RADIO_AVS, "802.11 plus AVS radio information header"),
|
||||
DLT_CHOICE(DLT_SYMANTEC_FIREWALL, "Symantec Firewall"),
|
||||
DLT_CHOICE(DLT_JUNIPER_ATM1, "Juniper ATM1 PIC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_ATM2, "Juniper ATM2 PIC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_MLPPP, "Juniper Multi-Link PPP"),
|
||||
DLT_CHOICE(DLT_PPP_PPPD, "PPP for pppd, with direction flag"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PPPOE, "Juniper PPPoE"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PPPOE_ATM, "Juniper PPPoE/ATM"),
|
||||
DLT_CHOICE(DLT_GPRS_LLC, "GPRS LLC"),
|
||||
DLT_CHOICE(DLT_GPF_T, "GPF-T"),
|
||||
DLT_CHOICE(DLT_GPF_F, "GPF-F"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PIC_PEER, "Juniper PIC Peer"),
|
||||
DLT_CHOICE(DLT_JUNIPER_MLFR, "Juniper Multi-Link Frame Relay"),
|
||||
DLT_CHOICE(DLT_PPP_PPPD, "PPP for pppd, with direction flag"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PPPOE, "Juniper PPPoE"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PPPOE_ATM, "Juniper PPPoE/ATM"),
|
||||
DLT_CHOICE(DLT_GPRS_LLC, "GPRS LLC"),
|
||||
DLT_CHOICE(DLT_GPF_T, "GPF-T"),
|
||||
DLT_CHOICE(DLT_GPF_F, "GPF-F"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PIC_PEER, "Juniper PIC Peer"),
|
||||
DLT_CHOICE(DLT_JUNIPER_MLFR, "Juniper Multi-Link Frame Relay"),
|
||||
DLT_CHOICE(DLT_ERF_ETH, "Ethernet with Endace ERF header"),
|
||||
DLT_CHOICE(DLT_ERF_POS, "Packet-over-SONET with Endace ERF header"),
|
||||
DLT_CHOICE(DLT_JUNIPER_GGSN, "Juniper GGSN PIC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_ES, "Juniper Encryption Services PIC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_MONITOR, "Juniper Passive Monitor PIC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_SERVICES, "Juniper Advanced Services PIC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_MFR, "Juniper FRF.16 Frame Relay"),
|
||||
DLT_CHOICE(DLT_JUNIPER_ETHER, "Juniper Ethernet"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PPP, "Juniper PPP"),
|
||||
DLT_CHOICE(DLT_JUNIPER_FRELAY, "Juniper Frame Relay"),
|
||||
DLT_CHOICE(DLT_JUNIPER_CHDLC, "Juniper C-HDLC"),
|
||||
DLT_CHOICE(DLT_JUNIPER_MFR, "Juniper FRF.16 Frame Relay"),
|
||||
DLT_CHOICE(DLT_JUNIPER_ETHER, "Juniper Ethernet"),
|
||||
DLT_CHOICE(DLT_JUNIPER_PPP, "Juniper PPP"),
|
||||
DLT_CHOICE(DLT_JUNIPER_FRELAY, "Juniper Frame Relay"),
|
||||
DLT_CHOICE(DLT_JUNIPER_CHDLC, "Juniper C-HDLC"),
|
||||
DLT_CHOICE(DLT_MFR, "FRF.16 Frame Relay"),
|
||||
DLT_CHOICE(DLT_JUNIPER_VP, "Juniper Voice PIC"),
|
||||
DLT_CHOICE(DLT_MTP2, "SS7 MTP2"),
|
||||
DLT_CHOICE(DLT_A429, "Arinc 429"),
|
||||
DLT_CHOICE(DLT_A653_ICM, "Arinc 653 Interpartition Communication"),
|
||||
DLT_CHOICE(DLT_USB, "USB"),
|
||||
DLT_CHOICE(DLT_BLUETOOTH_HCI_H4, "Bluetooth HCI UART transport layer"),
|
||||
DLT_CHOICE(DLT_CAN20B, "Controller Area Network (CAN) v. 2.0B"),
|
||||
DLT_CHOICE(DLT_MTP2_WITH_PHDR, "SS7 MTP2 with Pseudo-header"),
|
||||
DLT_CHOICE_SENTINEL
|
||||
};
|
||||
|
||||
@ -457,8 +467,8 @@ int
|
||||
pcap_strcasecmp(const char *s1, const char *s2)
|
||||
{
|
||||
register const u_char *cm = charmap,
|
||||
*us1 = (u_char *)s1,
|
||||
*us2 = (u_char *)s2;
|
||||
*us1 = (const u_char *)s1,
|
||||
*us2 = (const u_char *)s2;
|
||||
|
||||
while (cm[*us1] == cm[*us2++])
|
||||
if (*us1++ == '\0')
|
||||
@ -671,7 +681,7 @@ pcap_win32strerror(void)
|
||||
/*
|
||||
* Not all systems have strerror().
|
||||
*/
|
||||
char *
|
||||
const char *
|
||||
pcap_strerror(int errnum)
|
||||
{
|
||||
#ifdef HAVE_STRERROR
|
||||
@ -807,7 +817,7 @@ pcap_close(pcap_t *p)
|
||||
#ifdef HAVE_VERSION_H
|
||||
#include "version.h"
|
||||
#else
|
||||
static const char pcap_version_string[] = "libpcap version 0.9[.x]";
|
||||
static const char pcap_version_string[] = "libpcap version 0.9.8";
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
@ -816,7 +826,7 @@ static const char pcap_version_string[] = "libpcap version 0.9[.x]";
|
||||
* version numbers when building WinPcap. (It'd be nice to do so for
|
||||
* the packet.dll version number as well.)
|
||||
*/
|
||||
static const char wpcap_version_string[] = "3.1";
|
||||
static const char wpcap_version_string[] = "4.0";
|
||||
static const char pcap_version_string_fmt[] =
|
||||
"WinPcap version %s, based on %s";
|
||||
static const char pcap_version_string_packet_dll_fmt[] =
|
||||
|
@ -32,7 +32,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.52.2.5 2005/07/07 02:04:36 guy Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.52.2.7 2007/06/11 09:52:05 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef lib_pcap_h
|
||||
@ -41,7 +41,9 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <net/bpf.h>
|
||||
#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H
|
||||
#include <pcap-bpf.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@ -119,9 +121,16 @@ typedef enum {
|
||||
} pcap_direction_t;
|
||||
|
||||
/*
|
||||
* Each packet in the dump file is prepended with this generic header.
|
||||
* This gets around the problem of different headers for different
|
||||
* packet interfaces.
|
||||
* Generic per-packet information, as supplied by libpcap.
|
||||
*
|
||||
* The time stamp can and should be a "struct timeval", regardless of
|
||||
* whether your system supports 32-bit tv_sec in "struct timeval",
|
||||
* 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit
|
||||
* and 64-bit applications. The on-disk format of savefiles uses 32-bit
|
||||
* tv_sec (and tv_usec); this structure is irrelevant to that. 32-bit
|
||||
* and 64-bit versions of libpcap, even if they're on the same platform,
|
||||
* should supply the appropriate version of "struct timeval", even if
|
||||
* that's not what the underlying packet capture mechanism supplies.
|
||||
*/
|
||||
struct pcap_pkthdr {
|
||||
struct timeval ts; /* time stamp */
|
||||
@ -222,12 +231,12 @@ int pcap_setnonblock(pcap_t *, int, char *);
|
||||
void pcap_perror(pcap_t *, char *);
|
||||
int pcap_inject(pcap_t *, const void *, size_t);
|
||||
int pcap_sendpacket(pcap_t *, const u_char *, int);
|
||||
char *pcap_strerror(int);
|
||||
const char *pcap_strerror(int);
|
||||
char *pcap_geterr(pcap_t *);
|
||||
int pcap_compile(pcap_t *, struct bpf_program *, char *, int,
|
||||
int pcap_compile(pcap_t *, struct bpf_program *, const char *, int,
|
||||
bpf_u_int32);
|
||||
int pcap_compile_nopcap(int, int, struct bpf_program *,
|
||||
char *, int, bpf_u_int32);
|
||||
const char *, int, bpf_u_int32);
|
||||
void pcap_freecode(struct bpf_program *);
|
||||
int pcap_datalink(pcap_t *);
|
||||
int pcap_list_datalinks(pcap_t *, int **);
|
||||
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001 Daniel Hartmeier
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT HOLDERS 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.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pf.h,v 1.3 2004/04/02 06:33:30 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* from $OpenBSD: pfvar.h,v 1.170 2003/08/22 21:50:34 david Exp $ */
|
||||
|
||||
enum { PF_INOUT=0, PF_IN=1, PF_OUT=2 };
|
||||
enum { PF_PASS=0, PF_DROP=1, PF_SCRUB=2, PF_NAT=3, PF_NONAT=4,
|
||||
PF_BINAT=5, PF_NOBINAT=6, PF_RDR=7, PF_NORDR=8, PF_SYNPROXY_DROP=9 };
|
||||
|
||||
/* Reasons code for passing/dropping a packet */
|
||||
#define PFRES_MATCH 0 /* Explicit match of a rule */
|
||||
#define PFRES_BADOFF 1 /* Bad offset for pull_hdr */
|
||||
#define PFRES_FRAG 2 /* Dropping following fragment */
|
||||
#define PFRES_SHORT 3 /* Dropping short packet */
|
||||
#define PFRES_NORM 4 /* Dropping by normalizer */
|
||||
#define PFRES_MEMORY 5 /* Dropped due to lacking mem */
|
||||
#define PFRES_MAX 6 /* total+1 */
|
||||
|
||||
#define PFRES_NAMES { \
|
||||
"match", \
|
||||
"bad-offset", \
|
||||
"fragment", \
|
||||
"short", \
|
||||
"normalize", \
|
||||
"memory", \
|
||||
NULL \
|
||||
}
|
||||
|
||||
#define PF_RULESET_NAME_SIZE 16
|
||||
|
||||
/* from $OpenBSD: if_pflog.h,v 1.9 2003/07/15 20:27:27 dhartmei Exp $ */
|
||||
|
||||
#ifndef IFNAMSIZ
|
||||
#define IFNAMSIZ 16
|
||||
#endif
|
||||
|
||||
struct pfloghdr {
|
||||
u_int8_t length;
|
||||
u_int8_t af;
|
||||
u_int8_t action;
|
||||
u_int8_t reason;
|
||||
char ifname[IFNAMSIZ];
|
||||
char ruleset[PF_RULESET_NAME_SIZE];
|
||||
u_int32_t rulenr;
|
||||
u_int32_t subrulenr;
|
||||
u_int8_t dir;
|
||||
u_int8_t pad[3];
|
||||
};
|
||||
#define PFLOG_HDRLEN sizeof(struct pfloghdr)
|
@ -30,7 +30,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/savefile.c,v 1.126.2.13 2005/08/29 21:05:45 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/savefile.c,v 1.126.2.30 2007/08/14 20:57:49 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -430,6 +430,128 @@ static const char rcsid[] _U_ =
|
||||
#define LINKTYPE_JUNIPER_FRELAY 180
|
||||
#define LINKTYPE_JUNIPER_CHDLC 181
|
||||
|
||||
/*
|
||||
* Multi Link Frame Relay (FRF.16)
|
||||
*/
|
||||
#define LINKTYPE_MFR 182
|
||||
|
||||
/*
|
||||
* Juniper-private data link type, as per request from
|
||||
* Hannes Gredler <hannes@juniper.net>.
|
||||
* The DLT_ is used for internal communication with a
|
||||
* voice Adapter Card (PIC)
|
||||
*/
|
||||
#define LINKTYPE_JUNIPER_VP 183
|
||||
|
||||
/*
|
||||
* Arinc 429 frames.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
* Every frame contains a 32bit A429 label.
|
||||
* More documentation on Arinc 429 can be found at
|
||||
* http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf
|
||||
*/
|
||||
#define LINKTYPE_A429 184
|
||||
|
||||
/*
|
||||
* Arinc 653 Interpartition Communication messages.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
* Please refer to the A653-1 standard for more information.
|
||||
*/
|
||||
#define LINKTYPE_A653_ICM 185
|
||||
|
||||
/*
|
||||
* USB packets, beginning with a USB setup header; requested by
|
||||
* Paolo Abeni <paolo.abeni@email.it>.
|
||||
*/
|
||||
#define LINKTYPE_USB 186
|
||||
|
||||
/*
|
||||
* Bluetooth HCI UART transport layer (part H:4); requested by
|
||||
* Paolo Abeni.
|
||||
*/
|
||||
#define LINKTYPE_BLUETOOTH_HCI_H4 187
|
||||
|
||||
/*
|
||||
* IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz
|
||||
* <cruz_petagay@bah.com>.
|
||||
*/
|
||||
#define LINKTYPE_IEEE802_16_MAC_CPS 188
|
||||
|
||||
/*
|
||||
* USB packets, beginning with a Linux USB header; requested by
|
||||
* Paolo Abeni <paolo.abeni@email.it>.
|
||||
*/
|
||||
#define LINKTYPE_USB_LINUX 189
|
||||
|
||||
/*
|
||||
* Controller Area Network (CAN) v. 2.0B packets.
|
||||
* DLT_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
* Used to dump CAN packets coming from a CAN Vector board.
|
||||
* More documentation on the CAN v2.0B frames can be found at
|
||||
* http://www.can-cia.org/downloads/?269
|
||||
*/
|
||||
#define LINKTYPE_CAN20B 190
|
||||
|
||||
/*
|
||||
* IEEE 802.15.4, with address fields padded, as is done by Linux
|
||||
* drivers; requested by Juergen Schimmer.
|
||||
*/
|
||||
#define LINKTYPE_IEEE802_15_4_LINUX 191
|
||||
|
||||
/*
|
||||
* Per Packet Information encapsulated packets.
|
||||
* LINKTYPE_ requested by Gianluca Varenni <gianluca.varenni@cacetech.com>.
|
||||
*/
|
||||
#define LINKTYPE_PPI 192
|
||||
|
||||
/*
|
||||
* Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header;
|
||||
* requested by Charles Clancy.
|
||||
*/
|
||||
#define LINKTYPE_IEEE802_16_MAC_CPS_RADIO 193
|
||||
|
||||
/*
|
||||
* Juniper-private data link type, as per request from
|
||||
* Hannes Gredler <hannes@juniper.net>.
|
||||
* The DLT_ is used for internal communication with a
|
||||
* integrated service module (ISM).
|
||||
*/
|
||||
#define LINKTYPE_JUNIPER_ISM 194
|
||||
|
||||
/*
|
||||
* IEEE 802.15.4, exactly as it appears in the spec (no padding, no
|
||||
* nothing); requested by Mikko Saarnivala <mikko.saarnivala@sensinode.com>.
|
||||
*/
|
||||
#define LINKTYPE_IEEE802_15_4 195
|
||||
|
||||
/*
|
||||
* Various link-layer types, with a pseudo-header, for SITA
|
||||
* (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com).
|
||||
*/
|
||||
#define LINKTYPE_SITA 196
|
||||
|
||||
/*
|
||||
* Various link-layer types, with a pseudo-header, for Endace DAG cards;
|
||||
* encapsulates Endace ERF records. Requested by Stephen Donnelly
|
||||
* <stephen@endace.com>.
|
||||
*/
|
||||
#define LINKTYPE_ERF 197
|
||||
|
||||
/*
|
||||
* Special header prepended to Ethernet packets when capturing from a
|
||||
* u10 Networks board. Requested by Phil Mulholland
|
||||
* <phil@u10networks.com>.
|
||||
*/
|
||||
#define LINKTYPE_RAIF1 198
|
||||
|
||||
/*
|
||||
* IPMB packet for IPMI, beginning with the I2C slave address, followed
|
||||
* by the netFn and LUN, etc.. Requested by Chanthy Toeung
|
||||
* <chanthy.toeung@ca.kontron.com>.
|
||||
*/
|
||||
#define LINKTYPE_IPMB 199
|
||||
|
||||
|
||||
static struct linktype_map {
|
||||
int dlt;
|
||||
int linktype;
|
||||
@ -635,6 +757,59 @@ static struct linktype_map {
|
||||
{ DLT_JUNIPER_FRELAY, LINKTYPE_JUNIPER_FRELAY },
|
||||
{ DLT_JUNIPER_CHDLC, LINKTYPE_JUNIPER_CHDLC },
|
||||
|
||||
/* Multi Link Frame Relay (FRF.16) */
|
||||
{ DLT_MFR, LINKTYPE_MFR },
|
||||
|
||||
/* Juniper Voice PIC */
|
||||
{ DLT_JUNIPER_VP, LINKTYPE_JUNIPER_VP },
|
||||
|
||||
/* Controller Area Network (CAN) v2.0B */
|
||||
{ DLT_A429, LINKTYPE_A429 },
|
||||
|
||||
/* Arinc 653 Interpartition Communication messages */
|
||||
{ DLT_A653_ICM, LINKTYPE_A653_ICM },
|
||||
|
||||
/* USB */
|
||||
{ DLT_USB, LINKTYPE_USB },
|
||||
|
||||
/* Bluetooth HCI UART transport layer */
|
||||
{ DLT_BLUETOOTH_HCI_H4, LINKTYPE_BLUETOOTH_HCI_H4 },
|
||||
|
||||
/* IEEE 802.16 MAC Common Part Sublayer */
|
||||
{ DLT_IEEE802_16_MAC_CPS, LINKTYPE_IEEE802_16_MAC_CPS },
|
||||
|
||||
/* USB with Linux header */
|
||||
{ DLT_USB_LINUX, LINKTYPE_USB_LINUX },
|
||||
|
||||
/* Controller Area Network (CAN) v2.0B */
|
||||
{ DLT_CAN20B, LINKTYPE_CAN20B },
|
||||
|
||||
/* IEEE 802.15.4 with address fields padded */
|
||||
{ DLT_IEEE802_15_4_LINUX, LINKTYPE_IEEE802_15_4_LINUX },
|
||||
|
||||
/* Per Packet Information encapsulated packets */
|
||||
{ DLT_PPI, LINKTYPE_PPI },
|
||||
|
||||
/* IEEE 802.16 MAC Common Part Sublayer plus radiotap header */
|
||||
{ DLT_IEEE802_16_MAC_CPS_RADIO, LINKTYPE_IEEE802_16_MAC_CPS_RADIO },
|
||||
|
||||
/* Juniper Voice ISM */
|
||||
{ DLT_JUNIPER_ISM, LINKTYPE_JUNIPER_ISM },
|
||||
|
||||
/* IEEE 802.15.4 exactly as it appears in the spec */
|
||||
{ DLT_IEEE802_15_4, LINKTYPE_IEEE802_15_4 },
|
||||
|
||||
/* Various link-layer types for SITA */
|
||||
{ DLT_SITA, LINKTYPE_SITA },
|
||||
|
||||
/* Various link-layer types for Endace */
|
||||
{ DLT_ERF, LINKTYPE_ERF },
|
||||
|
||||
/* Special header for u10 Networks boards */
|
||||
{ DLT_RAIF1, LINKTYPE_RAIF1 },
|
||||
|
||||
/* IPMB */
|
||||
{ DLT_IPMB, LINKTYPE_IPMB },
|
||||
|
||||
{ -1, -1 }
|
||||
};
|
||||
@ -870,6 +1045,28 @@ pcap_fopen_offline(FILE *fp, char *errbuf)
|
||||
p->tzoff = hdr.thiszone;
|
||||
p->snapshot = hdr.snaplen;
|
||||
p->linktype = linktype_to_dlt(hdr.linktype);
|
||||
if (magic == KUZNETZOV_TCPDUMP_MAGIC && p->linktype == DLT_EN10MB) {
|
||||
/*
|
||||
* This capture might have been done in raw mode or cooked
|
||||
* mode.
|
||||
*
|
||||
* If it was done in cooked mode, p->snapshot was passed
|
||||
* to recvfrom() as the buffer size, meaning that the
|
||||
* most packet data that would be copied would be
|
||||
* p->snapshot. However, a faked Ethernet header would
|
||||
* then have been added to it, so the most data that would
|
||||
* be in a packet in the file would be p->snapshot + 14.
|
||||
*
|
||||
* We can't easily tell whether the capture was done in
|
||||
* raw mode or cooked mode, so we'll assume it was
|
||||
* cooked mode, and add 14 to the snapshot length. That
|
||||
* means that, for a raw capture, the snapshot length will
|
||||
* be misleading if you use it to figure out why a capture
|
||||
* doesn't have all the packet data, but there's not much
|
||||
* we can do to avoid that.
|
||||
*/
|
||||
p->snapshot += 14;
|
||||
}
|
||||
p->sf.rfile = fp;
|
||||
#ifndef WIN32
|
||||
p->bufsize = hdr.snaplen;
|
||||
@ -1177,7 +1374,7 @@ pcap_dump(u_char *user, const struct pcap_pkthdr *h, const u_char *sp)
|
||||
sf_hdr.len = h->len;
|
||||
/* XXX we should check the return status */
|
||||
(void)fwrite(&sf_hdr, sizeof(sf_hdr), 1, f);
|
||||
(void)fwrite((char *)sp, h->caplen, 1, f);
|
||||
(void)fwrite(sp, h->caplen, 1, f);
|
||||
}
|
||||
|
||||
static pcap_dumper_t *
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.99.2.4 2005/09/05 09:08:07 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.99.2.9 2007/06/11 09:52:05 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -82,11 +82,11 @@ N ([0-9]+|(0X|0x)[0-9A-Fa-f]+)
|
||||
B ([0-9A-Fa-f][0-9A-Fa-f]?)
|
||||
W ([0-9A-Fa-f][0-9A-Fa-f]?[0-9A-Fa-f]?[0-9A-Fa-f]?)
|
||||
|
||||
%a 16000
|
||||
%o 19000
|
||||
%e 6000
|
||||
%k 4000
|
||||
%p 25000
|
||||
%a 18400
|
||||
%o 21500
|
||||
%e 7600
|
||||
%k 4550
|
||||
%p 27600
|
||||
%n 2000
|
||||
|
||||
V680 {W}:{W}:{W}:{W}:{W}:{W}:{W}:{W}
|
||||
@ -289,6 +289,10 @@ srnr|subrulenum return PF_SRNR;
|
||||
reason return PF_REASON;
|
||||
action return PF_ACTION;
|
||||
|
||||
fisu return FISU;
|
||||
lssu return LSSU;
|
||||
lsu return LSSU;
|
||||
msu return MSU;
|
||||
sio return SIO;
|
||||
opc return OPC;
|
||||
dpc return DPC;
|
||||
@ -358,7 +362,7 @@ tcp-urg { yylval.i = 0x20; return NUM; }
|
||||
%%
|
||||
void
|
||||
lex_init(buf)
|
||||
char *buf;
|
||||
const char *buf;
|
||||
{
|
||||
#ifdef FLEX_SCANNER
|
||||
in_buffer = yy_scan_string(buf);
|
||||
|
@ -37,6 +37,9 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/stat.h>
|
||||
#ifdef __FreeBSD__
|
||||
#include <net/bpf.h> /* BIOCLOCK */
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@ -1,4 +1,92 @@
|
||||
$Header: /tcpdump/master/tcpdump/CHANGES,v 1.87.2.11 2005/09/20 06:05:34 guy Exp $
|
||||
$Header: /tcpdump/master/tcpdump/CHANGES,v 1.87.2.17 2007/09/13 13:39:44 ken Exp $
|
||||
|
||||
Mon. September 10, 2007. ken@xelerance.com. Summary for 0.9.8 tcpdump release
|
||||
Rework ARP printer
|
||||
Rework OSPFv3 printer
|
||||
Add support for Frame-Relay ARP
|
||||
Decode DHCP Option 121 (RFC 3442 Classless Static Route)
|
||||
Decode DHCP Option 249 (MS Classless Static Route) the same as Option 121
|
||||
TLV: Add support for Juniper .pcap extensions
|
||||
Print EGP header in new-world-order style
|
||||
Converted print-isakmp.c to NETDISSECT
|
||||
Moved AF specific stuff into af.h
|
||||
Test subsystem now table driven, and saves outputs and diffs to one place
|
||||
Require <net/pfvar.h> for pf definitions - allows reading of pflog formatted
|
||||
libpcap files on an OS other than where the file was generated
|
||||
|
||||
Wed. July 23, 2007. mcr@xelerance.com. Summary for 0.9.7 tcpdump release
|
||||
|
||||
NFS: Print unsigned values as such.
|
||||
RX: parse safely.
|
||||
BGP: fixes for IPv6-less builds.
|
||||
801.1ag: use standard codepoint.
|
||||
use /dev/bpf on systems with such a device.
|
||||
802.11: print QoS data, avoid dissect of no-data frame, ignore padding.
|
||||
smb: make sure that we haven't gone past the end of the captured data.
|
||||
smb: squelch an uninitialized complaint from coverity.
|
||||
NFS: from NetBSD; don't interpret the reply as a possible NFS reply
|
||||
if it got MSG_DENIED.
|
||||
BGP: don't print TLV values that didn't fit, from www.digit-labs.org.
|
||||
revised INSTALL.txt about libpcap dependancy.
|
||||
|
||||
Wed. April 25, 2007. ken@xelerance.com. Summary for 3.9.6 tcpdump release
|
||||
Update man page to reflect changes to libpcap
|
||||
Changes to both TCP and IP Printer Output
|
||||
Fix a potential buffer overflow in the 802.11 printer
|
||||
Print basic info about a few more Cisco LAN protocols.
|
||||
mDNS cleanup
|
||||
ICMP MPLS rework of the extension code
|
||||
bugfix: use the correct codepoint for the OSPF simple text auth token
|
||||
entry, and use safeputs to print the password.
|
||||
Add support in pflog for additional values
|
||||
Add support for OIF RSVP Extensions UNI 1.0 Rev. 2 and additional RSVP objects
|
||||
Add support for the Message-id NACK c-type.
|
||||
Add support for 802.3ah loopback ctrl msg
|
||||
Add support for Multiple-STP as per 802.1s
|
||||
Add support for rapid-SPT as per 802.1w
|
||||
Add support for CFM Link-trace msg, Link-trace-Reply msg,
|
||||
Sender-ID tlv, private tlv, port, interface status
|
||||
Add support for unidirectional link detection as per
|
||||
http://www.ietf.org/internet-drafts/draft-foschiano-udld-02.txt
|
||||
Add support for the olsr protocol as per RFC 3626 plus the LQ
|
||||
extensions from olsr.org
|
||||
Add support for variable-length checksum in DCCP, as per section 9 of
|
||||
RFC 4340.
|
||||
Add support for per-VLAN spanning tree and per-VLAN rapid spanning tree
|
||||
Add support for Multiple-STP as per 802.1s
|
||||
Add support for the cisco propriatry 'dynamic trunking protocol'
|
||||
Add support for the cisco proprietary VTP protocol
|
||||
Update dhcp6 options table as per IETF standardization activities
|
||||
|
||||
|
||||
Tue. September 19, 2006. ken@xelerance.com. Summary for 3.9.5 tcpdump release
|
||||
|
||||
Fix compiling on AIX (, at end of ENUM)
|
||||
Updated list of DNS RR typecodes
|
||||
Use local Ethernet defs on WIN32
|
||||
Add support for Frame-Relay ARP
|
||||
Fixes for compiling under MSVC++
|
||||
Add support for parsing Juniper .pcap files
|
||||
Add support for FRF.16 Multilink Frame-Relay (DLT_MFR)
|
||||
Rework the OSPFv3 printer
|
||||
Fix printing for 4.4BSD/NetBSD NFS Filehandles
|
||||
Add support for Cisco style NLPID encapsulation
|
||||
Add cisco prop. eigrp related, extended communities
|
||||
Add support for BGP signaled VPLS
|
||||
Cleanup the bootp printer
|
||||
Add support for PPP over Frame-Relay
|
||||
Add some bounds checking to the IP options code, and clean up
|
||||
the options output a bit.
|
||||
Add additional modp groups to ISAKMP printer
|
||||
Add support for Address-Withdraw and Label-Withdraw Msgs
|
||||
Add support for the BFD Discriminator TLV
|
||||
Fixes for 64bit compiling
|
||||
Add support for PIMv2 checksum verification
|
||||
Add support for further dissection of the IPCP Compression Option
|
||||
Add support for Cisco's proposed VQP protocol
|
||||
Add basic support for keyed authentication TCP option
|
||||
Lots of minor cosmetic changes to output printers
|
||||
|
||||
|
||||
Mon. September 19, 2005. ken@xelerance.com. Summary for 3.9.4 tcpdump release
|
||||
Decoder support for more Juniper link-layer types
|
||||
|
@ -11,6 +11,7 @@ The current maintainers:
|
||||
|
||||
Additional people who have contributed patches:
|
||||
|
||||
Aaron Campbell <aaron@arbor.net>
|
||||
Alfredo Andres <aandres@s21sec.com>
|
||||
Albert Chin <china@thewrittenword.com>
|
||||
Andrew Brown <atatat@atatdot.net>
|
||||
@ -31,7 +32,9 @@ Additional people who have contributed patches:
|
||||
Charles M. Hannum <mycroft@netbsd.org>
|
||||
Chris Cogdon <chris@cogdon.org>
|
||||
Chris G. Demetriou <cgd@netbsd.org>
|
||||
Christian Sievers <c_s@users.sourceforge.net>
|
||||
Chris Jepeway <jepeway@blasted-heath.com>
|
||||
Chris Larson <clarson@kergoth.com>
|
||||
Craig Rodrigues <rodrigc@mediaone.net>
|
||||
Crist J. Clark <cjclark@alum.mit.edu>
|
||||
Daniel Hagerty <hag@ai.mit.edu>
|
||||
@ -39,6 +42,7 @@ Additional people who have contributed patches:
|
||||
David Binderman <d.binderman@virgin.net>
|
||||
David Smith <dsmith@redhat.com>
|
||||
David Young <dyoung@ojctech.com>
|
||||
Don Ebright <Don.Ebright@compuware.com>
|
||||
Eddie Kohler <xexd@sourceforge.net>
|
||||
Francis Dupont <Francis.Dupont@enst-bretagne.fr>
|
||||
Francisco Matias Cuenca-Acuna <mcuenca@george.rutgers.edu>
|
||||
@ -56,6 +60,7 @@ Additional people who have contributed patches:
|
||||
Heinz-Ado Arnolds <Ado.Arnolds@dhm-systems.de>
|
||||
Hendrik Scholz <hendrik@scholz.net>
|
||||
Ian McDonald <imcdnzl@gmail.com>
|
||||
Jacek Tobiasz <Jacek.Tobiasz@atm.com.pl>
|
||||
Jakob Schlyter <jakob@openbsd.org>
|
||||
Jan Oravec <wsx@wsx6.net>
|
||||
Jason R. Thorpe <thorpej@netbsd.org>
|
||||
@ -84,8 +89,10 @@ Additional people who have contributed patches:
|
||||
Marc A. Lehmann <pcg@goof.com>
|
||||
Mark Ellzey Thomas <mark@ackers.net>
|
||||
Marko Kiiskila <carnil@cs.tut.fi>
|
||||
Markus Schöpflin <schoepflin@sourceforge.net>
|
||||
Marshall Rose <mrose@dbc.mtview.ca.us>
|
||||
Martin Husemann <martin@netbsd.org>
|
||||
Max Laier <max@love2party.net>
|
||||
Michael Madore <mmadore@turbolinux.com>
|
||||
Michael Shalayeff <mickey@openbsd.org>
|
||||
Michael Shields <shields@msrl.com>
|
||||
@ -110,9 +117,11 @@ Additional people who have contributed patches:
|
||||
Pekka Savola <pekkas@netcore.fi>
|
||||
Peter Fales <peter@fales-lorenz.net>
|
||||
Peter Jeremy <peter.jeremy@alcatel.com.au>
|
||||
<pfhunt@users.sourceforge.net>
|
||||
Phil Wood <cpw@lanl.gov>
|
||||
Rafal Maszkowski <rzm@icm.edu.pl>
|
||||
Raphael Raimbault <raphael.raimbault@netasq.com>
|
||||
Rick Cheng <rcheng@juniper.net>
|
||||
Rick Jones <rick.jones2@hp.com>
|
||||
Rick Watson <watsonrick@users.sourceforge.net>
|
||||
Rob Braun <bbraun@synack.net>
|
||||
@ -124,11 +133,14 @@ Additional people who have contributed patches:
|
||||
Seth Webster <swebster@sst.ll.mit.edu>
|
||||
Shinsuke Suzuki <suz@kame.net>
|
||||
Steinar Haug <sthaug@nethelp.no>
|
||||
Swaminathan Chandrasekaran <chander@juniper.net>
|
||||
Takashi Yamamoto <yamt@mwd.biglobe.ne.jp>
|
||||
Terry Kennedy <terry@tmk.com>
|
||||
Timo Koskiahde
|
||||
Tony Li <tli@procket.com>
|
||||
Uns Lider <unslider@miranda.org>
|
||||
Victor Oppleman <oppleman@users.sourceforge.net>
|
||||
Wesley Griffin <wgriffin@users.sourceforge.net>
|
||||
Wilbert de Graaf <wilbertdg@hetnet.nl>
|
||||
Yen Yen Lim
|
||||
Yoshifumi Nishida
|
||||
|
@ -11,6 +11,8 @@ acconfig.h
|
||||
aclocal.m4
|
||||
addrtoname.c
|
||||
addrtoname.h
|
||||
af.c
|
||||
af.h
|
||||
ah.h
|
||||
aodv.h
|
||||
appletalk.h
|
||||
@ -106,7 +108,6 @@ packetdat.awk
|
||||
parsenfsfh.c
|
||||
pcap_dump_ftell.c
|
||||
pcap-missing.h
|
||||
pf.h
|
||||
pmap_prot.h
|
||||
ppp.h
|
||||
print-802_11.c
|
||||
@ -171,6 +172,7 @@ print-netbios.c
|
||||
print-nfs.c
|
||||
print-ntp.c
|
||||
print-null.c
|
||||
print-olsr.c
|
||||
print-ospf.c
|
||||
print-ospf6.c
|
||||
print-pflog.c
|
||||
@ -229,6 +231,7 @@ tcpdump.1
|
||||
tcpdump.c
|
||||
tcpdump-stdinc.h
|
||||
telnet.h
|
||||
tftp.h
|
||||
timed.h
|
||||
token.h
|
||||
udp.h
|
||||
|
@ -1,7 +1,11 @@
|
||||
@(#) $Header: /tcpdump/master/tcpdump/INSTALL,v 1.63.2.4 2005/09/20 06:05:35 guy Exp $ (LBL)
|
||||
@(#) $Header: /tcpdump/master/tcpdump/INSTALL,v 1.63.2.7 2007/09/14 01:03:12 guy Exp $ (LBL)
|
||||
|
||||
If you have not built libpcap, do so first. See the README
|
||||
file in this directory for the ftp location.
|
||||
If you have not built libpcap, and your system does not have libpcap
|
||||
installed, install libpcap first. Your system might provide a version
|
||||
of libpcap that can be installed; if so, to compile tcpdump you might
|
||||
need to install a "developer" version of libpcap as well as the
|
||||
"run-time" version. You can also install tcpdump.org's version of
|
||||
libpcap; see the README file in this directory for the ftp location.
|
||||
|
||||
You will need an ANSI C compiler to build tcpdump. The configure script
|
||||
will abort if your compiler is not ANSI compliant. If this happens, use
|
||||
@ -15,21 +19,18 @@ directory), run ./configure (a shell script). "configure" will
|
||||
determine your system attributes and generate an appropriate Makefile
|
||||
from Makefile.in. Now build tcpdump by running "make".
|
||||
|
||||
If everything builds ok, su and type "make install". This will install
|
||||
tcpdump and the manual entry. By default, tcpdump is installed with
|
||||
group execute permissions. The group used depends on your os. In
|
||||
addition, BPF packet access is controlled by permissions to
|
||||
/dev/bpf0. In any case, DO NOT give untrusted users the capability of
|
||||
running tcpdump. Tcpdump can capture any traffic on your net,
|
||||
including passwords.
|
||||
If everything builds ok, su and type "make install". This will install
|
||||
tcpdump and the manual entry. Any user will be able to use tcpdump to
|
||||
read saved captures. Whether a user will be able to capture traffic
|
||||
depends on the OS and the configuration of the system; see the tcpdump
|
||||
man page for details. DO NOT give untrusted users the ability to
|
||||
capture traffic. If a user can capture traffic, he or she could use
|
||||
utilities such as tcpdump to capture any traffic on your net, including
|
||||
passwords.
|
||||
|
||||
Note that most systems ship tcpdump, but usually an older version.
|
||||
Remember to remove or rename the installed binary when upgrading.
|
||||
|
||||
If you use Linux, this version of libpcap is known to compile and run
|
||||
with 2.0.25 and more modern, and 2.2 and later, kernels. It is
|
||||
guaranteed not to work with 1.X kernels.
|
||||
|
||||
If your system is not one which we have tested tcpdump on, you may have
|
||||
to modify the configure script and Makefile.in. Please send us patches
|
||||
for any modifications you need to make.
|
||||
@ -128,7 +129,6 @@ parsenfsfh.c - Network File System file parser routines
|
||||
pcap_dump_ftell.c - pcap_dump_ftell() implementation, in case libpcap
|
||||
doesn't have it
|
||||
pcap-missing.h - declarations of functions possibly missing from libpcap
|
||||
pf.h - OpenBSD PF definitions
|
||||
pmap_prot.h - definitions for ONC RPC portmapper protocol
|
||||
ppp.h - Point to Point Protocol definitions
|
||||
print-802_11.c - IEEE 802.11 printer routines
|
||||
@ -243,6 +243,7 @@ tcp.h - TCP definitions
|
||||
tcpdump.1 - manual entry
|
||||
tcpdump.c - main program
|
||||
telnet.h - Telnet definitions
|
||||
tftp.h - TFTP definitions
|
||||
timed.h - BSD time daemon protocol definitions
|
||||
token.h - Token Ring definitions
|
||||
udp.h - UDP definitions
|
||||
|
@ -17,7 +17,7 @@
|
||||
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.293.2.3 2005/09/20 06:05:36 guy Exp $ (LBL)
|
||||
# @(#) $Header: /tcpdump/master/tcpdump/Makefile.in,v 1.293.2.7 2007/09/12 19:48:50 guy Exp $ (LBL)
|
||||
|
||||
#
|
||||
# Various configurable paths (remember to edit Makefile.in, not Makefile)
|
||||
@ -65,7 +65,7 @@ INSTALL_DATA = @INSTALL_DATA@
|
||||
@rm -f $@
|
||||
$(CC) $(CFLAGS) -c $(srcdir)/$*.c
|
||||
|
||||
CSRC = addrtoname.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c \
|
||||
CSRC = addrtoname.c af.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 \
|
||||
@ -80,8 +80,8 @@ CSRC = addrtoname.c cpack.c gmpls.c oui.c gmt2local.c ipproto.c \
|
||||
print-l2tp.c print-lane.c print-ldp.c print-llc.c \
|
||||
print-lmp.c print-lspping.c \
|
||||
print-lwres.c print-mobile.c print-mpls.c print-msdp.c \
|
||||
print-nfs.c print-ntp.c print-null.c print-ospf.c \
|
||||
print-pflog.c print-pgm.c print-pim.c print-ppp.c print-pppoe.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-rsvp.c print-rx.c print-sctp.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 \
|
||||
@ -183,19 +183,10 @@ distclean:
|
||||
tags: $(TAGFILES)
|
||||
ctags -wtd $(TAGFILES)
|
||||
|
||||
tar:
|
||||
releasetar:
|
||||
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
|
||||
list="" ; tar="tar chf" ; \
|
||||
for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
|
||||
echo \
|
||||
"rm -f ../$$name; ln -s $$dir ../$$name" ; \
|
||||
rm -f ../$$name; ln -s $$dir ../$$name ; \
|
||||
echo \
|
||||
"(cd .. ; $$tar - [lots of files]) | compress > /tmp/$$name.tar.Z" ; \
|
||||
(cd .. ; $$tar - $$list) | compress > /tmp/$$name.tar.Z ; \
|
||||
echo \
|
||||
"rm -f ../$$name" ; \
|
||||
rm -f ../$$name
|
||||
list="" ; make distclean; cd ..; mkdir -p n; cd n; ln -s ../$$dir $$name; \
|
||||
tar -c -z -f $$name.tar.gz $$name/. ;
|
||||
|
||||
depend: $(GENSRC)
|
||||
${srcdir}/mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
|
||||
|
@ -1,4 +1,4 @@
|
||||
@(#) $Header: /tcpdump/master/tcpdump/README,v 1.65 2004/10/12 02:01:59 guy Exp $ (LBL)
|
||||
@(#) $Header: /tcpdump/master/tcpdump/README,v 1.65.2.1 2007/09/14 01:03:12 guy Exp $ (LBL)
|
||||
|
||||
TCPDUMP 3.9
|
||||
Now maintained by "The Tcpdump Group"
|
||||
@ -11,10 +11,11 @@ Anonymous CVS is available via:
|
||||
(password "anoncvs")
|
||||
cvs -d :pserver:cvs.tcpdump.org:/tcpdump/master checkout tcpdump
|
||||
|
||||
Version 3.9 of TCPDUMP can be retrived with the CVS tag "tcpdump_3_9rel1":
|
||||
Version 3.9 of TCPDUMP can be retrieved with the CVS tag "tcpdump_3_9rel1":
|
||||
cvs -d :pserver:cvs.tcpdump.org:/tcpdump/master checkout -r tcpdump_3_9rel1 tcpdump
|
||||
|
||||
Please send patches against the master copy to patches@tcpdump.org.
|
||||
Please submit patches against the master copy to the tcpdump project on
|
||||
sourceforge.net.
|
||||
|
||||
formerly from Lawrence Berkeley National Laboratory
|
||||
Network Research Group <tcpdump@ee.lbl.gov>
|
||||
|
@ -1 +1 @@
|
||||
3.9.4
|
||||
3.9.8
|
||||
|
@ -25,7 +25,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.108.2.7 2005/09/29 07:46:45 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/addrtoname.c,v 1.108.2.9 2007/09/14 00:26:18 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -70,6 +70,10 @@ extern int ether_ntohost(char *, const struct ether_addr *);
|
||||
#include "extract.h"
|
||||
#include "oui.h"
|
||||
|
||||
#ifndef ETHER_ADDR_LEN
|
||||
#define ETHER_ADDR_LEN 6
|
||||
#endif
|
||||
|
||||
/*
|
||||
* hash tables for whatever-to-name translations
|
||||
*
|
||||
@ -513,7 +517,7 @@ linkaddr_string(const u_char *ep, const unsigned int len)
|
||||
register char *cp;
|
||||
register struct enamemem *tp;
|
||||
|
||||
if (len == 6) /* XXX not totally correct... */
|
||||
if (len == ETHER_ADDR_LEN) /* XXX not totally correct... */
|
||||
return etheraddr_string(ep);
|
||||
|
||||
tp = lookup_bytestring(ep, len);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/bootp.h,v 1.15 2003/07/01 19:16:06 guy Exp $ (LBL) */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/bootp.h,v 1.15.4.3 2007/08/21 22:02:08 guy Exp $ (LBL) */
|
||||
/*
|
||||
* Bootstrap Protocol (BOOTP). RFC951 and RFC1048.
|
||||
*
|
||||
@ -161,6 +161,9 @@ struct bootp {
|
||||
#define TAG_NS_SEARCH ((u_int8_t) 117)
|
||||
/* RFC 3011 */
|
||||
#define TAG_IP4_SUBNET_SELECT ((u_int8_t) 118)
|
||||
/* RFC 3442 */
|
||||
#define TAG_CLASSLESS_STATIC_RT ((u_int8_t) 121)
|
||||
#define TAG_CLASSLESS_STA_RT_MS ((u_int8_t) 249)
|
||||
/* ftp://ftp.isi.edu/.../assignments/bootp-dhcp-extensions */
|
||||
#define TAG_USER_CLASS ((u_int8_t) 77)
|
||||
#define TAG_SLP_NAMING_AUTH ((u_int8_t) 80)
|
||||
@ -218,3 +221,10 @@ struct cmu_vend {
|
||||
|
||||
/* v_flags values */
|
||||
#define VF_SMASK 1 /* Subnet mask field contains valid data */
|
||||
|
||||
/* RFC 4702 DHCP Client FQDN Option */
|
||||
|
||||
#define CLIENT_FQDN_FLAGS_S 0x01
|
||||
#define CLIENT_FQDN_FLAGS_O 0x02
|
||||
#define CLIENT_FQDN_FLAGS_E 0x04
|
||||
#define CLIENT_FQDN_FLAGS_N 0x08
|
||||
|
@ -181,6 +181,9 @@
|
||||
/* Define to 1 if you have the <netinet/if_ether.h> header file. */
|
||||
#undef HAVE_NETINET_IF_ETHER_H
|
||||
|
||||
/* Define to 1 if you have the <net/pfvar.h> header file. */
|
||||
#undef HAVE_NET_PFVAR_H
|
||||
|
||||
/* Define to 1 if you have the <openssl/evp.h> header file. */
|
||||
#undef HAVE_OPENSSL_EVP_H
|
||||
|
||||
@ -298,19 +301,19 @@
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||
#undef RETSIGTYPE
|
||||
|
||||
/* The size of a `char', as computed by sizeof. */
|
||||
/* The size of `char', as computed by sizeof. */
|
||||
#undef SIZEOF_CHAR
|
||||
|
||||
/* The size of a `int', as computed by sizeof. */
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of a `long', as computed by sizeof. */
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of a `long long', as computed by sizeof. */
|
||||
/* The size of `long long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG_LONG
|
||||
|
||||
/* The size of a `short', as computed by sizeof. */
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
|
10706
contrib/tcpdump/configure
vendored
10706
contrib/tcpdump/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.188.2.7 2005/09/21 16:50:01 guy Exp $ (LBL)
|
||||
dnl @(#) $Header: /tcpdump/master/tcpdump/configure.in,v 1.188.2.8 2007/09/12 19:48:50 guy Exp $ (LBL)
|
||||
dnl
|
||||
dnl Copyright (c) 1994, 1995, 1996, 1997
|
||||
dnl The Regents of the University of California. All rights reserved.
|
||||
@ -6,7 +6,7 @@ dnl
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl
|
||||
|
||||
AC_REVISION($Revision: 1.188.2.7 $)
|
||||
AC_REVISION($Revision: 1.188.2.8 $)
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(tcpdump.c)
|
||||
|
||||
@ -16,6 +16,12 @@ AC_LBL_C_INIT(V_CCOPT, V_INCLS)
|
||||
AC_LBL_C_INLINE
|
||||
AC_C___ATTRIBUTE__
|
||||
AC_CHECK_HEADERS(fcntl.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>])
|
||||
if test "$ac_cv_header_net_pfvar_h" == yes; then
|
||||
LOCALSRC="print-pflog.c $LOCALSRC"
|
||||
fi
|
||||
AC_CHECK_HEADERS(netinet/if_ether.h, , , [#include <sys/types.h>
|
||||
#include <sys/socket.h>])
|
||||
if test "$ac_cv_header_netinet_if_ether_h" != yes; then
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/dccp.h,v 1.1.2.2 2005/09/20 06:25:45 guy Exp $ (LBL) */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/dccp.h,v 1.1.2.4 2006/05/12 01:46:17 guy Exp $ (LBL) */
|
||||
/*
|
||||
* Copyright (C) Arnaldo Carvalho de Melo 2004
|
||||
* Copyright (C) Ian McDonald 2005 <iam4@cs.waikato.ac.nz>
|
||||
@ -86,12 +86,14 @@ struct dccp_hdr_response {
|
||||
u_int32_t dccph_resp_service;
|
||||
};
|
||||
|
||||
#if 0
|
||||
static inline struct dccp_hdr_data *dccp_hdr_data(struct dccp_hdr *hdrg)
|
||||
{
|
||||
const int ext = DCCPH_X(hdrg) ? sizeof(struct dccp_hdr_ext) : 0;
|
||||
|
||||
return (struct dccp_hdr_data *)(((u_char *)hdrg) + sizeof(hdrg) + ext);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct dccp_hdr_reset - Unconditionally shut down a connection
|
||||
@ -115,7 +117,7 @@ enum dccp_pkt_type {
|
||||
DCCP_PKT_RESET,
|
||||
DCCP_PKT_SYNC,
|
||||
DCCP_PKT_SYNCACK,
|
||||
DCCP_PKT_INVALID,
|
||||
DCCP_PKT_INVALID
|
||||
};
|
||||
|
||||
enum dccp_reset_codes {
|
||||
@ -131,7 +133,7 @@ enum dccp_reset_codes {
|
||||
DCCP_RESET_CODE_TOO_BUSY,
|
||||
DCCP_RESET_CODE_BAD_INIT_COOKIE,
|
||||
DCCP_RESET_CODE_AGGRESSION_PENALTY,
|
||||
__DCCP_RESET_CODE_LAST,
|
||||
__DCCP_RESET_CODE_LAST
|
||||
};
|
||||
|
||||
#endif /* __DCCP_HDR__ */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/ieee802_11.h,v 1.9 2003/07/22 17:36:57 guy Exp $ (LBL) */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/ieee802_11.h,v 1.9.4.3 2007/07/22 20:01:16 guy Exp $ (LBL) */
|
||||
/*
|
||||
* Copyright (c) 2001
|
||||
* Fortress Technologies
|
||||
@ -82,14 +82,32 @@
|
||||
#define CTRL_CF_END 0xE
|
||||
#define CTRL_END_ACK 0xF
|
||||
|
||||
#define DATA_DATA 0x0
|
||||
#define DATA_DATA_CF_ACK 0x1
|
||||
#define DATA_DATA_CF_POLL 0x2
|
||||
#define DATA_DATA_CF_ACK_POLL 0x3
|
||||
#define DATA_NODATA 0x4
|
||||
#define DATA_NODATA_CF_ACK 0x5
|
||||
#define DATA_NODATA_CF_POLL 0x6
|
||||
#define DATA_NODATA_CF_ACK_POLL 0x7
|
||||
#define DATA_DATA 0x0
|
||||
#define DATA_DATA_CF_ACK 0x1
|
||||
#define DATA_DATA_CF_POLL 0x2
|
||||
#define DATA_DATA_CF_ACK_POLL 0x3
|
||||
#define DATA_NODATA 0x4
|
||||
#define DATA_NODATA_CF_ACK 0x5
|
||||
#define DATA_NODATA_CF_POLL 0x6
|
||||
#define DATA_NODATA_CF_ACK_POLL 0x7
|
||||
|
||||
#define DATA_QOS_DATA 0x8
|
||||
#define DATA_QOS_DATA_CF_ACK 0x9
|
||||
#define DATA_QOS_DATA_CF_POLL 0xA
|
||||
#define DATA_QOS_DATA_CF_ACK_POLL 0xB
|
||||
#define DATA_QOS_NODATA 0xC
|
||||
#define DATA_QOS_CF_POLL_NODATA 0xE
|
||||
#define DATA_QOS_CF_ACK_POLL_NODATA 0xF
|
||||
|
||||
/*
|
||||
* The subtype field of a data frame is, in effect, composed of 4 flag
|
||||
* bits - CF-Ack, CF-Poll, Null (means the frame doesn't actually have
|
||||
* any data), and QoS.
|
||||
*/
|
||||
#define DATA_FRAME_IS_CF_ACK(x) ((x) & 0x01)
|
||||
#define DATA_FRAME_IS_CF_POLL(x) ((x) & 0x02)
|
||||
#define DATA_FRAME_IS_NULL(x) ((x) & 0x04)
|
||||
#define DATA_FRAME_IS_QOS(x) ((x) & 0x08)
|
||||
|
||||
/*
|
||||
* Bits in the frame control field.
|
||||
@ -125,6 +143,12 @@ struct mgmt_header_t {
|
||||
#define CAPABILITY_CFP_REQ(cap) ((cap) & 0x0008)
|
||||
#define CAPABILITY_PRIVACY(cap) ((cap) & 0x0010)
|
||||
|
||||
typedef enum {
|
||||
NOT_PRESENT,
|
||||
PRESENT,
|
||||
TRUNCATED
|
||||
} elem_status_t;
|
||||
|
||||
struct ssid_t {
|
||||
u_int8_t element_id;
|
||||
u_int8_t length;
|
||||
@ -134,7 +158,7 @@ struct ssid_t {
|
||||
struct rates_t {
|
||||
u_int8_t element_id;
|
||||
u_int8_t length;
|
||||
u_int8_t rate[8];
|
||||
u_int8_t rate[16];
|
||||
};
|
||||
|
||||
struct challenge_t {
|
||||
@ -142,6 +166,7 @@ struct challenge_t {
|
||||
u_int8_t length;
|
||||
u_int8_t text[254]; /* 1-253 + 1 for null */
|
||||
};
|
||||
|
||||
struct fh_t {
|
||||
u_int8_t element_id;
|
||||
u_int8_t length;
|
||||
@ -202,22 +227,29 @@ struct tim_t {
|
||||
|
||||
|
||||
struct mgmt_body_t {
|
||||
u_int8_t timestamp[8];
|
||||
u_int8_t timestamp[IEEE802_11_TSTAMP_LEN];
|
||||
u_int16_t beacon_interval;
|
||||
u_int16_t listen_interval;
|
||||
u_int16_t status_code;
|
||||
u_int16_t aid;
|
||||
u_char ap[6];
|
||||
u_char ap[IEEE802_11_AP_LEN];
|
||||
u_int16_t reason_code;
|
||||
u_int16_t auth_alg;
|
||||
u_int16_t auth_trans_seq_num;
|
||||
elem_status_t challenge_status;
|
||||
struct challenge_t challenge;
|
||||
u_int16_t capability_info;
|
||||
elem_status_t ssid_status;
|
||||
struct ssid_t ssid;
|
||||
elem_status_t rates_status;
|
||||
struct rates_t rates;
|
||||
elem_status_t ds_status;
|
||||
struct ds_t ds;
|
||||
elem_status_t cf_status;
|
||||
struct cf_t cf;
|
||||
elem_status_t fh_status;
|
||||
struct fh_t fh;
|
||||
elem_status_t tim_status;
|
||||
struct tim_t tim;
|
||||
};
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* $FreeBSD$ */
|
||||
/* $NetBSD: ieee80211_radiotap.h,v 1.3 2003/11/16 09:02:42 dyoung Exp $ */
|
||||
/* $Header: /tcpdump/master/tcpdump/ieee802_11_radio.h,v 1.1 2004/09/23 21:33:10 dyoung Exp $ */
|
||||
/* $NetBSD: ieee802_11_radio.h,v 1.2 2006/02/26 03:04:03 dyoung Exp $ */
|
||||
/* $Header: /tcpdump/master/tcpdump/ieee802_11_radio.h,v 1.1.2.1 2006/06/13 22:24:45 guy Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2003, 2004 David Young. All rights reserved.
|
||||
@ -47,11 +47,11 @@
|
||||
* function of...") that I cannot set false expectations for lawyerly
|
||||
* readers.
|
||||
*/
|
||||
#ifdef _KERNEL
|
||||
#if defined(__KERNEL__) || defined(_KERNEL)
|
||||
#ifndef DLT_IEEE802_11_RADIO
|
||||
#define DLT_IEEE802_11_RADIO 127 /* 802.11 plus WLAN header */
|
||||
#endif
|
||||
#endif /* _KERNEL */
|
||||
#endif /* defined(__KERNEL__) || defined(_KERNEL) */
|
||||
|
||||
/*
|
||||
* The radio capture header precedes the 802.11 header.
|
||||
@ -127,7 +127,7 @@ struct ieee80211_radiotap_header {
|
||||
* RF noise power at the antenna, decibel difference from an
|
||||
* arbitrary, fixed reference point.
|
||||
*
|
||||
* IEEE80211_RADIOTAP_BARKER_CODE_LOCK u_int16_t unitless
|
||||
* IEEE80211_RADIOTAP_LOCK_QUALITY u_int16_t unitless
|
||||
*
|
||||
* Quality of Barker code lock. Unitless. Monotonically
|
||||
* nondecreasing with "better" lock strength. Called "Signal
|
||||
@ -173,6 +173,10 @@ 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_FCS u_int32_t data
|
||||
*
|
||||
* FCS from frame in network byte order.
|
||||
*/
|
||||
enum ieee80211_radiotap_type {
|
||||
IEEE80211_RADIOTAP_TSFT = 0,
|
||||
|
@ -18,9 +18,8 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.244.2.18 2005/09/29 07:46:45 hannes Exp $ (LBL)
|
||||
* $FreeBSD$
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.244.2.21 2007/03/28 07:45:46 hannes Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef tcpdump_interface_h
|
||||
@ -110,6 +109,10 @@ extern char *strsep(char **, const char *);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) ((a)<(b)?(a):(b))
|
||||
#endif
|
||||
|
||||
extern char *program_name; /* used to generate self-identifying messages */
|
||||
|
||||
extern int32_t thiszone; /* seconds offset from gmt to local time */
|
||||
@ -154,7 +157,7 @@ extern char *read_infile(char *);
|
||||
extern char *copy_argv(char **);
|
||||
|
||||
extern void safeputchar(int);
|
||||
extern void safeputs(const char *);
|
||||
extern void safeputs(const char *, int);
|
||||
|
||||
extern const char *isonsap_string(const u_char *, register u_int);
|
||||
extern const char *protoid_string(const u_char *);
|
||||
@ -204,6 +207,7 @@ extern u_int token_if_print(const struct pcap_pkthdr *, const u_char *);
|
||||
extern void fddi_print(const u_char *, u_int, u_int);
|
||||
extern u_int fddi_if_print(const struct pcap_pkthdr *, const u_char *);
|
||||
extern u_int fr_if_print(const struct pcap_pkthdr *, const u_char *);
|
||||
extern u_int mfr_if_print(const struct pcap_pkthdr *, const u_char *);
|
||||
extern u_int fr_print(register const u_char *, u_int);
|
||||
extern u_int mfr_print(register const u_char *, u_int);
|
||||
extern u_int ieee802_11_if_print(const struct pcap_pkthdr *, const u_char *);
|
||||
@ -228,6 +232,7 @@ extern void ns_print(const u_char *, u_int, int);
|
||||
extern void ntp_print(const u_char *, u_int);
|
||||
extern u_int null_if_print(const struct pcap_pkthdr *, const u_char *);
|
||||
extern void ospf_print(const u_char *, u_int, const u_char *);
|
||||
extern void olsr_print (const u_char *, u_int);
|
||||
extern void pimv1_print(const u_char *, u_int);
|
||||
extern void cisco_autorp_print(const u_char *, u_int);
|
||||
extern void rsvp_print(const u_char *, u_int);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/ip.h,v 1.11 2004/09/27 21:13:10 hannes Exp $ (LBL) */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/ip.h,v 1.11.2.1 2007/09/14 01:30:02 guy Exp $ (LBL) */
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
@ -102,6 +102,7 @@ struct ip {
|
||||
|
||||
#define IPOPT_RR 7 /* record packet route */
|
||||
#define IPOPT_TS 68 /* timestamp */
|
||||
#define IPOPT_RFC1393 82 /* traceroute RFC 1393 */
|
||||
#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
|
||||
#define IPOPT_LSRR 131 /* loose source route */
|
||||
#define IPOPT_SATID 136 /* satnet id */
|
||||
|
@ -18,7 +18,7 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/llc.h,v 1.17.2.2 2005/09/29 07:40:12 hannes Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/llc.h,v 1.17.2.4 2007/02/08 07:07:51 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -44,7 +44,7 @@
|
||||
#define LLC_XID 0xaf
|
||||
#define LLC_FRMR 0x87
|
||||
|
||||
#define LLC_S_CMD(is) (((is) >> 1) & 0x03)
|
||||
#define LLC_S_CMD(is) (((is) >> 2) & 0x03)
|
||||
#define LLC_RR 0x0001
|
||||
#define LLC_RNR 0x0005
|
||||
#define LLC_REJ 0x0009
|
||||
@ -102,6 +102,8 @@
|
||||
* PIDs for use with OUI_CISCO.
|
||||
*/
|
||||
#define PID_CISCO_CDP 0x2000 /* Cisco Discovery Protocol */
|
||||
#define PID_CISCO_VTP 0x2003 /* Cisco VLAN Trunk Protocol */
|
||||
#define PID_CISCO_DTP 0x2004 /* Cisco Dynamic Trunk Protocol */
|
||||
|
||||
/*
|
||||
* PIDs for use with OUI_RFC2684.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/nameser.h,v 1.14 2003/11/05 06:02:59 guy Exp $ (LBL) */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/nameser.h,v 1.14.4.2 2006/11/10 03:15:35 guy Exp $ (LBL) */
|
||||
/*
|
||||
* Copyright (c) 1983, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
@ -75,6 +75,14 @@
|
||||
* Internet nameserver port number
|
||||
*/
|
||||
#define NAMESERVER_PORT 53
|
||||
|
||||
/*
|
||||
* Port for multicast DNS; see
|
||||
*
|
||||
* http://files.multicastdns.org/draft-cheshire-dnsext-multicastdns.txt
|
||||
*
|
||||
* for the current mDNS spec.
|
||||
*/
|
||||
#define MULTICASTDNS_PORT 5353
|
||||
|
||||
/*
|
||||
@ -163,10 +171,21 @@
|
||||
#define T_SRV 33 /* Server selection */
|
||||
#define T_ATMA 34 /* ATM Address */
|
||||
#define T_NAPTR 35 /* Naming Authority PoinTeR */
|
||||
#define T_KX 36 /* Key Exchanger */
|
||||
#define T_CERT 37 /* Certificates in the DNS */
|
||||
#define T_A6 38 /* IP6 address */
|
||||
#define T_DNAME 39 /* non-terminal redirection */
|
||||
#define T_SINK 40 /* unknown */
|
||||
#define T_OPT 41 /* EDNS0 option (meta-RR) */
|
||||
#define T_APL 42 /* lists of address prefixes */
|
||||
#define T_DS 43 /* Delegation Signer */
|
||||
#define T_SSHFP 44 /* SSH Fingerprint */
|
||||
#define T_IPSECKEY 45 /* IPsec keying material */
|
||||
#define T_RRSIG 46 /* new security signature */
|
||||
#define T_NSEC 47 /* provable insecure information */
|
||||
#define T_DNSKEY 48 /* new security key */
|
||||
/* non standard */
|
||||
#define T_SPF 99 /* sender policy framework */
|
||||
#define T_UINFO 100 /* user (finger) information */
|
||||
#define T_UID 101 /* user ID */
|
||||
#define T_GID 102 /* group ID */
|
||||
@ -190,7 +209,8 @@
|
||||
#define C_HS 4 /* for Hesiod name server (MIT) (XXX) */
|
||||
/* Query class values which do not appear in resource records */
|
||||
#define C_ANY 255 /* wildcard match */
|
||||
#define C_CACHE_FLUSH 0x8000 /* mDNS cache flush flag */
|
||||
#define C_QU 0x8000 /* mDNS QU flag in queries */
|
||||
#define C_CACHE_FLUSH 0x8000 /* mDNS cache flush flag in replies */
|
||||
|
||||
/*
|
||||
* Status return codes for T_UNSPEC conversion routines
|
||||
|
@ -21,7 +21,7 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/netdissect.h,v 1.16.2.3 2005/09/29 07:46:46 hannes Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/netdissect.h,v 1.16.2.4 2006/02/08 01:40:09 hannes Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef netdissect_h
|
||||
@ -231,7 +231,7 @@ extern char *copy_argv(netdissect_options *, char **);
|
||||
#endif
|
||||
|
||||
extern void safeputchar(int);
|
||||
extern void safeputs(const char *);
|
||||
extern void safeputs(const char *, int);
|
||||
|
||||
#if 0
|
||||
extern const char *isonsap_string(netdissect_options *, const u_char *);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/ospf.h,v 1.16.2.1 2005/08/23 11:16:30 hannes Exp $ (LBL) */
|
||||
/* @(#) $Header: /tcpdump/master/tcpdump/ospf.h,v 1.16.2.2 2006/12/13 08:24:27 hannes Exp $ (LBL) */
|
||||
/*
|
||||
* Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
@ -48,6 +48,7 @@
|
||||
/* ospf_authtype */
|
||||
#define OSPF_AUTH_NONE 0 /* No auth-data */
|
||||
#define OSPF_AUTH_SIMPLE 1 /* Simple password */
|
||||
#define OSPF_AUTH_SIMPLE_LEN 8 /* max length of simple authentication */
|
||||
#define OSPF_AUTH_MD5 2 /* MD5 authentication */
|
||||
#define OSPF_AUTH_MD5_LEN 16 /* length of MD5 authentication */
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/parsenfsfh.c,v 1.28 2004/03/25 03:30:55 mcr Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/parsenfsfh.c,v 1.28.2.1 2007/06/15 19:15:04 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -81,6 +81,7 @@ static const char rcsid[] _U_ =
|
||||
#define FHT_SUNOS5 9
|
||||
#define FHT_AIX32 10
|
||||
#define FHT_HPUX9 11
|
||||
#define FHT_BSD44 12
|
||||
|
||||
#ifdef ultrix
|
||||
/* Nasty hack to keep the Ultrix C compiler from emitting bogus warnings */
|
||||
@ -147,6 +148,10 @@ int ourself; /* true if file handle was generated on this host */
|
||||
#endif
|
||||
#if defined(__osf__)
|
||||
fhtype = FHT_DECOSF;
|
||||
#endif
|
||||
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) \
|
||||
|| defined(__OpenBSD__)
|
||||
fhtype = FHT_BSD44;
|
||||
#endif
|
||||
}
|
||||
/*
|
||||
@ -198,8 +203,11 @@ int ourself; /* true if file handle was generated on this host */
|
||||
* could be Ultrix, IRIX5, AIX, or SUNOS5
|
||||
* might be HP-UX (depends on their values for minor devs)
|
||||
*/
|
||||
if ((fhp[6] == 0) && (fhp[7] == 0)) {
|
||||
fhtype = FHT_BSD44;
|
||||
}
|
||||
/*XXX we probably only need to test of these two bytes */
|
||||
if ((fhp[21] == 0) && (fhp[23] == 0)) {
|
||||
else if ((fhp[21] == 0) && (fhp[23] == 0)) {
|
||||
fhtype = FHT_ULTRIX;
|
||||
}
|
||||
else {
|
||||
@ -265,6 +273,18 @@ int ourself; /* true if file handle was generated on this host */
|
||||
*osnamep = "Auspex";
|
||||
break;
|
||||
|
||||
case FHT_BSD44:
|
||||
fsidp->Fsid_dev.Minor = fhp[0];
|
||||
fsidp->Fsid_dev.Major = fhp[1];
|
||||
fsidp->fsid_code = 0;
|
||||
|
||||
temp = make_uint32(fhp[15], fhp[14], fhp[13], fhp[12]);
|
||||
*inop = temp;
|
||||
|
||||
if (osnamep)
|
||||
*osnamep = "BSD 4.4";
|
||||
break;
|
||||
|
||||
case FHT_DECOSF:
|
||||
fsidp->fsid_code = make_uint32(fhp[7], fhp[6], fhp[5], fhp[4]);
|
||||
/* XXX could ignore 3 high-order bytes */
|
||||
@ -303,10 +323,16 @@ int ourself; /* true if file handle was generated on this host */
|
||||
*osnamep = "IRIX5";
|
||||
break;
|
||||
|
||||
#ifdef notdef
|
||||
case FHT_SUNOS3:
|
||||
/*
|
||||
* XXX - none of the heuristics above return this.
|
||||
* Are there any SunOS 3.x systems around to care about?
|
||||
*/
|
||||
if (osnamep)
|
||||
*osnamep = "SUNOS3";
|
||||
break;
|
||||
#endif
|
||||
|
||||
case FHT_SUNOS4:
|
||||
fsidp->Fsid_dev.Minor = fhp[3];
|
||||
|
@ -1,77 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001 Daniel Hartmeier
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* - 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT HOLDERS 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.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/tcpdump/pf.h,v 1.2 2004/04/02 06:36:25 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* from $OpenBSD: pfvar.h,v 1.170 2003/08/22 21:50:34 david Exp $ */
|
||||
|
||||
enum { PF_INOUT=0, PF_IN=1, PF_OUT=2 };
|
||||
enum { PF_PASS=0, PF_DROP=1, PF_SCRUB=2, PF_NAT=3, PF_NONAT=4,
|
||||
PF_BINAT=5, PF_NOBINAT=6, PF_RDR=7, PF_NORDR=8, PF_SYNPROXY_DROP=9 };
|
||||
|
||||
/* Reasons code for passing/dropping a packet */
|
||||
#define PFRES_MATCH 0 /* Explicit match of a rule */
|
||||
#define PFRES_BADOFF 1 /* Bad offset for pull_hdr */
|
||||
#define PFRES_FRAG 2 /* Dropping following fragment */
|
||||
#define PFRES_SHORT 3 /* Dropping short packet */
|
||||
#define PFRES_NORM 4 /* Dropping by normalizer */
|
||||
#define PFRES_MEMORY 5 /* Dropped due to lacking mem */
|
||||
#define PFRES_MAX 6 /* total+1 */
|
||||
|
||||
#define PFRES_NAMES { \
|
||||
"match", \
|
||||
"bad-offset", \
|
||||
"fragment", \
|
||||
"short", \
|
||||
"normalize", \
|
||||
"memory", \
|
||||
NULL \
|
||||
}
|
||||
|
||||
#define PF_RULESET_NAME_SIZE 16
|
||||
|
||||
/* from $OpenBSD: if_pflog.h,v 1.9 2003/07/15 20:27:27 dhartmei Exp $ */
|
||||
|
||||
#ifndef IFNAMSIZ
|
||||
#define IFNAMSIZ 16
|
||||
#endif
|
||||
|
||||
struct pfloghdr {
|
||||
u_int8_t length;
|
||||
u_int8_t af;
|
||||
u_int8_t action;
|
||||
u_int8_t reason;
|
||||
char ifname[IFNAMSIZ];
|
||||
char ruleset[PF_RULESET_NAME_SIZE];
|
||||
u_int32_t rulenr;
|
||||
u_int32_t subrulenr;
|
||||
u_int8_t dir;
|
||||
u_int8_t pad[3];
|
||||
};
|
||||
#define PFLOG_HDRLEN sizeof(struct pfloghdr)
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-802_11.c,v 1.31.2.5 2005/07/30 21:37:50 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-802_11.c,v 1.31.2.15 2007/07/22 23:14:14 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -47,20 +47,54 @@ static const char rcsid[] _U_ =
|
||||
#include "ieee802_11.h"
|
||||
#include "ieee802_11_radio.h"
|
||||
|
||||
#define PRINT_SSID(p) \
|
||||
switch (p.ssid_status) { \
|
||||
case TRUNCATED: \
|
||||
return 0; \
|
||||
case PRESENT: \
|
||||
printf(" ("); \
|
||||
fn_print(p.ssid.ssid, NULL); \
|
||||
printf(")"); \
|
||||
break; \
|
||||
case NOT_PRESENT: \
|
||||
break; \
|
||||
}
|
||||
|
||||
#define PRINT_RATE(_sep, _r, _suf) \
|
||||
printf("%s%2.1f%s", _sep, (.5 * ((_r) & 0x7f)), _suf)
|
||||
#define PRINT_RATES(p) \
|
||||
do { \
|
||||
int z; \
|
||||
const char *sep = " ["; \
|
||||
for (z = 0; z < p.rates.length ; z++) { \
|
||||
PRINT_RATE(sep, p.rates.rate[z], \
|
||||
(p.rates.rate[z] & 0x80 ? "*" : "")); \
|
||||
sep = " "; \
|
||||
switch (p.rates_status) { \
|
||||
case TRUNCATED: \
|
||||
return 0; \
|
||||
case PRESENT: \
|
||||
do { \
|
||||
int z; \
|
||||
const char *sep = " ["; \
|
||||
for (z = 0; z < p.rates.length ; z++) { \
|
||||
PRINT_RATE(sep, p.rates.rate[z], \
|
||||
(p.rates.rate[z] & 0x80 ? "*" : "")); \
|
||||
sep = " "; \
|
||||
} \
|
||||
if (p.rates.length != 0) \
|
||||
printf(" Mbit]"); \
|
||||
} while (0); \
|
||||
break; \
|
||||
case NOT_PRESENT: \
|
||||
break; \
|
||||
}
|
||||
|
||||
#define PRINT_DS_CHANNEL(p) \
|
||||
switch (p.ds_status) { \
|
||||
case TRUNCATED: \
|
||||
return 0; \
|
||||
case PRESENT: \
|
||||
printf(" CH: %u", p.ds.channel); \
|
||||
break; \
|
||||
case NOT_PRESENT: \
|
||||
break; \
|
||||
} \
|
||||
if (p.rates.length != 0) \
|
||||
printf(" Mbit]"); \
|
||||
} while (0)
|
||||
printf("%s", \
|
||||
CAPABILITY_PRIVACY(p.capability_info) ? ", PRIVACY" : "" );
|
||||
|
||||
static const int ieee80211_htrates[16] = {
|
||||
13, /* IFM_IEEE80211_MCS0 */
|
||||
@ -140,94 +174,141 @@ wep_print(const u_char *p)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
static void
|
||||
parse_elements(struct mgmt_body_t *pbody, const u_char *p, int offset)
|
||||
{
|
||||
/*
|
||||
* We haven't seen any elements yet.
|
||||
*/
|
||||
pbody->challenge_status = NOT_PRESENT;
|
||||
pbody->ssid_status = NOT_PRESENT;
|
||||
pbody->rates_status = NOT_PRESENT;
|
||||
pbody->ds_status = NOT_PRESENT;
|
||||
pbody->cf_status = NOT_PRESENT;
|
||||
pbody->tim_status = NOT_PRESENT;
|
||||
|
||||
for (;;) {
|
||||
if (!TTEST2(*(p + offset), 1))
|
||||
return 1;
|
||||
return;
|
||||
switch (*(p + offset)) {
|
||||
case E_SSID:
|
||||
/* Present, possibly truncated */
|
||||
pbody->ssid_status = TRUNCATED;
|
||||
if (!TTEST2(*(p + offset), 2))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&pbody->ssid, p + offset, 2);
|
||||
offset += 2;
|
||||
if (pbody->ssid.length <= 0)
|
||||
break;
|
||||
if (!TTEST2(*(p + offset), pbody->ssid.length))
|
||||
return 0;
|
||||
memcpy(&pbody->ssid.ssid, p + offset,
|
||||
pbody->ssid.length);
|
||||
offset += pbody->ssid.length;
|
||||
if (pbody->ssid.length != 0) {
|
||||
if (pbody->ssid.length >
|
||||
sizeof(pbody->ssid.ssid) - 1)
|
||||
return;
|
||||
if (!TTEST2(*(p + offset), pbody->ssid.length))
|
||||
return;
|
||||
memcpy(&pbody->ssid.ssid, p + offset,
|
||||
pbody->ssid.length);
|
||||
offset += pbody->ssid.length;
|
||||
}
|
||||
pbody->ssid.ssid[pbody->ssid.length] = '\0';
|
||||
/* Present and not truncated */
|
||||
pbody->ssid_status = PRESENT;
|
||||
break;
|
||||
case E_CHALLENGE:
|
||||
/* Present, possibly truncated */
|
||||
pbody->challenge_status = TRUNCATED;
|
||||
if (!TTEST2(*(p + offset), 2))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&pbody->challenge, p + offset, 2);
|
||||
offset += 2;
|
||||
if (pbody->challenge.length <= 0)
|
||||
break;
|
||||
if (!TTEST2(*(p + offset), pbody->challenge.length))
|
||||
return 0;
|
||||
memcpy(&pbody->challenge.text, p + offset,
|
||||
pbody->challenge.length);
|
||||
offset += pbody->challenge.length;
|
||||
if (pbody->challenge.length != 0) {
|
||||
if (pbody->challenge.length >
|
||||
sizeof(pbody->challenge.text) - 1)
|
||||
return;
|
||||
if (!TTEST2(*(p + offset), pbody->challenge.length))
|
||||
return;
|
||||
memcpy(&pbody->challenge.text, p + offset,
|
||||
pbody->challenge.length);
|
||||
offset += pbody->challenge.length;
|
||||
}
|
||||
pbody->challenge.text[pbody->challenge.length] = '\0';
|
||||
/* Present and not truncated */
|
||||
pbody->challenge_status = PRESENT;
|
||||
break;
|
||||
case E_RATES:
|
||||
/* Present, possibly truncated */
|
||||
pbody->rates_status = TRUNCATED;
|
||||
if (!TTEST2(*(p + offset), 2))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&(pbody->rates), p + offset, 2);
|
||||
offset += 2;
|
||||
if (pbody->rates.length <= 0)
|
||||
break;
|
||||
if (!TTEST2(*(p + offset), pbody->rates.length))
|
||||
return 0;
|
||||
memcpy(&pbody->rates.rate, p + offset,
|
||||
pbody->rates.length);
|
||||
offset += pbody->rates.length;
|
||||
if (pbody->rates.length != 0) {
|
||||
if (pbody->rates.length > sizeof pbody->rates.rate)
|
||||
return;
|
||||
if (!TTEST2(*(p + offset), pbody->rates.length))
|
||||
return;
|
||||
memcpy(&pbody->rates.rate, p + offset,
|
||||
pbody->rates.length);
|
||||
offset += pbody->rates.length;
|
||||
}
|
||||
/* Present and not truncated */
|
||||
pbody->rates_status = PRESENT;
|
||||
break;
|
||||
case E_DS:
|
||||
/* Present, possibly truncated */
|
||||
pbody->ds_status = TRUNCATED;
|
||||
if (!TTEST2(*(p + offset), 3))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&pbody->ds, p + offset, 3);
|
||||
offset += 3;
|
||||
/* Present and not truncated */
|
||||
pbody->ds_status = PRESENT;
|
||||
break;
|
||||
case E_CF:
|
||||
/* Present, possibly truncated */
|
||||
pbody->cf_status = TRUNCATED;
|
||||
if (!TTEST2(*(p + offset), 8))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&pbody->cf, p + offset, 8);
|
||||
offset += 8;
|
||||
/* Present and not truncated */
|
||||
pbody->cf_status = PRESENT;
|
||||
break;
|
||||
case E_TIM:
|
||||
/* Present, possibly truncated */
|
||||
pbody->tim_status = TRUNCATED;
|
||||
if (!TTEST2(*(p + offset), 2))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&pbody->tim, p + offset, 2);
|
||||
offset += 2;
|
||||
if (!TTEST2(*(p + offset), 3))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(&pbody->tim.count, p + offset, 3);
|
||||
offset += 3;
|
||||
|
||||
if (pbody->tim.length <= 3)
|
||||
break;
|
||||
if (pbody->tim.length - 3 > sizeof pbody->tim.bitmap)
|
||||
return;
|
||||
if (!TTEST2(*(p + offset), pbody->tim.length - 3))
|
||||
return 0;
|
||||
return;
|
||||
memcpy(pbody->tim.bitmap, p + (pbody->tim.length - 3),
|
||||
(pbody->tim.length - 3));
|
||||
offset += pbody->tim.length - 3;
|
||||
/* Present and not truncated */
|
||||
pbody->tim_status = PRESENT;
|
||||
break;
|
||||
default:
|
||||
#if 0
|
||||
printf("(1) unhandled element_id (%d) ",
|
||||
*(p + offset) );
|
||||
#endif
|
||||
if (!TTEST2(*(p + offset), 2))
|
||||
return;
|
||||
if (!TTEST2(*(p + offset + 2), *(p + offset + 1)))
|
||||
return;
|
||||
offset += *(p + offset + 1) + 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*********************************************************************************
|
||||
@ -245,24 +326,20 @@ handle_beacon(const u_char *p)
|
||||
if (!TTEST2(*p, IEEE802_11_TSTAMP_LEN + IEEE802_11_BCNINT_LEN +
|
||||
IEEE802_11_CAPINFO_LEN))
|
||||
return 0;
|
||||
memcpy(&pbody.timestamp, p, 8);
|
||||
memcpy(&pbody.timestamp, p, IEEE802_11_TSTAMP_LEN);
|
||||
offset += IEEE802_11_TSTAMP_LEN;
|
||||
pbody.beacon_interval = EXTRACT_LE_16BITS(p+offset);
|
||||
offset += IEEE802_11_BCNINT_LEN;
|
||||
pbody.capability_info = EXTRACT_LE_16BITS(p+offset);
|
||||
offset += IEEE802_11_CAPINFO_LEN;
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
printf(" (");
|
||||
fn_print(pbody.ssid.ssid, NULL);
|
||||
printf(")");
|
||||
PRINT_SSID(pbody);
|
||||
PRINT_RATES(pbody);
|
||||
printf(" %s CH: %u%s",
|
||||
CAPABILITY_ESS(pbody.capability_info) ? "ESS" : "IBSS",
|
||||
pbody.ds.channel,
|
||||
CAPABILITY_PRIVACY(pbody.capability_info) ? ", PRIVACY" : "" );
|
||||
printf(" %s",
|
||||
CAPABILITY_ESS(pbody.capability_info) ? "ESS" : "IBSS");
|
||||
PRINT_DS_CHANNEL(pbody);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -282,12 +359,9 @@ handle_assoc_request(const u_char *p)
|
||||
pbody.listen_interval = EXTRACT_LE_16BITS(p+offset);
|
||||
offset += IEEE802_11_LISTENINT_LEN;
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
printf(" (");
|
||||
fn_print(pbody.ssid.ssid, NULL);
|
||||
printf(")");
|
||||
PRINT_SSID(pbody);
|
||||
PRINT_RATES(pbody);
|
||||
return 1;
|
||||
}
|
||||
@ -310,8 +384,7 @@ handle_assoc_response(const u_char *p)
|
||||
pbody.aid = EXTRACT_LE_16BITS(p+offset);
|
||||
offset += IEEE802_11_AID_LEN;
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
printf(" AID(%x) :%s: %s", ((u_int16_t)(pbody.aid << 2 )) >> 2 ,
|
||||
CAPABILITY_PRIVACY(pbody.capability_info) ? " PRIVACY " : "",
|
||||
@ -340,12 +413,10 @@ handle_reassoc_request(const u_char *p)
|
||||
memcpy(&pbody.ap, p+offset, IEEE802_11_AP_LEN);
|
||||
offset += IEEE802_11_AP_LEN;
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
printf(" (");
|
||||
fn_print(pbody.ssid.ssid, NULL);
|
||||
printf(") AP : %s", etheraddr_string( pbody.ap ));
|
||||
PRINT_SSID(pbody);
|
||||
printf(" AP : %s", etheraddr_string( pbody.ap ));
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -365,12 +436,9 @@ handle_probe_request(const u_char *p)
|
||||
|
||||
memset(&pbody, 0, sizeof(pbody));
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
printf(" (");
|
||||
fn_print(pbody.ssid.ssid, NULL);
|
||||
printf(")");
|
||||
PRINT_SSID(pbody);
|
||||
PRINT_RATES(pbody);
|
||||
|
||||
return 1;
|
||||
@ -395,15 +463,11 @@ handle_probe_response(const u_char *p)
|
||||
pbody.capability_info = EXTRACT_LE_16BITS(p+offset);
|
||||
offset += IEEE802_11_CAPINFO_LEN;
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
printf(" (");
|
||||
fn_print(pbody.ssid.ssid, NULL);
|
||||
printf(") ");
|
||||
PRINT_SSID(pbody);
|
||||
PRINT_RATES(pbody);
|
||||
printf(" CH: %u%s", pbody.ds.channel,
|
||||
CAPABILITY_PRIVACY(pbody.capability_info) ? ", PRIVACY" : "" );
|
||||
PRINT_DS_CHANNEL(pbody);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -451,8 +515,7 @@ handle_auth(const u_char *p)
|
||||
pbody.status_code = EXTRACT_LE_16BITS(p + offset);
|
||||
offset += 2;
|
||||
|
||||
if (!parse_elements(&pbody, p, offset))
|
||||
return 0;
|
||||
parse_elements(&pbody, p, offset);
|
||||
|
||||
if ((pbody.auth_alg == 1) &&
|
||||
((pbody.auth_trans_seq_num == 2) ||
|
||||
@ -657,22 +720,23 @@ static void
|
||||
data_header_print(u_int16_t fc, const u_char *p, const u_int8_t **srcp,
|
||||
const u_int8_t **dstp)
|
||||
{
|
||||
switch (FC_SUBTYPE(fc)) {
|
||||
case DATA_DATA:
|
||||
case DATA_NODATA:
|
||||
break;
|
||||
case DATA_DATA_CF_ACK:
|
||||
case DATA_NODATA_CF_ACK:
|
||||
printf("CF Ack ");
|
||||
break;
|
||||
case DATA_DATA_CF_POLL:
|
||||
case DATA_NODATA_CF_POLL:
|
||||
printf("CF Poll ");
|
||||
break;
|
||||
case DATA_DATA_CF_ACK_POLL:
|
||||
case DATA_NODATA_CF_ACK_POLL:
|
||||
printf("CF Ack/Poll ");
|
||||
break;
|
||||
u_int subtype = FC_SUBTYPE(fc);
|
||||
|
||||
if (DATA_FRAME_IS_CF_ACK(subtype) || DATA_FRAME_IS_CF_POLL(subtype) ||
|
||||
DATA_FRAME_IS_QOS(subtype)) {
|
||||
printf("CF ");
|
||||
if (DATA_FRAME_IS_CF_ACK(subtype)) {
|
||||
if (DATA_FRAME_IS_CF_POLL(subtype))
|
||||
printf("Ack/Poll");
|
||||
else
|
||||
printf("Ack");
|
||||
} else {
|
||||
if (DATA_FRAME_IS_CF_POLL(subtype))
|
||||
printf("Poll");
|
||||
}
|
||||
if (DATA_FRAME_IS_QOS(subtype))
|
||||
printf("+QoS");
|
||||
printf(" ");
|
||||
}
|
||||
|
||||
#define ADDR1 (p + 4)
|
||||
@ -802,6 +866,8 @@ ctrl_header_print(u_int16_t fc, const u_char *p, const u_int8_t **srcp,
|
||||
static int
|
||||
extract_header_length(u_int16_t fc)
|
||||
{
|
||||
int len;
|
||||
|
||||
switch (FC_TYPE(fc)) {
|
||||
case T_MGMT:
|
||||
return MGMT_HDRLEN;
|
||||
@ -825,7 +891,10 @@ extract_header_length(u_int16_t fc)
|
||||
return 0;
|
||||
}
|
||||
case T_DATA:
|
||||
return (FC_TO_DS(fc) && FC_FROM_DS(fc)) ? 30 : 24;
|
||||
len = (FC_TO_DS(fc) && FC_FROM_DS(fc)) ? 30 : 24;
|
||||
if (DATA_FRAME_IS_QOS(FC_SUBTYPE(fc)))
|
||||
len += 2;
|
||||
return len;
|
||||
default:
|
||||
printf("unknown IEEE802.11 frame type (%d)", FC_TYPE(fc));
|
||||
return 0;
|
||||
@ -879,8 +948,12 @@ ieee_802_11_hdr_print(u_int16_t fc, const u_char *p, const u_int8_t **srcp,
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef roundup2
|
||||
#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
|
||||
#endif
|
||||
|
||||
static u_int
|
||||
ieee802_11_print(const u_char *p, u_int length, u_int caplen)
|
||||
ieee802_11_print(const u_char *p, u_int length, u_int caplen, int pad)
|
||||
{
|
||||
u_int16_t fc;
|
||||
u_int hdrlen;
|
||||
@ -894,6 +967,8 @@ ieee802_11_print(const u_char *p, u_int length, u_int caplen)
|
||||
|
||||
fc = EXTRACT_LE_16BITS(p);
|
||||
hdrlen = extract_header_length(fc);
|
||||
if (pad)
|
||||
hdrlen = roundup2(hdrlen, 4);
|
||||
|
||||
if (caplen < hdrlen) {
|
||||
printf("[|802.11]");
|
||||
@ -924,6 +999,8 @@ ieee802_11_print(const u_char *p, u_int length, u_int caplen)
|
||||
}
|
||||
break;
|
||||
case T_DATA:
|
||||
if (DATA_FRAME_IS_NULL(FC_SUBTYPE(fc)))
|
||||
return hdrlen; /* no-data frame */
|
||||
/* There may be a problem w/ AP not having this bit set */
|
||||
if (FC_WEP(fc)) {
|
||||
if (!wep_print(p)) {
|
||||
@ -964,7 +1041,7 @@ ieee802_11_print(const u_char *p, u_int length, u_int caplen)
|
||||
u_int
|
||||
ieee802_11_if_print(const struct pcap_pkthdr *h, const u_char *p)
|
||||
{
|
||||
return ieee802_11_print(p, h->len, h->caplen);
|
||||
return ieee802_11_print(p, h->len, h->caplen, 0);
|
||||
}
|
||||
|
||||
#define IEEE80211_CHAN_FHSS \
|
||||
@ -1026,7 +1103,7 @@ print_chaninfo(int freq, int flags)
|
||||
}
|
||||
|
||||
static int
|
||||
print_radiotap_field(struct cpack_state *s, u_int32_t bit)
|
||||
print_radiotap_field(struct cpack_state *s, u_int32_t bit, int *pad)
|
||||
{
|
||||
union {
|
||||
int8_t i8;
|
||||
@ -1040,6 +1117,10 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit)
|
||||
|
||||
switch (bit) {
|
||||
case IEEE80211_RADIOTAP_FLAGS:
|
||||
rc = cpack_uint8(s, &u.u8);
|
||||
if (u.u8 & IEEE80211_RADIOTAP_F_DATAPAD)
|
||||
*pad = 1;
|
||||
break;
|
||||
case IEEE80211_RADIOTAP_RATE:
|
||||
case IEEE80211_RADIOTAP_DB_ANTSIGNAL:
|
||||
case IEEE80211_RADIOTAP_DB_ANTNOISE:
|
||||
@ -1142,14 +1223,8 @@ print_radiotap_field(struct cpack_state *s, u_int32_t bit)
|
||||
printf("wep ");
|
||||
if (u.u8 & IEEE80211_RADIOTAP_F_FRAG)
|
||||
printf("fragmented ");
|
||||
#if 0
|
||||
if (u.u8 & IEEE80211_RADIOTAP_F_FCS)
|
||||
printf("fcs ");
|
||||
if (u.u8 & IEEE80211_RADIOTAP_F_DATAPAD)
|
||||
printf("datapad ");
|
||||
#endif
|
||||
if (u.u8 & IEEE80211_RADIOTAP_F_BADFCS)
|
||||
printf("badfcs ");
|
||||
printf("bad-fcs ");
|
||||
break;
|
||||
case IEEE80211_RADIOTAP_ANTENNA:
|
||||
printf("antenna %d ", u.u8);
|
||||
@ -1184,6 +1259,7 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
|
||||
int bit0;
|
||||
const u_char *iter;
|
||||
u_int len;
|
||||
int pad;
|
||||
|
||||
if (caplen < sizeof(*hdr)) {
|
||||
printf("[|802.11]");
|
||||
@ -1217,6 +1293,8 @@ ieee802_11_radio_print(const u_char *p, u_int length, u_int caplen)
|
||||
return caplen;
|
||||
}
|
||||
|
||||
/* Assume no Atheros padding between 802.11 header and body */
|
||||
pad = 0;
|
||||
for (bit0 = 0, presentp = &hdr->it_present; presentp <= last_presentp;
|
||||
presentp++, bit0 += 32) {
|
||||
for (present = EXTRACT_LE_32BITS(presentp); present;
|
||||
@ -1228,12 +1306,12 @@ 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) != 0)
|
||||
if (print_radiotap_field(&cpacker, bit, &pad) != 0)
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
out:
|
||||
return len + ieee802_11_print(p + len, length - len, caplen - len);
|
||||
return len + ieee802_11_print(p + len, length - len, caplen - len, pad);
|
||||
#undef BITNO_32
|
||||
#undef BITNO_16
|
||||
#undef BITNO_8
|
||||
@ -1264,7 +1342,7 @@ ieee802_11_avs_radio_print(const u_char *p, u_int length, u_int caplen)
|
||||
}
|
||||
|
||||
return caphdr_len + ieee802_11_print(p + caphdr_len,
|
||||
length - caphdr_len, caplen - caphdr_len);
|
||||
length - caphdr_len, caplen - caphdr_len, 0);
|
||||
}
|
||||
|
||||
#define PRISM_HDR_LEN 144
|
||||
@ -1303,7 +1381,7 @@ prism_if_print(const struct pcap_pkthdr *h, const u_char *p)
|
||||
}
|
||||
|
||||
return PRISM_HDR_LEN + ieee802_11_print(p + PRISM_HDR_LEN,
|
||||
length - PRISM_HDR_LEN, caplen - PRISM_HDR_LEN);
|
||||
length - PRISM_HDR_LEN, caplen - PRISM_HDR_LEN, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.38.2.3 2005/07/07 01:24:34 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-atm.c,v 1.38.2.6 2006/01/25 13:27:24 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -45,6 +45,12 @@ static const char rcsid[] _U_ =
|
||||
|
||||
#include "ether.h"
|
||||
|
||||
struct tok oam_f_values[] = {
|
||||
{ OAMF4SC, "OAM F4 (segment)" },
|
||||
{ OAMF4EC, "OAM F4 (end)" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
struct tok oam_celltype_values[] = {
|
||||
{ 0x1, "Fault Management" },
|
||||
{ 0x2, "Performance Management" },
|
||||
@ -137,6 +143,15 @@ atm_if_print(const struct pcap_pkthdr *h, const u_char *p)
|
||||
printf("[|atm]");
|
||||
return (caplen);
|
||||
}
|
||||
|
||||
/* Cisco Style NLPID ? */
|
||||
if (*p == LLC_UI) {
|
||||
if (eflag)
|
||||
printf("CNLPID ");
|
||||
isoclns_print(p+1, length-1, caplen-1);
|
||||
return hdrlen;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract the presumed LLC header into a variable, for quick
|
||||
* testing.
|
||||
@ -291,9 +306,10 @@ atm_print(u_int vpi, u_int vci, u_int traftype, const u_char *p, u_int length,
|
||||
int
|
||||
oam_print (const u_char *p, u_int length, u_int hec) {
|
||||
|
||||
u_int16_t cell_header, cell_type, func_type,vpi,vci,payload,clp;
|
||||
u_int32_t cell_header;
|
||||
u_int16_t cell_type, func_type,vpi,vci,payload,clp;
|
||||
|
||||
cell_header = EXTRACT_32BITS(p);
|
||||
cell_header = EXTRACT_32BITS(p+hec);
|
||||
cell_type = ((*(p+4+hec))>>4) & 0x0f;
|
||||
func_type = *(p+4+hec) & 0x0f;
|
||||
|
||||
@ -302,20 +318,9 @@ oam_print (const u_char *p, u_int length, u_int hec) {
|
||||
payload = (cell_header>>1)&0x7;
|
||||
clp = cell_header&0x1;
|
||||
|
||||
switch (vci) {
|
||||
case OAMF4SC:
|
||||
printf("OAM F4 (segment), ");
|
||||
break;
|
||||
case OAMF4EC:
|
||||
printf("OAM F4 (end), ");
|
||||
break;
|
||||
default:
|
||||
printf("OAM F5, ");
|
||||
break;
|
||||
}
|
||||
|
||||
if (eflag)
|
||||
printf("vpi %u, vci %u, payload %u, clp %u, ",vpi,vci,payload,clp);
|
||||
printf("%s, vpi %u, vci %u, payload %u, clp %u, ",
|
||||
tok2str(oam_f_values, "OAM F5", vci),
|
||||
vpi, vci, payload, clp);
|
||||
|
||||
printf("cell-type %s (%u)",
|
||||
tok2str(oam_celltype_values, "unknown", cell_type),
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-bfd.c,v 1.5.2.4 2005/04/28 09:28:47 hannes Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-bfd.c,v 1.5.2.5 2006/02/02 06:36:37 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -219,7 +219,7 @@ bfd_print(register const u_char *pptr, register u_int len, register u_int port)
|
||||
printf("BFDv%u, %s, State %s, Flags: [%s], length: %u",
|
||||
version,
|
||||
tok2str(bfd_port_values, "unknown (%u)", port),
|
||||
tok2str(bfd_v1_state_values, "unknown (%u)", bfd_header->flags & 0xc0),
|
||||
tok2str(bfd_v1_state_values, "unknown (%u)", (bfd_header->flags & 0xc0) >> 6),
|
||||
bittok2str(bfd_v1_flag_values, "none", bfd_header->flags & 0x3f),
|
||||
len);
|
||||
return;
|
||||
|
@ -36,7 +36,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.91.2.6 2005/06/03 07:31:43 hannes Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-bgp.c,v 1.91.2.12 2007/07/14 22:26:35 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <tcpdump-stdinc.h>
|
||||
@ -50,6 +50,7 @@ static const char rcsid[] _U_ =
|
||||
#include "extract.h"
|
||||
#include "bgp.h"
|
||||
#include "l2vpn.h"
|
||||
#include "af.h"
|
||||
|
||||
struct bgp {
|
||||
u_int8_t bgp_marker[16];
|
||||
@ -339,46 +340,6 @@ static struct tok bgp_safi_values[] = {
|
||||
#define BGP_COMMUNITY_NO_ADVERT 0xffffff02
|
||||
#define BGP_COMMUNITY_NO_EXPORT_SUBCONFED 0xffffff03
|
||||
|
||||
/* RFC1700 address family numbers */
|
||||
#define AFNUM_INET 1
|
||||
#define AFNUM_INET6 2
|
||||
#define AFNUM_NSAP 3
|
||||
#define AFNUM_HDLC 4
|
||||
#define AFNUM_BBN1822 5
|
||||
#define AFNUM_802 6
|
||||
#define AFNUM_E163 7
|
||||
#define AFNUM_E164 8
|
||||
#define AFNUM_F69 9
|
||||
#define AFNUM_X121 10
|
||||
#define AFNUM_IPX 11
|
||||
#define AFNUM_ATALK 12
|
||||
#define AFNUM_DECNET 13
|
||||
#define AFNUM_BANYAN 14
|
||||
#define AFNUM_E164NSAP 15
|
||||
/* draft-kompella-ppvpn-l2vpn */
|
||||
#define AFNUM_L2VPN 196 /* still to be approved by IANA */
|
||||
|
||||
static struct tok bgp_afi_values[] = {
|
||||
{ 0, "Reserved"},
|
||||
{ AFNUM_INET, "IPv4"},
|
||||
{ AFNUM_INET6, "IPv6"},
|
||||
{ AFNUM_NSAP, "NSAP"},
|
||||
{ AFNUM_HDLC, "HDLC"},
|
||||
{ AFNUM_BBN1822, "BBN 1822"},
|
||||
{ AFNUM_802, "802"},
|
||||
{ AFNUM_E163, "E.163"},
|
||||
{ AFNUM_E164, "E.164"},
|
||||
{ AFNUM_F69, "F.69"},
|
||||
{ AFNUM_X121, "X.121"},
|
||||
{ AFNUM_IPX, "Novell IPX"},
|
||||
{ AFNUM_ATALK, "Appletalk"},
|
||||
{ AFNUM_DECNET, "Decnet IV"},
|
||||
{ AFNUM_BANYAN, "Banyan Vines"},
|
||||
{ AFNUM_E164NSAP, "E.164 with NSAP subaddress"},
|
||||
{ AFNUM_L2VPN, "Layer-2 VPN"},
|
||||
{ 0, NULL},
|
||||
};
|
||||
|
||||
/* Extended community type - draft-ietf-idr-bgp-ext-communities-05 */
|
||||
#define BGP_EXT_COM_RT_0 0x0002 /* Route Target,Format AS(2bytes):AN(4bytes) */
|
||||
#define BGP_EXT_COM_RT_1 0x0102 /* Route Target,Format IP address:AN(2bytes) */
|
||||
@ -403,6 +364,14 @@ static struct tok bgp_afi_values[] = {
|
||||
|
||||
#define BGP_EXT_COM_L2INFO 0x800a /* draft-kompella-ppvpn-l2vpn */
|
||||
|
||||
/* http://www.cisco.com/en/US/tech/tk436/tk428/technologies_tech_note09186a00801eb09a.shtml */
|
||||
#define BGP_EXT_COM_EIGRP_GEN 0x8800
|
||||
#define BGP_EXT_COM_EIGRP_METRIC_AS_DELAY 0x8801
|
||||
#define BGP_EXT_COM_EIGRP_METRIC_REL_NH_BW 0x8802
|
||||
#define BGP_EXT_COM_EIGRP_METRIC_LOAD_MTU 0x8803
|
||||
#define BGP_EXT_COM_EIGRP_EXT_REMAS_REMID 0x8804
|
||||
#define BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC 0x8805
|
||||
|
||||
static struct tok bgp_extd_comm_flag_values[] = {
|
||||
{ 0x8000, "vendor-specific"},
|
||||
{ 0x4000, "non-transitive"},
|
||||
@ -427,6 +396,12 @@ static struct tok bgp_extd_comm_subtype_values[] = {
|
||||
{ BGP_EXT_COM_OSPF_RID, "ospf-router-id"},
|
||||
{ BGP_EXT_COM_OSPF_RID2, "ospf-router-id"},
|
||||
{ BGP_EXT_COM_L2INFO, "layer2-info"},
|
||||
{ BGP_EXT_COM_EIGRP_GEN , "eigrp-general-route (flag, tag)" },
|
||||
{ BGP_EXT_COM_EIGRP_METRIC_AS_DELAY , "eigrp-route-metric (AS, delay)" },
|
||||
{ BGP_EXT_COM_EIGRP_METRIC_REL_NH_BW , "eigrp-route-metric (reliability, nexthop, bandwidth)" },
|
||||
{ BGP_EXT_COM_EIGRP_METRIC_LOAD_MTU , "eigrp-route-metric (load, MTU)" },
|
||||
{ BGP_EXT_COM_EIGRP_EXT_REMAS_REMID , "eigrp-external-route (remote-AS, remote-ID)" },
|
||||
{ BGP_EXT_COM_EIGRP_EXT_REMPROTO_REMMETRIC , "eigrp-external-route (remote-proto, remote-metric)" },
|
||||
{ 0, NULL},
|
||||
};
|
||||
|
||||
@ -491,6 +466,9 @@ decode_labeled_prefix4(const u_char *pptr, char *buf, u_int buflen)
|
||||
stacked labels in a a single BGP message
|
||||
*/
|
||||
|
||||
if (24 > plen)
|
||||
return -1;
|
||||
|
||||
plen-=24; /* adjust prefixlen - labellength */
|
||||
|
||||
if (32 < plen)
|
||||
@ -565,9 +543,15 @@ decode_rt_routing_info(const u_char *pptr, char *buf, u_int buflen)
|
||||
TCHECK(pptr[0]);
|
||||
plen = pptr[0]; /* get prefix length */
|
||||
|
||||
if (0 == plen)
|
||||
return 1; /* default route target */
|
||||
|
||||
if (32 > plen)
|
||||
return -1;
|
||||
|
||||
plen-=32; /* adjust prefix length */
|
||||
|
||||
if (0 < plen)
|
||||
if (64 < plen)
|
||||
return -1;
|
||||
|
||||
memset(&route_target, 0, sizeof(route_target));
|
||||
@ -596,6 +580,9 @@ decode_labeled_vpn_prefix4(const u_char *pptr, char *buf, u_int buflen)
|
||||
TCHECK(pptr[0]);
|
||||
plen = pptr[0]; /* get prefix length */
|
||||
|
||||
if ((24+64) > plen)
|
||||
return -1;
|
||||
|
||||
plen-=(24+64); /* adjust prefixlen - labellength - RD len*/
|
||||
|
||||
if (32 < plen)
|
||||
@ -741,6 +728,10 @@ decode_labeled_prefix6(const u_char *pptr, char *buf, u_int buflen)
|
||||
|
||||
TCHECK(pptr[0]);
|
||||
plen = pptr[0]; /* get prefix length */
|
||||
|
||||
if (24 > plen)
|
||||
return -1;
|
||||
|
||||
plen-=24; /* adjust prefixlen - labellength */
|
||||
|
||||
if (128 < plen)
|
||||
@ -775,6 +766,9 @@ decode_labeled_vpn_prefix6(const u_char *pptr, char *buf, u_int buflen)
|
||||
TCHECK(pptr[0]);
|
||||
plen = pptr[0]; /* get prefix length */
|
||||
|
||||
if ((24+64) > plen)
|
||||
return -1;
|
||||
|
||||
plen-=(24+64); /* adjust prefixlen - labellength - RD len*/
|
||||
|
||||
if (128 < plen)
|
||||
@ -840,6 +834,9 @@ decode_labeled_vpn_clnp_prefix(const u_char *pptr, char *buf, u_int buflen)
|
||||
TCHECK(pptr[0]);
|
||||
plen = pptr[0]; /* get prefix length */
|
||||
|
||||
if ((24+64) > plen)
|
||||
return -1;
|
||||
|
||||
plen-=(24+64); /* adjust prefixlen - labellength - RD len*/
|
||||
|
||||
if (152 < plen)
|
||||
@ -1013,7 +1010,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
safi = tptr[2];
|
||||
|
||||
printf("\n\t AFI: %s (%u), %sSAFI: %s (%u)",
|
||||
tok2strbuf(bgp_afi_values, "Unknown AFI", af,
|
||||
tok2strbuf(af_values, "Unknown AFI", af,
|
||||
tokbuf, sizeof(tokbuf)),
|
||||
af,
|
||||
(safi>128) ? "vendor specific " : "", /* 128 is meanwhile wellknown */
|
||||
@ -1049,6 +1046,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
|
||||
case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
|
||||
break;
|
||||
default:
|
||||
TCHECK2(tptr[0], tlen);
|
||||
@ -1132,6 +1130,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
|
||||
@ -1291,6 +1290,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
printf("\n\t %s", buf);
|
||||
break;
|
||||
#endif
|
||||
case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
|
||||
@ -1346,7 +1346,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
safi = tptr[2];
|
||||
|
||||
printf("\n\t AFI: %s (%u), %sSAFI: %s (%u)",
|
||||
tok2strbuf(bgp_afi_values, "Unknown AFI", af,
|
||||
tok2strbuf(af_values, "Unknown AFI", af,
|
||||
tokbuf, sizeof(tokbuf)),
|
||||
af,
|
||||
(safi>128) ? "vendor specific " : "", /* 128 is meanwhile wellknown */
|
||||
@ -1425,6 +1425,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
printf("\n\t %s", buf);
|
||||
break;
|
||||
#endif
|
||||
case (AFNUM_VPLS<<8 | SAFNUM_VPLS):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNMULTICAST):
|
||||
case (AFNUM_L2VPN<<8 | SAFNUM_VPNUNIMULTICAST):
|
||||
@ -1537,7 +1538,7 @@ bgp_attr_print(const struct bgp_attr *attr, const u_char *pptr, int len)
|
||||
*(tptr+6),
|
||||
tokbuf, sizeof(tokbuf)),
|
||||
(*(tptr+7) & BGP_OSPF_RTYPE_METRIC_TYPE) ? "E2" : "",
|
||||
(*(tptr+6) == (BGP_OSPF_RTYPE_EXT ||BGP_OSPF_RTYPE_NSSA )) ? "E1" : "");
|
||||
((*(tptr+6) == BGP_OSPF_RTYPE_EXT) || (*(tptr+6) == BGP_OSPF_RTYPE_NSSA)) ? "E1" : "");
|
||||
break;
|
||||
case BGP_EXT_COM_L2INFO:
|
||||
printf(": %s Control Flags [0x%02x]:MTU %u",
|
||||
@ -1674,7 +1675,7 @@ bgp_open_print(const u_char *dat, int length)
|
||||
switch(cap_type) {
|
||||
case BGP_CAPCODE_MP:
|
||||
printf("\n\t\tAFI %s (%u), SAFI %s (%u)",
|
||||
tok2strbuf(bgp_afi_values, "Unknown",
|
||||
tok2strbuf(af_values, "Unknown",
|
||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2),
|
||||
tokbuf, sizeof(tokbuf)),
|
||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+2),
|
||||
@ -1691,7 +1692,7 @@ bgp_open_print(const u_char *dat, int length)
|
||||
cap_offset=4;
|
||||
while(tcap_len>=4) {
|
||||
printf("\n\t\t AFI %s (%u), SAFI %s (%u), Forwarding state preserved: %s",
|
||||
tok2strbuf(bgp_afi_values,"Unknown",
|
||||
tok2strbuf(af_values,"Unknown",
|
||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+cap_offset),
|
||||
tokbuf, sizeof(tokbuf)),
|
||||
EXTRACT_16BITS(opt+i+BGP_OPT_SIZE+cap_offset),
|
||||
@ -1905,7 +1906,7 @@ bgp_notification_print(const u_char *dat, int length)
|
||||
tptr = dat + BGP_NOTIFICATION_SIZE;
|
||||
TCHECK2(*tptr, 7);
|
||||
printf(", AFI %s (%u), SAFI %s (%u), Max Prefixes: %u",
|
||||
tok2strbuf(bgp_afi_values, "Unknown",
|
||||
tok2strbuf(af_values, "Unknown",
|
||||
EXTRACT_16BITS(tptr), tokbuf, sizeof(tokbuf)),
|
||||
EXTRACT_16BITS(tptr),
|
||||
tok2strbuf(bgp_safi_values, "Unknown", *(tptr+2),
|
||||
@ -1939,7 +1940,7 @@ bgp_route_refresh_print(const u_char *pptr, int len) {
|
||||
bgp_route_refresh_header = (const struct bgp_route_refresh *)pptr;
|
||||
|
||||
printf("\n\t AFI %s (%u), SAFI %s (%u)",
|
||||
tok2strbuf(bgp_afi_values,"Unknown",
|
||||
tok2strbuf(af_values,"Unknown",
|
||||
/* this stinks but the compiler pads the structure
|
||||
* weird */
|
||||
EXTRACT_16BITS(&bgp_route_refresh_header->afi),
|
||||
|
@ -24,7 +24,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-bootp.c,v 1.78.2.2 2005/05/06 04:19:39 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-bootp.c,v 1.78.2.9 2007/08/21 22:02:08 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -44,6 +44,7 @@ static const char rcsid[] _U_ =
|
||||
|
||||
static void rfc1048_print(const u_char *);
|
||||
static void cmu_print(const u_char *);
|
||||
static char *client_fqdn_flags(u_int flags);
|
||||
|
||||
static char tstr[] = " [|bootp]";
|
||||
|
||||
@ -79,7 +80,7 @@ bootp_print(register const u_char *cp, u_int length)
|
||||
printf(" from %s", etheraddr_string(bp->bp_chaddr));
|
||||
}
|
||||
|
||||
printf(", length: %u", length);
|
||||
printf(", length %u", length);
|
||||
|
||||
if (!vflag)
|
||||
return;
|
||||
@ -88,49 +89,49 @@ bootp_print(register const u_char *cp, u_int length)
|
||||
|
||||
/* The usual hardware address type is 1 (10Mb Ethernet) */
|
||||
if (bp->bp_htype != 1)
|
||||
printf(", htype-#%d", bp->bp_htype);
|
||||
printf(", htype %d", bp->bp_htype);
|
||||
|
||||
/* The usual length for 10Mb Ethernet address is 6 bytes */
|
||||
if (bp->bp_htype != 1 || bp->bp_hlen != 6)
|
||||
printf(", hlen:%d", bp->bp_hlen);
|
||||
printf(", hlen %d", bp->bp_hlen);
|
||||
|
||||
/* Only print interesting fields */
|
||||
if (bp->bp_hops)
|
||||
printf(", hops:%d", bp->bp_hops);
|
||||
printf(", hops %d", bp->bp_hops);
|
||||
if (bp->bp_xid)
|
||||
printf(", xid:0x%x", EXTRACT_32BITS(&bp->bp_xid));
|
||||
printf(", xid 0x%x", EXTRACT_32BITS(&bp->bp_xid));
|
||||
if (bp->bp_secs)
|
||||
printf(", secs:%d", EXTRACT_16BITS(&bp->bp_secs));
|
||||
printf(", secs %d", EXTRACT_16BITS(&bp->bp_secs));
|
||||
|
||||
printf(", flags: [%s]",
|
||||
bittok2str(bootp_flag_values, "none", EXTRACT_16BITS(&bp->bp_flags)));
|
||||
if (vflag>1)
|
||||
printf( " (0x%04x)", EXTRACT_16BITS(&bp->bp_flags));
|
||||
printf(", Flags [%s]",
|
||||
bittok2str(bootp_flag_values, "none", EXTRACT_16BITS(&bp->bp_flags)));
|
||||
if (vflag > 1)
|
||||
printf(" (0x%04x)", EXTRACT_16BITS(&bp->bp_flags));
|
||||
|
||||
/* Client's ip address */
|
||||
TCHECK(bp->bp_ciaddr);
|
||||
if (bp->bp_ciaddr.s_addr)
|
||||
printf("\n\t Client IP: %s", ipaddr_string(&bp->bp_ciaddr));
|
||||
printf("\n\t Client-IP %s", ipaddr_string(&bp->bp_ciaddr));
|
||||
|
||||
/* 'your' ip address (bootp client) */
|
||||
TCHECK(bp->bp_yiaddr);
|
||||
if (bp->bp_yiaddr.s_addr)
|
||||
printf("\n\t Your IP: %s", ipaddr_string(&bp->bp_yiaddr));
|
||||
printf("\n\t Your-IP %s", ipaddr_string(&bp->bp_yiaddr));
|
||||
|
||||
/* Server's ip address */
|
||||
TCHECK(bp->bp_siaddr);
|
||||
if (bp->bp_siaddr.s_addr)
|
||||
printf("\n\t Server IP: %s", ipaddr_string(&bp->bp_siaddr));
|
||||
printf("\n\t Server-IP %s", ipaddr_string(&bp->bp_siaddr));
|
||||
|
||||
/* Gateway's ip address */
|
||||
TCHECK(bp->bp_giaddr);
|
||||
if (bp->bp_giaddr.s_addr)
|
||||
printf("\n\t Gateway IP: %s", ipaddr_string(&bp->bp_giaddr));
|
||||
printf("\n\t Gateway-IP %s", ipaddr_string(&bp->bp_giaddr));
|
||||
|
||||
/* Client's Ethernet address */
|
||||
if (bp->bp_htype == 1 && bp->bp_hlen == 6) {
|
||||
TCHECK2(bp->bp_chaddr[0], 6);
|
||||
printf("\n\t Client Ethernet Address: %s", etheraddr_string(bp->bp_chaddr));
|
||||
printf("\n\t Client-Ethernet-Address %s", etheraddr_string(bp->bp_chaddr));
|
||||
}
|
||||
|
||||
TCHECK2(bp->bp_sname[0], 1); /* check first char only */
|
||||
@ -191,23 +192,23 @@ trunc:
|
||||
static struct tok tag2str[] = {
|
||||
/* RFC1048 tags */
|
||||
{ TAG_PAD, " PAD" },
|
||||
{ TAG_SUBNET_MASK, "iSM" }, /* subnet mask (RFC950) */
|
||||
{ TAG_TIME_OFFSET, "LTZ" }, /* seconds from UTC */
|
||||
{ TAG_GATEWAY, "iDG" }, /* default gateway */
|
||||
{ TAG_TIME_SERVER, "iTS" }, /* time servers (RFC868) */
|
||||
{ TAG_NAME_SERVER, "iIEN" }, /* IEN name servers (IEN116) */
|
||||
{ TAG_DOMAIN_SERVER, "iNS" }, /* domain name (RFC1035) */
|
||||
{ TAG_SUBNET_MASK, "iSubnet-Mask" }, /* subnet mask (RFC950) */
|
||||
{ TAG_TIME_OFFSET, "LTime-Zone" }, /* seconds from UTC */
|
||||
{ TAG_GATEWAY, "iDefault-Gateway" }, /* default gateway */
|
||||
{ TAG_TIME_SERVER, "iTime-Server" }, /* time servers (RFC868) */
|
||||
{ TAG_NAME_SERVER, "iIEN-Name-Server" }, /* IEN name servers (IEN116) */
|
||||
{ TAG_DOMAIN_SERVER, "iDomain-Name-Server" }, /* domain name (RFC1035) */
|
||||
{ TAG_LOG_SERVER, "iLOG" }, /* MIT log servers */
|
||||
{ TAG_COOKIE_SERVER, "iCS" }, /* cookie servers (RFC865) */
|
||||
{ TAG_LPR_SERVER, "iLPR" }, /* lpr server (RFC1179) */
|
||||
{ TAG_LPR_SERVER, "iLPR-Server" }, /* lpr server (RFC1179) */
|
||||
{ TAG_IMPRESS_SERVER, "iIM" }, /* impress servers (Imagen) */
|
||||
{ TAG_RLP_SERVER, "iRL" }, /* resource location (RFC887) */
|
||||
{ TAG_HOSTNAME, "aHN" }, /* ascii hostname */
|
||||
{ TAG_HOSTNAME, "aHostname" }, /* ascii hostname */
|
||||
{ TAG_BOOTSIZE, "sBS" }, /* 512 byte blocks */
|
||||
{ TAG_END, " END" },
|
||||
/* RFC1497 tags */
|
||||
{ TAG_DUMPPATH, "aDP" },
|
||||
{ TAG_DOMAINNAME, "aDN" },
|
||||
{ TAG_DOMAINNAME, "aDomain-Name" },
|
||||
{ TAG_SWAP_SERVER, "iSS" },
|
||||
{ TAG_ROOTPATH, "aRP" },
|
||||
{ TAG_EXTPATH, "aEP" },
|
||||
@ -217,16 +218,16 @@ static struct tok tag2str[] = {
|
||||
{ TAG_PFILTERS, "pPF" },
|
||||
{ TAG_REASS_SIZE, "sRSZ" },
|
||||
{ TAG_DEF_TTL, "bTTL" },
|
||||
{ TAG_MTU_TIMEOUT, "lMA" },
|
||||
{ TAG_MTU_TABLE, "sMT" },
|
||||
{ TAG_MTU_TIMEOUT, "lMTU-Timeout" },
|
||||
{ TAG_MTU_TABLE, "sMTU-Table" },
|
||||
{ TAG_INT_MTU, "sMTU" },
|
||||
{ TAG_LOCAL_SUBNETS, "BLSN" },
|
||||
{ TAG_BROAD_ADDR, "iBR" },
|
||||
{ TAG_DO_MASK_DISC, "BMD" },
|
||||
{ TAG_SUPPLY_MASK, "BMS" },
|
||||
{ TAG_DO_RDISC, "BRD" },
|
||||
{ TAG_DO_RDISC, "BRouter-Discovery" },
|
||||
{ TAG_RTR_SOL_ADDR, "iRSA" },
|
||||
{ TAG_STATIC_ROUTE, "pSR" },
|
||||
{ TAG_STATIC_ROUTE, "pStatic-Route" },
|
||||
{ TAG_USE_TRAILERS, "BUT" },
|
||||
{ TAG_ARP_TIMEOUT, "lAT" },
|
||||
{ TAG_ETH_ENCAP, "BIE" },
|
||||
@ -236,11 +237,11 @@ static struct tok tag2str[] = {
|
||||
{ TAG_NIS_DOMAIN, "aYD" },
|
||||
{ TAG_NIS_SERVERS, "iYS" },
|
||||
{ TAG_NTP_SERVERS, "iNTP" },
|
||||
{ TAG_VENDOR_OPTS, "bVO" },
|
||||
{ TAG_NETBIOS_NS, "iWNS" },
|
||||
{ TAG_VENDOR_OPTS, "bVendor-Option" },
|
||||
{ TAG_NETBIOS_NS, "iNetbios-Name-Server" },
|
||||
{ TAG_NETBIOS_DDS, "iWDD" },
|
||||
{ TAG_NETBIOS_NODE, "$WNT" },
|
||||
{ TAG_NETBIOS_SCOPE, "aWSC" },
|
||||
{ TAG_NETBIOS_NODE, "$Netbios-Node" },
|
||||
{ TAG_NETBIOS_SCOPE, "aNetbios-Scope" },
|
||||
{ TAG_XWIN_FS, "iXFS" },
|
||||
{ TAG_XWIN_DM, "iXDM" },
|
||||
{ TAG_NIS_P_DOMAIN, "sN+D" },
|
||||
@ -254,20 +255,20 @@ static struct tok tag2str[] = {
|
||||
{ TAG_IRC_SERVER, "iIRC" },
|
||||
{ TAG_STREETTALK_SRVR, "iSTS" },
|
||||
{ TAG_STREETTALK_STDA, "iSTDA" },
|
||||
{ TAG_REQUESTED_IP, "iRQ" },
|
||||
{ TAG_IP_LEASE, "lLT" },
|
||||
{ TAG_REQUESTED_IP, "iRequested-IP" },
|
||||
{ TAG_IP_LEASE, "lLease-Time" },
|
||||
{ TAG_OPT_OVERLOAD, "$OO" },
|
||||
{ TAG_TFTP_SERVER, "aTFTP" },
|
||||
{ TAG_BOOTFILENAME, "aBF" },
|
||||
{ TAG_DHCP_MESSAGE, " DHCP" },
|
||||
{ TAG_SERVER_ID, "iSID" },
|
||||
{ TAG_PARM_REQUEST, "bPR" },
|
||||
{ TAG_DHCP_MESSAGE, " DHCP-Message" },
|
||||
{ TAG_SERVER_ID, "iServer-ID" },
|
||||
{ TAG_PARM_REQUEST, "bParameter-Request" },
|
||||
{ TAG_MESSAGE, "aMSG" },
|
||||
{ TAG_MAX_MSG_SIZE, "sMSZ" },
|
||||
{ TAG_RENEWAL_TIME, "lRN" },
|
||||
{ TAG_REBIND_TIME, "lRB" },
|
||||
{ TAG_VENDOR_CLASS, "aVC" },
|
||||
{ TAG_CLIENT_ID, "$CID" },
|
||||
{ TAG_VENDOR_CLASS, "aVendor-Class" },
|
||||
{ TAG_CLIENT_ID, "$Client-ID" },
|
||||
/* RFC 2485 */
|
||||
{ TAG_OPEN_GROUP_UAP, "aUAP" },
|
||||
/* RFC 2563 */
|
||||
@ -279,11 +280,14 @@ static struct tok tag2str[] = {
|
||||
{ TAG_NS_SEARCH, "sNSSEARCH" }, /* XXX 's' */
|
||||
/* RFC 3011 */
|
||||
{ TAG_IP4_SUBNET_SELECT, "iSUBNET" },
|
||||
/* RFC 3442 */
|
||||
{ TAG_CLASSLESS_STATIC_RT, "$Classless-Static-Route" },
|
||||
{ TAG_CLASSLESS_STA_RT_MS, "$Classless-Static-Route-Microsoft" },
|
||||
/* http://www.iana.org/assignments/bootp-dhcp-extensions/index.htm */
|
||||
{ TAG_USER_CLASS, "aCLASS" },
|
||||
{ TAG_SLP_NAMING_AUTH, "aSLP-NA" },
|
||||
{ TAG_CLIENT_FQDN, "$FQDN" },
|
||||
{ TAG_AGENT_CIRCUIT, "bACKT" },
|
||||
{ TAG_AGENT_CIRCUIT, "$Agent-Information" },
|
||||
{ TAG_AGENT_REMOTE, "bARMT" },
|
||||
{ TAG_AGENT_MASK, "bAMSK" },
|
||||
{ TAG_TZ_STRING, "aTZSTR" },
|
||||
@ -338,29 +342,49 @@ static struct tok arp2str[] = {
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
static struct tok dhcp_msg_values[] = {
|
||||
{ DHCPDISCOVER, "Discover" },
|
||||
{ DHCPOFFER, "Offer" },
|
||||
{ DHCPREQUEST, "Request" },
|
||||
{ DHCPDECLINE, "Decline" },
|
||||
{ DHCPACK, "ACK" },
|
||||
{ DHCPNAK, "NACK" },
|
||||
{ DHCPRELEASE, "Release" },
|
||||
{ DHCPINFORM, "Inform" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
#define AGENT_SUBOPTION_CIRCUIT_ID 1
|
||||
static struct tok agent_suboption_values[] = {
|
||||
{ AGENT_SUBOPTION_CIRCUIT_ID, "Circuit-ID" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
rfc1048_print(register const u_char *bp)
|
||||
{
|
||||
register u_int16_t tag;
|
||||
register u_int len, size;
|
||||
register u_int len;
|
||||
register const char *cp;
|
||||
register char c;
|
||||
int first;
|
||||
int first, idx;
|
||||
u_int32_t ul;
|
||||
u_int16_t us;
|
||||
u_int8_t uc;
|
||||
u_int8_t uc, subopt, suboptlen;
|
||||
|
||||
printf("\n\t Vendor-rfc1048:");
|
||||
printf("\n\t Vendor-rfc1048 Extensions");
|
||||
|
||||
/* Step over magic cookie */
|
||||
printf("\n\t Magic Cookie 0x%08x", EXTRACT_32BITS(bp));
|
||||
bp += sizeof(int32_t);
|
||||
|
||||
/* Loop while we there is a tag left in the buffer */
|
||||
while (bp + 1 < snapend) {
|
||||
while (TTEST2(*bp, 1)) {
|
||||
tag = *bp++;
|
||||
if (tag == TAG_PAD)
|
||||
if (tag == TAG_PAD && vflag < 3)
|
||||
continue;
|
||||
if (tag == TAG_END)
|
||||
if (tag == TAG_END && vflag < 3)
|
||||
return;
|
||||
if (tag == TAG_EXTENDED_OPTION) {
|
||||
TCHECK2(*(bp + 1), 2);
|
||||
@ -373,47 +397,54 @@ rfc1048_print(register const u_char *bp)
|
||||
} else
|
||||
cp = tok2str(tag2str, "?T%u", tag);
|
||||
c = *cp++;
|
||||
printf("\n\t %s:", cp);
|
||||
|
||||
/* Get the length; check for truncation */
|
||||
if (bp + 1 >= snapend) {
|
||||
fputs(tstr, stdout);
|
||||
return;
|
||||
if (tag == TAG_PAD || tag == TAG_END)
|
||||
len = 0;
|
||||
else {
|
||||
/* Get the length; check for truncation */
|
||||
TCHECK2(*bp, 1);
|
||||
len = *bp++;
|
||||
}
|
||||
len = *bp++;
|
||||
if (bp + len >= snapend) {
|
||||
printf("[|bootp %u]", len);
|
||||
|
||||
printf("\n\t %s Option %u, length %u%s", cp, tag, len,
|
||||
len > 0 ? ": " : "");
|
||||
|
||||
if (tag == TAG_PAD && vflag > 2) {
|
||||
u_int ntag = 1;
|
||||
while (TTEST2(*bp, 1) && *bp == TAG_PAD) {
|
||||
bp++;
|
||||
ntag++;
|
||||
}
|
||||
if (ntag > 1)
|
||||
printf(", occurs %u", ntag);
|
||||
}
|
||||
|
||||
if (!TTEST2(*bp, len)) {
|
||||
printf("[|rfc1048 %u]", len);
|
||||
return;
|
||||
}
|
||||
|
||||
if (tag == TAG_DHCP_MESSAGE && len == 1) {
|
||||
uc = *bp++;
|
||||
switch (uc) {
|
||||
case DHCPDISCOVER: printf("DISCOVER"); break;
|
||||
case DHCPOFFER: printf("OFFER"); break;
|
||||
case DHCPREQUEST: printf("REQUEST"); break;
|
||||
case DHCPDECLINE: printf("DECLINE"); break;
|
||||
case DHCPACK: printf("ACK"); break;
|
||||
case DHCPNAK: printf("NACK"); break;
|
||||
case DHCPRELEASE: printf("RELEASE"); break;
|
||||
case DHCPINFORM: printf("INFORM"); break;
|
||||
default: printf("%u", uc); break;
|
||||
printf("%s", tok2str(dhcp_msg_values, "Unknown (%u)", uc));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tag == TAG_PARM_REQUEST) {
|
||||
idx = 0;
|
||||
while (len-- > 0) {
|
||||
uc = *bp++;
|
||||
cp = tok2str(tag2str, "?Option %u", uc);
|
||||
if (idx % 4 == 0)
|
||||
printf("\n\t ");
|
||||
else
|
||||
printf(", ");
|
||||
printf("%s", cp + 1);
|
||||
idx++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tag == TAG_PARM_REQUEST) {
|
||||
first = 1;
|
||||
while (len-- > 0) {
|
||||
uc = *bp++;
|
||||
cp = tok2str(tag2str, "?T%u", uc);
|
||||
if (!first)
|
||||
putchar('+');
|
||||
printf("%s", cp + 1);
|
||||
first = 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (tag == TAG_EXTENDED_REQUEST) {
|
||||
first = 1;
|
||||
while (len > 1) {
|
||||
@ -430,12 +461,11 @@ rfc1048_print(register const u_char *bp)
|
||||
}
|
||||
|
||||
/* Print data */
|
||||
size = len;
|
||||
if (c == '?') {
|
||||
/* Base default formats for unknown tags on data size */
|
||||
if (size & 1)
|
||||
if (len & 1)
|
||||
c = 'b';
|
||||
else if (size & 2)
|
||||
else if (len & 2)
|
||||
c = 's';
|
||||
else
|
||||
c = 'l';
|
||||
@ -446,20 +476,20 @@ rfc1048_print(register const u_char *bp)
|
||||
case 'a':
|
||||
/* ascii strings */
|
||||
putchar('"');
|
||||
if (fn_printn(bp, size, snapend)) {
|
||||
if (fn_printn(bp, len, snapend)) {
|
||||
putchar('"');
|
||||
goto trunc;
|
||||
}
|
||||
putchar('"');
|
||||
bp += size;
|
||||
size = 0;
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
case 'l':
|
||||
case 'L':
|
||||
/* ip addresses/32-bit words */
|
||||
while (size >= sizeof(ul)) {
|
||||
while (len >= sizeof(ul)) {
|
||||
if (!first)
|
||||
putchar(',');
|
||||
ul = EXTRACT_32BITS(bp);
|
||||
@ -471,14 +501,14 @@ rfc1048_print(register const u_char *bp)
|
||||
else
|
||||
printf("%u", ul);
|
||||
bp += sizeof(ul);
|
||||
size -= sizeof(ul);
|
||||
len -= sizeof(ul);
|
||||
first = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
/* IP address pairs */
|
||||
while (size >= 2*sizeof(ul)) {
|
||||
while (len >= 2*sizeof(ul)) {
|
||||
if (!first)
|
||||
putchar(',');
|
||||
memcpy((char *)&ul, (const char *)bp, sizeof(ul));
|
||||
@ -487,27 +517,27 @@ rfc1048_print(register const u_char *bp)
|
||||
memcpy((char *)&ul, (const char *)bp, sizeof(ul));
|
||||
printf("%s)", ipaddr_string(&ul));
|
||||
bp += sizeof(ul);
|
||||
size -= 2*sizeof(ul);
|
||||
len -= 2*sizeof(ul);
|
||||
first = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 's':
|
||||
/* shorts */
|
||||
while (size >= sizeof(us)) {
|
||||
while (len >= sizeof(us)) {
|
||||
if (!first)
|
||||
putchar(',');
|
||||
us = EXTRACT_16BITS(bp);
|
||||
printf("%u", us);
|
||||
bp += sizeof(us);
|
||||
size -= sizeof(us);
|
||||
len -= sizeof(us);
|
||||
first = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'B':
|
||||
/* boolean */
|
||||
while (size > 0) {
|
||||
while (len > 0) {
|
||||
if (!first)
|
||||
putchar(',');
|
||||
switch (*bp) {
|
||||
@ -522,7 +552,7 @@ rfc1048_print(register const u_char *bp)
|
||||
break;
|
||||
}
|
||||
++bp;
|
||||
--size;
|
||||
--len;
|
||||
first = 0;
|
||||
}
|
||||
break;
|
||||
@ -531,7 +561,7 @@ rfc1048_print(register const u_char *bp)
|
||||
case 'x':
|
||||
default:
|
||||
/* Bytes */
|
||||
while (size > 0) {
|
||||
while (len > 0) {
|
||||
if (!first)
|
||||
putchar(c == 'x' ? ':' : '.');
|
||||
if (c == 'x')
|
||||
@ -539,7 +569,7 @@ rfc1048_print(register const u_char *bp)
|
||||
else
|
||||
printf("%u", *bp);
|
||||
++bp;
|
||||
--size;
|
||||
--len;
|
||||
first = 0;
|
||||
}
|
||||
break;
|
||||
@ -549,78 +579,196 @@ rfc1048_print(register const u_char *bp)
|
||||
switch (tag) {
|
||||
|
||||
case TAG_NETBIOS_NODE:
|
||||
/* this option should be at least 1 byte long */
|
||||
if (len < 1) {
|
||||
printf("ERROR: option %u len %u < 1 bytes",
|
||||
TAG_NETBIOS_NODE, len);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
tag = *bp++;
|
||||
--size;
|
||||
--len;
|
||||
fputs(tok2str(nbo2str, NULL, tag), stdout);
|
||||
break;
|
||||
|
||||
case TAG_OPT_OVERLOAD:
|
||||
/* this option should be at least 1 byte long */
|
||||
if (len < 1) {
|
||||
printf("ERROR: option %u len %u < 1 bytes",
|
||||
TAG_OPT_OVERLOAD, len);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
tag = *bp++;
|
||||
--size;
|
||||
--len;
|
||||
fputs(tok2str(oo2str, NULL, tag), stdout);
|
||||
break;
|
||||
|
||||
case TAG_CLIENT_FQDN:
|
||||
/* option 81 should be at least 4 bytes long */
|
||||
if (len < 4) {
|
||||
printf("ERROR: options 81 len %u < 4 bytes", len);
|
||||
/* this option should be at least 3 bytes long */
|
||||
if (len < 3) {
|
||||
printf("ERROR: option %u len %u < 3 bytes",
|
||||
TAG_CLIENT_FQDN, len);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
if (*bp++)
|
||||
printf("[svrreg]");
|
||||
if (*bp)
|
||||
printf("%u/%u/", *bp, *(bp+1));
|
||||
printf("[%s] ", client_fqdn_flags(*bp));
|
||||
bp++;
|
||||
if (*bp || *(bp+1))
|
||||
printf("%u/%u ", *bp, *(bp+1));
|
||||
bp += 2;
|
||||
putchar('"');
|
||||
if (fn_printn(bp, size - 3, snapend)) {
|
||||
if (fn_printn(bp, len - 3, snapend)) {
|
||||
putchar('"');
|
||||
goto trunc;
|
||||
}
|
||||
putchar('"');
|
||||
bp += size - 3;
|
||||
size = 0;
|
||||
bp += len - 3;
|
||||
len = 0;
|
||||
break;
|
||||
|
||||
case TAG_CLIENT_ID:
|
||||
{ int type = *bp++;
|
||||
size--;
|
||||
{ int type;
|
||||
|
||||
/* this option should be at least 1 byte long */
|
||||
if (len < 1) {
|
||||
printf("ERROR: option %u len %u < 1 bytes",
|
||||
TAG_CLIENT_ID, len);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
type = *bp++;
|
||||
len--;
|
||||
if (type == 0) {
|
||||
putchar('"');
|
||||
if (fn_printn(bp, size, snapend)) {
|
||||
if (fn_printn(bp, len, snapend)) {
|
||||
putchar('"');
|
||||
goto trunc;
|
||||
}
|
||||
putchar('"');
|
||||
bp += size;
|
||||
size = 0;
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
} else {
|
||||
printf("[%s]", tok2str(arp2str, "type-%d", type));
|
||||
}
|
||||
while (size > 0) {
|
||||
if (!first)
|
||||
putchar(':');
|
||||
printf("%02x", *bp);
|
||||
++bp;
|
||||
--size;
|
||||
first = 0;
|
||||
printf("%s ", tok2str(arp2str, "hardware-type %u,", type));
|
||||
while (len > 0) {
|
||||
if (!first)
|
||||
putchar(':');
|
||||
printf("%02x", *bp);
|
||||
++bp;
|
||||
--len;
|
||||
first = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case TAG_AGENT_CIRCUIT:
|
||||
while (len >= 2) {
|
||||
subopt = *bp++;
|
||||
suboptlen = *bp++;
|
||||
len -= 2;
|
||||
if (suboptlen > len) {
|
||||
printf("\n\t %s SubOption %u, length %u: length goes past end of option",
|
||||
tok2str(agent_suboption_values, "Unknown", subopt),
|
||||
subopt,
|
||||
suboptlen);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
printf("\n\t %s SubOption %u, length %u: ",
|
||||
tok2str(agent_suboption_values, "Unknown", subopt),
|
||||
subopt,
|
||||
suboptlen);
|
||||
switch (subopt) {
|
||||
|
||||
case AGENT_SUBOPTION_CIRCUIT_ID:
|
||||
fn_printn(bp, suboptlen, NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
print_unknown_data(bp, "\n\t\t", suboptlen);
|
||||
}
|
||||
|
||||
len -= suboptlen;
|
||||
bp += suboptlen;
|
||||
}
|
||||
break;
|
||||
|
||||
case TAG_CLASSLESS_STATIC_RT:
|
||||
case TAG_CLASSLESS_STA_RT_MS:
|
||||
{
|
||||
u_int mask_width, significant_octets, i;
|
||||
|
||||
/* this option should be at least 5 bytes long */
|
||||
if (len < 5) {
|
||||
printf("ERROR: option %u len %u < 5 bytes",
|
||||
TAG_CLASSLESS_STATIC_RT, len);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
while (len > 0) {
|
||||
if (!first)
|
||||
putchar(',');
|
||||
mask_width = *bp++;
|
||||
len--;
|
||||
/* mask_width <= 32 */
|
||||
if (mask_width > 32) {
|
||||
printf("[ERROR: Mask width (%d) > 32]", mask_width);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
significant_octets = (mask_width + 7) / 8;
|
||||
/* significant octets + router(4) */
|
||||
if (len < significant_octets + 4) {
|
||||
printf("[ERROR: Remaining length (%u) < %u bytes]", len, significant_octets + 4);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
putchar('(');
|
||||
if (mask_width == 0)
|
||||
printf("default");
|
||||
else {
|
||||
for (i = 0; i < significant_octets ; i++) {
|
||||
if (i > 0)
|
||||
putchar('.');
|
||||
printf("%d", *bp++);
|
||||
}
|
||||
for (i = significant_octets ; i < 4 ; i++)
|
||||
printf(".0");
|
||||
printf("/%d", mask_width);
|
||||
}
|
||||
memcpy((char *)&ul, (const char *)bp, sizeof(ul));
|
||||
printf(":%s)", ipaddr_string(&ul));
|
||||
bp += sizeof(ul);
|
||||
len -= (significant_octets + 4);
|
||||
first = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("[unknown special tag %u, size %u]",
|
||||
tag, size);
|
||||
bp += size;
|
||||
size = 0;
|
||||
tag, len);
|
||||
bp += len;
|
||||
len = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* Data left over? */
|
||||
if (size) {
|
||||
printf("[len %u]", len);
|
||||
bp += size;
|
||||
if (len) {
|
||||
printf("\n\t trailing data length %u", len);
|
||||
bp += len;
|
||||
}
|
||||
}
|
||||
return;
|
||||
@ -658,3 +806,22 @@ trunc:
|
||||
fputs(tstr, stdout);
|
||||
#undef PRINTCMUADDR
|
||||
}
|
||||
|
||||
static char *
|
||||
client_fqdn_flags(u_int flags)
|
||||
{
|
||||
static char buf[8+1];
|
||||
int i = 0;
|
||||
|
||||
if (flags & CLIENT_FQDN_FLAGS_S)
|
||||
buf[i++] = 'S';
|
||||
if (flags & CLIENT_FQDN_FLAGS_O)
|
||||
buf[i++] = 'O';
|
||||
if (flags & CLIENT_FQDN_FLAGS_E)
|
||||
buf[i++] = 'E';
|
||||
if (flags & CLIENT_FQDN_FLAGS_N)
|
||||
buf[i++] = 'N';
|
||||
buf[i] = '\0';
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-chdlc.c,v 1.32.2.8 2005/08/23 10:29:42 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-chdlc.c,v 1.32.2.11 2005/11/29 08:57:10 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -42,6 +42,13 @@ static const char rcsid[] _U_ =
|
||||
|
||||
static void chdlc_slarp_print(const u_char *, u_int);
|
||||
|
||||
const struct tok chdlc_cast_values[] = {
|
||||
{ CHDLC_UNICAST, "unicast" },
|
||||
{ CHDLC_BCAST, "bcast" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/* Standard CHDLC printer */
|
||||
u_int
|
||||
chdlc_if_print(const struct pcap_pkthdr *h, register const u_char *p)
|
||||
@ -59,58 +66,52 @@ chdlc_if_print(const struct pcap_pkthdr *h, register const u_char *p)
|
||||
u_int
|
||||
chdlc_print(register const u_char *p, u_int length) {
|
||||
u_int proto;
|
||||
const struct ip *ip;
|
||||
|
||||
proto = EXTRACT_16BITS(&p[2]);
|
||||
if (eflag) {
|
||||
switch (p[0]) {
|
||||
case CHDLC_UNICAST:
|
||||
printf("unicast ");
|
||||
break;
|
||||
case CHDLC_BCAST:
|
||||
printf("bcast ");
|
||||
break;
|
||||
default:
|
||||
printf("0x%02x ", p[0]);
|
||||
break;
|
||||
}
|
||||
printf("%d %04x: ", length, proto);
|
||||
printf("%s, ethertype %s (0x%04x), length %u: ",
|
||||
tok2str(chdlc_cast_values, "0x%02x", p[0]),
|
||||
tok2str(ethertype_values, "Unknown", proto),
|
||||
proto,
|
||||
length);
|
||||
}
|
||||
|
||||
length -= CHDLC_HDRLEN;
|
||||
ip = (const struct ip *)(p + CHDLC_HDRLEN);
|
||||
p += CHDLC_HDRLEN;
|
||||
|
||||
switch (proto) {
|
||||
case ETHERTYPE_IP:
|
||||
ip_print(gndo, (const u_char *)ip, length);
|
||||
ip_print(gndo, p, length);
|
||||
break;
|
||||
#ifdef INET6
|
||||
case ETHERTYPE_IPV6:
|
||||
ip6_print((const u_char *)ip, length);
|
||||
ip6_print(p, length);
|
||||
break;
|
||||
#endif
|
||||
case CHDLC_TYPE_SLARP:
|
||||
chdlc_slarp_print((const u_char *)ip, length);
|
||||
chdlc_slarp_print(p, length);
|
||||
break;
|
||||
#if 0
|
||||
case CHDLC_TYPE_CDP:
|
||||
chdlc_cdp_print((const u_char *)ip, length);
|
||||
chdlc_cdp_print(p, length);
|
||||
break;
|
||||
#endif
|
||||
case ETHERTYPE_MPLS:
|
||||
case ETHERTYPE_MPLS_MULTI:
|
||||
mpls_print((const u_char *)(ip), length);
|
||||
mpls_print(p, length);
|
||||
break;
|
||||
case ETHERTYPE_ISO:
|
||||
/* is the fudge byte set ? lets verify by spotting ISO headers */
|
||||
if (*(p+CHDLC_HDRLEN+1) == 0x81 ||
|
||||
*(p+CHDLC_HDRLEN+1) == 0x82 ||
|
||||
*(p+CHDLC_HDRLEN+1) == 0x83)
|
||||
isoclns_print(p+CHDLC_HDRLEN+1, length-1, length-1);
|
||||
if (*(p+1) == 0x81 ||
|
||||
*(p+1) == 0x82 ||
|
||||
*(p+1) == 0x83)
|
||||
isoclns_print(p+1, length-1, length-1);
|
||||
else
|
||||
isoclns_print(p+CHDLC_HDRLEN, length, length);
|
||||
isoclns_print(p, length, length);
|
||||
break;
|
||||
default:
|
||||
printf("unknown CHDLC protocol (0x%04x)", proto);
|
||||
if (!eflag)
|
||||
printf("unknown CHDLC protocol (0x%04x)", proto);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-dccp.c,v 1.1.2.2 2005/09/20 06:25:45 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-dccp.c,v 1.1.2.6 2006/02/19 05:08:44 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -146,7 +146,7 @@ static u_int64_t dccp_seqno(const struct dccp_hdr *dh)
|
||||
u_int64_t seqno = EXTRACT_24BITS(&seq_high) & 0xFFFFFF;
|
||||
|
||||
if (DCCPH_X(dh) != 0) {
|
||||
const struct dccp_hdr_ext *dhx = (void *)dh + sizeof(*dh);
|
||||
const struct dccp_hdr_ext *dhx = (void *)(dh + 1);
|
||||
u_int32_t seq_low = dhx->dccph_seq_low;
|
||||
seqno &= 0x00FFFF; /* clear reserved field */
|
||||
seqno = (seqno << 32) + EXTRACT_32BITS(&seq_low);
|
||||
@ -155,25 +155,36 @@ static u_int64_t dccp_seqno(const struct dccp_hdr *dh)
|
||||
return seqno;
|
||||
}
|
||||
|
||||
static u_int64_t dccp_ack_no(const struct dccp_hdr *dh,
|
||||
const struct dccp_hdr_ack_bits *dh_ack)
|
||||
static inline unsigned int dccp_basic_hdr_len(const struct dccp_hdr *dh)
|
||||
{
|
||||
u_int32_t ack_high = DCCPH_ACK(dh_ack);
|
||||
u_int64_t ackno = EXTRACT_24BITS(&ack_high) & 0xFFFFFF;
|
||||
return sizeof(*dh) + (DCCPH_X(dh) ? sizeof(struct dccp_hdr_ext) : 0);
|
||||
}
|
||||
|
||||
static void dccp_print_ack_no(const u_char *bp)
|
||||
{
|
||||
const struct dccp_hdr *dh = (const struct dccp_hdr *)bp;
|
||||
const struct dccp_hdr_ack_bits *dh_ack =
|
||||
(struct dccp_hdr_ack_bits *)(bp + dccp_basic_hdr_len(dh));
|
||||
u_int32_t ack_high;
|
||||
u_int64_t ackno;
|
||||
|
||||
TCHECK2(*dh_ack,4);
|
||||
ack_high = DCCPH_ACK(dh_ack);
|
||||
ackno = EXTRACT_24BITS(&ack_high) & 0xFFFFFF;
|
||||
|
||||
if (DCCPH_X(dh) != 0) {
|
||||
u_int32_t ack_low = dh_ack->dccph_ack_nr_low;
|
||||
|
||||
u_int32_t ack_low;
|
||||
|
||||
TCHECK2(*dh_ack,8);
|
||||
ack_low = dh_ack->dccph_ack_nr_low;
|
||||
|
||||
ackno &= 0x00FFFF; /* clear reserved field */
|
||||
ackno = (ackno << 32) + EXTRACT_32BITS(&ack_low);
|
||||
}
|
||||
|
||||
return ackno;
|
||||
}
|
||||
|
||||
static inline unsigned int dccp_basic_hdr_len(const struct dccp_hdr *dh)
|
||||
{
|
||||
return sizeof(*dh) + (DCCPH_X(dh) ? sizeof(struct dccp_hdr_ext) : 0);
|
||||
(void)printf("(ack=%" PRIu64 ") ", ackno);
|
||||
trunc:
|
||||
return;
|
||||
}
|
||||
|
||||
static inline unsigned int dccp_packet_hdr_len(const u_int8_t type)
|
||||
@ -301,7 +312,8 @@ void dccp_print(const u_char *bp, const u_char *data2, u_int len)
|
||||
struct dccp_hdr_request *dhr =
|
||||
(struct dccp_hdr_request *)(bp + dccp_basic_hdr_len(dh));
|
||||
TCHECK(*dhr);
|
||||
(void)printf("request (service=%d) ", dhr->dccph_req_service);
|
||||
(void)printf("request (service=%d) ",
|
||||
EXTRACT_32BITS(&dhr->dccph_req_service));
|
||||
extlen += 4;
|
||||
break;
|
||||
}
|
||||
@ -309,9 +321,8 @@ void dccp_print(const u_char *bp, const u_char *data2, u_int len)
|
||||
struct dccp_hdr_response *dhr =
|
||||
(struct dccp_hdr_response *)(bp + dccp_basic_hdr_len(dh));
|
||||
TCHECK(*dhr);
|
||||
(void)printf("response (service=%d, ack=%" PRIu64 ") ",
|
||||
dhr->dccph_resp_service,
|
||||
dccp_ack_no(dh,&(dhr->dccph_resp_ack)));
|
||||
(void)printf("response (service=%d) ",
|
||||
EXTRACT_32BITS(&dhr->dccph_resp_service));
|
||||
extlen += 12;
|
||||
break;
|
||||
}
|
||||
@ -319,20 +330,12 @@ void dccp_print(const u_char *bp, const u_char *data2, u_int len)
|
||||
(void)printf("data ");
|
||||
break;
|
||||
case DCCP_PKT_ACK: {
|
||||
struct dccp_hdr_ack_bits *dha =
|
||||
(struct dccp_hdr_ack_bits *)(bp + dccp_basic_hdr_len(dh));
|
||||
TCHECK(*dha);
|
||||
(void)printf("ack (ack=%" PRIu64 ") ",
|
||||
dccp_ack_no(dh,dha));
|
||||
(void)printf("ack ");
|
||||
extlen += 8;
|
||||
break;
|
||||
}
|
||||
case DCCP_PKT_DATAACK: {
|
||||
struct dccp_hdr_ack_bits *dha =
|
||||
(struct dccp_hdr_ack_bits *)(bp + dccp_basic_hdr_len(dh));
|
||||
TCHECK(*dha);
|
||||
(void)printf("dataack (ack=%" PRIu64 ") ",
|
||||
dccp_ack_no(dh,dha));
|
||||
(void)printf("dataack ");
|
||||
extlen += 8;
|
||||
break;
|
||||
}
|
||||
@ -366,6 +369,10 @@ void dccp_print(const u_char *bp, const u_char *data2, u_int len)
|
||||
break;
|
||||
}
|
||||
|
||||
if ((DCCPH_TYPE(dh) != DCCP_PKT_DATA) &&
|
||||
(DCCPH_TYPE(dh) != DCCP_PKT_REQUEST))
|
||||
dccp_print_ack_no(bp);
|
||||
|
||||
if (vflag < 2)
|
||||
return;
|
||||
|
||||
|
@ -32,13 +32,15 @@
|
||||
* RFC3319,
|
||||
* RFC3633,
|
||||
* RFC3646,
|
||||
* draft-ietf-dhc-dhcpv6-opt-timeconfig-03.txt,
|
||||
* draft-ietf-dhc-lifetime-00.txt,
|
||||
* RFC3898,
|
||||
* RFC4075,
|
||||
* RFC4242,
|
||||
* RFC4280,
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-dhcp6.c,v 1.35 2004/07/06 22:16:03 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-dhcp6.c,v 1.35.2.1 2006/10/25 22:04:36 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -104,8 +106,8 @@ struct dhcp6_relay {
|
||||
#define DH6OPT_CLIENTID 1
|
||||
#define DH6OPT_SERVERID 2
|
||||
#define DH6OPT_IA_NA 3
|
||||
#define DH6OPT_IA_TMP 4
|
||||
#define DH6OPT_IADDR 5
|
||||
#define DH6OPT_IA_TA 4
|
||||
#define DH6OPT_IA_ADDR 5
|
||||
#define DH6OPT_ORO 6
|
||||
#define DH6OPT_PREFERENCE 7
|
||||
# define DH6OPT_PREF_MAX 255
|
||||
@ -141,21 +143,18 @@ struct dhcp6_relay {
|
||||
#define DH6OPT_DNSNAME 24
|
||||
#define DH6OPT_IA_PD 25
|
||||
#define DH6OPT_IA_PD_PREFIX 26
|
||||
|
||||
/*
|
||||
* The old prefix delegation option used in the service specification document
|
||||
* (200206xx version) by NTT Communications.
|
||||
*/
|
||||
#define DH6OPT_PREFIX_DELEGATION 30
|
||||
#define DH6OPT_PREFIX_INFORMATION 31
|
||||
#define DH6OPT_PREFIX_REQUEST 32
|
||||
|
||||
/*
|
||||
* The following one is an unassigned number.
|
||||
* We temporarily use values as of KAME snap 20040322.
|
||||
*/
|
||||
#define DH6OPT_NTP_SERVERS 35
|
||||
#define DH6OPT_LIFETIME 36
|
||||
#define DH6OPT_NIS_SERVERS 27
|
||||
#define DH6OPT_NISP_SERVERS 28
|
||||
#define DH6OPT_NIS_NAME 29
|
||||
#define DH6OPT_NISP_NAME 30
|
||||
#define DH6OPT_NTP_SERVERS 31
|
||||
#define DH6OPT_LIFETIME 32
|
||||
#define DH6OPT_BCMCS_SERVER_D 33
|
||||
#define DH6OPT_BCMCS_SERVER_A 34
|
||||
#define DH6OPT_GEOCONF_CIVIC 36
|
||||
#define DH6OPT_REMOTE_ID 37
|
||||
#define DH6OPT_SUBSCRIBER_ID 38
|
||||
#define DH6OPT_CLIENT_FQDN 39
|
||||
|
||||
struct dhcp6opt {
|
||||
u_int16_t dh6opt_type;
|
||||
@ -171,6 +170,14 @@ struct dhcp6_ia {
|
||||
u_int32_t dh6opt_ia_t2;
|
||||
};
|
||||
|
||||
struct dhcp6_ia_addr {
|
||||
u_int16_t dh6opt_ia_addr_type;
|
||||
u_int16_t dh6opt_ia_addr_len;
|
||||
struct in6_addr dh6opt_ia_addr_addr;
|
||||
u_int32_t dh6opt_ia_addr_pltime;
|
||||
u_int32_t dh6opt_ia_addr_vltime;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
struct dhcp6_ia_prefix {
|
||||
u_int16_t dh6opt_ia_prefix_type;
|
||||
u_int16_t dh6opt_ia_prefix_len;
|
||||
@ -205,6 +212,10 @@ dhcp6opt_name(int type)
|
||||
return "server ID";
|
||||
case DH6OPT_IA_NA:
|
||||
return "IA_NA";
|
||||
case DH6OPT_IA_TA:
|
||||
return "IA_TA";
|
||||
case DH6OPT_IA_ADDR:
|
||||
return "IA_ADDR";
|
||||
case DH6OPT_ORO:
|
||||
return "option request";
|
||||
case DH6OPT_PREFERENCE:
|
||||
@ -241,10 +252,6 @@ dhcp6opt_name(int type)
|
||||
return "DNS";
|
||||
case DH6OPT_DNSNAME:
|
||||
return "DNS name";
|
||||
case DH6OPT_PREFIX_DELEGATION:
|
||||
return "prefix delegation";
|
||||
case DH6OPT_PREFIX_INFORMATION:
|
||||
return "prefix information";
|
||||
case DH6OPT_IA_PD:
|
||||
return "IA_PD";
|
||||
case DH6OPT_IA_PD_PREFIX:
|
||||
@ -253,6 +260,26 @@ dhcp6opt_name(int type)
|
||||
return "NTP Server";
|
||||
case DH6OPT_LIFETIME:
|
||||
return "lifetime";
|
||||
case DH6OPT_NIS_SERVERS:
|
||||
return "NIS server";
|
||||
case DH6OPT_NISP_SERVERS:
|
||||
return "NIS+ server";
|
||||
case DH6OPT_NIS_NAME:
|
||||
return "NIS domain name";
|
||||
case DH6OPT_NISP_NAME:
|
||||
return "NIS+ domain name";
|
||||
case DH6OPT_BCMCS_SERVER_D:
|
||||
return "BCMCS domain name";
|
||||
case DH6OPT_BCMCS_SERVER_A:
|
||||
return "BCMCS server";
|
||||
case DH6OPT_GEOCONF_CIVIC:
|
||||
return "Geoconf Civic";
|
||||
case DH6OPT_REMOTE_ID:
|
||||
return "Remote ID";
|
||||
case DH6OPT_SUBSCRIBER_ID:
|
||||
return "Subscriber ID";
|
||||
case DH6OPT_CLIENT_FQDN:
|
||||
return "Client FQDN";
|
||||
default:
|
||||
snprintf(genstr, sizeof(genstr), "opt_%d", type);
|
||||
return(genstr);
|
||||
@ -298,9 +325,9 @@ dhcp6opt_print(const u_char *cp, const u_char *ep)
|
||||
size_t optlen;
|
||||
u_int16_t val16;
|
||||
u_int32_t val32;
|
||||
struct in6_addr addr6;
|
||||
struct dhcp6_ia ia;
|
||||
struct dhcp6_ia_prefix ia_prefix;
|
||||
struct dhcp6_ia_addr ia_addr;
|
||||
struct dhcp6_auth authopt;
|
||||
u_int authinfolen, authrealmlen;
|
||||
|
||||
@ -369,6 +396,29 @@ dhcp6opt_print(const u_char *cp, const u_char *ep)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case DH6OPT_IA_ADDR:
|
||||
if (optlen < sizeof(ia_addr) - 4) {
|
||||
printf(" ?)");
|
||||
break;
|
||||
}
|
||||
memcpy(&ia_addr, (u_char *)dh6o, sizeof(ia_addr));
|
||||
printf(" %s",
|
||||
ip6addr_string(&ia_addr.dh6opt_ia_addr_addr));
|
||||
ia_addr.dh6opt_ia_addr_pltime =
|
||||
ntohl(ia_addr.dh6opt_ia_addr_pltime);
|
||||
ia_addr.dh6opt_ia_addr_vltime =
|
||||
ntohl(ia_addr.dh6opt_ia_addr_vltime);
|
||||
printf(" pltime:%lu vltime:%lu",
|
||||
(unsigned long)ia_addr.dh6opt_ia_addr_pltime,
|
||||
(unsigned long)ia_addr.dh6opt_ia_addr_vltime);
|
||||
if (optlen > sizeof(ia_addr) - 4) {
|
||||
/* there are sub-options */
|
||||
dhcp6opt_print((u_char *)dh6o +
|
||||
sizeof(ia_addr),
|
||||
(u_char *)(dh6o + 1) + optlen);
|
||||
}
|
||||
printf(")");
|
||||
break;
|
||||
case DH6OPT_ORO:
|
||||
if (optlen % 2) {
|
||||
printf(" ?)");
|
||||
@ -526,6 +576,9 @@ dhcp6opt_print(const u_char *cp, const u_char *ep)
|
||||
case DH6OPT_SIP_SERVER_A:
|
||||
case DH6OPT_DNS:
|
||||
case DH6OPT_NTP_SERVERS:
|
||||
case DH6OPT_NIS_SERVERS:
|
||||
case DH6OPT_NISP_SERVERS:
|
||||
case DH6OPT_BCMCS_SERVER_A:
|
||||
if (optlen % 16) {
|
||||
printf(" ?)");
|
||||
break;
|
||||
@ -535,25 +588,6 @@ dhcp6opt_print(const u_char *cp, const u_char *ep)
|
||||
printf(" %s", ip6addr_string(&tp[i]));
|
||||
printf(")");
|
||||
break;
|
||||
case DH6OPT_PREFIX_DELEGATION:
|
||||
dhcp6opt_print((u_char *)(dh6o + 1),
|
||||
(u_char *)(dh6o + 1) + optlen);
|
||||
printf(")");
|
||||
break;
|
||||
case DH6OPT_PREFIX_INFORMATION:
|
||||
if (optlen % 21)
|
||||
printf(" ?)");
|
||||
memcpy(&addr6, (u_char *)(dh6o + 1) + 5,
|
||||
sizeof(addr6));
|
||||
printf(" %s/%d", ip6addr_string(&addr6),
|
||||
(int)*((u_char *)(dh6o + 1) + 4));
|
||||
memcpy(&val32, dh6o + 1, sizeof(val32));
|
||||
val32 = ntohl(val32);
|
||||
if (val32 == DHCP6_DURATITION_INFINITE)
|
||||
printf(" lease-duration: infinite)");
|
||||
else
|
||||
printf(" lease-duration: %u)", val32);
|
||||
break;
|
||||
case DH6OPT_STATUS_CODE:
|
||||
if (optlen < 2) {
|
||||
printf(" ?)");
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.89.2.1 2005/04/20 20:59:00 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-domain.c,v 1.89.2.8 2007/02/13 19:19:27 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -280,9 +280,20 @@ struct tok ns_type2str[] = {
|
||||
{ T_SRV, "SRV" }, /* RFC 2782 */
|
||||
{ T_ATMA, "ATMA" }, /* ATM Forum */
|
||||
{ T_NAPTR, "NAPTR" }, /* RFC 2168, RFC 2915 */
|
||||
{ T_KX, "KX" }, /* RFC 2230 */
|
||||
{ T_CERT, "CERT" }, /* RFC 2538 */
|
||||
{ T_A6, "A6" }, /* RFC 2874 */
|
||||
{ T_DNAME, "DNAME" }, /* RFC 2672 */
|
||||
{ T_SINK, "SINK" },
|
||||
{ T_OPT, "OPT" }, /* RFC 2671 */
|
||||
{ T_APL, "APL" }, /* RFC 3123 */
|
||||
{ T_DS, "DS" }, /* RFC 4034 */
|
||||
{ T_SSHFP, "SSHFP" }, /* RFC 4255 */
|
||||
{ T_IPSECKEY, "IPSECKEY" }, /* RFC 4025 */
|
||||
{ T_RRSIG, "RRSIG" }, /* RFC 4034 */
|
||||
{ T_NSEC, "NSEC" }, /* RFC 4034 */
|
||||
{ T_DNSKEY, "DNSKEY" }, /* RFC 4034 */
|
||||
{ T_SPF, "SPF" }, /* RFC-schlitt-spf-classic-02.txt */
|
||||
{ T_UINFO, "UINFO" },
|
||||
{ T_UID, "UID" },
|
||||
{ T_GID, "GID" },
|
||||
@ -311,23 +322,32 @@ static const u_char *
|
||||
ns_qprint(register const u_char *cp, register const u_char *bp, int is_mdns)
|
||||
{
|
||||
register const u_char *np = cp;
|
||||
register u_int i;
|
||||
register u_int i, class;
|
||||
|
||||
cp = ns_nskip(cp);
|
||||
|
||||
if (cp == NULL || !TTEST2(*cp, 4))
|
||||
return(NULL);
|
||||
|
||||
/* print the qtype and qclass (if it's not IN) */
|
||||
/* print the qtype */
|
||||
i = EXTRACT_16BITS(cp);
|
||||
cp += 2;
|
||||
printf(" %s", tok2str(ns_type2str, "Type%d", i));
|
||||
/* print the qclass (if it's not IN) */
|
||||
i = EXTRACT_16BITS(cp);
|
||||
cp += 2;
|
||||
if (is_mdns && i == (C_IN|C_CACHE_FLUSH))
|
||||
printf(" (Cache flush)");
|
||||
else if (i != C_IN)
|
||||
printf(" %s", tok2str(ns_class2str, "(Class %d)", i));
|
||||
if (is_mdns)
|
||||
class = (i & ~C_QU);
|
||||
else
|
||||
class = i;
|
||||
if (class != C_IN)
|
||||
printf(" %s", tok2str(ns_class2str, "(Class %d)", class));
|
||||
if (is_mdns) {
|
||||
if (i & C_QU)
|
||||
printf(" (QU)");
|
||||
else
|
||||
printf(" (QM)");
|
||||
}
|
||||
|
||||
fputs("? ", stdout);
|
||||
cp = ns_nprint(np, bp);
|
||||
@ -338,7 +358,7 @@ ns_qprint(register const u_char *cp, register const u_char *bp, int is_mdns)
|
||||
static const u_char *
|
||||
ns_rprint(register const u_char *cp, register const u_char *bp, int is_mdns)
|
||||
{
|
||||
register u_int class;
|
||||
register u_int i, class, opt_flags = 0;
|
||||
register u_short typ, len;
|
||||
register const u_char *rp;
|
||||
|
||||
@ -352,18 +372,30 @@ ns_rprint(register const u_char *cp, register const u_char *bp, int is_mdns)
|
||||
if (cp == NULL || !TTEST2(*cp, 10))
|
||||
return (snapend);
|
||||
|
||||
/* print the type/qtype and class (if it's not IN) */
|
||||
/* print the type/qtype */
|
||||
typ = EXTRACT_16BITS(cp);
|
||||
cp += 2;
|
||||
class = EXTRACT_16BITS(cp);
|
||||
/* print the class (if it's not IN and the type isn't OPT) */
|
||||
i = EXTRACT_16BITS(cp);
|
||||
cp += 2;
|
||||
if (is_mdns && class == (C_IN|C_CACHE_FLUSH))
|
||||
printf(" (Cache flush)");
|
||||
else if (class != C_IN && typ != T_OPT)
|
||||
if (is_mdns)
|
||||
class = (i & ~C_CACHE_FLUSH);
|
||||
else
|
||||
class = i;
|
||||
if (class != C_IN && typ != T_OPT)
|
||||
printf(" %s", tok2str(ns_class2str, "(Class %d)", class));
|
||||
if (is_mdns) {
|
||||
if (i & C_CACHE_FLUSH)
|
||||
printf(" (Cache flush)");
|
||||
}
|
||||
|
||||
/* ignore ttl */
|
||||
cp += 4;
|
||||
cp += 2;
|
||||
/* if T_OPT, save opt_flags */
|
||||
if (typ == T_OPT)
|
||||
opt_flags = EXTRACT_16BITS(cp);
|
||||
/* ignore rest of ttl */
|
||||
cp += 2;
|
||||
|
||||
len = EXTRACT_16BITS(cp);
|
||||
cp += 2;
|
||||
@ -480,6 +512,8 @@ ns_rprint(register const u_char *cp, register const u_char *bp, int is_mdns)
|
||||
|
||||
case T_OPT:
|
||||
printf(" UDPsize=%u", class);
|
||||
if (opt_flags & 0x8000)
|
||||
printf(" OK");
|
||||
break;
|
||||
|
||||
case T_UNSPECA: /* One long string */
|
||||
@ -542,7 +576,7 @@ ns_print(register const u_char *bp, u_int length, int is_mdns)
|
||||
|
||||
if (DNS_QR(np)) {
|
||||
/* this is a response */
|
||||
printf(" %d%s%s%s%s%s%s",
|
||||
printf("%d%s%s%s%s%s%s",
|
||||
EXTRACT_16BITS(&np->id),
|
||||
ns_ops[DNS_OPCODE(np)],
|
||||
ns_resp[DNS_RCODE(np)],
|
||||
@ -610,7 +644,7 @@ ns_print(register const u_char *bp, u_int length, int is_mdns)
|
||||
}
|
||||
else {
|
||||
/* this is a request */
|
||||
printf(" %d%s%s%s", EXTRACT_16BITS(&np->id), ns_ops[DNS_OPCODE(np)],
|
||||
printf("%d%s%s%s", EXTRACT_16BITS(&np->id), ns_ops[DNS_OPCODE(np)],
|
||||
DNS_RD(np) ? "+" : "",
|
||||
DNS_CD(np) ? "%" : "");
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.95.2.4 2005/07/10 14:47:57 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.95.2.6 2006/02/20 18:15:03 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -49,7 +49,7 @@ const struct tok ethertype_values[] = {
|
||||
{ ETHERTYPE_VMAN, "VMAN" },
|
||||
{ ETHERTYPE_PUP, "PUP" },
|
||||
{ ETHERTYPE_ARP, "ARP"},
|
||||
{ ETHERTYPE_REVARP , "Reverse ARP"},
|
||||
{ ETHERTYPE_REVARP, "Reverse ARP"},
|
||||
{ ETHERTYPE_NS, "NS" },
|
||||
{ ETHERTYPE_SPRITE, "Sprite" },
|
||||
{ ETHERTYPE_TRAIL, "Trail" },
|
||||
@ -130,7 +130,6 @@ ether_print(const u_char *p, u_int length, u_int caplen)
|
||||
/*
|
||||
* Is it (gag) an 802.3 encapsulation?
|
||||
*/
|
||||
extracted_ether_type = 0;
|
||||
if (ether_type <= ETHERMTU) {
|
||||
/* Try to print the LLC-layer header & higher layers */
|
||||
if (llc_print(p, length, caplen, ESRC(ep), EDST(ep),
|
||||
@ -245,11 +244,13 @@ ether_encap_print(u_short ether_type, const u_char *p,
|
||||
|
||||
if (llc_print(p, length, caplen, p - 18, p - 12,
|
||||
extracted_ether_type) == 0) {
|
||||
ether_hdr_print(p - 18, length + 4);
|
||||
ether_hdr_print(p - 18, length + 4);
|
||||
|
||||
if (!suppress_default_print) {
|
||||
default_print(p - 18, caplen + 4);
|
||||
}
|
||||
}
|
||||
|
||||
if (!suppress_default_print)
|
||||
default_print(p - 18, caplen + 4);
|
||||
|
||||
return (1);
|
||||
|
||||
@ -271,10 +272,11 @@ ether_encap_print(u_short ether_type, const u_char *p,
|
||||
if (llc_print(p, length, caplen, p - 16, p - 10,
|
||||
extracted_ether_type) == 0) {
|
||||
ether_hdr_print(p - 16, length + 2);
|
||||
}
|
||||
|
||||
if (!suppress_default_print)
|
||||
default_print(p - 16, caplen + 2);
|
||||
if (!suppress_default_print) {
|
||||
default_print(p - 16, caplen + 2);
|
||||
}
|
||||
}
|
||||
|
||||
return (1);
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-fddi.c,v 1.64.2.1 2005/07/07 01:24:35 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-fddi.c,v 1.64.2.2 2005/11/13 12:12:59 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -266,7 +266,6 @@ fddi_print(const u_char *p, u_int length, u_int caplen)
|
||||
caplen -= FDDI_HDRLEN;
|
||||
|
||||
/* Frame Control field determines interpretation of packet */
|
||||
extracted_ethertype = 0;
|
||||
if ((fddip->fddi_fc & FDDIFC_CLFF) == FDDIFC_LLC_ASYNC) {
|
||||
/* Try to print the LLC-layer header & higher layers */
|
||||
if (llc_print(p, length, caplen, ESRC(&ehdr), EDST(&ehdr),
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#)$Header: /tcpdump/master/tcpdump/print-fr.c,v 1.32.2.12 2005/08/23 03:15:51 guy Exp $ (LBL)";
|
||||
"@(#)$Header: /tcpdump/master/tcpdump/print-fr.c,v 1.32.2.15 2006/02/01 14:39:56 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -113,6 +113,8 @@ static int parse_q922_addr(const u_char *p, u_int *dlci, u_int *sdlcore,
|
||||
|
||||
flags[0] = p[0] & 0x02; /* populate the first flag fields */
|
||||
flags[1] = p[1] & 0x0c;
|
||||
flags[2] = 0; /* clear the rest of the flags */
|
||||
flags[3] = 0;
|
||||
|
||||
if (p[1] & FR_EA_BIT)
|
||||
return 0; /* 2-byte Q.922 address */
|
||||
@ -304,6 +306,10 @@ fr_print(register const u_char *p, u_int length)
|
||||
frf15_print(p, length);
|
||||
break;
|
||||
|
||||
case NLPID_PPP:
|
||||
ppp_print(p, length);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (!eflag)
|
||||
fr_hdr_print(length + hdr_len, addr_len,
|
||||
@ -320,6 +326,24 @@ fr_print(register const u_char *p, u_int length)
|
||||
|
||||
}
|
||||
|
||||
u_int
|
||||
mfr_if_print(const struct pcap_pkthdr *h, register const u_char *p)
|
||||
{
|
||||
register u_int length = h->len;
|
||||
register u_int caplen = h->caplen;
|
||||
|
||||
TCHECK2(*p, 2); /* minimum frame header length */
|
||||
|
||||
if ((length = mfr_print(p, length)) == 0)
|
||||
return (0);
|
||||
else
|
||||
return length;
|
||||
trunc:
|
||||
printf("[|mfr]");
|
||||
return caplen;
|
||||
}
|
||||
|
||||
|
||||
#define MFR_CTRL_MSG_ADD_LINK 1
|
||||
#define MFR_CTRL_MSG_ADD_LINK_ACK 2
|
||||
#define MFR_CTRL_MSG_ADD_LINK_REJ 3
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-icmp.c,v 1.81.2.2 2005/07/01 16:13:37 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-icmp.c,v 1.81.2.6 2007/09/13 17:40:18 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -64,20 +64,12 @@ struct icmp {
|
||||
u_int16_t icd_seq;
|
||||
} ih_idseq;
|
||||
u_int32_t ih_void;
|
||||
|
||||
/* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */
|
||||
struct ih_pmtu {
|
||||
u_int16_t ipm_void;
|
||||
u_int16_t ipm_nextmtu;
|
||||
} ih_pmtu;
|
||||
} icmp_hun;
|
||||
#define icmp_pptr icmp_hun.ih_pptr
|
||||
#define icmp_gwaddr icmp_hun.ih_gwaddr
|
||||
#define icmp_id icmp_hun.ih_idseq.icd_id
|
||||
#define icmp_seq icmp_hun.ih_idseq.icd_seq
|
||||
#define icmp_void icmp_hun.ih_void
|
||||
#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void
|
||||
#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu
|
||||
union {
|
||||
struct id_ts {
|
||||
u_int32_t its_otime;
|
||||
@ -88,12 +80,6 @@ struct icmp {
|
||||
struct ip idi_ip;
|
||||
/* options and then 64 bits of data */
|
||||
} id_ip;
|
||||
struct mpls_ext {
|
||||
u_int8_t legacy_header[128]; /* extension header starts 128 bytes after ICMP header */
|
||||
u_int8_t version_res[2];
|
||||
u_int8_t checksum[2];
|
||||
u_int8_t data[1];
|
||||
} mpls_ext;
|
||||
u_int32_t id_mask;
|
||||
u_int8_t id_data[1];
|
||||
} icmp_dun;
|
||||
@ -103,9 +89,6 @@ struct icmp {
|
||||
#define icmp_ip icmp_dun.id_ip.idi_ip
|
||||
#define icmp_mask icmp_dun.id_mask
|
||||
#define icmp_data icmp_dun.id_data
|
||||
#define icmp_mpls_ext_version icmp_dun.mpls_ext.version_res
|
||||
#define icmp_mpls_ext_checksum icmp_dun.mpls_ext.checksum
|
||||
#define icmp_mpls_ext_data icmp_dun.mpls_ext.data
|
||||
};
|
||||
|
||||
#define ICMP_MPLS_EXT_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
|
||||
@ -120,7 +103,7 @@ struct icmp {
|
||||
* ip header length.
|
||||
*/
|
||||
#define ICMP_MINLEN 8 /* abs minimum */
|
||||
#define ICMP_EXTD_MINLEN (156 - sizeof (struct ip)) /* draft-bonica-icmp-mpls-02 */
|
||||
#define ICMP_EXTD_MINLEN (156 - sizeof (struct ip)) /* draft-bonica-internet-icmp-08 */
|
||||
#define ICMP_TSLEN (8 + 3 * sizeof (u_int32_t)) /* timestamp */
|
||||
#define ICMP_MASKLEN 12 /* address mask */
|
||||
#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */
|
||||
@ -175,7 +158,9 @@ struct icmp {
|
||||
(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
|
||||
(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
|
||||
#define ICMP_MPLS_EXT_TYPE(type) \
|
||||
((type) == ICMP_UNREACH || (type) == ICMP_TIMXCEED)
|
||||
((type) == ICMP_UNREACH || \
|
||||
(type) == ICMP_TIMXCEED || \
|
||||
(type) == ICMP_PARAMPROB)
|
||||
/* rfc1700 */
|
||||
#ifndef ICMP_UNREACH_NET_UNKNOWN
|
||||
#define ICMP_UNREACH_NET_UNKNOWN 6 /* destination net unknown */
|
||||
@ -278,7 +263,45 @@ struct id_rdiscovery {
|
||||
u_int32_t ird_pref;
|
||||
};
|
||||
|
||||
/* draft-bonica-icmp-mpls-02 */
|
||||
/*
|
||||
* draft-bonica-internet-icmp-08
|
||||
*
|
||||
* The Destination Unreachable, Time Exceeded
|
||||
* and Parameter Problem messages are slighly changed as per
|
||||
* the above draft. A new Length field gets added to give
|
||||
* the caller an idea about the length of the piggypacked
|
||||
* IP packet before the MPLS extension header starts.
|
||||
*
|
||||
* The Length field represents length of the padded "original datagram"
|
||||
* field measured in 32-bit words.
|
||||
*
|
||||
* 0 1 2 3
|
||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Type | Code | Checksum |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | unused | Length | unused |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | Internet Header + leading octets of original datagram |
|
||||
* | |
|
||||
* | // |
|
||||
* | |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
*/
|
||||
|
||||
struct icmp_ext_t {
|
||||
u_int8_t icmp_type;
|
||||
u_int8_t icmp_code;
|
||||
u_int8_t icmp_checksum[2];
|
||||
u_int8_t icmp_reserved;
|
||||
u_int8_t icmp_length;
|
||||
u_int8_t icmp_reserved2[2];
|
||||
u_int8_t icmp_ext_legacy_header[128]; /* extension header starts 128 bytes after ICMP header */
|
||||
u_int8_t icmp_ext_version_res[2];
|
||||
u_int8_t icmp_ext_checksum[2];
|
||||
u_int8_t icmp_ext_data[1];
|
||||
};
|
||||
|
||||
struct icmp_mpls_ext_object_header_t {
|
||||
u_int8_t length[2];
|
||||
u_int8_t class_num;
|
||||
@ -314,17 +337,20 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
|
||||
{
|
||||
char *cp;
|
||||
const struct icmp *dp;
|
||||
const struct icmp_ext_t *ext_dp;
|
||||
const struct ip *ip;
|
||||
const char *str, *fmt;
|
||||
const struct ip *oip;
|
||||
const struct udphdr *ouh;
|
||||
const u_int8_t *obj_tptr;
|
||||
u_int32_t raw_label;
|
||||
const u_char *snapend_save;
|
||||
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];
|
||||
|
||||
dp = (struct icmp *)bp;
|
||||
ext_dp = (struct icmp_ext_t *)bp;
|
||||
ip = (struct ip *)bp2;
|
||||
str = buf;
|
||||
|
||||
@ -546,35 +572,61 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* print the remnants of the IP packet.
|
||||
* save the snaplength as this may get overidden in the IP printer.
|
||||
*/
|
||||
if (vflag >= 1 && !ICMP_INFOTYPE(dp->icmp_type)) {
|
||||
bp += 8;
|
||||
(void)printf("\n\t");
|
||||
ip = (struct ip *)bp;
|
||||
snaplen = snapend - bp;
|
||||
snapend_save = snapend;
|
||||
ip_print(gndo, bp, EXTRACT_16BITS(&ip->ip_len));
|
||||
snapend = snapend_save;
|
||||
}
|
||||
|
||||
/*
|
||||
* Attempt to decode the MPLS extensions only for some ICMP types.
|
||||
*/
|
||||
if (vflag >= 1 && plen > ICMP_EXTD_MINLEN && ICMP_MPLS_EXT_TYPE(dp->icmp_type)) {
|
||||
|
||||
TCHECK(*(dp->icmp_mpls_ext_version));
|
||||
printf("\n\tMPLS extension v%u",ICMP_MPLS_EXT_EXTRACT_VERSION(*(dp->icmp_mpls_ext_version)));
|
||||
TCHECK(*ext_dp);
|
||||
|
||||
/*
|
||||
* Check first if the mpls extension header shows a non-zero length.
|
||||
* If the length field is not set then silently verify the checksum
|
||||
* 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;
|
||||
}
|
||||
|
||||
printf("\n\tMPLS extension v%u",
|
||||
ICMP_MPLS_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res)));
|
||||
|
||||
/*
|
||||
* Sanity checking of the header.
|
||||
*/
|
||||
if (ICMP_MPLS_EXT_EXTRACT_VERSION(*(dp->icmp_mpls_ext_version)) != ICMP_MPLS_EXT_VERSION) {
|
||||
if (ICMP_MPLS_EXT_EXTRACT_VERSION(*(ext_dp->icmp_ext_version_res)) !=
|
||||
ICMP_MPLS_EXT_VERSION) {
|
||||
printf(" packet not supported");
|
||||
return;
|
||||
}
|
||||
|
||||
hlen = plen - ICMP_EXTD_MINLEN;
|
||||
TCHECK2(*(dp->icmp_mpls_ext_checksum), 2);
|
||||
printf(", checksum 0x%04x (unverified), length %u", /* FIXME */
|
||||
EXTRACT_16BITS(dp->icmp_mpls_ext_checksum),
|
||||
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" : "",
|
||||
hlen);
|
||||
|
||||
hlen -= 4; /* subtract common header size */
|
||||
obj_tptr = (u_int8_t *)dp->icmp_mpls_ext_data;
|
||||
obj_tptr = (u_int8_t *)ext_dp->icmp_ext_data;
|
||||
|
||||
while (hlen > sizeof(struct icmp_mpls_ext_object_header_t)) {
|
||||
|
||||
@ -592,8 +644,12 @@ icmp_print(const u_char *bp, u_int plen, const u_char *bp2, int fragmented)
|
||||
obj_tlen);
|
||||
|
||||
hlen-=sizeof(struct icmp_mpls_ext_object_header_t); /* length field includes tlv header */
|
||||
if (obj_tlen < sizeof(struct icmp_mpls_ext_object_header_t))
|
||||
break;
|
||||
|
||||
/* infinite loop protection */
|
||||
if ((obj_class_num == 0) ||
|
||||
(obj_tlen < sizeof(struct icmp_mpls_ext_object_header_t))) {
|
||||
return;
|
||||
}
|
||||
obj_tlen-=sizeof(struct icmp_mpls_ext_object_header_t);
|
||||
|
||||
switch (obj_class_num) {
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.149.2.2 2005/09/20 06:05:38 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.149.2.9 2007/09/14 01:30:02 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -52,6 +52,7 @@ struct tok ip_option_values[] = {
|
||||
{ IPOPT_SSRR, "SSRR" },
|
||||
{ IPOPT_LSRR, "LSRR" },
|
||||
{ IPOPT_RA, "RA" },
|
||||
{ IPOPT_RFC1393, "traceroute" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
@ -75,9 +76,9 @@ ip_printroute(register const u_char *cp, u_int length)
|
||||
printf(" [bad ptr %u]", cp[2]);
|
||||
|
||||
for (len = 3; len < length; len += 4) {
|
||||
printf("%s", ipaddr_string(&cp[len]));
|
||||
printf(" %s", ipaddr_string(&cp[len]));
|
||||
if (ptr > len)
|
||||
printf (", ");
|
||||
printf(",");
|
||||
}
|
||||
}
|
||||
|
||||
@ -139,17 +140,17 @@ ip_printts(register const u_char *cp, u_int length)
|
||||
const char *type;
|
||||
|
||||
if (length < 4) {
|
||||
printf("[bad length %d]", length);
|
||||
printf("[bad length %u]", length);
|
||||
return;
|
||||
}
|
||||
printf(" TS{");
|
||||
hoplen = ((cp[3]&0xF) != IPOPT_TS_TSONLY) ? 8 : 4;
|
||||
if ((length - 4) & (hoplen-1))
|
||||
printf("[bad length %d]", length);
|
||||
printf("[bad length %u]", length);
|
||||
ptr = cp[2] - 1;
|
||||
len = 0;
|
||||
if (ptr < 4 || ((ptr - 4) & (hoplen-1)) || ptr > length + 1)
|
||||
printf("[bad ptr %d]", cp[2]);
|
||||
printf("[bad ptr %u]", cp[2]);
|
||||
switch (cp[3]&0xF) {
|
||||
case IPOPT_TS_TSONLY:
|
||||
printf("TSONLY");
|
||||
@ -199,29 +200,37 @@ static void
|
||||
ip_optprint(register const u_char *cp, u_int length)
|
||||
{
|
||||
register u_int option_len;
|
||||
const char *sep = "";
|
||||
|
||||
for (; length > 0; cp += option_len, length -= option_len) {
|
||||
u_int option_code;
|
||||
|
||||
printf("%s", sep);
|
||||
sep = ",";
|
||||
|
||||
TCHECK(*cp);
|
||||
option_code = *cp;
|
||||
|
||||
printf("%s",
|
||||
tok2str(ip_option_values,"unknown %u",option_code));
|
||||
|
||||
if (option_code == IPOPT_NOP ||
|
||||
option_code == IPOPT_EOL)
|
||||
option_len = 1;
|
||||
|
||||
else {
|
||||
TCHECK(cp[1]);
|
||||
option_len = cp[1];
|
||||
option_len = cp[1];
|
||||
if (option_len < 2) {
|
||||
printf(" [bad length %u]", option_len);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
printf("%s (%u) len %u",
|
||||
tok2str(ip_option_values,"unknown",option_code),
|
||||
option_code,
|
||||
option_len);
|
||||
|
||||
if (option_len < 2)
|
||||
return;
|
||||
if (option_len > length) {
|
||||
printf(" [bad length %u]", option_len);
|
||||
return;
|
||||
}
|
||||
|
||||
TCHECK2(*cp, option_len);
|
||||
|
||||
@ -236,13 +245,17 @@ ip_optprint(register const u_char *cp, u_int length)
|
||||
case IPOPT_RR: /* fall through */
|
||||
case IPOPT_SSRR:
|
||||
case IPOPT_LSRR:
|
||||
ip_printroute( cp, option_len);
|
||||
ip_printroute(cp, option_len);
|
||||
break;
|
||||
|
||||
case IPOPT_RA:
|
||||
if (option_len < 4) {
|
||||
printf(" [bad length %u]", option_len);
|
||||
break;
|
||||
}
|
||||
TCHECK(cp[3]);
|
||||
if (EXTRACT_16BITS(&cp[2]) != 0)
|
||||
printf("value %u", EXTRACT_16BITS(&cp[2]));
|
||||
printf(" value %u", EXTRACT_16BITS(&cp[2]));
|
||||
break;
|
||||
|
||||
case IPOPT_NOP: /* nothing to print - fall through */
|
||||
@ -343,12 +356,6 @@ in_cksum_shouldbe(u_int16_t sum, u_int16_t computed_sum)
|
||||
return shouldbe;
|
||||
}
|
||||
|
||||
#ifndef IP_MF
|
||||
#define IP_MF 0x2000
|
||||
#endif /* IP_MF */
|
||||
#ifndef IP_DF
|
||||
#define IP_DF 0x4000
|
||||
#endif /* IP_DF */
|
||||
#define IP_RES 0x8000
|
||||
|
||||
static struct tok ip_frag_values[] = {
|
||||
@ -419,19 +426,21 @@ again:
|
||||
break;
|
||||
|
||||
case IPPROTO_TCP:
|
||||
/* pass on the MF bit plus the offset to detect fragments */
|
||||
tcp_print(ipds->cp, ipds->len, (const u_char *)ipds->ip,
|
||||
(ipds->off &~ 0x6000));
|
||||
ipds->off & (IP_MF|IP_OFFMASK));
|
||||
break;
|
||||
|
||||
case IPPROTO_UDP:
|
||||
/* pass on the MF bit plus the offset to detect fragments */
|
||||
udp_print(ipds->cp, ipds->len, (const u_char *)ipds->ip,
|
||||
(ipds->off &~ 0x6000));
|
||||
ipds->off & (IP_MF|IP_OFFMASK));
|
||||
break;
|
||||
|
||||
case IPPROTO_ICMP:
|
||||
/* pass on the MF bit plus the offset to detect fragments */
|
||||
icmp_print(ipds->cp, ipds->len, (const u_char *)ipds->ip,
|
||||
(ipds->off & 0x3fff));
|
||||
ipds->off & (IP_MF|IP_OFFMASK));
|
||||
break;
|
||||
|
||||
case IPPROTO_PIGP:
|
||||
@ -627,7 +636,7 @@ ip_print(netdissect_options *ndo,
|
||||
}
|
||||
|
||||
if (ipds->ip->ip_ttl >= 1)
|
||||
(void)printf(", ttl %3u", ipds->ip->ip_ttl);
|
||||
(void)printf(", ttl %u", ipds->ip->ip_ttl);
|
||||
|
||||
/*
|
||||
* for the firewall guys, print id, offset.
|
||||
@ -635,19 +644,19 @@ ip_print(netdissect_options *ndo,
|
||||
* For unfragmented datagrams, note the don't fragment flag.
|
||||
*/
|
||||
|
||||
(void)printf(", id %u, offset %u, flags [%s], proto: %s (%u)",
|
||||
(void)printf(", id %u, offset %u, flags [%s], proto %s (%u)",
|
||||
EXTRACT_16BITS(&ipds->ip->ip_id),
|
||||
(ipds->off & 0x1fff) * 8,
|
||||
bittok2str(ip_frag_values, "none", ipds->off&0xe000 ),
|
||||
bittok2str(ip_frag_values, "none", ipds->off&0xe000),
|
||||
tok2str(ipproto_values,"unknown",ipds->ip->ip_p),
|
||||
ipds->ip->ip_p);
|
||||
|
||||
(void)printf(", length: %u", EXTRACT_16BITS(&ipds->ip->ip_len));
|
||||
(void)printf(", length %u", EXTRACT_16BITS(&ipds->ip->ip_len));
|
||||
|
||||
if ((hlen - sizeof(struct ip)) > 0) {
|
||||
printf(", options ( ");
|
||||
printf(", options (");
|
||||
ip_optprint((u_char *)(ipds->ip + 1), hlen - sizeof(struct ip));
|
||||
printf(" )");
|
||||
printf(")");
|
||||
}
|
||||
|
||||
if ((u_char *)ipds->ip + hlen <= snapend) {
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.47.2.3 2005/09/20 06:05:38 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.47.2.5 2007/09/21 07:07:52 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -95,7 +95,7 @@ ip6_print(register const u_char *bp, register u_int length)
|
||||
(void)printf("flowlabel 0x%05x, ", flow & 0x000fffff);
|
||||
#endif
|
||||
|
||||
(void)printf("hlim %u, next-header: %s (%u), length: %u) ",
|
||||
(void)printf("hlim %u, next-header %s (%u) payload length: %u) ",
|
||||
ip6->ip6_hlim,
|
||||
tok2str(ipproto_values,"unknown",ip6->ip6_nxt),
|
||||
ip6->ip6_nxt,
|
||||
@ -227,7 +227,7 @@ ip6_print(register const u_char *bp, register u_int length)
|
||||
return;
|
||||
|
||||
default:
|
||||
(void)printf("ip-proto-%d %d", ip6->ip6_nxt, len);
|
||||
(void)printf("ip-proto-%d %d", nh, len);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ipfc.c,v 1.7.2.1 2005/07/07 01:24:36 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ipfc.c,v 1.7.2.2 2005/11/13 12:12:59 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -101,8 +101,6 @@ ipfc_print(const u_char *p, u_int length, u_int caplen)
|
||||
p += IPFC_HDRLEN;
|
||||
caplen -= IPFC_HDRLEN;
|
||||
|
||||
/* Frame Control field determines interpretation of packet */
|
||||
extracted_ethertype = 0;
|
||||
/* Try to print the LLC-layer header & higher layers */
|
||||
if (llc_print(p, length, caplen, ESRC(&ehdr), EDST(&ehdr),
|
||||
&extracted_ethertype) == 0) {
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-isoclns.c,v 1.133.2.19 2005/09/20 10:15:22 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-isoclns.c,v 1.133.2.25 2007/03/02 09:20:27 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -477,7 +477,7 @@ static struct tok isis_lsp_istype_values[] = {
|
||||
{ ISIS_LSP_TYPE_UNUSED0, "Unused 0x0 (invalid)"},
|
||||
{ ISIS_LSP_TYPE_LEVEL_1, "L1 IS"},
|
||||
{ ISIS_LSP_TYPE_UNUSED2, "Unused 0x2 (invalid)"},
|
||||
{ ISIS_LSP_TYPE_LEVEL_2, "L1L2 IS"},
|
||||
{ ISIS_LSP_TYPE_LEVEL_2, "L2 IS"},
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
@ -1618,7 +1618,11 @@ static int
|
||||
isis_print_extd_ip_reach (const u_int8_t *tptr, const char *ident, u_int16_t afi) {
|
||||
|
||||
char ident_buffer[20];
|
||||
#ifdef INET6
|
||||
u_int8_t prefix[sizeof(struct in6_addr)]; /* shared copy buffer for IPv4 and IPv6 prefixes */
|
||||
#else
|
||||
u_int8_t prefix[sizeof(struct in_addr)]; /* shared copy buffer for IPv4 prefixes */
|
||||
#endif
|
||||
u_int metric, status_byte, bit_length, byte_length, sublen, processed, subtlvtype, subtlvlen;
|
||||
|
||||
if (!TTEST2(*tptr, 4))
|
||||
@ -1632,6 +1636,12 @@ isis_print_extd_ip_reach (const u_int8_t *tptr, const char *ident, u_int16_t afi
|
||||
return (0);
|
||||
status_byte=*(tptr++);
|
||||
bit_length = status_byte&0x3f;
|
||||
if (bit_length > 32) {
|
||||
printf("%sIPv4 prefix: bad bit length %u",
|
||||
ident,
|
||||
bit_length);
|
||||
return (0);
|
||||
}
|
||||
processed++;
|
||||
#ifdef INET6
|
||||
} else if (afi == IPV6) {
|
||||
@ -1639,6 +1649,12 @@ isis_print_extd_ip_reach (const u_int8_t *tptr, const char *ident, u_int16_t afi
|
||||
return (0);
|
||||
status_byte=*(tptr++);
|
||||
bit_length=*(tptr++);
|
||||
if (bit_length > 128) {
|
||||
printf("%sIPv6 prefix: bad bit length %u",
|
||||
ident,
|
||||
bit_length);
|
||||
return (0);
|
||||
}
|
||||
processed+=2;
|
||||
#endif
|
||||
} else
|
||||
@ -1648,7 +1664,7 @@ isis_print_extd_ip_reach (const u_int8_t *tptr, const char *ident, u_int16_t afi
|
||||
|
||||
if (!TTEST2(*tptr, byte_length))
|
||||
return (0);
|
||||
memset(prefix, 0, sizeof(struct in6_addr)); /* clear the copy buffer */
|
||||
memset(prefix, 0, sizeof prefix); /* clear the copy buffer */
|
||||
memcpy(prefix,tptr,byte_length); /* copy as much as is stored in the TLV */
|
||||
tptr+=byte_length;
|
||||
processed+=byte_length;
|
||||
@ -2094,7 +2110,7 @@ static int isis_print (const u_int8_t *p, u_int length)
|
||||
tlv_len);
|
||||
|
||||
if (tlv_len == 0) /* something is malformed */
|
||||
break;
|
||||
continue;
|
||||
|
||||
/* now check if we have a decoder otherwise do a hexdump at the end*/
|
||||
switch (tlv_type) {
|
||||
@ -2233,13 +2249,14 @@ static int isis_print (const u_int8_t *p, u_int length)
|
||||
break;
|
||||
|
||||
case ISIS_TLV_MT_IP_REACH:
|
||||
while (tmp>0) {
|
||||
mt_len = isis_print_mtid(tptr, "\n\t ");
|
||||
if (mt_len == 0) /* did something go wrong ? */
|
||||
goto trunctlv;
|
||||
tptr+=mt_len;
|
||||
tmp-=mt_len;
|
||||
mt_len = isis_print_mtid(tptr, "\n\t ");
|
||||
if (mt_len == 0) { /* did something go wrong ? */
|
||||
goto trunctlv;
|
||||
}
|
||||
tptr+=mt_len;
|
||||
tmp-=mt_len;
|
||||
|
||||
while (tmp>0) {
|
||||
ext_ip_len = isis_print_extd_ip_reach(tptr, "\n\t ", IPV4);
|
||||
if (ext_ip_len == 0) /* did something go wrong ? */
|
||||
goto trunctlv;
|
||||
@ -2260,13 +2277,14 @@ static int isis_print (const u_int8_t *p, u_int length)
|
||||
break;
|
||||
|
||||
case ISIS_TLV_MT_IP6_REACH:
|
||||
while (tmp>0) {
|
||||
mt_len = isis_print_mtid(tptr, "\n\t ");
|
||||
if (mt_len == 0) /* did something go wrong ? */
|
||||
goto trunctlv;
|
||||
tptr+=mt_len;
|
||||
tmp-=mt_len;
|
||||
mt_len = isis_print_mtid(tptr, "\n\t ");
|
||||
if (mt_len == 0) { /* did something go wrong ? */
|
||||
goto trunctlv;
|
||||
}
|
||||
tptr+=mt_len;
|
||||
tmp-=mt_len;
|
||||
|
||||
while (tmp>0) {
|
||||
ext_ip_len = isis_print_extd_ip_reach(tptr, "\n\t ", IPV6);
|
||||
if (ext_ip_len == 0) /* did something go wrong ? */
|
||||
goto trunctlv;
|
||||
@ -2516,7 +2534,7 @@ static int isis_print (const u_int8_t *p, u_int length)
|
||||
if (!TTEST2(*tptr, ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN))
|
||||
goto trunctlv;
|
||||
|
||||
printf(", Remaining holding time %us", EXTRACT_16BITS(tptr+1));
|
||||
printf(", Remaining holding time %us", EXTRACT_16BITS(tptr));
|
||||
tptr+=ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN;
|
||||
tmp-=ISIS_TLV_RESTART_SIGNALING_HOLDTIMELEN;
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-juniper.c,v 1.8.2.19 2005/08/23 10:29:42 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-juniper.c,v 1.8.2.22 2006/05/10 22:42:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -670,7 +670,6 @@ u_int
|
||||
juniper_atm2_print(const struct pcap_pkthdr *h, register const u_char *p)
|
||||
{
|
||||
u_int16_t extracted_ethertype;
|
||||
u_int32_t control_word;
|
||||
|
||||
struct juniper_l2info_t l2info;
|
||||
|
||||
@ -681,12 +680,6 @@ juniper_atm2_print(const struct pcap_pkthdr *h, register const u_char *p)
|
||||
p+=l2info.header_len;
|
||||
|
||||
if (l2info.cookie[7] & ATM2_PKT_TYPE_MASK) { /* OAM cell ? */
|
||||
control_word = EXTRACT_32BITS(p);
|
||||
if(control_word == 0 || control_word == 0x08000000) {
|
||||
l2info.header_len += 4;
|
||||
l2info.length -= 4;
|
||||
p += 4;
|
||||
}
|
||||
oam_print(p,l2info.length,ATM_OAM_NOHEC);
|
||||
return l2info.header_len;
|
||||
}
|
||||
@ -802,6 +795,9 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
|
||||
|
||||
struct juniper_cookie_table_t *lp = juniper_cookie_table;
|
||||
u_int idx, offset;
|
||||
#ifdef DLT_JUNIPER_ATM2
|
||||
u_int32_t control_word;
|
||||
#endif
|
||||
|
||||
l2info->header_len = 0;
|
||||
l2info->cookie_len = 0;
|
||||
@ -974,10 +970,21 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
|
||||
case DLT_JUNIPER_ATM2:
|
||||
TCHECK2(p[0],4);
|
||||
/* ATM cell relay control word present ? */
|
||||
if (l2info->cookie[7] & ATM2_PKT_TYPE_MASK && *p & 0x08) {
|
||||
l2info->header_len += 4;
|
||||
if (l2info->cookie[7] & ATM2_PKT_TYPE_MASK) {
|
||||
control_word = EXTRACT_32BITS(p);
|
||||
/* some control word heuristics */
|
||||
switch(control_word) {
|
||||
case 0: /* zero control word */
|
||||
case 0x08000000: /* < JUNOS 7.4 control-word */
|
||||
case 0x08380000: /* cntl word plus cell length (56) >= JUNOS 7.4*/
|
||||
l2info->header_len += 4;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (eflag)
|
||||
printf("control-word 0x%08x ",EXTRACT_32BITS(p));
|
||||
printf("control-word 0x%08x ", control_word);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
@ -985,6 +992,23 @@ juniper_parse_header (const u_char *p, const struct pcap_pkthdr *h, struct junip
|
||||
case DLT_JUNIPER_ATM1:
|
||||
break;
|
||||
#endif
|
||||
#ifdef DLT_JUNIPER_PPP
|
||||
case DLT_JUNIPER_PPP:
|
||||
break;
|
||||
#endif
|
||||
#ifdef DLT_JUNIPER_CHDLC
|
||||
case DLT_JUNIPER_CHDLC:
|
||||
break;
|
||||
#endif
|
||||
#ifdef DLT_JUNIPER_ETHER
|
||||
case DLT_JUNIPER_ETHER:
|
||||
break;
|
||||
#endif
|
||||
#ifdef DLT_JUNIPER_FRELAY
|
||||
case DLT_JUNIPER_FRELAY:
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
printf("Unknown Juniper DLT_ type %u: ", l2info->pictype);
|
||||
break;
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-l2tp.c,v 1.17.2.2 2005/04/20 21:50:16 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-l2tp.c,v 1.17.2.3 2006/06/23 02:07:27 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -40,14 +40,6 @@ static const char rcsid[] _U_ =
|
||||
|
||||
static char tstr[] = " [|l2tp]";
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#define L2TP_MSGTYPE_SCCRQ 1 /* Start-Control-Connection-Request */
|
||||
#define L2TP_MSGTYPE_SCCRP 2 /* Start-Control-Connection-Reply */
|
||||
#define L2TP_MSGTYPE_SCCCN 3 /* Start-Control-Connection-Connected */
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-lane.c,v 1.23.2.1 2005/07/07 01:24:37 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-lane.c,v 1.23.2.2 2005/11/13 12:12:59 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -134,7 +134,6 @@ lane_print(const u_char *p, u_int length, u_int caplen)
|
||||
/*
|
||||
* Is it (gag) an 802.3 encapsulation?
|
||||
*/
|
||||
extracted_ethertype = 0;
|
||||
if (ether_type <= ETHERMTU) {
|
||||
/* Try to print the LLC-layer header & higher layers */
|
||||
if (llc_print(p, length, caplen, ep->h_source, ep->h_dest,
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ldp.c,v 1.8.2.6 2005/07/11 20:24:34 hannes Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ldp.c,v 1.8.2.10 2007/02/26 13:31:33 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -33,6 +33,7 @@ static const char rcsid[] _U_ =
|
||||
#include "decode_prefix.h"
|
||||
#include "extract.h"
|
||||
#include "addrtoname.h"
|
||||
#include "af.h"
|
||||
|
||||
#include "l2vpn.h"
|
||||
|
||||
@ -116,7 +117,7 @@ static const struct tok ldp_msg_values[] = {
|
||||
{ LDP_MSG_INIT, "Initialization" },
|
||||
{ LDP_MSG_KEEPALIVE, "Keepalive" },
|
||||
{ LDP_MSG_ADDRESS, "Address" },
|
||||
{ LDP_MSG_ADDRESS_WITHDRAW, "Address Widthdraw" },
|
||||
{ LDP_MSG_ADDRESS_WITHDRAW, "Address Withdraw" },
|
||||
{ LDP_MSG_LABEL_MAPPING, "Label Mapping" },
|
||||
{ LDP_MSG_LABEL_REQUEST, "Label Request" },
|
||||
{ LDP_MSG_LABEL_WITHDRAW, "Label Withdraw" },
|
||||
@ -214,12 +215,7 @@ static const struct tok ldp_fec_martini_ifparm_vccv_cv_values[] = {
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
/* RFC1700 address family numbers, same definition in print-bgp.c */
|
||||
#define AFNUM_INET 1
|
||||
#define AFNUM_INET6 2
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
#define AFNUM_LEN 2
|
||||
|
||||
int ldp_msg_print(register const u_char *);
|
||||
int ldp_tlv_print(register const u_char *);
|
||||
@ -296,21 +292,24 @@ ldp_tlv_print(register const u_char *tptr) {
|
||||
|
||||
case LDP_TLV_ADDRESS_LIST:
|
||||
af = EXTRACT_16BITS(tptr);
|
||||
tptr+=2;
|
||||
printf("\n\t Adress Family: ");
|
||||
tptr+=AFNUM_LEN;
|
||||
tlv_tlen -= AFNUM_LEN;
|
||||
printf("\n\t Address Family: ");
|
||||
if (af == AFNUM_INET) {
|
||||
printf("IPv4, addresses:");
|
||||
for (i=0; i<(tlv_tlen-2)/4; i++) {
|
||||
while(tlv_tlen >= sizeof(struct in_addr)) {
|
||||
printf(" %s",ipaddr_string(tptr));
|
||||
tptr+=sizeof(struct in_addr);
|
||||
tlv_tlen-=sizeof(struct in_addr);
|
||||
tptr+=sizeof(struct in_addr);
|
||||
}
|
||||
}
|
||||
#ifdef INET6
|
||||
else if (af == AFNUM_INET6) {
|
||||
printf("IPv6, addresses:");
|
||||
for (i=0; i<(tlv_tlen-2)/16; i++) {
|
||||
while(tlv_tlen >= sizeof(struct in6_addr)) {
|
||||
printf(" %s",ip6addr_string(tptr));
|
||||
tptr+=sizeof(struct in6_addr);
|
||||
tlv_tlen-=sizeof(struct in6_addr);
|
||||
tptr+=sizeof(struct in6_addr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -574,6 +573,8 @@ ldp_msg_print(register const u_char *pptr) {
|
||||
case LDP_MSG_KEEPALIVE:
|
||||
case LDP_MSG_ADDRESS:
|
||||
case LDP_MSG_LABEL_MAPPING:
|
||||
case LDP_MSG_ADDRESS_WITHDRAW:
|
||||
case LDP_MSG_LABEL_WITHDRAW:
|
||||
while(msg_tlen >= 4) {
|
||||
processed = ldp_tlv_print(msg_tptr);
|
||||
if (processed == 0)
|
||||
@ -588,9 +589,7 @@ ldp_msg_print(register const u_char *pptr) {
|
||||
* you are welcome to contribute code ;-)
|
||||
*/
|
||||
|
||||
case LDP_MSG_ADDRESS_WITHDRAW:
|
||||
case LDP_MSG_LABEL_REQUEST:
|
||||
case LDP_MSG_LABEL_WITHDRAW:
|
||||
case LDP_MSG_LABEL_RELEASE:
|
||||
case LDP_MSG_LABEL_ABORT_REQUEST:
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.61.2.5 2005/09/29 07:40:13 hannes Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-llc.c,v 1.61.2.10 2007/02/08 07:07:51 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -82,20 +82,31 @@ static const struct tok llc_flag_values[] = {
|
||||
{ LLC_GSAP, "Response" },
|
||||
{ LLC_U_POLL, "Poll" },
|
||||
{ LLC_GSAP|LLC_U_POLL, "Final" },
|
||||
{ LLC_IS_POLL, "Poll" },
|
||||
{ LLC_GSAP|LLC_IS_POLL, "Final" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
static const struct tok llc_ig_flag_values[] = {
|
||||
{ 0, "Individual" },
|
||||
{ LLC_IG, "Group" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
static const struct tok llc_supervisory_values[] = {
|
||||
{ 0, "Receiver Ready" },
|
||||
{ 1, "Reject" },
|
||||
{ 2, "Receiver not Ready" },
|
||||
{ 1, "Receiver not Ready" },
|
||||
{ 2, "Reject" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
||||
static const struct tok cisco_values[] = {
|
||||
{ PID_CISCO_CDP, "CDP" },
|
||||
{ PID_CISCO_VTP, "VTP" },
|
||||
{ PID_CISCO_DTP, "DTP" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
@ -114,6 +125,10 @@ static const struct tok bridged_values[] = {
|
||||
{ 0, NULL },
|
||||
};
|
||||
|
||||
static const struct tok null_values[] = {
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
struct oui_tok {
|
||||
u_int32_t oui;
|
||||
const struct tok *tok;
|
||||
@ -140,6 +155,8 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
||||
int is_u;
|
||||
register int ret;
|
||||
|
||||
*extracted_ethertype = 0;
|
||||
|
||||
if (caplen < 3) {
|
||||
(void)printf("[|llc]");
|
||||
default_print((u_char *)p, caplen);
|
||||
@ -147,9 +164,7 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
||||
}
|
||||
|
||||
dsap_field = *p;
|
||||
dsap = dsap_field & ~LLC_IG;
|
||||
ssap_field = *(p + 1);
|
||||
ssap = ssap_field & ~LLC_GSAP;
|
||||
|
||||
/*
|
||||
* OK, what type of LLC frame is this? The length
|
||||
@ -181,7 +196,7 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
||||
is_u = 0;
|
||||
}
|
||||
|
||||
if (ssap == LLCSAP_GLOBAL && dsap == LLCSAP_GLOBAL) {
|
||||
if (ssap_field == LLCSAP_GLOBAL && dsap_field == LLCSAP_GLOBAL) {
|
||||
/*
|
||||
* This is an Ethernet_802.3 IPX frame; it has an
|
||||
* 802.3 header (i.e., an Ethernet header where the
|
||||
@ -204,17 +219,22 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
||||
return (1);
|
||||
}
|
||||
|
||||
dsap = dsap_field & ~LLC_IG;
|
||||
ssap = ssap_field & ~LLC_GSAP;
|
||||
|
||||
if (eflag) {
|
||||
printf("LLC, dsap %s (0x%02x), ssap %s (0x%02x)",
|
||||
printf("LLC, dsap %s (0x%02x) %s, ssap %s (0x%02x) %s",
|
||||
tok2str(llc_values, "Unknown", dsap),
|
||||
dsap,
|
||||
tok2str(llc_ig_flag_values, "Unknown", dsap_field & LLC_IG),
|
||||
tok2str(llc_values, "Unknown", ssap),
|
||||
ssap);
|
||||
ssap,
|
||||
tok2str(llc_flag_values, "Unknown", ssap_field & LLC_GSAP));
|
||||
|
||||
if (is_u) {
|
||||
printf(", cmd 0x%02x: ", control);
|
||||
printf(", ctrl 0x%02x: ", control);
|
||||
} else {
|
||||
printf(", cmd 0x%04x: ", control);
|
||||
printf(", ctrl 0x%04x: ", control);
|
||||
}
|
||||
}
|
||||
|
||||
@ -321,7 +341,7 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
||||
if (is_u) {
|
||||
printf("Unnumbered, %s, Flags [%s], length %u",
|
||||
tok2str(llc_cmd_values, "%02x", LLC_U_CMD(control)),
|
||||
bittok2str(llc_flag_values,"?",(ssap) | (control & LLC_U_POLL)),
|
||||
tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_U_POLL)),
|
||||
length);
|
||||
|
||||
p += 3;
|
||||
@ -337,18 +357,17 @@ llc_print(const u_char *p, u_int length, u_int caplen,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
if ((control & LLC_S_FMT) == LLC_S_FMT) {
|
||||
(void)printf("Supervisory, %s, rcv seq %u, Flags [%s], length %u",
|
||||
tok2str(llc_supervisory_values,"?",LLC_S_CMD(control)),
|
||||
LLC_IS_NR(control),
|
||||
bittok2str(llc_flag_values,"?",(ssap) | (control & LLC_IS_POLL)),
|
||||
tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_IS_POLL)),
|
||||
length);
|
||||
} else {
|
||||
(void)printf("Information, send seq %u, rcv seq %u, Flags [%s], length %u",
|
||||
LLC_I_NS(control),
|
||||
LLC_IS_NR(control),
|
||||
bittok2str(llc_flag_values,"?",(ssap) | (control & LLC_IS_POLL)),
|
||||
tok2str(llc_flag_values,"?",(ssap_field & LLC_GSAP) | (control & LLC_IS_POLL)),
|
||||
length);
|
||||
}
|
||||
p += 4;
|
||||
@ -371,7 +390,7 @@ snap_print(const u_char *p, u_int length, u_int caplen,
|
||||
et = EXTRACT_16BITS(p + 3);
|
||||
|
||||
if (eflag) {
|
||||
const struct tok *tok = NULL;
|
||||
const struct tok *tok = null_values;
|
||||
const struct oui_tok *otp;
|
||||
|
||||
for (otp = &oui_to_tok[0]; otp->tok != NULL; otp++) {
|
||||
|
@ -17,7 +17,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-lmp.c,v 1.5.2.1 2005/05/19 06:44:03 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-lmp.c,v 1.5.2.4 2006/06/23 02:07:27 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -59,7 +59,7 @@ struct lmp_common_header {
|
||||
#define LMP_EXTRACT_VERSION(x) (((x)&0xf0)>>4)
|
||||
|
||||
static const struct tok lmp_header_flag_values[] = {
|
||||
{ 0x00, "Control Channel Down"},
|
||||
{ 0x01, "Control Channel Down"},
|
||||
{ 0x02, "LMP restart"},
|
||||
{ 0, NULL}
|
||||
};
|
||||
@ -307,9 +307,6 @@ static const struct tok lmp_data_link_subobj[] = {
|
||||
#define LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SDH 5 /* UNI 1.0 Sec 9.4.2 */
|
||||
#define LMP_SD_SERVICE_CONFIG_CPSA_LINK_TYPE_SONET 6 /* UNI 1.0 Sec 9.4.2 */
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
/*
|
||||
* the ctypes are not globally unique so for
|
||||
* translating it to strings we build a table based
|
||||
@ -599,25 +596,25 @@ lmp_print(register const u_char *pptr, register u_int len) {
|
||||
subobj_len);
|
||||
switch(subobj_type) {
|
||||
case INT_SWITCHING_TYPE_SUBOBJ:
|
||||
printf("\n\t\t Switching Type: %s (%u)",
|
||||
printf("\n\t Switching Type: %s (%u)",
|
||||
tok2str(gmpls_switch_cap_values,
|
||||
"Unknown",
|
||||
EXTRACT_16BITS(obj_tptr+offset+2)>>8),
|
||||
EXTRACT_16BITS(obj_tptr+offset+2)>>8);
|
||||
printf("\n\t\t Encoding Type: %s (%u)",
|
||||
printf("\n\t Encoding Type: %s (%u)",
|
||||
tok2str(gmpls_encoding_values,
|
||||
"Unknown",
|
||||
EXTRACT_16BITS(obj_tptr+offset+2)&0x00FF),
|
||||
EXTRACT_16BITS(obj_tptr+offset+2)&0x00FF);
|
||||
bw.i = EXTRACT_32BITS(obj_tptr+offset+4);
|
||||
printf("\n\t\t Min Reservable Bandwidth: %.3f Mbps",
|
||||
bw.f);
|
||||
printf("\n\t Min Reservable Bandwidth: %.3f Mbps",
|
||||
bw.f*8/1000000);
|
||||
bw.i = EXTRACT_32BITS(obj_tptr+offset+8);
|
||||
printf("\n\t\t Max Reservable Bandwidth: %.3f Mbps",
|
||||
bw.f);
|
||||
printf("\n\t Max Reservable Bandwidth: %.3f Mbps",
|
||||
bw.f*8/1000000);
|
||||
break;
|
||||
case WAVELENGTH_SUBOBJ:
|
||||
printf("\n\t\t Wavelength: %u",
|
||||
printf("\n\t Wavelength: %u",
|
||||
EXTRACT_32BITS(obj_tptr+offset+4));
|
||||
break;
|
||||
default:
|
||||
@ -656,7 +653,7 @@ lmp_print(register const u_char *pptr, register u_int len) {
|
||||
EXTRACT_16BITS(obj_tptr+10),
|
||||
EXTRACT_16BITS(obj_tptr+10)&8000 ? "(Payload test messages capable)" : "");
|
||||
bw.i = EXTRACT_32BITS(obj_tptr+12);
|
||||
printf("\n\t Transmission Rate: %.3f Mbps",bw.f);
|
||||
printf("\n\t Transmission Rate: %.3f Mbps",bw.f*8/1000000);
|
||||
printf("\n\t Wavelength: %u",
|
||||
EXTRACT_32BITS(obj_tptr+16));
|
||||
break;
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-lspping.c,v 1.12.2.3 2005/05/03 08:12:31 hannes Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-lspping.c,v 1.12.2.6 2006/06/23 02:07:27 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -79,8 +79,6 @@ struct lspping_common_header {
|
||||
};
|
||||
|
||||
#define LSPPING_VERSION 1
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
static const struct tok lspping_msg_type_values[] = {
|
||||
{ 1, "MPLS Echo Request"},
|
||||
@ -137,6 +135,8 @@ struct lspping_tlv_header {
|
||||
#define LSPPING_TLV_DOWNSTREAM_MAPPING 2
|
||||
#define LSPPING_TLV_PAD 3
|
||||
#define LSPPING_TLV_ERROR_CODE 4
|
||||
#define LSPPING_TLV_BFD_DISCRIMINATOR 15 /* draft-ietf-bfd-mpls-02 */
|
||||
#define LSPPING_TLV_BFD_DISCRIMINATOR_LEN 4
|
||||
#define LSPPING_TLV_VENDOR_PRIVATE 0xfc00
|
||||
|
||||
static const struct tok lspping_tlv_values[] = {
|
||||
@ -144,6 +144,7 @@ static const struct tok lspping_tlv_values[] = {
|
||||
{ LSPPING_TLV_DOWNSTREAM_MAPPING, "Downstream Mapping" },
|
||||
{ LSPPING_TLV_PAD, "Pad" },
|
||||
{ LSPPING_TLV_ERROR_CODE, "Error Code" },
|
||||
{ LSPPING_TLV_BFD_DISCRIMINATOR, "BFD Discriminator" },
|
||||
{ LSPPING_TLV_VENDOR_PRIVATE, "Vendor Enterprise Code" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
@ -832,6 +833,12 @@ lspping_print(register const u_char *pptr, register u_int len) {
|
||||
|
||||
break;
|
||||
|
||||
case LSPPING_TLV_BFD_DISCRIMINATOR:
|
||||
tptr += sizeof(struct lspping_tlv_header);
|
||||
if (!TTEST2(*tptr, LSPPING_TLV_BFD_DISCRIMINATOR_LEN))
|
||||
goto trunc;
|
||||
printf("\n\t BFD Discriminator 0x%08x", EXTRACT_32BITS(tptr));
|
||||
break;
|
||||
/*
|
||||
* FIXME those are the defined TLVs that lack a decoder
|
||||
* you are welcome to contribute code ;-)
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-nfs.c,v 1.106.2.2 2005/05/06 07:57:18 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-nfs.c,v 1.106.2.4 2007/06/15 23:17:40 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -289,8 +289,12 @@ nfsreply_print(register const u_char *bp, u_int length,
|
||||
register const u_char *bp2)
|
||||
{
|
||||
register const struct sunrpc_msg *rp;
|
||||
u_int32_t proc, vers;
|
||||
u_int32_t proc, vers, reply_stat;
|
||||
char srcid[20], dstid[20]; /*fits 32bit*/
|
||||
enum sunrpc_reject_stat rstat;
|
||||
u_int32_t rlow;
|
||||
u_int32_t rhigh;
|
||||
enum sunrpc_auth_stat rwhy;
|
||||
|
||||
nfserr = 0; /* assume no error */
|
||||
rp = (const struct sunrpc_msg *)bp;
|
||||
@ -305,13 +309,83 @@ nfsreply_print(register const u_char *bp, u_int length,
|
||||
EXTRACT_32BITS(&rp->rm_xid));
|
||||
}
|
||||
print_nfsaddr(bp2, srcid, dstid);
|
||||
(void)printf("reply %s %d",
|
||||
EXTRACT_32BITS(&rp->rm_reply.rp_stat) == SUNRPC_MSG_ACCEPTED?
|
||||
"ok":"ERR",
|
||||
length);
|
||||
reply_stat = EXTRACT_32BITS(&rp->rm_reply.rp_stat);
|
||||
switch (reply_stat) {
|
||||
|
||||
if (xid_map_find(rp, bp2, &proc, &vers) >= 0)
|
||||
interp_reply(rp, proc, vers, length);
|
||||
case SUNRPC_MSG_ACCEPTED:
|
||||
(void)printf("reply ok %u", length);
|
||||
if (xid_map_find(rp, bp2, &proc, &vers) >= 0)
|
||||
interp_reply(rp, proc, vers, length);
|
||||
break;
|
||||
|
||||
case SUNRPC_MSG_DENIED:
|
||||
(void)printf("reply ERR %u: ", length);
|
||||
rstat = EXTRACT_32BITS(&rp->rm_reply.rp_reject.rj_stat);
|
||||
switch (rstat) {
|
||||
|
||||
case SUNRPC_RPC_MISMATCH:
|
||||
rlow = EXTRACT_32BITS(&rp->rm_reply.rp_reject.rj_vers.low);
|
||||
rhigh = EXTRACT_32BITS(&rp->rm_reply.rp_reject.rj_vers.high);
|
||||
(void)printf("RPC Version mismatch (%u-%u)",
|
||||
rlow, rhigh);
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_ERROR:
|
||||
rwhy = EXTRACT_32BITS(&rp->rm_reply.rp_reject.rj_why);
|
||||
(void)printf("Auth ");
|
||||
switch (rwhy) {
|
||||
|
||||
case SUNRPC_AUTH_OK:
|
||||
(void)printf("OK");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_BADCRED:
|
||||
(void)printf("Bogus Credentials (seal broken)");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_REJECTEDCRED:
|
||||
(void)printf("Rejected Credentials (client should begin new session)");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_BADVERF:
|
||||
(void)printf("Bogus Verifier (seal broken)");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_REJECTEDVERF:
|
||||
(void)printf("Verifier expired or was replayed");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_TOOWEAK:
|
||||
(void)printf("Credentials are too weak");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_INVALIDRESP:
|
||||
(void)printf("Bogus response verifier");
|
||||
break;
|
||||
|
||||
case SUNRPC_AUTH_FAILED:
|
||||
(void)printf("Unknown failure");
|
||||
break;
|
||||
|
||||
default:
|
||||
(void)printf("Invalid failure code %u",
|
||||
(unsigned int)rwhy);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
(void)printf("Unknown reason for rejecting rpc message %u",
|
||||
(unsigned int)rstat);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
(void)printf("reply Unknown rpc response code=%u %u",
|
||||
reply_stat, length);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-null.c,v 1.53.2.3 2005/07/07 01:24:38 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-null.c,v 1.53.2.4 2007/02/26 13:31:33 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -38,6 +38,7 @@ static const char rcsid[] _U_ =
|
||||
|
||||
#include "interface.h"
|
||||
#include "addrtoname.h"
|
||||
#include "af.h"
|
||||
|
||||
#include "ip.h"
|
||||
#ifdef INET6
|
||||
@ -56,34 +57,6 @@ static const char rcsid[] _U_ =
|
||||
*/
|
||||
#define NULL_HDRLEN 4
|
||||
|
||||
/*
|
||||
* BSD AF_ values.
|
||||
*
|
||||
* Unfortunately, the BSDs don't all use the same value for AF_INET6,
|
||||
* so, because we want to be able to read captures from all of the BSDs,
|
||||
* we check for all of them.
|
||||
*/
|
||||
#define BSD_AF_INET 2
|
||||
#define BSD_AF_NS 6 /* XEROX NS protocols */
|
||||
#define BSD_AF_ISO 7
|
||||
#define BSD_AF_APPLETALK 16
|
||||
#define BSD_AF_IPX 23
|
||||
#define BSD_AF_INET6_BSD 24 /* OpenBSD (and probably NetBSD), BSD/OS */
|
||||
#define BSD_AF_INET6_FREEBSD 28
|
||||
#define BSD_AF_INET6_DARWIN 30
|
||||
|
||||
const struct tok bsd_af_values[] = {
|
||||
{ BSD_AF_INET, "IPv4" },
|
||||
{ BSD_AF_NS, "NS" },
|
||||
{ BSD_AF_ISO, "ISO" },
|
||||
{ BSD_AF_APPLETALK, "Appletalk" },
|
||||
{ BSD_AF_IPX, "IPX" },
|
||||
{ BSD_AF_INET6_BSD, "IPv6" },
|
||||
{ BSD_AF_INET6_FREEBSD, "IPv6" },
|
||||
{ BSD_AF_INET6_DARWIN, "IPv6" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Byte-swap a 32-bit number.
|
||||
@ -147,27 +120,27 @@ null_if_print(const struct pcap_pkthdr *h, const u_char *p)
|
||||
|
||||
switch (family) {
|
||||
|
||||
case BSD_AF_INET:
|
||||
case BSD_AFNUM_INET:
|
||||
ip_print(gndo, p, length);
|
||||
break;
|
||||
|
||||
#ifdef INET6
|
||||
case BSD_AF_INET6_BSD:
|
||||
case BSD_AF_INET6_FREEBSD:
|
||||
case BSD_AF_INET6_DARWIN:
|
||||
case BSD_AFNUM_INET6_BSD:
|
||||
case BSD_AFNUM_INET6_FREEBSD:
|
||||
case BSD_AFNUM_INET6_DARWIN:
|
||||
ip6_print(p, length);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case BSD_AF_ISO:
|
||||
case BSD_AFNUM_ISO:
|
||||
isoclns_print(p, length, caplen);
|
||||
break;
|
||||
|
||||
case BSD_AF_APPLETALK:
|
||||
case BSD_AFNUM_APPLETALK:
|
||||
atalk_print(p, length);
|
||||
break;
|
||||
|
||||
case BSD_AF_IPX:
|
||||
case BSD_AFNUM_IPX:
|
||||
ipx_print(p, length);
|
||||
break;
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.56.2.3 2005/08/23 11:16:29 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.56.2.4 2006/12/13 08:24:27 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -57,7 +57,7 @@ static struct tok ospf_option_values[] = {
|
||||
|
||||
static struct tok ospf_authtype_values[] = {
|
||||
{ OSPF_AUTH_NONE, "none" },
|
||||
{ OSPF_AUTH_NONE, "simple" },
|
||||
{ OSPF_AUTH_SIMPLE, "simple" },
|
||||
{ OSPF_AUTH_MD5, "MD5" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
@ -932,12 +932,8 @@ ospf_print(register const u_char *bp, register u_int length,
|
||||
break;
|
||||
|
||||
case OSPF_AUTH_SIMPLE:
|
||||
if (fn_printn(op->ospf_authdata,
|
||||
sizeof(op->ospf_authdata), snapend)) {
|
||||
printf("\"");
|
||||
goto trunc;
|
||||
}
|
||||
printf("\"");
|
||||
printf("\n\tSimple text password: ");
|
||||
safeputs(op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN);
|
||||
break;
|
||||
|
||||
case OSPF_AUTH_MD5:
|
||||
|
@ -21,13 +21,27 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-pflog.c,v 1.13.2.1 2005/07/07 01:24:38 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-pflog.c,v 1.13.2.4 2007/09/13 17:18:10 gianluca Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_NET_PFVAR_H
|
||||
#error "No pf headers available"
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifndef WIN32
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
#include <net/if.h>
|
||||
#include <net/pfvar.h>
|
||||
#include <net/if_pflog.h>
|
||||
|
||||
|
||||
|
||||
#include <tcpdump-stdinc.h>
|
||||
|
||||
#include <stdio.h>
|
||||
@ -35,7 +49,6 @@ static const char rcsid[] _U_ =
|
||||
|
||||
#include "interface.h"
|
||||
#include "addrtoname.h"
|
||||
#include "pf.h"
|
||||
|
||||
static struct tok pf_reasons[] = {
|
||||
{ 0, "0(match)" },
|
||||
@ -44,6 +57,15 @@ static struct tok pf_reasons[] = {
|
||||
{ 3, "3(short)" },
|
||||
{ 4, "4(normalize)" },
|
||||
{ 5, "5(memory)" },
|
||||
{ 6, "6(bad-timestamp)" },
|
||||
{ 7, "7(congestion)" },
|
||||
{ 8, "8(ip-option)" },
|
||||
{ 9, "9(proto-cksum)" },
|
||||
{ 10, "10(state-mismatch)" },
|
||||
{ 11, "11(state-insert)" },
|
||||
{ 12, "12(state-limit)" },
|
||||
{ 13, "13(src-limit)" },
|
||||
{ 14, "14(synproxy)" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.45.2.3 2005/07/11 20:24:34 hannes Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-pim.c,v 1.45.2.4 2006/02/13 01:32:34 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -81,6 +81,15 @@ static struct tok pimv2_hello_option_values[] = {
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
#define PIMV2_REGISTER_FLAG_LEN 4
|
||||
#define PIMV2_REGISTER_FLAG_BORDER 0x80000000
|
||||
#define PIMV2_REGISTER_FLAG_NULL 0x40000000
|
||||
|
||||
static struct tok pimv2_register_flag_values[] = {
|
||||
{ PIMV2_REGISTER_FLAG_BORDER, "Border" },
|
||||
{ PIMV2_REGISTER_FLAG_NULL, "Null" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
/*
|
||||
* XXX: We consider a case where IPv6 is not ready yet for portability,
|
||||
@ -421,13 +430,13 @@ pim_print(register const u_char *bp, register u_int len)
|
||||
switch (PIM_VER(pim->pim_typever)) {
|
||||
case 2:
|
||||
if (!vflag) {
|
||||
printf("PIMv%u, %s, length: %u",
|
||||
printf("PIMv%u, %s, length %u",
|
||||
PIM_VER(pim->pim_typever),
|
||||
tok2str(pimv2_type_values,"Unknown Type",PIM_TYPE(pim->pim_typever)),
|
||||
len);
|
||||
return;
|
||||
} else {
|
||||
printf("PIMv%u, length: %u\n\t%s",
|
||||
printf("PIMv%u, length %u\n\t%s",
|
||||
PIM_VER(pim->pim_typever),
|
||||
len,
|
||||
tok2str(pimv2_type_values,"Unknown Type",PIM_TYPE(pim->pim_typever)));
|
||||
@ -435,7 +444,7 @@ pim_print(register const u_char *bp, register u_int len)
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("PIMv%u, length: %u",
|
||||
printf("PIMv%u, length %u",
|
||||
PIM_VER(pim->pim_typever),
|
||||
len);
|
||||
break;
|
||||
@ -627,6 +636,15 @@ pimv2_print(register const u_char *bp, register u_int len)
|
||||
if (pimv2_addr_len != 0)
|
||||
(void)printf(", RFC2117-encoding");
|
||||
|
||||
printf(", cksum 0x%04x ", EXTRACT_16BITS(&pim->pim_cksum));
|
||||
if (EXTRACT_16BITS(&pim->pim_cksum) == 0) {
|
||||
printf("(unverified)");
|
||||
} else {
|
||||
printf("(%scorrect)",
|
||||
TTEST2(bp[0], len) &&
|
||||
in_cksum((const u_short*)bp, len, 0) ? "in" : "" );
|
||||
}
|
||||
|
||||
switch (PIM_TYPE(pim->pim_typever)) {
|
||||
case PIMV2_TYPE_HELLO:
|
||||
{
|
||||
@ -638,7 +656,7 @@ pimv2_print(register const u_char *bp, register u_int len)
|
||||
olen = EXTRACT_16BITS(&bp[2]);
|
||||
TCHECK2(bp[0], 4 + olen);
|
||||
|
||||
printf("\n\t %s Option (%u), length: %u, Value: ",
|
||||
printf("\n\t %s Option (%u), length %u, Value: ",
|
||||
tok2str( pimv2_hello_option_values,"Unknown",otype),
|
||||
otype,
|
||||
olen);
|
||||
@ -731,30 +749,35 @@ pimv2_print(register const u_char *bp, register u_int len)
|
||||
{
|
||||
struct ip *ip;
|
||||
|
||||
if (vflag && bp + 8 <= ep) {
|
||||
(void)printf(" %s%s", bp[4] & 0x80 ? "B" : "",
|
||||
bp[4] & 0x40 ? "N" : "");
|
||||
}
|
||||
bp += 8; len -= 8;
|
||||
if (!TTEST2(*(bp+4), PIMV2_REGISTER_FLAG_LEN))
|
||||
goto trunc;
|
||||
|
||||
printf(", Flags [ %s ]\n\t",
|
||||
tok2str(pimv2_register_flag_values,
|
||||
"none",
|
||||
EXTRACT_32BITS(bp+4)));
|
||||
|
||||
bp += 8; len -= 8;
|
||||
/* encapsulated multicast packet */
|
||||
if (bp >= ep)
|
||||
break;
|
||||
ip = (struct ip *)bp;
|
||||
switch (IP_V(ip)) {
|
||||
case 0: /* Null header */
|
||||
(void)printf("IP-Null-header %s > %s",
|
||||
ipaddr_string(&ip->ip_src),
|
||||
ipaddr_string(&ip->ip_dst));
|
||||
break;
|
||||
|
||||
case 4: /* IPv4 */
|
||||
printf(" ");
|
||||
ip_print(gndo, bp, len);
|
||||
break;
|
||||
#ifdef INET6
|
||||
case 6: /* IPv6 */
|
||||
printf(" ");
|
||||
ip6_print(bp, len);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
(void)printf(" IP ver %d", IP_V(ip));
|
||||
break;
|
||||
default:
|
||||
(void)printf("IP ver %d", IP_V(ip));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.108.2.4 2005/06/18 23:56:40 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.108.2.6 2005/12/05 11:40:36 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -298,6 +298,20 @@ struct tok ipcpopt_values[] = {
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
#define IPCPOPT_IPCOMP_HDRCOMP 0x61 /* rfc3544 */
|
||||
#define IPCPOPT_IPCOMP_MINLEN 14
|
||||
|
||||
struct tok ipcpopt_compproto_values[] = {
|
||||
{ PPP_VJC, "VJ-Comp" },
|
||||
{ IPCPOPT_IPCOMP_HDRCOMP, "IP Header Compression" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
struct tok ipcpopt_compproto_subopt_values[] = {
|
||||
{ 1, "RTP-Compression" },
|
||||
{ 2, "Enhanced RTP-Compression" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
/* IP6CP Config Options */
|
||||
#define IP6CP_IFID 1
|
||||
@ -533,8 +547,9 @@ handle_ctrl_proto(u_int proto, const u_char *pptr, int length)
|
||||
printf("\n\t Magic-Num 0x%08x", EXTRACT_32BITS(tptr));
|
||||
/* XXX: need to decode Data? - hexdump for now */
|
||||
if (len > 8) {
|
||||
printf("\n\t Data");
|
||||
print_unknown_data(tptr+4,"\n\t ",len-4);
|
||||
printf("\n\t -----trailing data-----");
|
||||
TCHECK2(tptr[4], len-8);
|
||||
print_unknown_data(tptr+4,"\n\t ",len-8);
|
||||
}
|
||||
break;
|
||||
case CPCODES_ID:
|
||||
@ -966,6 +981,7 @@ static int
|
||||
print_ipcp_config_options(const u_char *p, int length)
|
||||
{
|
||||
int len, opt;
|
||||
u_int compproto, ipcomp_subopttotallen, ipcomp_subopt, ipcomp_suboptlen;
|
||||
|
||||
if (length < 2)
|
||||
return 0;
|
||||
@ -1000,11 +1016,62 @@ print_ipcp_config_options(const u_char *p, int length)
|
||||
if (len < 4)
|
||||
goto invlen;
|
||||
TCHECK2(*(p + 2), 2);
|
||||
if (EXTRACT_16BITS(p + 2) == PPP_VJC) {
|
||||
printf("VJ-Comp");
|
||||
compproto = EXTRACT_16BITS(p+2);
|
||||
|
||||
printf("%s (0x%02x):",
|
||||
tok2str(ipcpopt_compproto_values,"Unknown",compproto),
|
||||
compproto);
|
||||
|
||||
switch (compproto) {
|
||||
case PPP_VJC:
|
||||
/* XXX: VJ-Comp parameters should be decoded */
|
||||
} else
|
||||
printf("unknown-comp-proto %04x", EXTRACT_16BITS(p + 2));
|
||||
break;
|
||||
case IPCPOPT_IPCOMP_HDRCOMP:
|
||||
if (len < IPCPOPT_IPCOMP_MINLEN)
|
||||
goto invlen;
|
||||
|
||||
TCHECK2(*(p + 2), IPCPOPT_IPCOMP_MINLEN);
|
||||
printf("\n\t TCP Space %u, non-TCP Space %u" \
|
||||
", maxPeriod %u, maxTime %u, maxHdr %u",
|
||||
EXTRACT_16BITS(p+4),
|
||||
EXTRACT_16BITS(p+6),
|
||||
EXTRACT_16BITS(p+8),
|
||||
EXTRACT_16BITS(p+10),
|
||||
EXTRACT_16BITS(p+12));
|
||||
|
||||
/* suboptions present ? */
|
||||
if (len > IPCPOPT_IPCOMP_MINLEN) {
|
||||
ipcomp_subopttotallen = len - IPCPOPT_IPCOMP_MINLEN;
|
||||
p += IPCPOPT_IPCOMP_MINLEN;
|
||||
|
||||
printf("\n\t Suboptions, length %u", ipcomp_subopttotallen);
|
||||
|
||||
while (ipcomp_subopttotallen >= 2) {
|
||||
TCHECK2(*p, 2);
|
||||
ipcomp_subopt = *p;
|
||||
ipcomp_suboptlen = *(p+1);
|
||||
|
||||
/* sanity check */
|
||||
if (ipcomp_subopt == 0 ||
|
||||
ipcomp_suboptlen == 0 )
|
||||
break;
|
||||
|
||||
/* XXX: just display the suboptions for now */
|
||||
printf("\n\t\t%s Suboption #%u, length %u",
|
||||
tok2str(ipcpopt_compproto_subopt_values,
|
||||
"Unknown",
|
||||
ipcomp_subopt),
|
||||
ipcomp_subopt,
|
||||
ipcomp_suboptlen);
|
||||
|
||||
ipcomp_subopttotallen -= ipcomp_suboptlen;
|
||||
p += ipcomp_suboptlen;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case IPCPOPT_ADDR: /* those options share the same format - fall through */
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-pptp.c,v 1.11 2003/11/16 09:36:33 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-pptp.c,v 1.11.2.1 2006/06/23 02:07:27 hannes Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -40,14 +40,6 @@ static const char rcsid[] _U_ =
|
||||
|
||||
static char tstr[] = " [|pptp]";
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#define PPTP_MSG_TYPE_CTRL 1 /* Control Message */
|
||||
#define PPTP_MSG_TYPE_MGMT 2 /* Management Message (currently not used */
|
||||
#define PPTP_MAGIC_COOKIE 0x1a2b3c4d /* for sanity check */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998-2005 The TCPDUMP project
|
||||
* Copyright (c) 1998-2007 The TCPDUMP project
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that: (1) source code
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.33.2.8 2005/09/22 14:52:40 hannes Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-rsvp.c,v 1.33.2.15 2007/09/13 17:33:54 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -35,6 +35,7 @@ static const char rcsid[] _U_ =
|
||||
#include "addrtoname.h"
|
||||
#include "ethertype.h"
|
||||
#include "gmpls.h"
|
||||
#include "af.h"
|
||||
|
||||
/*
|
||||
* RFC 2205 common header
|
||||
@ -134,9 +135,9 @@ static const struct tok rsvp_header_flag_values[] = {
|
||||
#define RSVP_OBJ_ERO 20 /* rfc3209 */
|
||||
#define RSVP_OBJ_RRO 21 /* rfc3209 */
|
||||
#define RSVP_OBJ_HELLO 22 /* rfc3209 */
|
||||
#define RSVP_OBJ_MESSAGE_ID 23
|
||||
#define RSVP_OBJ_MESSAGE_ID_ACK 24
|
||||
#define RSVP_OBJ_MESSAGE_ID_LIST 25
|
||||
#define RSVP_OBJ_MESSAGE_ID 23 /* rfc2961 */
|
||||
#define RSVP_OBJ_MESSAGE_ID_ACK 24 /* rfc2961 */
|
||||
#define RSVP_OBJ_MESSAGE_ID_LIST 25 /* rfc2961 */
|
||||
#define RSVP_OBJ_RECOVERY_LABEL 34 /* rfc3473 */
|
||||
#define RSVP_OBJ_UPSTREAM_LABEL 35 /* rfc3473 */
|
||||
#define RSVP_OBJ_LABEL_SET 36 /* rfc3473 */
|
||||
@ -152,6 +153,7 @@ static const struct tok rsvp_header_flag_values[] = {
|
||||
#define RSVP_OBJ_PROPERTIES 204 /* juniper proprietary */
|
||||
#define RSVP_OBJ_FASTREROUTE 205 /* draft-ietf-mpls-rsvp-lsp-fastreroute-07 */
|
||||
#define RSVP_OBJ_SESSION_ATTRIBUTE 207 /* rfc3209 */
|
||||
#define RSVP_OBJ_GENERALIZED_UNI 229 /* OIF RSVP extensions UNI 1.0 Signaling, Rel. 2 */
|
||||
#define RSVP_OBJ_CALL_ID 230 /* rfc3474 */
|
||||
#define RSVP_OBJ_CALL_OPS 236 /* rfc3474 */
|
||||
|
||||
@ -189,6 +191,7 @@ static const struct tok rsvp_obj_values[] = {
|
||||
{ RSVP_OBJ_PROPERTIES, "Properties" },
|
||||
{ RSVP_OBJ_FASTREROUTE, "Fast Re-Route" },
|
||||
{ RSVP_OBJ_SESSION_ATTRIBUTE, "Session Attribute" },
|
||||
{ RSVP_OBJ_GENERALIZED_UNI, "Generalized UNI" },
|
||||
{ RSVP_OBJ_CALL_ID, "Call-ID" },
|
||||
{ RSVP_OBJ_CALL_OPS, "Call Capability" },
|
||||
{ RSVP_OBJ_RESTART_CAPABILITY, "Restart Capability" },
|
||||
@ -202,6 +205,7 @@ static const struct tok rsvp_obj_values[] = {
|
||||
#define RSVP_CTYPE_IPV6 2
|
||||
#define RSVP_CTYPE_TUNNEL_IPV4 7
|
||||
#define RSVP_CTYPE_TUNNEL_IPV6 8
|
||||
#define RSVP_CTYPE_UNI_IPV4 11 /* OIF RSVP extensions UNI 1.0 Signaling Rel. 2 */
|
||||
#define RSVP_CTYPE_1 1
|
||||
#define RSVP_CTYPE_2 2
|
||||
#define RSVP_CTYPE_3 3
|
||||
@ -234,11 +238,13 @@ static const struct tok rsvp_ctype_values[] = {
|
||||
{ 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV4, "IPv4" },
|
||||
{ 256*RSVP_OBJ_SESSION+RSVP_CTYPE_IPV6, "IPv6" },
|
||||
{ 256*RSVP_OBJ_SESSION+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
|
||||
{ 256*RSVP_OBJ_SESSION+RSVP_CTYPE_UNI_IPV4, "UNI IPv4" },
|
||||
{ 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV4, "IPv4" },
|
||||
{ 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_IPV6, "IPv6" },
|
||||
{ 256*RSVP_OBJ_SENDER_TEMPLATE+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
|
||||
{ 256*RSVP_OBJ_MESSAGE_ID+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_1, "Message id ack" },
|
||||
{ 256*RSVP_OBJ_MESSAGE_ID_ACK+RSVP_CTYPE_2, "Message id nack" },
|
||||
{ 256*RSVP_OBJ_MESSAGE_ID_LIST+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_STYLE+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_HELLO+RSVP_CTYPE_1, "Hello Request" },
|
||||
@ -271,8 +277,11 @@ static const struct tok rsvp_ctype_values[] = {
|
||||
{ 256*RSVP_OBJ_FASTREROUTE+RSVP_CTYPE_1, "1" }, /* new style */
|
||||
{ 256*RSVP_OBJ_DETOUR+RSVP_CTYPE_TUNNEL_IPV4, "Tunnel IPv4" },
|
||||
{ 256*RSVP_OBJ_PROPERTIES+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_ADMIN_STATUS+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_CLASSTYPE+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_CLASSTYPE_OLD+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_LABEL_SET+RSVP_CTYPE_1, "1" },
|
||||
{ 256*RSVP_OBJ_GENERALIZED_UNI+RSVP_CTYPE_1, "1" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
@ -416,9 +425,44 @@ static struct tok rsvp_obj_error_code_diffserv_te_values[] = {
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
/* rfc3473 / rfc 3471 */
|
||||
static const struct tok rsvp_obj_admin_status_flag_values[] = {
|
||||
{ 0x80000000, "Reflect" },
|
||||
{ 0x00000004, "Testing" },
|
||||
{ 0x00000002, "Admin-down" },
|
||||
{ 0x00000001, "Delete-in-progress" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
/* label set actions - rfc3471 */
|
||||
#define LABEL_SET_INCLUSIVE_LIST 0
|
||||
#define LABEL_SET_EXCLUSIVE_LIST 1
|
||||
#define LABEL_SET_INCLUSIVE_RANGE 2
|
||||
#define LABEL_SET_EXCLUSIVE_RANGE 3
|
||||
|
||||
static const struct tok rsvp_obj_label_set_action_values[] = {
|
||||
{ LABEL_SET_INCLUSIVE_LIST, "Inclusive list" },
|
||||
{ LABEL_SET_EXCLUSIVE_LIST, "Exclusive list" },
|
||||
{ LABEL_SET_INCLUSIVE_RANGE, "Inclusive range" },
|
||||
{ LABEL_SET_EXCLUSIVE_RANGE, "Exclusive range" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
/* OIF RSVP extensions UNI 1.0 Signaling, release 2 */
|
||||
#define RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS 1
|
||||
#define RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS 2
|
||||
#define RSVP_GEN_UNI_SUBOBJ_DIVERSITY 3
|
||||
#define RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL 4
|
||||
#define RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL 5
|
||||
|
||||
static const struct tok rsvp_obj_generalized_uni_values[] = {
|
||||
{ RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS, "Source TNA address" },
|
||||
{ RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS, "Destination TNA address" },
|
||||
{ RSVP_GEN_UNI_SUBOBJ_DIVERSITY, "Diversity" },
|
||||
{ RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL, "Egress label" },
|
||||
{ RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL, "Service level" },
|
||||
{ 0, NULL}
|
||||
};
|
||||
|
||||
static int rsvp_intserv_print(const u_char *, u_short);
|
||||
|
||||
@ -587,6 +631,8 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
} bw;
|
||||
u_int8_t namelen;
|
||||
|
||||
u_int action, subchannel;
|
||||
|
||||
while(tlen>=sizeof(struct rsvp_object_header)) {
|
||||
/* did we capture enough for fully decoding the object header ? */
|
||||
if (!TTEST2(*tptr, sizeof(struct rsvp_object_header)))
|
||||
@ -684,6 +730,7 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
break;
|
||||
#endif
|
||||
case RSVP_CTYPE_TUNNEL_IPV4:
|
||||
case RSVP_CTYPE_UNI_IPV4:
|
||||
if (obj_tlen < 12)
|
||||
return -1;
|
||||
printf("%s IPv4 Tunnel EndPoint: %s, Tunnel ID: 0x%04x, Extended Tunnel ID: %s",
|
||||
@ -900,7 +947,7 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
obj_tptr+=12;
|
||||
break;
|
||||
case RSVP_CTYPE_4:
|
||||
if (obj_tlen < 8)
|
||||
if (obj_tlen < 4)
|
||||
return-1;
|
||||
printf("%s LSP Encoding Type: %s (%u)",
|
||||
ident,
|
||||
@ -918,8 +965,8 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
"Unknown",
|
||||
EXTRACT_16BITS(obj_tptr+2)),
|
||||
EXTRACT_16BITS(obj_tptr+2));
|
||||
obj_tlen-=8;
|
||||
obj_tptr+=8;
|
||||
obj_tlen-=4;
|
||||
obj_tptr+=4;
|
||||
break;
|
||||
default:
|
||||
hexdump=TRUE;
|
||||
@ -1024,6 +1071,106 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
}
|
||||
break;
|
||||
|
||||
case RSVP_OBJ_GENERALIZED_UNI:
|
||||
switch(rsvp_obj_ctype) {
|
||||
int subobj_type,af,subobj_len,total_subobj_len;
|
||||
|
||||
case RSVP_CTYPE_1:
|
||||
|
||||
if (obj_tlen < 4)
|
||||
return-1;
|
||||
|
||||
/* read variable length subobjects */
|
||||
total_subobj_len = obj_tlen;
|
||||
while(total_subobj_len > 0) {
|
||||
subobj_len = EXTRACT_16BITS(obj_tptr);
|
||||
subobj_type = (EXTRACT_16BITS(obj_tptr+2))>>8;
|
||||
af = (EXTRACT_16BITS(obj_tptr+2))&0x00FF;
|
||||
|
||||
printf("%s Subobject Type: %s (%u), AF: %s (%u), length: %u",
|
||||
ident,
|
||||
tok2str(rsvp_obj_generalized_uni_values, "Unknown", subobj_type),
|
||||
subobj_type,
|
||||
tok2str(af_values, "Unknown", af), af,
|
||||
subobj_len);
|
||||
|
||||
switch(subobj_type) {
|
||||
case RSVP_GEN_UNI_SUBOBJ_SOURCE_TNA_ADDRESS:
|
||||
case RSVP_GEN_UNI_SUBOBJ_DESTINATION_TNA_ADDRESS:
|
||||
|
||||
switch(af) {
|
||||
case AFNUM_INET:
|
||||
if (subobj_len < 8)
|
||||
return -1;
|
||||
printf("%s UNI IPv4 TNA address: %s",
|
||||
ident, ipaddr_string(obj_tptr+4));
|
||||
break;
|
||||
#ifdef INET6
|
||||
case AFNUM_INET6:
|
||||
if (subobj_len < 20)
|
||||
return -1;
|
||||
printf("%s UNI IPv6 TNA address: %s",
|
||||
ident, ip6addr_string(obj_tptr+4));
|
||||
break;
|
||||
#endif
|
||||
case AFNUM_NSAP:
|
||||
if (subobj_len) {
|
||||
/* unless we have a TLV parser lets just hexdump */
|
||||
hexdump=TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case RSVP_GEN_UNI_SUBOBJ_DIVERSITY:
|
||||
if (subobj_len) {
|
||||
/* unless we have a TLV parser lets just hexdump */
|
||||
hexdump=TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case RSVP_GEN_UNI_SUBOBJ_EGRESS_LABEL:
|
||||
if (subobj_len < 16) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s U-bit: %x, Label type: %u, Logical port id: %u, Label: %u",
|
||||
ident,
|
||||
((EXTRACT_32BITS(obj_tptr+4))>>31),
|
||||
((EXTRACT_32BITS(obj_tptr+4))&0xFF),
|
||||
EXTRACT_32BITS(obj_tptr+8),
|
||||
EXTRACT_32BITS(obj_tptr+12));
|
||||
break;
|
||||
|
||||
case RSVP_GEN_UNI_SUBOBJ_SERVICE_LEVEL:
|
||||
if (subobj_len < 8) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("%s Service level: %u",
|
||||
ident, (EXTRACT_32BITS(obj_tptr+4))>>24);
|
||||
break;
|
||||
|
||||
default:
|
||||
hexdump=TRUE;
|
||||
break;
|
||||
}
|
||||
total_subobj_len-=subobj_len;
|
||||
obj_tptr+=subobj_len;
|
||||
obj_tlen+=subobj_len;
|
||||
}
|
||||
|
||||
if (total_subobj_len) {
|
||||
/* unless we have a TLV parser lets just hexdump */
|
||||
hexdump=TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
hexdump=TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case RSVP_OBJ_RSVP_HOP:
|
||||
switch(rsvp_obj_ctype) {
|
||||
case RSVP_CTYPE_3: /* fall through - FIXME add TLV parser */
|
||||
@ -1358,6 +1505,7 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
case RSVP_OBJ_MESSAGE_ID_LIST:
|
||||
switch(rsvp_obj_ctype) {
|
||||
case RSVP_CTYPE_1:
|
||||
case RSVP_CTYPE_2:
|
||||
if (obj_tlen < 8)
|
||||
return-1;
|
||||
printf("%s Flags [0x%02x], epoch: %u",
|
||||
@ -1410,6 +1558,66 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
}
|
||||
break;
|
||||
|
||||
case RSVP_OBJ_ADMIN_STATUS:
|
||||
switch(rsvp_obj_ctype) {
|
||||
case RSVP_CTYPE_1:
|
||||
if (obj_tlen < 4)
|
||||
return-1;
|
||||
printf("%s Flags [%s]", ident,
|
||||
bittok2str(rsvp_obj_admin_status_flag_values, "none",
|
||||
EXTRACT_32BITS(obj_tptr)));
|
||||
obj_tlen-=4;
|
||||
obj_tptr+=4;
|
||||
break;
|
||||
default:
|
||||
hexdump=TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case RSVP_OBJ_LABEL_SET:
|
||||
switch(rsvp_obj_ctype) {
|
||||
case RSVP_CTYPE_1:
|
||||
if (obj_tlen < 4)
|
||||
return-1;
|
||||
action = (EXTRACT_16BITS(obj_tptr)>>8);
|
||||
|
||||
printf("%s Action: %s (%u), Label type: %u", ident,
|
||||
tok2str(rsvp_obj_label_set_action_values, "Unknown", action),
|
||||
action, ((EXTRACT_32BITS(obj_tptr) & 0x7F)));
|
||||
|
||||
switch (action) {
|
||||
case LABEL_SET_INCLUSIVE_RANGE:
|
||||
case LABEL_SET_EXCLUSIVE_RANGE: /* fall through */
|
||||
|
||||
/* only a couple of subchannels are expected */
|
||||
if (obj_tlen < 12)
|
||||
return -1;
|
||||
printf("%s Start range: %u, End range: %u", ident,
|
||||
EXTRACT_32BITS(obj_tptr+4),
|
||||
EXTRACT_32BITS(obj_tptr+8));
|
||||
obj_tlen-=12;
|
||||
obj_tptr+=12;
|
||||
break;
|
||||
|
||||
default:
|
||||
obj_tlen-=4;
|
||||
obj_tptr+=4;
|
||||
subchannel = 1;
|
||||
while(obj_tlen >= 4 ) {
|
||||
printf("%s Subchannel #%u: %u", ident, subchannel,
|
||||
EXTRACT_32BITS(obj_tptr));
|
||||
obj_tptr+=4;
|
||||
obj_tlen-=4;
|
||||
subchannel++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
hexdump=TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME those are the defined objects that lack a decoder
|
||||
* you are welcome to contribute code ;-)
|
||||
@ -1417,7 +1625,6 @@ rsvp_obj_print (const u_char *tptr, const char *ident, u_int tlen) {
|
||||
|
||||
case RSVP_OBJ_SCOPE:
|
||||
case RSVP_OBJ_POLICY_DATA:
|
||||
case RSVP_OBJ_LABEL_SET:
|
||||
case RSVP_OBJ_ACCEPT_LABEL_SET:
|
||||
case RSVP_OBJ_PROTECTION:
|
||||
default:
|
||||
|
@ -34,7 +34,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-rx.c,v 1.37 2003/11/16 09:36:36 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-rx.c,v 1.37.2.2 2007/06/15 19:43:15 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -1013,6 +1013,7 @@ acl_print(u_char *s, int maxsize, u_char *end)
|
||||
int pos, neg, acl;
|
||||
int n, i;
|
||||
char *user;
|
||||
char fmt[1024];
|
||||
|
||||
if ((user = (char *)malloc(maxsize)) == NULL)
|
||||
return;
|
||||
@ -1046,7 +1047,8 @@ acl_print(u_char *s, int maxsize, u_char *end)
|
||||
printf("a");
|
||||
|
||||
for (i = 0; i < pos; i++) {
|
||||
if (sscanf((char *) s, "%s %d\n%n", user, &acl, &n) != 2)
|
||||
snprintf(fmt, sizeof(fmt), "%%%ds %%d\n%%n", maxsize - 1);
|
||||
if (sscanf((char *) s, fmt, user, &acl, &n) != 2)
|
||||
goto finish;
|
||||
s += n;
|
||||
printf(" +{");
|
||||
@ -1059,7 +1061,8 @@ acl_print(u_char *s, int maxsize, u_char *end)
|
||||
}
|
||||
|
||||
for (i = 0; i < neg; i++) {
|
||||
if (sscanf((char *) s, "%s %d\n%n", user, &acl, &n) != 2)
|
||||
snprintf(fmt, sizeof(fmt), "%%%ds %%d\n%%n", maxsize - 1);
|
||||
if (sscanf((char *) s, fmt, user, &acl, &n) != 2)
|
||||
goto finish;
|
||||
s += n;
|
||||
printf(" -{");
|
||||
@ -2299,6 +2302,7 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
{
|
||||
struct rx_ackPacket *rxa;
|
||||
int i, start, last;
|
||||
u_int32_t firstPacket;
|
||||
|
||||
if (length < (int)sizeof(struct rx_header))
|
||||
return;
|
||||
@ -2327,8 +2331,9 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
(int) EXTRACT_16BITS(&rxa->bufferSpace),
|
||||
(int) EXTRACT_16BITS(&rxa->maxSkew));
|
||||
|
||||
firstPacket = EXTRACT_32BITS(&rxa->firstPacket);
|
||||
printf(" first %d serial %d reason %s",
|
||||
EXTRACT_32BITS(&rxa->firstPacket), EXTRACT_32BITS(&rxa->serial),
|
||||
firstPacket, EXTRACT_32BITS(&rxa->serial),
|
||||
tok2str(rx_ack_reasons, "#%d", (int) rxa->reason));
|
||||
|
||||
/*
|
||||
@ -2371,7 +2376,7 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
|
||||
if (last == -2) {
|
||||
printf(" acked %d",
|
||||
rxa->firstPacket + i);
|
||||
firstPacket + i);
|
||||
start = i;
|
||||
}
|
||||
|
||||
@ -2385,7 +2390,7 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
*/
|
||||
|
||||
else if (last != i - 1) {
|
||||
printf(",%d", rxa->firstPacket + i);
|
||||
printf(",%d", firstPacket + i);
|
||||
start = i;
|
||||
}
|
||||
|
||||
@ -2411,7 +2416,7 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
* range.
|
||||
*/
|
||||
} else if (last == i - 1 && start != last)
|
||||
printf("-%d", rxa->firstPacket + i - 1);
|
||||
printf("-%d", firstPacket + i - 1);
|
||||
|
||||
/*
|
||||
* So, what's going on here? We ran off the end of the
|
||||
@ -2425,7 +2430,7 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
*/
|
||||
|
||||
if (last == i - 1 && start != last)
|
||||
printf("-%d", rxa->firstPacket + i - 1);
|
||||
printf("-%d", firstPacket + i - 1);
|
||||
|
||||
/*
|
||||
* Same as above, just without comments
|
||||
@ -2435,18 +2440,18 @@ rx_ack_print(register const u_char *bp, int length)
|
||||
if (rxa->acks[i] == RX_ACK_TYPE_NACK) {
|
||||
if (last == -2) {
|
||||
printf(" nacked %d",
|
||||
rxa->firstPacket + i);
|
||||
firstPacket + i);
|
||||
start = i;
|
||||
} else if (last != i - 1) {
|
||||
printf(",%d", rxa->firstPacket + i);
|
||||
printf(",%d", firstPacket + i);
|
||||
start = i;
|
||||
}
|
||||
last = i;
|
||||
} else if (last == i - 1 && start != last)
|
||||
printf("-%d", rxa->firstPacket + i - 1);
|
||||
printf("-%d", firstPacket + i - 1);
|
||||
|
||||
if (last == i - 1 && start != last)
|
||||
printf("-%d", rxa->firstPacket + i - 1);
|
||||
printf("-%d", firstPacket + i - 1);
|
||||
|
||||
bp += rxa->nAcks;
|
||||
}
|
||||
|
@ -35,7 +35,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-sctp.c,v 1.16.2.4 2005/07/07 01:24:38 guy Exp $ (NETLAB/PEL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-sctp.c,v 1.16.2.5 2007/09/13 18:04:58 guy Exp $ (NETLAB/PEL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -206,6 +206,7 @@ void sctp_print(const u_char *bp, /* beginning of sctp packet */
|
||||
if (htons(chunkDescPtr->chunkLength) <
|
||||
sizeof(struct sctpDataPart)+
|
||||
sizeof(struct sctpChunkDesc)+1) {
|
||||
/* Less than 1 byte of chunk payload */
|
||||
printf("bogus chunk length %u]",
|
||||
htons(chunkDescPtr->chunkLength));
|
||||
return;
|
||||
@ -213,7 +214,7 @@ void sctp_print(const u_char *bp, /* beginning of sctp packet */
|
||||
default_print(payloadPtr,
|
||||
htons(chunkDescPtr->chunkLength) -
|
||||
(sizeof(struct sctpDataPart)+
|
||||
sizeof(struct sctpChunkDesc)+1));
|
||||
sizeof(struct sctpChunkDesc)));
|
||||
} else
|
||||
printf("]");
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-sll.c,v 1.16.2.2 2005/07/07 01:24:39 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-sll.c,v 1.16.2.3 2005/11/13 12:13:00 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -148,7 +148,6 @@ sll_if_print(const struct pcap_pkthdr *h, const u_char *p)
|
||||
* Is it (gag) an 802.3 encapsulation, or some non-Ethernet
|
||||
* packet type?
|
||||
*/
|
||||
extracted_ethertype = 0;
|
||||
if (ether_type <= ETHERMTU) {
|
||||
/*
|
||||
* Yes - what type is it?
|
||||
@ -173,6 +172,9 @@ sll_if_print(const struct pcap_pkthdr *h, const u_char *p)
|
||||
break;
|
||||
|
||||
default:
|
||||
extracted_ethertype = 0;
|
||||
/*FALLTHROUGH*/
|
||||
|
||||
unknown:
|
||||
/* ether_type not known, print raw packet */
|
||||
if (!eflag)
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.41.2.2 2005/05/08 20:01:09 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-smb.c,v 1.41.2.4 2007/07/14 22:29:05 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <tcpdump-stdinc.h>
|
||||
@ -904,8 +904,8 @@ print_smb(const u_char *buf, const u_char *maxbuf)
|
||||
|
||||
printf("\nSMB PACKET: %s (%s) (CHAINED)\n",
|
||||
fn->name, request ? "REQUEST" : "REPLY");
|
||||
if (newsmboffset < smboffset) {
|
||||
printf("Bad andX offset: %u < %u\n", newsmboffset, smboffset);
|
||||
if (newsmboffset <= smboffset) {
|
||||
printf("Bad andX offset: %u <= %u\n", newsmboffset, smboffset);
|
||||
break;
|
||||
}
|
||||
smboffset = newsmboffset;
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.120.2.2 2005/04/21 06:36:05 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-tcp.c,v 1.120.2.3 2005/10/16 06:05:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -799,7 +799,7 @@ tcp_verify_signature(const struct ip *ip, const struct tcphdr *tp,
|
||||
MD5_Update(&ctx, tcpmd5secret, strlen(tcpmd5secret));
|
||||
MD5_Final(sig, &ctx);
|
||||
|
||||
if (memcmp(rcvsig, sig, 16))
|
||||
if (memcmp(rcvsig, sig, TCP_SIGLEN) == 0)
|
||||
return (SIGNATURE_VALID);
|
||||
else
|
||||
return (SIGNATURE_INVALID);
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.37 2003/11/16 09:36:40 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.37.2.1 2007/09/14 01:03:12 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -35,7 +35,6 @@ static const char rcsid[] _U_ =
|
||||
#ifdef SEGSIZE
|
||||
#undef SEGSIZE /* SINIX sucks */
|
||||
#endif
|
||||
#include <arpa/tftp.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@ -43,6 +42,7 @@ static const char rcsid[] _U_ =
|
||||
#include "interface.h"
|
||||
#include "addrtoname.h"
|
||||
#include "extract.h"
|
||||
#include "tftp.h"
|
||||
|
||||
/* op code to string mapping */
|
||||
static struct tok op2str[] = {
|
||||
@ -51,6 +51,7 @@ static struct tok op2str[] = {
|
||||
{ DATA, "DATA" }, /* data packet */
|
||||
{ ACK, "ACK" }, /* acknowledgement */
|
||||
{ ERROR, "ERROR" }, /* error code */
|
||||
{ OACK, "OACK" }, /* option acknowledgement */
|
||||
{ 0, NULL }
|
||||
};
|
||||
|
||||
@ -97,6 +98,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
|
||||
@ -106,11 +108,15 @@ tftp_print(register const u_char *bp, u_int length)
|
||||
#else
|
||||
p = (u_char *)&tp->th_block;
|
||||
#endif
|
||||
fputs(" \"", stdout);
|
||||
putchar(' ');
|
||||
/* Print filename or first option */
|
||||
if (opcode != OACK)
|
||||
putchar('"');
|
||||
i = fn_print(p, snapend);
|
||||
putchar('"');
|
||||
if (opcode != OACK)
|
||||
putchar('"');
|
||||
|
||||
/* Print the mode and any options */
|
||||
/* Print the mode (RRQ and WRQ only) and any options */
|
||||
while ((p = (const u_char *)strchr((const char *)p, '\0')) != NULL) {
|
||||
if (length <= (u_int)(p - (const u_char *)&tp->th_block))
|
||||
break;
|
||||
@ -134,7 +140,7 @@ tftp_print(register const u_char *bp, u_int length)
|
||||
case ERROR:
|
||||
/* Print error code string */
|
||||
TCHECK(tp->th_code);
|
||||
printf(" %s ", tok2str(err2str, "tftp-err-#%d \"",
|
||||
printf(" %s \"", tok2str(err2str, "tftp-err-#%d \"",
|
||||
EXTRACT_16BITS(&tp->th_code)));
|
||||
/* Print error message string */
|
||||
i = fn_print((const u_char *)tp->th_data, snapend);
|
||||
|
@ -27,7 +27,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-token.c,v 1.25.2.1 2005/07/07 01:24:40 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-token.c,v 1.25.2.2 2005/11/13 12:13:01 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -155,7 +155,6 @@ token_print(const u_char *p, u_int length, u_int caplen)
|
||||
caplen -= hdr_len;
|
||||
|
||||
/* Frame Control field determines interpretation of packet */
|
||||
extracted_ethertype = 0;
|
||||
if (FRAME_TYPE(trp) == TOKEN_FC_LLC) {
|
||||
/* Try to print the LLC-layer header & higher layers */
|
||||
if (llc_print(p, length, caplen, ESRC(&ehdr), EDST(&ehdr),
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.138 2005/04/07 00:28:17 mcr Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/print-udp.c,v 1.138.2.1 2007/03/28 07:45:46 hannes Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
@ -676,6 +676,8 @@ udp_print(register const u_char *bp, u_int length,
|
||||
lwres_print((const u_char *)(up + 1), length);
|
||||
else if (ISPORT(LDP_PORT))
|
||||
ldp_print((const u_char *)(up + 1), length);
|
||||
else if (ISPORT(OLSR_PORT))
|
||||
olsr_print((const u_char *)(up + 1), length);
|
||||
else if (ISPORT(MPLS_LSP_PING_PORT))
|
||||
lspping_print((const u_char *)(up + 1), length);
|
||||
else if (dport == BFD_CONTROL_PORT ||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/smbutil.c,v 1.36.2.1 2005/04/21 04:09:58 guy Exp $";
|
||||
"@(#) $Header: /tcpdump/master/tcpdump/smbutil.c,v 1.36.2.3 2007/07/15 19:08:25 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <tcpdump-stdinc.h>
|
||||
@ -279,6 +279,7 @@ print_data(const unsigned char *buf, int len)
|
||||
return;
|
||||
printf("[%03X] ", i);
|
||||
for (i = 0; i < len; /*nothing*/) {
|
||||
TCHECK(buf[i]);
|
||||
printf("%02X ", buf[i] & 0xff);
|
||||
i++;
|
||||
if (i%8 == 0)
|
||||
@ -310,6 +311,11 @@ print_data(const unsigned char *buf, int len)
|
||||
print_asc(&buf[i - n], n);
|
||||
printf("\n");
|
||||
}
|
||||
return;
|
||||
|
||||
trunc:
|
||||
printf("\n");
|
||||
printf("WARNING: Short packet. Try increasing the snap length\n");
|
||||
}
|
||||
|
||||
|
||||
@ -745,6 +751,9 @@ smb_fdata1(const u_char *buf, const char *fmt, const u_char *maxbuf,
|
||||
t = interpret_long_date(buf);
|
||||
buf += 8;
|
||||
break;
|
||||
default:
|
||||
t = 0;
|
||||
break;
|
||||
}
|
||||
if (t != 0) {
|
||||
lt = localtime(&t);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user