mirror of
https://github.com/nmap/nmap.git
synced 2025-12-06 04:31:29 +00:00
Update libpcap to 1.7.3, partially addressing #34
This commit is contained in:
@@ -1,3 +1,50 @@
|
||||
Friday Apr. 10, 2015 guy@alum.mit.edu
|
||||
Summary for 1.7.3 libpcap release
|
||||
Work around a Linux bonding driver bug.
|
||||
|
||||
Thursday Feb. 12, 2015 guy@alum.mit.edu/mcr@sandelman.ca
|
||||
Summary for 1.7.2 libpcap release
|
||||
Support for filtering Geneve encapsulated packets.
|
||||
Generalize encapsulation handling, fixing some bugs.
|
||||
Don't add null addresses to address lists.
|
||||
Add pcap_dump_open_append() to open for appending.
|
||||
Fix the swapping of isochronous descriptors in Linux USB.
|
||||
Attempt to handle TPACKET_V1 with 32-bit userland and 64-bit kernel.
|
||||
|
||||
Wednesday Nov. 12, 2014 guy@alum.mit.edu/mcr@sandelman.ca
|
||||
Summary for 1.7.0 libpcap release
|
||||
Fix handling of zones for BPF on Solaris
|
||||
new DLT for ZWAVE
|
||||
clarifications for read timeouts.
|
||||
Use BPF extensions in compiled filters, fixing VLAN filters
|
||||
some fixes to compilation without stdint.h
|
||||
EBUSY can now be returned by SNFv3 code.
|
||||
Fix the range checks in BPF loads
|
||||
Various DAG fixes.
|
||||
Various Linux fixes.
|
||||
|
||||
Monday Aug. 12, 2014 guy@alum.mit.edu
|
||||
Summary for 1.6.2 libpcap release
|
||||
Don't crash on filters testing a non-existent link-layer type
|
||||
field.
|
||||
Fix sending in non-blocking mode on Linux with memory-mapped
|
||||
capture.
|
||||
Fix timestamps when reading pcap-ng files on big-endian
|
||||
machines.
|
||||
|
||||
Saturday Jul. 19, 2014 mcr@sandelman.ca
|
||||
Summary for 1.6.1 libpcap release
|
||||
some fixes for the any device
|
||||
changes for how --enable-XXX (--enable-sniffing, --enable-can) works
|
||||
|
||||
Wednesday Jul. 2, 2014 mcr@sandelman.ca
|
||||
Summary for 1.6.0 libpcap release
|
||||
Don't support D-Bus sniffing on OS X
|
||||
fixes for byte order issues with NFLOG captures
|
||||
Handle using cooked mode for DLT_NETLINK in activate_new().
|
||||
on platforms where you can not capture on down interfaces, do not list them
|
||||
but: do list interfaces which are down, if you can capture on them!
|
||||
|
||||
Wednesday December 18, 2013 guy@alum.mit.edu
|
||||
Summary for 1.5.3 libpcap release
|
||||
Don't let packets that don't match the current filter get to the
|
||||
|
||||
@@ -2,11 +2,12 @@ This file lists people who have contributed to libpcap:
|
||||
|
||||
The current maintainers:
|
||||
Bill Fenner <fenner at research dot att dot com>
|
||||
Denis Ovsienko <infrastation at yandex dot ru>
|
||||
Denis Ovsienko <denis at ovsienko dot info>
|
||||
Fulvio Risso <risso at polito dot it>
|
||||
Guy Harris <guy at alum dot mit dot edu>
|
||||
Hannes Gredler <hannes at juniper dot net>
|
||||
Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
|
||||
Francois-Xavier Le Bail <fx dot lebail at yahoo dot com>
|
||||
|
||||
Additional people who have contributed patches:
|
||||
|
||||
@@ -83,6 +84,7 @@ Additional people who have contributed patches:
|
||||
Jefferson Ogata <jogata at nodc dot noaa dot gov>
|
||||
Jesper Dangaard Brouer <hawk at comx dot dk>
|
||||
Jesper Peterson <jesper at endace dot com>
|
||||
Jesse Gross <jesse at nicira dot com>
|
||||
Jiri Slaby <jirislaby at gmail dot com>
|
||||
Joerg Mayer <jmayer at loplof dot de>
|
||||
John Bankier <jbankier at rainfinity dot com>
|
||||
@@ -105,13 +107,14 @@ Additional people who have contributed patches:
|
||||
Mansour Behabadi <mansour at oxplot dot com>
|
||||
Marcus Felipe Pereira <marcus at task dot com dot br>
|
||||
Mark C. Brown <mbrown at hp dot com>
|
||||
Mark Johnston <markjdb at gmail dot com>
|
||||
Mark Pizzolato <List-tcpdump-workers at subscriptions dot pizzolato dot net>
|
||||
Markus Mayer <markus_mayer at sourceforge dot net>
|
||||
Martin Husemann <martin at netbsd dot org>
|
||||
Márton Németh <nm127 at freemail dot hu>
|
||||
Matthew Luckie <mjl at luckie dot org dot nz>
|
||||
Max Laier <max at love2party dot net>
|
||||
Michal Labedzki
|
||||
Michal Labedzki <michal dot labedzki at tieto dot com>
|
||||
Michal Sekletar <msekleta at redhat dot com>
|
||||
Mike Frysinger <vapier at gmail dot com>
|
||||
Mike Kershaw <dragorn at kismetwireless dot net>
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
@(#) $Header: /tcpdump/master/libpcap/INSTALL.txt,v 1.29 2008-06-12 20:21:51 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
|
||||
@@ -31,19 +29,14 @@ 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/
|
||||
the generally available GNU C compiler (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.
|
||||
at flex.sourceforge.net and often comes packaged by means of the OS.
|
||||
As of this writing, the current version is 2.5.37.
|
||||
|
||||
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
|
||||
@@ -352,7 +345,6 @@ nametoaddr.c - hostname to address routines
|
||||
nlpid.h - OSI network layer protocol identifier definitions
|
||||
net - symlink to bpf/net
|
||||
optimize.c - BPF optimization routines
|
||||
packaging - packaging information for building libpcap RPMs
|
||||
pcap/bluetooth.h - public definition of DLT_BLUETOOTH_HCI_H4_WITH_PHDR header
|
||||
pcap/bpf.h - BPF definitions
|
||||
pcap/namedb.h - public libpcap name database definitions
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# @(#) $Header: /tcpdump/master/libpcap/Makefile.in,v 1.142 2008-11-22 17:30:24 guy Exp $ (LBL)
|
||||
|
||||
#
|
||||
# Various configurable paths (remember to edit Makefile.in, not Makefile)
|
||||
@@ -55,8 +53,9 @@ DEFS = @DEFS@ @V_DEFS@
|
||||
ADDLOBJS = @ADDLOBJS@
|
||||
ADDLARCHIVEOBJS = @ADDLARCHIVEOBJS@
|
||||
LIBS = @LIBS@
|
||||
CFLAGS = @CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
CROSSFLAGS=
|
||||
CFLAGS = @CFLAGS@ ${CROSSFLAGS}
|
||||
LDFLAGS = @LDFLAGS@ ${CROSSFLAGS}
|
||||
DYEXT = @DYEXT@
|
||||
V_RPATH_OPT = @V_RPATH_OPT@
|
||||
DEPENDENCY_CFLAG = @DEPENDENCY_CFLAG@
|
||||
@@ -77,7 +76,7 @@ RANLIB = @RANLIB@
|
||||
@rm -f $@
|
||||
$(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
|
||||
|
||||
PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @CAN_SRC@ @NETFILTER_SRC@ @CANUSB_SRC@ @DBUS_SRC@
|
||||
PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @BT_MONITOR_SRC@ @CAN_SRC@ @NETFILTER_SRC@ @CANUSB_SRC@ @DBUS_SRC@
|
||||
FSRC = fad-@V_FINDALLDEVS@.c
|
||||
SSRC = @SSRC@
|
||||
CSRC = pcap.c inet.c gencode.c optimize.c nametoaddr.c etherent.c \
|
||||
@@ -99,6 +98,7 @@ PUBHDR = \
|
||||
pcap/bluetooth.h \
|
||||
pcap/ipnet.h \
|
||||
pcap/namedb.h \
|
||||
pcap/nflog.h \
|
||||
pcap/pcap.h \
|
||||
pcap/sll.h \
|
||||
pcap/vlan.h \
|
||||
@@ -121,17 +121,17 @@ HDR = $(PUBHDR) \
|
||||
sunatmpos.h
|
||||
|
||||
TESTS = \
|
||||
capturetest \
|
||||
filtertest \
|
||||
findalldevstest \
|
||||
nonblocktest \
|
||||
opentest \
|
||||
selpolltest \
|
||||
valgrindtest
|
||||
|
||||
TESTS_SRC = \
|
||||
tests/capturetest.c \
|
||||
tests/filtertest.c \
|
||||
tests/findalldevstest.c \
|
||||
tests/nonblocktest.c \
|
||||
tests/opentest.c \
|
||||
tests/reactivatetest.c \
|
||||
tests/selpolltest.c \
|
||||
@@ -284,10 +284,11 @@ EXTRA_DIST = \
|
||||
msdos/pktdrvr.h \
|
||||
msdos/readme.dos \
|
||||
org.tcpdump.chmod_bpf.plist \
|
||||
packaging/pcap.spec.in \
|
||||
pcap-bpf.c \
|
||||
pcap-bt-linux.c \
|
||||
pcap-bt-linux.h \
|
||||
pcap-bt-monitor-linux.c \
|
||||
pcap-bt-monitor-linux.h \
|
||||
pcap-can-linux.c \
|
||||
pcap-can-linux.h \
|
||||
pcap-canusb-linux.c \
|
||||
@@ -323,6 +324,7 @@ EXTRA_DIST = \
|
||||
pcap-usb-linux.h \
|
||||
pcap-win32.c \
|
||||
runlex.sh \
|
||||
scanner.c.top \
|
||||
scanner.l \
|
||||
Win32/Include/Gnuc.h \
|
||||
Win32/Include/addrinfo.h \
|
||||
@@ -516,15 +518,15 @@ pcap-config: $(srcdir)/pcap-config.in ./config.status
|
||||
#
|
||||
tests: $(TESTS)
|
||||
|
||||
capturetest: tests/capturetest.c libpcap.a
|
||||
$(CC) $(FULL_CFLAGS) -I. -L. -o capturetest $(srcdir)/tests/capturetest.c libpcap.a $(LIBS)
|
||||
|
||||
filtertest: tests/filtertest.c libpcap.a
|
||||
$(CC) $(FULL_CFLAGS) -I. -L. -o filtertest $(srcdir)/tests/filtertest.c libpcap.a $(LIBS)
|
||||
|
||||
findalldevstest: tests/findalldevstest.c libpcap.a
|
||||
$(CC) $(FULL_CFLAGS) -I. -L. -o findalldevstest $(srcdir)/tests/findalldevstest.c libpcap.a $(LIBS)
|
||||
|
||||
nonblocktest: tests/nonblocktest.c libpcap.a
|
||||
$(CC) $(FULL_CFLAGS) -I. -L. -o nonblocktest $(srcdir)/tests/nonblocktest.c libpcap.a $(LIBS)
|
||||
|
||||
opentest: tests/opentest.c libpcap.a
|
||||
$(CC) $(FULL_CFLAGS) -I. -L. -o opentest $(srcdir)/tests/opentest.c libpcap.a $(LIBS)
|
||||
|
||||
@@ -595,6 +597,8 @@ install: install-shared install-archive pcap-config
|
||||
$(LN_S) pcap_open_offline.3pcap pcap_fopen_offline.3pcap && \
|
||||
rm -f pcap_fopen_offline_with_tstamp_precision.3pcap && \
|
||||
$(LN_S) pcap_open_offline.3pcap pcap_fopen_offline_with_tstamp_precision.3pcap && \
|
||||
rm -f pcap_tstamp_type_val_to_description.3pcap && \
|
||||
$(LN_S) pcap_tstamp_type_val_to_name.3pcap pcap_tstamp_type_val_to_description.3pcap && \
|
||||
rm -f pcap_getnonblock.3pcap && \
|
||||
$(LN_S) pcap_setnonblock.3pcap pcap_getnonblock.3pcap)
|
||||
for i in $(MANFILE); do \
|
||||
@@ -678,6 +682,7 @@ uninstall: uninstall-shared
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline_with_tstamp_precision.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_tstamp_type_val_to_description.3pcap
|
||||
for i in $(MANFILE); do \
|
||||
rm -f $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@/`echo $$i | sed 's/.manfile.in/.@MAN_FILE_FORMATS@/'`; done
|
||||
for i in $(MANMISC); do \
|
||||
@@ -717,10 +722,6 @@ distclean: clean
|
||||
tags: $(TAGFILES)
|
||||
ctags -wtd $(TAGFILES)
|
||||
|
||||
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`/ $< > $@
|
||||
|
||||
releasetar:
|
||||
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
|
||||
mkdir $$name; \
|
||||
@@ -731,4 +732,4 @@ releasetar:
|
||||
rm -rf $$name
|
||||
|
||||
depend: $(GENSRC) $(GENHDR) bpf_filter.c
|
||||
$(MKDEP) -c $(CC) -m $(DEPENDENCY_CFLAG) $(DEFS) $(INCLS) $(SRC)
|
||||
$(MKDEP) -c $(CC) -m $(CFLAGS) $(DEPENDENCY_CFLAG) $(DEFS) $(INCLS) $(SRC)
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
From 0198a593ef29d7af319b02dd33f251b58d117827 Mon Sep 17 00:00:00 2001
|
||||
From: David Fifield <david@bamsoftware.com>
|
||||
Date: Mon, 9 Apr 2012 16:55:51 -0700
|
||||
From f38b1fc263d65a53746108e2c9afacf1dc6a058a Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Miller <daniel@bonsaiviking.com>
|
||||
Date: Fri, 1 May 2015 14:44:28 +0000
|
||||
Subject: [PATCH 1/2] Don't autogenerate Lex/Yacc files.
|
||||
|
||||
---
|
||||
Makefile.in | 30 ++++++++++--------------------
|
||||
configure.in | 20 --------------------
|
||||
2 files changed, 10 insertions(+), 40 deletions(-)
|
||||
libpcap/Makefile.in | 33 ++++++++++-----------------------
|
||||
libpcap/configure.in | 20 --------------------
|
||||
2 files changed, 10 insertions(+), 43 deletions(-)
|
||||
|
||||
diff --git Makefile.in Makefile.in
|
||||
index 912b7e3..0db12a4 100644
|
||||
--- Makefile.in
|
||||
+++ Makefile.in
|
||||
@@ -67,14 +67,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
diff --git a/libpcap/Makefile.in b/libpcap/Makefile.in
|
||||
index f317973..577b848 100644
|
||||
--- a/libpcap/Makefile.in
|
||||
+++ b/libpcap/Makefile.in
|
||||
@@ -69,14 +69,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
RANLIB = @RANLIB@
|
||||
|
||||
@@ -27,7 +27,7 @@ index 912b7e3..0db12a4 100644
|
||||
# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
|
||||
# Also, gcc does not remove the .o before forking 'as', which can be a
|
||||
# problem if you don't own the file but can write to the directory.
|
||||
@@ -147,7 +139,7 @@ TAGFILES = \
|
||||
@@ -152,7 +144,7 @@ TAGFILES = \
|
||||
$(SRC) $(HDR)
|
||||
|
||||
CLEANFILES = $(OBJ) libpcap.* $(TESTS) \
|
||||
@@ -36,7 +36,7 @@ index 912b7e3..0db12a4 100644
|
||||
lex.yy.c pcap-config
|
||||
|
||||
MAN1 = pcap-config.1
|
||||
@@ -345,6 +337,15 @@ EXTRA_DIST = \
|
||||
@@ -360,6 +352,15 @@ EXTRA_DIST = \
|
||||
|
||||
all: libpcap.a shared pcap-config
|
||||
|
||||
@@ -52,13 +52,16 @@ index 912b7e3..0db12a4 100644
|
||||
libpcap.a: $(OBJ)
|
||||
@rm -f $@
|
||||
$(AR) rc $@ $(OBJ) $(ADDLARCHIVEOBJS)
|
||||
@@ -428,22 +429,11 @@ libpcap.shareda: $(OBJ)
|
||||
@@ -443,25 +444,11 @@ libpcap.shareda: $(OBJ)
|
||||
#
|
||||
libpcap.none:
|
||||
|
||||
-scanner.c: $(srcdir)/scanner.l
|
||||
- @rm -f $@
|
||||
- @rm -f $@ $@.bottom
|
||||
- $(srcdir)/runlex.sh $(LEX) -o$@ $<
|
||||
- mv $@ $@.bottom
|
||||
- cat $@.top $@.bottom > $@
|
||||
- @rm $@.bottom
|
||||
-
|
||||
scanner.o: scanner.c tokdefs.h
|
||||
$(CC) $(FULL_CFLAGS) -c scanner.c
|
||||
@@ -75,11 +78,11 @@ index 912b7e3..0db12a4 100644
|
||||
grammar.o: grammar.c
|
||||
@rm -f $@
|
||||
$(CC) $(FULL_CFLAGS) -Dyylval=pcap_lval -c grammar.c
|
||||
diff --git configure.in configure.in
|
||||
index 6a146ca..24097b2 100644
|
||||
--- configure.in
|
||||
+++ configure.in
|
||||
@@ -998,24 +998,6 @@ if test "$V_PCAP" = snf -a "$ac_cv_lbl_snf_api" = no; then
|
||||
diff --git a/libpcap/configure.in b/libpcap/configure.in
|
||||
index be4b29e..ec87283 100644
|
||||
--- a/libpcap/configure.in
|
||||
+++ b/libpcap/configure.in
|
||||
@@ -1051,24 +1051,6 @@ if test "$V_PCAP" = snf -a "$ac_cv_lbl_snf_api" = no; then
|
||||
AC_MSG_ERROR(Specifying the capture type as 'snf' requires the Myricom Sniffer API to be present; use --with-snf=DIR)
|
||||
fi
|
||||
|
||||
@@ -104,7 +107,7 @@ index 6a146ca..24097b2 100644
|
||||
#
|
||||
# Assume, by default, no support for shared libraries and V7/BSD convention
|
||||
# for man pages (file formats in section 5, miscellaneous info in section 7).
|
||||
@@ -1250,13 +1232,11 @@ AC_SUBST(V_CCOPT)
|
||||
@@ -1351,13 +1333,11 @@ AC_SUBST(V_CCOPT)
|
||||
AC_SUBST(V_DEFS)
|
||||
AC_SUBST(V_FINDALLDEVS)
|
||||
AC_SUBST(V_INCLS)
|
||||
@@ -119,5 +122,5 @@ index 6a146ca..24097b2 100644
|
||||
AC_SUBST(ADDLARCHIVEOBJS)
|
||||
AC_SUBST(SSRC)
|
||||
--
|
||||
1.7.9.5
|
||||
1.9.1
|
||||
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
From 3807934db1b073534a01d9a8546cddcec9be501f Mon Sep 17 00:00:00 2001
|
||||
From: David Fifield <david@bamsoftware.com>
|
||||
Date: Mon, 9 Apr 2012 17:02:40 -0700
|
||||
Subject: [PATCH 2/2] Add the --disable-packet-ring configure option.
|
||||
|
||||
This allows the creation of 32-bit binaries that are compatible with
|
||||
64-bit Linux kernels before version 2.6.27.
|
||||
---
|
||||
configure.in | 18 ++++++++++++++++++
|
||||
pcap-linux.c | 18 ++++++++++--------
|
||||
config.h.in | 3 +++
|
||||
3 files changed, 31 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git configure.in configure.in
|
||||
index 24097b2..5eca6ab 100644
|
||||
--- configure.in
|
||||
+++ configure.in
|
||||
@@ -1404,6 +1404,24 @@ linux*)
|
||||
;;
|
||||
esac
|
||||
|
||||
+dnl The packet ring capture facility of Linux, described in
|
||||
+dnl Documentation/networking/packet_mmap.txt, is not 32/64-bit compatible before
|
||||
+dnl version 2.6.27. A 32-bit kernel requires a 32-bit userland, and likewise for
|
||||
+dnl 64-bit. The effect of this is that a 32-bit libpcap binary will not run
|
||||
+dnl correctly on a 64-bit kernel (the binary will use the wrong offsets into a
|
||||
+dnl kernel struct). This problem was solved in Linux 2.6.27. Use
|
||||
+dnl --disable-packet-ring whenever a 32-bit application must run on a 64-bit
|
||||
+dnl target host, and either the build host or the target host run Linux 2.6.26
|
||||
+dnl or earlier.
|
||||
+AC_ARG_ENABLE([packet-ring],
|
||||
+[AC_HELP_STRING([--enable-packet-ring],[enable Linux packet ring support @<:@default=yes@:>@])],
|
||||
+,enable_packet_ring=yes)
|
||||
+
|
||||
+if test "x$enable_packet_ring" != "xno" ; then
|
||||
+ AC_DEFINE(PCAP_SUPPORT_PACKET_RING, 1, [use Linux packet ring capture if available])
|
||||
+ AC_SUBST(PCAP_SUPPORT_PACKET_RING)
|
||||
+fi
|
||||
+
|
||||
AC_PROG_INSTALL
|
||||
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
diff --git pcap-linux.c pcap-linux.c
|
||||
index 17bd0f5..bd2457d 100644
|
||||
--- pcap-linux.c
|
||||
+++ pcap-linux.c
|
||||
@@ -196,17 +196,19 @@ static const char rcsid[] _U_ =
|
||||
/* check for memory mapped access avaibility. We assume every needed
|
||||
* struct is defined if the macro TPACKET_HDRLEN is defined, because it
|
||||
* uses many ring related structs and macros */
|
||||
-# ifdef TPACKET_HDRLEN
|
||||
-# define HAVE_PACKET_RING
|
||||
-# ifdef TPACKET3_HDRLEN
|
||||
-# define HAVE_TPACKET3
|
||||
-# endif /* TPACKET3_HDRLEN */
|
||||
-# ifdef TPACKET2_HDRLEN
|
||||
-# define HAVE_TPACKET2
|
||||
-# else /* TPACKET2_HDRLEN */
|
||||
-# define TPACKET_V1 0 /* Old kernel with only V1, so no TPACKET_Vn defined */
|
||||
-# endif /* TPACKET2_HDRLEN */
|
||||
-# endif /* TPACKET_HDRLEN */
|
||||
+# ifdef PCAP_SUPPORT_PACKET_RING
|
||||
+# ifdef TPACKET_HDRLEN
|
||||
+# define HAVE_PACKET_RING
|
||||
+# ifdef TPACKET3_HDRLEN
|
||||
+# define HAVE_TPACKET3
|
||||
+# endif /* TPACKET3_HDRLEN */
|
||||
+# ifdef TPACKET2_HDRLEN
|
||||
+# define HAVE_TPACKET2
|
||||
+# else /* TPACKET2_HDRLEN */
|
||||
+# define TPACKET_V1 0 /* Old kernel with only V1, so no TPACKET_Vn defined */
|
||||
+# endif /* TPACKET2_HDRLEN */
|
||||
+# endif /* TPACKET_HDRLEN */
|
||||
+# endif /* PCAP_SUPPORT_PACKET_RING */
|
||||
#endif /* PF_PACKET */
|
||||
|
||||
#ifdef SO_ATTACH_FILTER
|
||||
--- config.h.in
|
||||
+++ config.h.in
|
||||
@@ -271,6 +271,9 @@
|
||||
/* target host supports USB sniffing */
|
||||
#undef PCAP_SUPPORT_USB
|
||||
|
||||
+/* target host supports packet ring capture */
|
||||
+#undef PCAP_SUPPORT_PACKET_RING
|
||||
+
|
||||
/* include ACN support */
|
||||
#undef SITA
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
From 7a42932439162be1f263986cdc7bbef78840a71a Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Miller <daniel@bonsaiviking.com>
|
||||
Date: Fri, 1 May 2015 14:53:42 +0000
|
||||
Subject: [PATCH 2/2] Disable unnecessary features
|
||||
|
||||
The following features are disabled:
|
||||
|
||||
* monitor-mode sniffing of wireless interfaces on Linux, via libnl
|
||||
@@ -6,12 +11,15 @@ The following features are disabled:
|
||||
* canusb support
|
||||
* CAN support
|
||||
* dbus capture support
|
||||
---
|
||||
libpcap/configure.in | 24 ++++++++++++------------
|
||||
1 file changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/libpcap/configure.in b/libpcap/configure.in
|
||||
index 5386062..8ceddd7 100644
|
||||
index ec87283..ad2e437 100644
|
||||
--- a/libpcap/configure.in
|
||||
+++ b/libpcap/configure.in
|
||||
@@ -441,10 +441,10 @@ linux)
|
||||
@@ -450,10 +450,10 @@ linux)
|
||||
# Do we have libnl?
|
||||
#
|
||||
AC_ARG_WITH(libnl,
|
||||
@@ -23,8 +31,8 @@ index 5386062..8ceddd7 100644
|
||||
+ if test x$with_libnl = xyes ; then
|
||||
have_any_nl="no"
|
||||
|
||||
#
|
||||
@@ -1285,8 +1285,8 @@ solaris*)
|
||||
incdir=-I/usr/include/libnl3
|
||||
@@ -1301,8 +1301,8 @@ solaris*)
|
||||
esac
|
||||
|
||||
AC_ARG_ENABLE(shared,
|
||||
@@ -35,43 +43,43 @@ index 5386062..8ceddd7 100644
|
||||
|
||||
AC_PROG_RANLIB
|
||||
AC_CHECK_TOOL([AR], [ar])
|
||||
@@ -1434,9 +1434,9 @@ AC_SUBST(PCAP_SUPPORT_NETFILTER)
|
||||
@@ -1457,9 +1457,9 @@ AC_SUBST(PCAP_SUPPORT_NETFILTER)
|
||||
AC_SUBST(NETFILTER_SRC)
|
||||
|
||||
AC_ARG_ENABLE([bluetooth],
|
||||
-[AC_HELP_STRING([--enable-bluetooth],[enable Bluetooth support @<:@default=yes, if support available@:>@])],
|
||||
+[AC_HELP_STRING([--enable-bluetooth],[enable Bluetooth support @<:@default=no@:>@])],
|
||||
[],
|
||||
- [enable_bluetooth=yes])
|
||||
- [enable_bluetooth=ifsupportavailable])
|
||||
+ [enable_bluetooth=no])
|
||||
|
||||
if test "x$enable_bluetooth" != "xno" ; then
|
||||
dnl check for Bluetooth sniffing support
|
||||
@@ -1480,9 +1480,9 @@ if test "x$enable_bluetooth" != "xno" ; then
|
||||
@@ -1536,9 +1536,9 @@ if test "x$enable_bluetooth" != "xno" ; then
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([canusb],
|
||||
-[AC_HELP_STRING([--enable-canusb],[enable canusb support @<:@default=yes, if support available@:>@])],
|
||||
+[AC_HELP_STRING([--enable-canusb],[enable canusb support @<:@default=no@:>@])],
|
||||
[],
|
||||
- [enable_canusb=yes])
|
||||
- [enable_canusb=ifsupportavailable])
|
||||
+ [enable_canusb=no])
|
||||
|
||||
if test "x$enable_canusb" != "xno" ; then
|
||||
dnl check for canusb support
|
||||
@@ -1507,9 +1507,9 @@ if test "x$enable_canusb" != "xno" ; then
|
||||
@@ -1582,9 +1582,9 @@ if test "x$enable_canusb" != "xno" ; then
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([can],
|
||||
-[AC_HELP_STRING([--enable-can],[enable CAN support @<:@default=yes, if support available@:>@])],
|
||||
+[AC_HELP_STRING([--enable-can],[enable CAN support @<:@default=no@:>@])],
|
||||
[],
|
||||
- [enable_can=yes])
|
||||
- [enable_can=ifsupportavailable])
|
||||
+ [enable_can=no])
|
||||
|
||||
if test "x$enable_can" != "xno" ; then
|
||||
dnl check for CAN sniffing support
|
||||
@@ -1532,9 +1532,9 @@ if test "x$enable_can" != "xno" ; then
|
||||
@@ -1619,9 +1619,9 @@ if test "x$enable_can" != "xno" ; then
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([dbus],
|
||||
@@ -82,4 +90,7 @@ index 5386062..8ceddd7 100644
|
||||
+ [enable_dbus=no])
|
||||
|
||||
if test "x$enable_dbus" != "xno"; then
|
||||
AC_CHECK_PROG([PKGCONFIG], [pkg-config], [pkg-config], [no])
|
||||
if test "x$enable_dbus" = "xyes"; then
|
||||
--
|
||||
1.9.1
|
||||
|
||||
@@ -9,14 +9,13 @@ cd nmap
|
||||
rsync -rv --delete ~/libpcap-X.Y/ ~/nmap/libpcap/
|
||||
git add -A libpcap
|
||||
cd libpcap
|
||||
# Apply the pre-configure patch.
|
||||
git apply -p0 --directory=libpcap/ ~/NMAP_MODIFICATIONS/pre-configure.patch
|
||||
./configure
|
||||
make grammar.c scanner.c scanner.h tokdefs.h
|
||||
git add grammar.c scanner.c scanner.h tokdefs.h
|
||||
cd ..
|
||||
# Apply patches.
|
||||
git apply -p0 --directory=libpcap/ ~/NMAP_MODIFICATIONS/000*
|
||||
git apply ~/NMAP_MODIFICATIONS/000*
|
||||
# Make changes as necessary and update the patch files
|
||||
cd libpcap
|
||||
autoconf
|
||||
cd ..
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
diff --git scanner.l scanner.l
|
||||
index 064e9c8..93d7b97 100644
|
||||
--- scanner.l
|
||||
+++ scanner.l
|
||||
@@ -1,3 +1,10 @@
|
||||
+%top{
|
||||
+/* Must come first for _LARGE_FILE_API on AIX. */
|
||||
+#ifdef HAVE_CONFIG_H
|
||||
+#include "config.h"
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
%{
|
||||
/*
|
||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||
@@ -25,10 +32,6 @@ static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.112 2008-02-06 10:21:30 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
-#ifdef HAVE_CONFIG_H
|
||||
-#include "config.h"
|
||||
-#endif
|
||||
-
|
||||
#ifdef WIN32
|
||||
#include <pcap-stdinc.h>
|
||||
#else /* WIN32 */
|
||||
@@ -1,5 +1,3 @@
|
||||
@(#) $Header: /tcpdump/master/libpcap/README,v 1.34 2008-12-14 19:44:14 guy Exp $ (LBL)
|
||||
|
||||
LIBPCAP 1.x.y
|
||||
|
||||
www.tcpdump.org
|
||||
|
||||
@@ -11,6 +11,11 @@ Using BPF:
|
||||
same, and the configure script should detect that it's on an AIX
|
||||
system and choose BPF even if the devices aren't there.
|
||||
|
||||
Also note that tcpdump _binary_ compiled on AIX 4 may have a problem
|
||||
doing the initial loading of the BPF driver if copied to AIX 5 and
|
||||
run there (GH #52). tcpdump binary natively compiled on AIX 5 should
|
||||
not have this issue.
|
||||
|
||||
(2) If libpcap doesn't compile on your machine when configured to use
|
||||
BPF, or if the workarounds fail to make it work correctly, you
|
||||
should send to tcpdump-workers@lists.tcpdump.org a detailed bug
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.5.3
|
||||
1.7.3
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/* @(#) $Header: /tcpdump/master/libpcap/Win32/Include/Gnuc.h,v 1.1 2002-08-01 08:33:05 risso Exp $ (LBL) */
|
||||
|
||||
/* Define __P() macro, if necessary */
|
||||
|
||||
#ifndef __P
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: addrinfo.h,v 1.1 2002-08-01 08:33:05 risso Exp $ */
|
||||
|
||||
#ifndef HAVE_ADDRINFO
|
||||
|
||||
/*
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -57,7 +57,9 @@
|
||||
#ifndef _NETDB_H_
|
||||
#define _NETDB_H_
|
||||
|
||||
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_REENTRANT)
|
||||
/* MingW64 defines _POSIX_THREAD_SAFE_FUNCTIONS.
|
||||
*/
|
||||
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_REENTRANT) && !defined(__MINGW64_VERSION_MAJOR)
|
||||
#include <stdio.h>
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
@@ -55,11 +55,6 @@
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/Win32/Src/getaddrinfo.c,v 1.3 2008-09-15 23:37:51 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <pcap-stdinc.h>
|
||||
#if 0
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
@@ -36,13 +36,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: inet_aton.c,v 1.2 2003-11-15 23:24:06 guy Exp $ */
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/Win32/Src/inet_aton.c,v 1.2 2003-11-15 23:24:06 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <pcap-stdinc.h>
|
||||
|
||||
|
||||
@@ -36,13 +36,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: inet_pton.c,v 1.3 2007-09-27 18:02:20 gianluca Exp $ */
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/Win32/Src/inet_pton.c,v 1.3 2007-09-27 18:02:20 gianluca Exp $";
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
2
libpcap/aclocal.m4
vendored
2
libpcap/aclocal.m4
vendored
@@ -1,5 +1,3 @@
|
||||
dnl @(#) $Header: /tcpdump/master/libpcap/aclocal.m4,v 1.93 2008-11-18 07:29:48 guy Exp $ (LBL)
|
||||
dnl
|
||||
dnl Copyright (c) 1995, 1996, 1997, 1998
|
||||
dnl The Regents of the University of California. All rights reserved.
|
||||
dnl
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#) $Id: arcnet.h,v 1.2 2001-04-24 02:17:52 guy Exp $ (LBL)
|
||||
*
|
||||
* from: NetBSD: if_arc.h,v 1.13 1999/11/19 20:41:19 thorpej Exp
|
||||
*/
|
||||
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
* 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/atmuni31.h,v 1.3 2007-10-22 19:28:58 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* Based on UNI3.1 standard by ATM Forum */
|
||||
|
||||
@@ -38,11 +38,6 @@
|
||||
* @(#)bpf.c 7.5 (Berkeley) 7/15/91
|
||||
*/
|
||||
|
||||
#if !(defined(lint) || defined(KERNEL) || defined(_KERNEL))
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf/net/bpf_filter.c,v 1.46 2008-01-02 04:16:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -200,23 +195,39 @@ m_xhalf(m, k, err)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#include <linux/types.h>
|
||||
#include <linux/if_packet.h>
|
||||
#include <linux/filter.h>
|
||||
#endif
|
||||
|
||||
enum {
|
||||
BPF_S_ANC_NONE,
|
||||
BPF_S_ANC_VLAN_TAG,
|
||||
BPF_S_ANC_VLAN_TAG_PRESENT,
|
||||
};
|
||||
|
||||
/*
|
||||
* Execute the filter program starting at pc on the packet p
|
||||
* wirelen is the length of the original packet
|
||||
* buflen is the amount of data present
|
||||
* aux_data is auxiliary data, currently used only when interpreting
|
||||
* filters intended for the Linux kernel in cases where the kernel
|
||||
* rejects the filter; it contains VLAN tag information
|
||||
* For the kernel, p is assumed to be a pointer to an mbuf if buflen is 0,
|
||||
* in all other cases, p is a pointer to a buffer and buflen is its size.
|
||||
*/
|
||||
u_int
|
||||
bpf_filter(pc, p, wirelen, buflen)
|
||||
bpf_filter_with_aux_data(pc, p, wirelen, buflen, aux_data)
|
||||
register const struct bpf_insn *pc;
|
||||
register const u_char *p;
|
||||
u_int wirelen;
|
||||
register u_int buflen;
|
||||
register const struct bpf_aux_data *aux_data;
|
||||
{
|
||||
register u_int32 A, X;
|
||||
register int k;
|
||||
int32 mem[BPF_MEMWORDS];
|
||||
register bpf_u_int32 k;
|
||||
u_int32 mem[BPF_MEMWORDS];
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
struct mbuf *m, *n;
|
||||
int merr, len;
|
||||
@@ -255,7 +266,7 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
|
||||
case BPF_LD|BPF_W|BPF_ABS:
|
||||
k = pc->k;
|
||||
if (k + sizeof(int32) > buflen) {
|
||||
if (k > buflen || sizeof(int32_t) > buflen - k) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
@@ -272,7 +283,7 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
|
||||
case BPF_LD|BPF_H|BPF_ABS:
|
||||
k = pc->k;
|
||||
if (k + sizeof(short) > buflen) {
|
||||
if (k > buflen || sizeof(int16_t) > buflen - k) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
@@ -288,6 +299,20 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_B|BPF_ABS:
|
||||
{
|
||||
#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT)
|
||||
int code = BPF_S_ANC_NONE;
|
||||
#define ANCILLARY(CODE) case SKF_AD_OFF + SKF_AD_##CODE: \
|
||||
code = BPF_S_ANC_##CODE; \
|
||||
if (!aux_data) \
|
||||
return 0; \
|
||||
break;
|
||||
|
||||
switch (pc->k) {
|
||||
ANCILLARY(VLAN_TAG);
|
||||
ANCILLARY(VLAN_TAG_PRESENT);
|
||||
default :
|
||||
#endif
|
||||
k = pc->k;
|
||||
if (k >= buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
@@ -302,8 +327,22 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
#endif
|
||||
}
|
||||
A = p[k];
|
||||
continue;
|
||||
#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT)
|
||||
}
|
||||
switch (code) {
|
||||
case BPF_S_ANC_VLAN_TAG:
|
||||
if (aux_data)
|
||||
A = aux_data->vlan_tag;
|
||||
break;
|
||||
|
||||
case BPF_S_ANC_VLAN_TAG_PRESENT:
|
||||
if (aux_data)
|
||||
A = aux_data->vlan_tag_present;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
case BPF_LD|BPF_W|BPF_LEN:
|
||||
A = wirelen;
|
||||
continue;
|
||||
@@ -314,7 +353,8 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
|
||||
case BPF_LD|BPF_W|BPF_IND:
|
||||
k = X + pc->k;
|
||||
if (k + sizeof(int32) > buflen) {
|
||||
if (pc->k > buflen || X > buflen - pc->k ||
|
||||
sizeof(int32_t) > buflen - k) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
@@ -331,7 +371,8 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
|
||||
case BPF_LD|BPF_H|BPF_IND:
|
||||
k = X + pc->k;
|
||||
if (k + sizeof(short) > buflen) {
|
||||
if (X > buflen || pc->k > buflen - X ||
|
||||
sizeof(int16_t) > buflen - k) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
@@ -348,7 +389,7 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
|
||||
case BPF_LD|BPF_B|BPF_IND:
|
||||
k = X + pc->k;
|
||||
if (k >= buflen) {
|
||||
if (pc->k >= buflen || X >= buflen - pc->k) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
@@ -469,6 +510,12 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
A /= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_MOD|BPF_X:
|
||||
if (X == 0)
|
||||
return 0;
|
||||
A %= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_AND|BPF_X:
|
||||
A &= X;
|
||||
continue;
|
||||
@@ -477,6 +524,10 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
A |= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_XOR|BPF_X:
|
||||
A ^= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_LSH|BPF_X:
|
||||
A <<= X;
|
||||
continue;
|
||||
@@ -501,6 +552,10 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
A /= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_MOD|BPF_K:
|
||||
A %= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_AND|BPF_K:
|
||||
A &= pc->k;
|
||||
continue;
|
||||
@@ -509,6 +564,10 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
A |= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_XOR|BPF_K:
|
||||
A ^= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_LSH|BPF_K:
|
||||
A <<= pc->k;
|
||||
continue;
|
||||
@@ -532,6 +591,17 @@ bpf_filter(pc, p, wirelen, buflen)
|
||||
}
|
||||
}
|
||||
|
||||
u_int
|
||||
bpf_filter(pc, p, wirelen, buflen)
|
||||
register const struct bpf_insn *pc;
|
||||
register const u_char *p;
|
||||
u_int wirelen;
|
||||
register u_int buflen;
|
||||
{
|
||||
return bpf_filter_with_aux_data(pc, p, wirelen, buflen, NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Return true if the 'fcode' is a valid filter program.
|
||||
* The constraints are that each jump be forward and to a valid
|
||||
@@ -611,13 +681,16 @@ bpf_validate(f, len)
|
||||
case BPF_MUL:
|
||||
case BPF_OR:
|
||||
case BPF_AND:
|
||||
case BPF_XOR:
|
||||
case BPF_LSH:
|
||||
case BPF_RSH:
|
||||
case BPF_NEG:
|
||||
break;
|
||||
case BPF_DIV:
|
||||
case BPF_MOD:
|
||||
/*
|
||||
* Check for constant division by 0.
|
||||
* Check for constant division or modulus
|
||||
* by 0.
|
||||
*/
|
||||
if (BPF_SRC(p->code) == BPF_K && p->k == 0)
|
||||
return 0;
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_dump.c,v 1.15 2008-01-02 04:16:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -19,11 +19,6 @@
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.28 2008-01-02 04:16:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -216,6 +211,11 @@ bpf_image(p, n)
|
||||
fmt = "x";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_MOD|BPF_X:
|
||||
op = "mod";
|
||||
fmt = "x";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_AND|BPF_X:
|
||||
op = "and";
|
||||
fmt = "x";
|
||||
@@ -226,6 +226,11 @@ bpf_image(p, n)
|
||||
fmt = "x";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_XOR|BPF_X:
|
||||
op = "xor";
|
||||
fmt = "x";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_LSH|BPF_X:
|
||||
op = "lsh";
|
||||
fmt = "x";
|
||||
@@ -256,6 +261,11 @@ bpf_image(p, n)
|
||||
fmt = "#%d";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_MOD|BPF_K:
|
||||
op = "mod";
|
||||
fmt = "#%d";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_AND|BPF_K:
|
||||
op = "and";
|
||||
fmt = "#0x%x";
|
||||
@@ -266,6 +276,11 @@ bpf_image(p, n)
|
||||
fmt = "#0x%x";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_XOR|BPF_K:
|
||||
op = "xor";
|
||||
fmt = "#0x%x";
|
||||
break;
|
||||
|
||||
case BPF_ALU|BPF_LSH|BPF_K:
|
||||
op = "lsh";
|
||||
fmt = "#%d";
|
||||
|
||||
393
libpcap/config.guess
vendored
393
libpcap/config.guess
vendored
@@ -1,14 +1,12 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
# Free Software Foundation, Inc.
|
||||
# Copyright 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2009-12-30'
|
||||
timestamp='2015-02-23'
|
||||
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
@@ -17,26 +15,22 @@ timestamp='2009-12-30'
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
|
||||
# Originally written by Per Bothner. Please send patches (context
|
||||
# diff format) to <config-patches@gnu.org> and include a ChangeLog
|
||||
# entry.
|
||||
# the same distribution terms that you use for the rest of that
|
||||
# program. This Exception is an additional permission under section 7
|
||||
# of the GNU General Public License, version 3 ("GPLv3").
|
||||
#
|
||||
# This script attempts to guess a canonical system name similar to
|
||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||
# exits with 0. Otherwise, it exits with 1.
|
||||
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
|
||||
#
|
||||
# You can get the latest version of this script from:
|
||||
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
||||
#
|
||||
# Please send patches to <config-patches@gnu.org>.
|
||||
|
||||
|
||||
me=`echo "$0" | sed -e 's,.*/,,'`
|
||||
|
||||
@@ -56,9 +50,7 @@ version="\
|
||||
GNU config.guess ($timestamp)
|
||||
|
||||
Originally written by Per Bothner.
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
|
||||
Software Foundation, Inc.
|
||||
Copyright 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
@@ -140,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||
|
||||
case "${UNAME_SYSTEM}" in
|
||||
Linux|GNU|GNU/*)
|
||||
# If the system lacks a compiler, then just pick glibc.
|
||||
# We could probably try harder.
|
||||
LIBC=gnu
|
||||
|
||||
eval $set_cc_for_build
|
||||
cat <<-EOF > $dummy.c
|
||||
#include <features.h>
|
||||
#if defined(__UCLIBC__)
|
||||
LIBC=uclibc
|
||||
#elif defined(__dietlibc__)
|
||||
LIBC=dietlibc
|
||||
#else
|
||||
LIBC=gnu
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
|
||||
;;
|
||||
esac
|
||||
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
*:NetBSD:*:*)
|
||||
# NetBSD (nbsd) targets should (where applicable) match one or
|
||||
# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
|
||||
# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
|
||||
# *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
|
||||
# switched to ELF, *-*-netbsd* would select the old
|
||||
# object file format. This provides both forward
|
||||
@@ -155,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
# Note: NetBSD doesn't particularly care about the vendor
|
||||
# portion of the name. We always set it to "unknown".
|
||||
sysctl="sysctl -n hw.machine_arch"
|
||||
UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
||||
/usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
||||
UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
|
||||
/sbin/$sysctl 2>/dev/null || \
|
||||
/usr/sbin/$sysctl 2>/dev/null || \
|
||||
echo unknown)`
|
||||
case "${UNAME_MACHINE_ARCH}" in
|
||||
armeb) machine=armeb-unknown ;;
|
||||
arm*) machine=arm-unknown ;;
|
||||
sh3el) machine=shl-unknown ;;
|
||||
sh3eb) machine=sh-unknown ;;
|
||||
sh5el) machine=sh5le-unknown ;;
|
||||
earmv*)
|
||||
arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
|
||||
endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
|
||||
machine=${arch}${endian}-unknown
|
||||
;;
|
||||
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
||||
esac
|
||||
# The Operating System including object format, if it has switched
|
||||
# to ELF recently, or will in the future.
|
||||
case "${UNAME_MACHINE_ARCH}" in
|
||||
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||
arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||
eval $set_cc_for_build
|
||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep -q __ELF__
|
||||
@@ -184,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
os=netbsd
|
||||
;;
|
||||
esac
|
||||
# Determine ABI tags.
|
||||
case "${UNAME_MACHINE_ARCH}" in
|
||||
earm*)
|
||||
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
|
||||
abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
|
||||
;;
|
||||
esac
|
||||
# The OS release
|
||||
# Debian GNU/NetBSD machines have a different userland, and
|
||||
# thus, need a distinct triplet. However, they do not need
|
||||
@@ -200,7 +227,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||
# contains redundant information, the shorter form:
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||
echo "${machine}-${os}${release}"
|
||||
echo "${machine}-${os}${release}${abi}"
|
||||
exit ;;
|
||||
*:Bitrig:*:*)
|
||||
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
|
||||
echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
|
||||
exit ;;
|
||||
*:OpenBSD:*:*)
|
||||
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
|
||||
@@ -270,7 +301,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
exit ;;
|
||||
# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
|
||||
exitcode=$?
|
||||
trap '' 0
|
||||
exit $exitcode ;;
|
||||
Alpha\ *:Windows_NT*:*)
|
||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||
# Should we change UNAME_MACHINE based on the output of uname instead
|
||||
@@ -301,7 +335,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit ;;
|
||||
arm:riscos:*:*|arm:RISCOS:*:*)
|
||||
arm*:riscos:*:*|arm*:RISCOS:*:*)
|
||||
echo arm-unknown-riscos
|
||||
exit ;;
|
||||
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
||||
@@ -552,15 +586,16 @@ EOF
|
||||
echo rs6000-ibm-aix3.2
|
||||
fi
|
||||
exit ;;
|
||||
*:AIX:*:[456])
|
||||
*:AIX:*:[4567])
|
||||
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
|
||||
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
|
||||
IBM_ARCH=rs6000
|
||||
else
|
||||
IBM_ARCH=powerpc
|
||||
fi
|
||||
if [ -x /usr/bin/oslevel ] ; then
|
||||
IBM_REV=`/usr/bin/oslevel`
|
||||
if [ -x /usr/bin/lslpp ] ; then
|
||||
IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
|
||||
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
|
||||
else
|
||||
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
||||
fi
|
||||
@@ -789,21 +824,26 @@ EOF
|
||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||
exit ;;
|
||||
*:FreeBSD:*:*)
|
||||
case ${UNAME_MACHINE} in
|
||||
pc98)
|
||||
echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
||||
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||
case ${UNAME_PROCESSOR} in
|
||||
amd64)
|
||||
echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
||||
*)
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
||||
echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
|
||||
esac
|
||||
exit ;;
|
||||
i*:CYGWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-cygwin
|
||||
exit ;;
|
||||
*:MINGW64*:*)
|
||||
echo ${UNAME_MACHINE}-pc-mingw64
|
||||
exit ;;
|
||||
*:MINGW*:*)
|
||||
echo ${UNAME_MACHINE}-pc-mingw32
|
||||
exit ;;
|
||||
*:MSYS*:*)
|
||||
echo ${UNAME_MACHINE}-pc-msys
|
||||
exit ;;
|
||||
i*:windows32*:*)
|
||||
# uname -m includes "-pc" on this system.
|
||||
echo ${UNAME_MACHINE}-mingw32
|
||||
@@ -849,15 +889,22 @@ EOF
|
||||
exit ;;
|
||||
*:GNU:*:*)
|
||||
# the GNU system
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit ;;
|
||||
*:GNU/*:*:*)
|
||||
# other systems with GNU libc and userland
|
||||
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
|
||||
exit ;;
|
||||
i*86:Minix:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-minix
|
||||
exit ;;
|
||||
aarch64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
aarch64_be:Linux:*:*)
|
||||
UNAME_MACHINE=aarch64_be
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
alpha:Linux:*:*)
|
||||
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
||||
EV5) UNAME_MACHINE=alphaev5 ;;
|
||||
@@ -869,50 +916,54 @@ EOF
|
||||
EV68*) UNAME_MACHINE=alphaev68 ;;
|
||||
esac
|
||||
objdump --private-headers /bin/sh | grep -q ld.so.1
|
||||
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
||||
if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
arc:Linux:*:* | arceb:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
arm*:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep -q __ARM_EABI__
|
||||
then
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
|
||||
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||
| grep -q __ARM_PCS_VFP
|
||||
then
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
|
||||
fi
|
||||
fi
|
||||
exit ;;
|
||||
avr32*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
cris:Linux:*:*)
|
||||
echo cris-axis-linux-gnu
|
||||
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
|
||||
exit ;;
|
||||
crisv32:Linux:*:*)
|
||||
echo crisv32-axis-linux-gnu
|
||||
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
|
||||
exit ;;
|
||||
frv:Linux:*:*)
|
||||
echo frv-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
hexagon:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
i*86:Linux:*:*)
|
||||
LIBC=gnu
|
||||
eval $set_cc_for_build
|
||||
sed 's/^ //' << EOF >$dummy.c
|
||||
#ifdef __dietlibc__
|
||||
LIBC=dietlibc
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
|
||||
echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
|
||||
echo ${UNAME_MACHINE}-pc-linux-${LIBC}
|
||||
exit ;;
|
||||
ia64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
m32r*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
m68*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
mips:Linux:*:* | mips64:Linux:*:*)
|
||||
eval $set_cc_for_build
|
||||
@@ -931,51 +982,63 @@ EOF
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
|
||||
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
|
||||
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
|
||||
;;
|
||||
or32:Linux:*:*)
|
||||
echo or32-unknown-linux-gnu
|
||||
openrisc*:Linux:*:*)
|
||||
echo or1k-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
or32:Linux:*:* | or1k*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
padre:Linux:*:*)
|
||||
echo sparc-unknown-linux-gnu
|
||||
echo sparc-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
parisc64:Linux:*:* | hppa64:Linux:*:*)
|
||||
echo hppa64-unknown-linux-gnu
|
||||
echo hppa64-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||
# Look for CPU level
|
||||
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||
PA7*) echo hppa1.1-unknown-linux-gnu ;;
|
||||
PA8*) echo hppa2.0-unknown-linux-gnu ;;
|
||||
*) echo hppa-unknown-linux-gnu ;;
|
||||
PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
|
||||
PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
|
||||
*) echo hppa-unknown-linux-${LIBC} ;;
|
||||
esac
|
||||
exit ;;
|
||||
ppc64:Linux:*:*)
|
||||
echo powerpc64-unknown-linux-gnu
|
||||
echo powerpc64-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
ppc:Linux:*:*)
|
||||
echo powerpc-unknown-linux-gnu
|
||||
echo powerpc-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
ppc64le:Linux:*:*)
|
||||
echo powerpc64le-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
ppcle:Linux:*:*)
|
||||
echo powerpcle-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
s390:Linux:*:* | s390x:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-ibm-linux
|
||||
echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
|
||||
exit ;;
|
||||
sh64*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
sh*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
sparc:Linux:*:* | sparc64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
tile*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
vax:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-dec-linux-gnu
|
||||
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
|
||||
exit ;;
|
||||
x86_64:Linux:*:*)
|
||||
echo x86_64-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
xtensa*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
i*86:DYNIX/ptx:4*:*)
|
||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
|
||||
@@ -1179,6 +1242,9 @@ EOF
|
||||
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
||||
echo i586-pc-haiku
|
||||
exit ;;
|
||||
x86_64:Haiku:*:*)
|
||||
echo x86_64-unknown-haiku
|
||||
exit ;;
|
||||
SX-4:SUPER-UX:*:*)
|
||||
echo sx4-nec-superux${UNAME_RELEASE}
|
||||
exit ;;
|
||||
@@ -1205,19 +1271,31 @@ EOF
|
||||
exit ;;
|
||||
*:Darwin:*:*)
|
||||
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
||||
case $UNAME_PROCESSOR in
|
||||
i386)
|
||||
eval $set_cc_for_build
|
||||
if test "$UNAME_PROCESSOR" = unknown ; then
|
||||
UNAME_PROCESSOR=powerpc
|
||||
fi
|
||||
if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
|
||||
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
||||
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
|
||||
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
||||
grep IS_64BIT_ARCH >/dev/null
|
||||
then
|
||||
UNAME_PROCESSOR="x86_64"
|
||||
fi
|
||||
fi ;;
|
||||
unknown) UNAME_PROCESSOR=powerpc ;;
|
||||
case $UNAME_PROCESSOR in
|
||||
i386) UNAME_PROCESSOR=x86_64 ;;
|
||||
powerpc) UNAME_PROCESSOR=powerpc64 ;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
elif test "$UNAME_PROCESSOR" = i386 ; then
|
||||
# Avoid executing cc on OS X 10.9, as it ships with a stub
|
||||
# that puts up a graphical alert prompting to install
|
||||
# developer tools. Any system running Mac OS X 10.7 or
|
||||
# later (Darwin 11 and later) is required to have a 64-bit
|
||||
# processor. This is not true of the ARM version of Darwin
|
||||
# that Apple uses in portable devices.
|
||||
UNAME_PROCESSOR=x86_64
|
||||
fi
|
||||
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
||||
exit ;;
|
||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||
@@ -1231,7 +1309,10 @@ EOF
|
||||
*:QNX:*:4*)
|
||||
echo i386-pc-qnx
|
||||
exit ;;
|
||||
NSE-?:NONSTOP_KERNEL:*:*)
|
||||
NEO-?:NONSTOP_KERNEL:*:*)
|
||||
echo neo-tandem-nsk${UNAME_RELEASE}
|
||||
exit ;;
|
||||
NSE-*:NONSTOP_KERNEL:*:*)
|
||||
echo nse-tandem-nsk${UNAME_RELEASE}
|
||||
exit ;;
|
||||
NSR-?:NONSTOP_KERNEL:*:*)
|
||||
@@ -1300,158 +1381,10 @@ EOF
|
||||
i*86:AROS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-aros
|
||||
exit ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||
|
||||
eval $set_cc_for_build
|
||||
cat >$dummy.c <<EOF
|
||||
#ifdef _SEQUENT_
|
||||
# include <sys/types.h>
|
||||
# include <sys/utsname.h>
|
||||
#endif
|
||||
main ()
|
||||
{
|
||||
#if defined (sony)
|
||||
#if defined (MIPSEB)
|
||||
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
||||
I don't know.... */
|
||||
printf ("mips-sony-bsd\n"); exit (0);
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
printf ("m68k-sony-newsos%s\n",
|
||||
#ifdef NEWSOS4
|
||||
"4"
|
||||
#else
|
||||
""
|
||||
#endif
|
||||
); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
||||
printf ("arm-acorn-riscix\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (hp300) && !defined (hpux)
|
||||
printf ("m68k-hp-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (NeXT)
|
||||
#if !defined (__ARCHITECTURE__)
|
||||
#define __ARCHITECTURE__ "m68k"
|
||||
#endif
|
||||
int version;
|
||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||
if (version < 4)
|
||||
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
||||
else
|
||||
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
|
||||
exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (MULTIMAX) || defined (n16)
|
||||
#if defined (UMAXV)
|
||||
printf ("ns32k-encore-sysv\n"); exit (0);
|
||||
#else
|
||||
#if defined (CMU)
|
||||
printf ("ns32k-encore-mach\n"); exit (0);
|
||||
#else
|
||||
printf ("ns32k-encore-bsd\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__386BSD__)
|
||||
printf ("i386-pc-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (sequent)
|
||||
#if defined (i386)
|
||||
printf ("i386-sequent-dynix\n"); exit (0);
|
||||
#endif
|
||||
#if defined (ns32000)
|
||||
printf ("ns32k-sequent-dynix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (_SEQUENT_)
|
||||
struct utsname un;
|
||||
|
||||
uname(&un);
|
||||
|
||||
if (strncmp(un.version, "V2", 2) == 0) {
|
||||
printf ("i386-sequent-ptx2\n"); exit (0);
|
||||
}
|
||||
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
||||
printf ("i386-sequent-ptx1\n"); exit (0);
|
||||
}
|
||||
printf ("i386-sequent-ptx\n"); exit (0);
|
||||
|
||||
#endif
|
||||
|
||||
#if defined (vax)
|
||||
# if !defined (ultrix)
|
||||
# include <sys/param.h>
|
||||
# if defined (BSD)
|
||||
# if BSD == 43
|
||||
printf ("vax-dec-bsd4.3\n"); exit (0);
|
||||
# else
|
||||
# if BSD == 199006
|
||||
printf ("vax-dec-bsd4.3reno\n"); exit (0);
|
||||
# else
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
# endif
|
||||
# endif
|
||||
# else
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
# endif
|
||||
# else
|
||||
printf ("vax-dec-ultrix\n"); exit (0);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined (alliant) && defined (i860)
|
||||
printf ("i860-alliant-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
exit (1);
|
||||
}
|
||||
EOF
|
||||
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
|
||||
{ echo "$SYSTEM_NAME"; exit; }
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
|
||||
|
||||
# Convex versions that predate uname can use getsysinfo(1)
|
||||
|
||||
if [ -x /usr/convex/getsysinfo ]
|
||||
then
|
||||
case `getsysinfo -f cpu_type` in
|
||||
c1*)
|
||||
echo c1-convex-bsd
|
||||
exit ;;
|
||||
c2*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit ;;
|
||||
c34*)
|
||||
echo c34-convex-bsd
|
||||
exit ;;
|
||||
c38*)
|
||||
echo c38-convex-bsd
|
||||
exit ;;
|
||||
c4*)
|
||||
echo c4-convex-bsd
|
||||
x86_64:VMkernel:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-esx
|
||||
exit ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
cat >&2 <<EOF
|
||||
$0: unable to guess system type
|
||||
|
||||
@@ -76,12 +76,18 @@
|
||||
/* Define to 1 if you have the <linux/ethtool.h> header file. */
|
||||
#undef HAVE_LINUX_ETHTOOL_H
|
||||
|
||||
/* Define to 1 if you have the <linux/if_bonding.h> header file. */
|
||||
#undef HAVE_LINUX_IF_BONDING_H
|
||||
|
||||
/* Define to 1 if you have the <linux/if_packet.h> header file. */
|
||||
#undef HAVE_LINUX_IF_PACKET_H
|
||||
|
||||
/* Define to 1 if you have the <linux/net_tstamp.h> header file. */
|
||||
#undef HAVE_LINUX_NET_TSTAMP_H
|
||||
|
||||
/* Define to 1 if you have the <linux/sockios.h> header file. */
|
||||
#undef HAVE_LINUX_SOCKIOS_H
|
||||
|
||||
/* if tp_vlan_tci exists */
|
||||
#undef HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
|
||||
|
||||
@@ -256,6 +262,9 @@
|
||||
/* target host supports Bluetooth sniffing */
|
||||
#undef PCAP_SUPPORT_BT
|
||||
|
||||
/* target host supports Bluetooth Monitor */
|
||||
#undef PCAP_SUPPORT_BT_MONITOR
|
||||
|
||||
/* target host supports CAN sniffing */
|
||||
#undef PCAP_SUPPORT_CAN
|
||||
|
||||
@@ -268,12 +277,12 @@
|
||||
/* target host supports netfilter sniffing */
|
||||
#undef PCAP_SUPPORT_NETFILTER
|
||||
|
||||
/* use Linux packet ring capture if available */
|
||||
#undef PCAP_SUPPORT_PACKET_RING
|
||||
|
||||
/* target host supports USB sniffing */
|
||||
#undef PCAP_SUPPORT_USB
|
||||
|
||||
/* target host supports packet ring capture */
|
||||
#undef PCAP_SUPPORT_PACKET_RING
|
||||
|
||||
/* include ACN support */
|
||||
#undef SITA
|
||||
|
||||
|
||||
269
libpcap/config.sub
vendored
269
libpcap/config.sub
vendored
@@ -1,38 +1,31 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
# Free Software Foundation, Inc.
|
||||
# Copyright 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2009-12-31'
|
||||
timestamp='2015-02-22'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# This file is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
# the same distribution terms that you use for the rest of that
|
||||
# program. This Exception is an additional permission under section 7
|
||||
# of the GNU General Public License, version 3 ("GPLv3").
|
||||
|
||||
|
||||
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||
# diff and a properly formatted GNU ChangeLog entry.
|
||||
# Please send patches to <config-patches@gnu.org>.
|
||||
#
|
||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||
# Supply the specified configuration type as an argument.
|
||||
@@ -75,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
|
||||
version="\
|
||||
GNU config.sub ($timestamp)
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
|
||||
Software Foundation, Inc.
|
||||
Copyright 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
@@ -124,13 +115,18 @@ esac
|
||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
case $maybe_os in
|
||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
||||
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
||||
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||
knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
|
||||
kopensolaris*-gnu* | \
|
||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
android-linux)
|
||||
os=-linux-android
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
|
||||
;;
|
||||
*)
|
||||
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||
if [ $basic_machine != $1 ]
|
||||
@@ -153,7 +149,7 @@ case $os in
|
||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||
-apple | -axis | -knuth | -cray | -microblaze)
|
||||
-apple | -axis | -knuth | -cray | -microblaze*)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
@@ -222,6 +218,12 @@ case $os in
|
||||
-isc*)
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-lynx*178)
|
||||
os=-lynxos178
|
||||
;;
|
||||
-lynx*5)
|
||||
os=-lynxos5
|
||||
;;
|
||||
-lynx*)
|
||||
os=-lynxos
|
||||
;;
|
||||
@@ -246,20 +248,28 @@ case $basic_machine in
|
||||
# Some are omitted here because they have special meanings below.
|
||||
1750a | 580 \
|
||||
| a29k \
|
||||
| aarch64 | aarch64_be \
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||
| am33_2.0 \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
|
||||
| arc | arceb \
|
||||
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
|
||||
| avr | avr32 \
|
||||
| be32 | be64 \
|
||||
| bfin \
|
||||
| c4x | clipper \
|
||||
| c4x | c8051 | clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fido | fr30 | frv \
|
||||
| epiphany \
|
||||
| fido | fr30 | frv | ft32 \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| hexagon \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k | iq2000 \
|
||||
| k1om \
|
||||
| le32 | le64 \
|
||||
| lm32 \
|
||||
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
||||
| maxq | mb | microblaze | mcore | mep | metag \
|
||||
| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
@@ -273,38 +283,55 @@ case $basic_machine in
|
||||
| mips64vr5900 | mips64vr5900el \
|
||||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa32r2 | mipsisa32r2el \
|
||||
| mipsisa32r6 | mipsisa32r6el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
| mipsisa64r2 | mipsisa64r2el \
|
||||
| mipsisa64r6 | mipsisa64r6el \
|
||||
| mipsisa64sb1 | mipsisa64sb1el \
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipsr5900 | mipsr5900el \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| moxie \
|
||||
| mt \
|
||||
| msp430 \
|
||||
| nios | nios2 \
|
||||
| nds32 | nds32le | nds32be \
|
||||
| nios | nios2 | nios2eb | nios2el \
|
||||
| ns16k | ns32k \
|
||||
| or32 \
|
||||
| open8 | or1k | or1knd | or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle \
|
||||
| pyramid \
|
||||
| rx \
|
||||
| riscv32 | riscv64 \
|
||||
| rl78 | rx \
|
||||
| score \
|
||||
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| sh64 | sh64le \
|
||||
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
||||
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
||||
| spu | strongarm \
|
||||
| tahoe | thumb | tic4x | tic80 | tron \
|
||||
| spu \
|
||||
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
|
||||
| ubicom32 \
|
||||
| v850 | v850e \
|
||||
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
|
||||
| visium \
|
||||
| we32k \
|
||||
| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||
| x86 | xc16x | xstormy16 | xtensa \
|
||||
| z8k | z80)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
m6811 | m68hc11 | m6812 | m68hc12 | picochip)
|
||||
# Motorola 68HC11/12.
|
||||
c54x)
|
||||
basic_machine=tic54x-unknown
|
||||
;;
|
||||
c55x)
|
||||
basic_machine=tic55x-unknown
|
||||
;;
|
||||
c6x)
|
||||
basic_machine=tic6x-unknown
|
||||
;;
|
||||
leon|leon[3-9])
|
||||
basic_machine=sparc-$basic_machine
|
||||
;;
|
||||
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
|
||||
basic_machine=$basic_machine-unknown
|
||||
os=-none
|
||||
;;
|
||||
@@ -314,6 +341,21 @@ case $basic_machine in
|
||||
basic_machine=mt-unknown
|
||||
;;
|
||||
|
||||
strongarm | thumb | xscale)
|
||||
basic_machine=arm-unknown
|
||||
;;
|
||||
xgate)
|
||||
basic_machine=$basic_machine-unknown
|
||||
os=-none
|
||||
;;
|
||||
xscaleeb)
|
||||
basic_machine=armeb-unknown
|
||||
;;
|
||||
|
||||
xscaleel)
|
||||
basic_machine=armel-unknown
|
||||
;;
|
||||
|
||||
# We use `pc' rather than `unknown'
|
||||
# because (1) that's what they normally are, and
|
||||
# (2) the word "unknown" tends to confuse beginning users.
|
||||
@@ -328,25 +370,31 @@ case $basic_machine in
|
||||
# Recognize the basic CPU types with company name.
|
||||
580-* \
|
||||
| a29k-* \
|
||||
| aarch64-* | aarch64_be-* \
|
||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* | avr32-* \
|
||||
| be32-* | be64-* \
|
||||
| bfin-* | bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||
| clipper-* | craynv-* | cydra-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* \
|
||||
| c8051-* | clipper-* | craynv-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
| elxsi-* \
|
||||
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
||||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| hexagon-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* | iq2000-* \
|
||||
| k1om-* \
|
||||
| le32-* | le64-* \
|
||||
| lm32-* \
|
||||
| m32c-* | m32r-* | m32rle-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
|
||||
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
|
||||
| microblaze-* | microblazeel-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
@@ -360,33 +408,42 @@ case $basic_machine in
|
||||
| mips64vr5900-* | mips64vr5900el-* \
|
||||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||
| mipsisa32r6-* | mipsisa32r6el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||
| mipsisa64r6-* | mipsisa64r6el-* \
|
||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipsr5900-* | mipsr5900el-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mmix-* \
|
||||
| mt-* \
|
||||
| msp430-* \
|
||||
| nios-* | nios2-* \
|
||||
| nds32-* | nds32le-* | nds32be-* \
|
||||
| nios-* | nios2-* | nios2eb-* | nios2el-* \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| open8-* \
|
||||
| or1k*-* \
|
||||
| orion-* \
|
||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* | rx-* \
|
||||
| rl78-* | romp-* | rs6000-* | rx-* \
|
||||
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
|
||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
||||
| sparclite-* \
|
||||
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
|
||||
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
|
||||
| tahoe-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||
| tile*-* \
|
||||
| tron-* \
|
||||
| ubicom32-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
|
||||
| vax-* \
|
||||
| visium-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||
| x86-* | x86_64-* | xc16x-* | xps100-* \
|
||||
| xstormy16-* | xtensa*-* \
|
||||
| ymp-* \
|
||||
| z8k-* | z80-*)
|
||||
@@ -481,6 +538,15 @@ case $basic_machine in
|
||||
basic_machine=powerpc-ibm
|
||||
os=-cnk
|
||||
;;
|
||||
c54x-*)
|
||||
basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
c55x-*)
|
||||
basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
c6x-*)
|
||||
basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
c90)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
@@ -517,7 +583,7 @@ case $basic_machine in
|
||||
basic_machine=craynv-cray
|
||||
os=-unicosmp
|
||||
;;
|
||||
cr16)
|
||||
cr16 | cr16-*)
|
||||
basic_machine=cr16-unknown
|
||||
os=-elf
|
||||
;;
|
||||
@@ -675,7 +741,6 @@ case $basic_machine in
|
||||
i370-ibm* | ibm*)
|
||||
basic_machine=i370-ibm
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i*86v32)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||
os=-sysv32
|
||||
@@ -714,6 +779,9 @@ case $basic_machine in
|
||||
basic_machine=m68k-isi
|
||||
os=-sysv
|
||||
;;
|
||||
leon-*|leon[3-9]-*)
|
||||
basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
|
||||
;;
|
||||
m68knommu)
|
||||
basic_machine=m68k-unknown
|
||||
os=-linux
|
||||
@@ -733,11 +801,15 @@ case $basic_machine in
|
||||
basic_machine=ns32k-utek
|
||||
os=-sysv
|
||||
;;
|
||||
microblaze)
|
||||
microblaze*)
|
||||
basic_machine=microblaze-xilinx
|
||||
;;
|
||||
mingw64)
|
||||
basic_machine=x86_64-pc
|
||||
os=-mingw64
|
||||
;;
|
||||
mingw32)
|
||||
basic_machine=i386-pc
|
||||
basic_machine=i686-pc
|
||||
os=-mingw32
|
||||
;;
|
||||
mingw32ce)
|
||||
@@ -765,6 +837,10 @@ case $basic_machine in
|
||||
basic_machine=powerpc-unknown
|
||||
os=-morphos
|
||||
;;
|
||||
moxiebox)
|
||||
basic_machine=moxie-unknown
|
||||
os=-moxiebox
|
||||
;;
|
||||
msdos)
|
||||
basic_machine=i386-pc
|
||||
os=-msdos
|
||||
@@ -772,10 +848,18 @@ case $basic_machine in
|
||||
ms1-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
||||
;;
|
||||
msys)
|
||||
basic_machine=i686-pc
|
||||
os=-msys
|
||||
;;
|
||||
mvs)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
nacl)
|
||||
basic_machine=le32-unknown
|
||||
os=-nacl
|
||||
;;
|
||||
ncr3000)
|
||||
basic_machine=i486-ncr
|
||||
os=-sysv4
|
||||
@@ -840,6 +924,12 @@ case $basic_machine in
|
||||
np1)
|
||||
basic_machine=np1-gould
|
||||
;;
|
||||
neo-tandem)
|
||||
basic_machine=neo-tandem
|
||||
;;
|
||||
nse-tandem)
|
||||
basic_machine=nse-tandem
|
||||
;;
|
||||
nsr-tandem)
|
||||
basic_machine=nsr-tandem
|
||||
;;
|
||||
@@ -922,9 +1012,10 @@ case $basic_machine in
|
||||
;;
|
||||
power) basic_machine=power-ibm
|
||||
;;
|
||||
ppc) basic_machine=powerpc-unknown
|
||||
ppc | ppcbe) basic_machine=powerpc-unknown
|
||||
;;
|
||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
ppc-* | ppcbe-*)
|
||||
basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||
basic_machine=powerpcle-unknown
|
||||
@@ -949,7 +1040,11 @@ case $basic_machine in
|
||||
basic_machine=i586-unknown
|
||||
os=-pw32
|
||||
;;
|
||||
rdos)
|
||||
rdos | rdos64)
|
||||
basic_machine=x86_64-pc
|
||||
os=-rdos
|
||||
;;
|
||||
rdos32)
|
||||
basic_machine=i386-pc
|
||||
os=-rdos
|
||||
;;
|
||||
@@ -1018,6 +1113,9 @@ case $basic_machine in
|
||||
basic_machine=i860-stratus
|
||||
os=-sysv4
|
||||
;;
|
||||
strongarm-* | thumb-*)
|
||||
basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
sun2)
|
||||
basic_machine=m68000-sun
|
||||
;;
|
||||
@@ -1074,20 +1172,8 @@ case $basic_machine in
|
||||
basic_machine=t90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
tic54x | c54x*)
|
||||
basic_machine=tic54x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic55x | c55x*)
|
||||
basic_machine=tic55x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic6x | c6x*)
|
||||
basic_machine=tic6x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tile*)
|
||||
basic_machine=tile-unknown
|
||||
basic_machine=$basic_machine-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
tx39)
|
||||
@@ -1157,6 +1243,9 @@ case $basic_machine in
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
xscale-* | xscalee[bl]-*)
|
||||
basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
|
||||
;;
|
||||
ymp)
|
||||
basic_machine=ymp-cray
|
||||
os=-unicos
|
||||
@@ -1282,28 +1371,29 @@ case $os in
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
|
||||
| -sym* | -kopensolaris* \
|
||||
| -sym* | -kopensolaris* | -plan9* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* | -aros* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
| -openbsd* | -solidbsd* \
|
||||
| -bitrig* | -openbsd* | -solidbsd* \
|
||||
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
||||
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
|
||||
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
|
||||
| -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
|
||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
||||
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
|
||||
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-qnx*)
|
||||
@@ -1427,9 +1517,6 @@ case $os in
|
||||
-aros*)
|
||||
os=-aros
|
||||
;;
|
||||
-kaos*)
|
||||
os=-kaos
|
||||
;;
|
||||
-zvmoe)
|
||||
os=-zvmoe
|
||||
;;
|
||||
@@ -1478,6 +1565,21 @@ case $basic_machine in
|
||||
c4x-* | tic4x-*)
|
||||
os=-coff
|
||||
;;
|
||||
c8051-*)
|
||||
os=-elf
|
||||
;;
|
||||
hexagon-*)
|
||||
os=-elf
|
||||
;;
|
||||
tic54x-*)
|
||||
os=-coff
|
||||
;;
|
||||
tic55x-*)
|
||||
os=-coff
|
||||
;;
|
||||
tic6x-*)
|
||||
os=-coff
|
||||
;;
|
||||
# This must come before the *-dec entry.
|
||||
pdp10-*)
|
||||
os=-tops20
|
||||
@@ -1496,9 +1598,6 @@ case $basic_machine in
|
||||
;;
|
||||
m68000-sun)
|
||||
os=-sunos3
|
||||
# This also exists in the configure program, but was not the
|
||||
# default.
|
||||
# os=-sunos4
|
||||
;;
|
||||
m68*-cisco)
|
||||
os=-aout
|
||||
|
||||
222
libpcap/configure
vendored
222
libpcap/configure
vendored
@@ -631,6 +631,7 @@ CAN_SRC
|
||||
PCAP_SUPPORT_CAN
|
||||
CANUSB_SRC
|
||||
PCAP_SUPPORT_CANUSB
|
||||
BT_MONITOR_SRC
|
||||
BT_SRC
|
||||
PCAP_SUPPORT_BT
|
||||
NETFILTER_SRC
|
||||
@@ -741,6 +742,7 @@ with_snf_includes
|
||||
with_snf_libraries
|
||||
enable_universal
|
||||
enable_shared
|
||||
enable_usb
|
||||
enable_bluetooth
|
||||
enable_canusb
|
||||
enable_can
|
||||
@@ -1376,6 +1378,8 @@ Optional Features:
|
||||
--enable-yydebug build parser debugging code
|
||||
--disable-universal don't build universal on OS X
|
||||
--enable-shared build shared libraries [default=no]
|
||||
--enable-usb enable nusb support [default=yes, if support
|
||||
available]
|
||||
--enable-bluetooth enable Bluetooth support [default=no]
|
||||
--enable-canusb enable canusb support [default=no]
|
||||
--enable-can enable CAN support [default=no]
|
||||
@@ -4694,6 +4698,28 @@ done
|
||||
|
||||
fi
|
||||
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
for ac_header in linux/sockios.h linux/if_bonding.h
|
||||
do :
|
||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||
ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
|
||||
#include <sys/socket.h>
|
||||
#include <linux/if.h>
|
||||
|
||||
"
|
||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "$GCC" = yes ; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI ioctl definitions" >&5
|
||||
$as_echo_n "checking for ANSI ioctl definitions... " >&6; }
|
||||
@@ -5502,6 +5528,13 @@ fi
|
||||
if test x$with_libnl = xyes ; then
|
||||
have_any_nl="no"
|
||||
|
||||
incdir=-I/usr/include/libnl3
|
||||
libnldir=
|
||||
if test x$withval != x ; then
|
||||
libnldir=-L${withval}/lib/.libs
|
||||
incdir=-I${withval}/include
|
||||
fi
|
||||
|
||||
#
|
||||
# Try libnl 3.x first.
|
||||
#
|
||||
@@ -5511,7 +5544,7 @@ if ${ac_cv_lib_nl_3_nl_socket_alloc+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lnl-3 $LIBS"
|
||||
LIBS="-lnl-3 ${incdir} ${libnldir} -lnl-genl-3 -lnl-3 $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
@@ -5546,7 +5579,7 @@ if test "x$ac_cv_lib_nl_3_nl_socket_alloc" = xyes; then :
|
||||
#
|
||||
# Yes, we have libnl 3.x.
|
||||
#
|
||||
LIBS="-lnl-genl-3 -lnl-3 $LIBS"
|
||||
LIBS="${libnldir} -lnl-genl-3 -lnl-3 $LIBS"
|
||||
|
||||
$as_echo "#define HAVE_LIBNL 1" >>confdefs.h
|
||||
|
||||
@@ -5559,7 +5592,7 @@ $as_echo "#define HAVE_LIBNL_NLE 1" >>confdefs.h
|
||||
|
||||
$as_echo "#define HAVE_LIBNL_SOCKETS 1" >>confdefs.h
|
||||
|
||||
V_INCLS="$V_INCLS -I/usr/include/libnl3"
|
||||
V_INCLS="$V_INCLS ${incdir}"
|
||||
have_any_nl="yes"
|
||||
|
||||
fi
|
||||
@@ -5610,7 +5643,7 @@ if test "x$ac_cv_lib_nl_nl_socket_alloc" = xyes; then :
|
||||
#
|
||||
# Yes, we have libnl 2.x.
|
||||
#
|
||||
LIBS="-lnl-genl -lnl $LIBS"
|
||||
LIBS="${libnldir} -lnl-genl -lnl $LIBS"
|
||||
|
||||
$as_echo "#define HAVE_LIBNL 1" >>confdefs.h
|
||||
|
||||
@@ -5674,7 +5707,7 @@ if test "x$ac_cv_lib_nl_nl_handle_alloc" = xyes; then :
|
||||
#
|
||||
# Yes.
|
||||
#
|
||||
LIBS="-lnl $LIBS"
|
||||
LIBS="${libnldir} -lnl $LIBS"
|
||||
|
||||
$as_echo "#define HAVE_LIBNL 1" >>confdefs.h
|
||||
|
||||
@@ -7625,6 +7658,15 @@ ln -s ${srcdir}/bpf/net net
|
||||
|
||||
|
||||
|
||||
# Check whether --enable-usb was given.
|
||||
if test "${enable_usb+set}" = set; then :
|
||||
enableval=$enable_usb;
|
||||
else
|
||||
enable_usb=yes
|
||||
fi
|
||||
|
||||
|
||||
if test "x$enable_usb" != "xno" ; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for USB sniffing support" >&5
|
||||
$as_echo_n "checking for USB sniffing support... " >&6; }
|
||||
case "$host_os" in
|
||||
@@ -7746,6 +7788,7 @@ $as_echo "#define HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE 1" >>confdefs.h
|
||||
$as_echo "no" >&6; }
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
|
||||
@@ -7872,23 +7915,75 @@ $as_echo "$ac_cv_lbl_sockaddr_hci_has_hci_channel" >&6; }
|
||||
|
||||
$as_echo "#define SOCKADDR_HCI_HAS_HCI_CHANNEL /**/" >>confdefs.h
|
||||
|
||||
|
||||
#
|
||||
# OK, is HCI_CHANNEL_MONITOR defined?
|
||||
#
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if HCI_CHANNEL_MONITOR is defined" >&5
|
||||
$as_echo_n "checking if HCI_CHANNEL_MONITOR is defined... " >&6; }
|
||||
if ${ac_cv_lbl_hci_channel_monitor_is_defined+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/hci.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
u_int i = HCI_CHANNEL_MONITOR
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"; then :
|
||||
ac_cv_lbl_hci_channel_monitor_is_defined=yes
|
||||
else
|
||||
ac_cv_lbl_hci_channel_monitor_is_defined=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_hci_channel_monitor_is_defined" >&5
|
||||
$as_echo "$ac_cv_lbl_hci_channel_monitor_is_defined" >&6; }
|
||||
if test $ac_cv_lbl_hci_channel_monitor_is_defined = yes ; then
|
||||
|
||||
$as_echo "#define PCAP_SUPPORT_BT_MONITOR /**/" >>confdefs.h
|
||||
|
||||
BT_MONITOR_SRC=pcap-bt-monitor-linux.c
|
||||
fi
|
||||
fi
|
||||
ac_lbl_bluetooth_available=yes
|
||||
|
||||
else
|
||||
ac_lbl_bluetooth_available=no
|
||||
|
||||
fi
|
||||
|
||||
|
||||
if test "x$ac_lbl_bluetooth_available" == "xno" ; then
|
||||
if test "x$enable_bluetooth" = "xyes" ; then
|
||||
as_fn_error $? "Bluetooth sniffing is not supported; install bluez-lib devel to enable it" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: Bluetooth sniffing is not supported; install bluez-lib devel to enable it" >&5
|
||||
$as_echo "$as_me: Bluetooth sniffing is not supported; install bluez-lib devel to enable it" >&6;}
|
||||
|
||||
fi
|
||||
|
||||
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_bluetooth" = "xyes" ; then
|
||||
as_fn_error $? "no Bluetooth sniffing support implemented for $host_os" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: no Bluetooth sniffing support implemented for $host_os" >&5
|
||||
$as_echo "$as_me: no Bluetooth sniffing support implemented for $host_os" >&6;}
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
fi
|
||||
|
||||
# Check whether --enable-canusb was given.
|
||||
@@ -7901,29 +7996,86 @@ fi
|
||||
|
||||
if test "x$enable_canusb" != "xno" ; then
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
linux*|uclinux*)
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "libusb-1.0/libusb.h" "ac_cv_header_libusb_1_0_libusb_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_libusb_1_0_libusb_h" = xyes; then :
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libusb_init in -lusb-1.0" >&5
|
||||
$as_echo_n "checking for libusb_init in -lusb-1.0... " >&6; }
|
||||
if ${ac_cv_lib_usb_1_0_libusb_init+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lusb-1.0 -lpthread
|
||||
$LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char libusb_init ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return libusb_init ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_usb_1_0_libusb_init=yes
|
||||
else
|
||||
ac_cv_lib_usb_1_0_libusb_init=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_usb_1_0_libusb_init" >&5
|
||||
$as_echo "$ac_cv_lib_usb_1_0_libusb_init" >&6; }
|
||||
if test "x$ac_cv_lib_usb_1_0_libusb_init" = xyes; then :
|
||||
|
||||
|
||||
$as_echo "#define PCAP_SUPPORT_CANUSB 1" >>confdefs.h
|
||||
|
||||
CANUSB_SRC=pcap-canusb-linux.c
|
||||
LIBS="-lusb-1.0 -lpthread $LIBS"
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: canusb sniffing is supported" >&5
|
||||
$as_echo "$as_me: canusb sniffing is supported" >&6;}
|
||||
ac_lbl_has_libusb=yes
|
||||
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: canusb sniffing is not supported; install libusb1.0 lib devel to enable it" >&5
|
||||
$as_echo "$as_me: canusb sniffing is not supported; install libusb1.0 lib devel to enable it" >&6;}
|
||||
ac_lbl_has_libusb=no
|
||||
fi
|
||||
|
||||
|
||||
else
|
||||
ac_lbl_has_libusb=no
|
||||
|
||||
fi
|
||||
|
||||
|
||||
if test "x$ac_lbl_has_libusb" = "xyes" ; then
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: canusb sniffing is supported" >&5
|
||||
$as_echo "$as_me: canusb sniffing is supported" >&6;}
|
||||
else
|
||||
if test "x$enable_canusb" = "xyes" ; then
|
||||
as_fn_error $? "canusb sniffing is not supported; install libusb1.0 lib devel to enable it" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: canusb sniffing is not supported; install libusb1.0 lib devel to enable it" >&5
|
||||
$as_echo "$as_me: canusb sniffing is not supported; install libusb1.0 lib devel to enable it" >&6;}
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_canusb" = "xyes" ; then
|
||||
as_fn_error $? "no canusb support implemented for $host_os" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: no canusb support implemented for $host_os" >&5
|
||||
$as_echo "$as_me: no canusb support implemented for $host_os" >&6;}
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -7946,21 +8098,33 @@ if test "x$enable_can" != "xno" ; then
|
||||
"
|
||||
if test "x$ac_cv_header_linux_can_h" = xyes; then :
|
||||
|
||||
|
||||
$as_echo "#define PCAP_SUPPORT_CAN 1" >>confdefs.h
|
||||
|
||||
CAN_SRC=pcap-can-linux.c
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: CAN sniffing is supported" >&5
|
||||
$as_echo "$as_me: CAN sniffing is supported" >&6;}
|
||||
|
||||
else
|
||||
|
||||
if test "x$enable_can" = "xyes" ; then
|
||||
as_fn_error $? "CAN sniffing is not supported" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: CAN sniffing is not supported" >&5
|
||||
$as_echo "$as_me: CAN sniffing is not supported" >&6;}
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_can" = "xyes" ; then
|
||||
as_fn_error $? "no CAN sniffing support implemented for $host_os" "$LINENO" 5
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: no CAN sniffing support implemented for $host_os" >&5
|
||||
$as_echo "$as_me: no CAN sniffing support implemented for $host_os" >&6;}
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -7975,6 +8139,38 @@ else
|
||||
fi
|
||||
|
||||
|
||||
if test "x$enable_dbus" != "xno"; then
|
||||
if test "x$enable_dbus" = "xyes"; then
|
||||
case "$host_os" in
|
||||
|
||||
darwin*)
|
||||
#
|
||||
# We don't support D-Bus sniffing on OS X; see
|
||||
#
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=74029
|
||||
#
|
||||
# The user requested it, so fail.
|
||||
#
|
||||
as_fn_error $? "Due to freedesktop.org bug 74029, D-Bus capture support is not available on OS X" "$LINENO" 5
|
||||
esac
|
||||
else
|
||||
case "$host_os" in
|
||||
|
||||
darwin*)
|
||||
#
|
||||
# We don't support D-Bus sniffing on OS X; see
|
||||
#
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=74029
|
||||
#
|
||||
# The user dind't explicitly request it, so just
|
||||
# silently refuse to enable it.
|
||||
#
|
||||
enable_dbus="no"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_dbus" != "xno"; then
|
||||
# Extract the first word of "pkg-config", so it can be a program name with args.
|
||||
set dummy pkg-config; ac_word=$2
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.168 2008-12-23 20:49:26 guy Exp $ (LBL)
|
||||
dnl
|
||||
dnl Copyright (c) 1994, 1995, 1996, 1997
|
||||
dnl The Regents of the University of California. All rights reserved.
|
||||
@@ -149,6 +148,16 @@ struct rtentry;
|
||||
#include <net/if.h>])
|
||||
fi
|
||||
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
AC_CHECK_HEADERS(linux/sockios.h linux/if_bonding.h,,,
|
||||
[
|
||||
#include <sys/socket.h>
|
||||
#include <linux/if.h>
|
||||
])
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_LBL_FIXINCLUDES
|
||||
|
||||
AC_CHECK_FUNCS(strerror strlcpy)
|
||||
@@ -447,6 +456,13 @@ linux)
|
||||
if test x$with_libnl = xyes ; then
|
||||
have_any_nl="no"
|
||||
|
||||
incdir=-I/usr/include/libnl3
|
||||
libnldir=
|
||||
if test x$withval != x ; then
|
||||
libnldir=-L${withval}/lib/.libs
|
||||
incdir=-I${withval}/include
|
||||
fi
|
||||
|
||||
#
|
||||
# Try libnl 3.x first.
|
||||
#
|
||||
@@ -455,14 +471,14 @@ linux)
|
||||
#
|
||||
# Yes, we have libnl 3.x.
|
||||
#
|
||||
LIBS="-lnl-genl-3 -lnl-3 $LIBS"
|
||||
LIBS="${libnldir} -lnl-genl-3 -lnl-3 $LIBS"
|
||||
AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
|
||||
AC_DEFINE(HAVE_LIBNL_3_x,1,[if libnl exists and is version 3.x])
|
||||
AC_DEFINE(HAVE_LIBNL_NLE,1,[libnl has NLE_FAILURE])
|
||||
AC_DEFINE(HAVE_LIBNL_SOCKETS,1,[libnl has new-style socket api])
|
||||
V_INCLS="$V_INCLS -I/usr/include/libnl3"
|
||||
V_INCLS="$V_INCLS ${incdir}"
|
||||
have_any_nl="yes"
|
||||
])
|
||||
],[], ${incdir} ${libnldir} -lnl-genl-3 -lnl-3 )
|
||||
|
||||
if test x$have_any_nl = xno ; then
|
||||
#
|
||||
@@ -473,7 +489,7 @@ linux)
|
||||
#
|
||||
# Yes, we have libnl 2.x.
|
||||
#
|
||||
LIBS="-lnl-genl -lnl $LIBS"
|
||||
LIBS="${libnldir} -lnl-genl -lnl $LIBS"
|
||||
AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
|
||||
AC_DEFINE(HAVE_LIBNL_2_x,1,[if libnl exists and is version 2.x])
|
||||
AC_DEFINE(HAVE_LIBNL_NLE,1,[libnl has NLE_FAILURE])
|
||||
@@ -491,7 +507,7 @@ linux)
|
||||
#
|
||||
# Yes.
|
||||
#
|
||||
LIBS="-lnl $LIBS"
|
||||
LIBS="${libnldir} -lnl $LIBS"
|
||||
AC_DEFINE(HAVE_LIBNL,1,[if libnl exists])
|
||||
have_any_nl="yes"
|
||||
])
|
||||
@@ -1329,6 +1345,12 @@ AC_SUBST(DYEXT)
|
||||
AC_SUBST(MAN_FILE_FORMATS)
|
||||
AC_SUBST(MAN_MISC_INFO)
|
||||
|
||||
AC_ARG_ENABLE([usb],
|
||||
[AC_HELP_STRING([--enable-usb],[enable nusb support @<:@default=yes, if support available@:>@])],
|
||||
[],
|
||||
[enable_usb=yes])
|
||||
|
||||
if test "x$enable_usb" != "xno" ; then
|
||||
dnl check for USB sniffing support
|
||||
AC_MSG_CHECKING(for USB sniffing support)
|
||||
case "$host_os" in
|
||||
@@ -1387,6 +1409,7 @@ AC_INCLUDES_DEFAULT
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_SUBST(PCAP_SUPPORT_USB)
|
||||
AC_SUBST(USB_SRC)
|
||||
|
||||
@@ -1466,17 +1489,50 @@ if test "x$enable_bluetooth" != "xno" ; then
|
||||
if test $ac_cv_lbl_sockaddr_hci_has_hci_channel = yes ; then
|
||||
AC_DEFINE(SOCKADDR_HCI_HAS_HCI_CHANNEL,,
|
||||
[if struct sockaddr_hci has hci_channel member])
|
||||
fi
|
||||
|
||||
#
|
||||
# OK, is HCI_CHANNEL_MONITOR defined?
|
||||
#
|
||||
AC_MSG_CHECKING(if HCI_CHANNEL_MONITOR is defined)
|
||||
AC_CACHE_VAL(ac_cv_lbl_hci_channel_monitor_is_defined,
|
||||
AC_TRY_COMPILE(
|
||||
[
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/hci.h>
|
||||
],
|
||||
AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
|
||||
[u_int i = HCI_CHANNEL_MONITOR],
|
||||
ac_cv_lbl_hci_channel_monitor_is_defined=yes,
|
||||
ac_cv_lbl_hci_channel_monitor_is_defined=no))
|
||||
AC_MSG_RESULT($ac_cv_lbl_hci_channel_monitor_is_defined)
|
||||
if test $ac_cv_lbl_hci_channel_monitor_is_defined = yes ; then
|
||||
AC_DEFINE(PCAP_SUPPORT_BT_MONITOR,,
|
||||
[target host supports Bluetooth Monitor])
|
||||
BT_MONITOR_SRC=pcap-bt-monitor-linux.c
|
||||
fi
|
||||
fi
|
||||
ac_lbl_bluetooth_available=yes
|
||||
],
|
||||
ac_lbl_bluetooth_available=no
|
||||
)
|
||||
if test "x$ac_lbl_bluetooth_available" == "xno" ; then
|
||||
if test "x$enable_bluetooth" = "xyes" ; then
|
||||
AC_MSG_ERROR(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
|
||||
else
|
||||
AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_bluetooth" = "xyes" ; then
|
||||
AC_MSG_ERROR(no Bluetooth sniffing support implemented for $host_os)
|
||||
else
|
||||
AC_MSG_NOTICE(no Bluetooth sniffing support implemented for $host_os)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(PCAP_SUPPORT_BT)
|
||||
AC_SUBST(BT_SRC)
|
||||
AC_SUBST(BT_MONITOR_SRC)
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([canusb],
|
||||
@@ -1487,19 +1543,38 @@ AC_ARG_ENABLE([canusb],
|
||||
if test "x$enable_canusb" != "xno" ; then
|
||||
dnl check for canusb support
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
linux*|uclinux*)
|
||||
AC_CHECK_HEADER(libusb-1.0/libusb.h,
|
||||
[
|
||||
AC_CHECK_LIB(usb-1.0, libusb_init,
|
||||
[
|
||||
AC_DEFINE(PCAP_SUPPORT_CANUSB, 1, [target host supports canusb])
|
||||
CANUSB_SRC=pcap-canusb-linux.c
|
||||
LIBS="-lusb-1.0 -lpthread $LIBS"
|
||||
AC_MSG_NOTICE(canusb sniffing is supported)
|
||||
ac_lbl_has_libusb=yes
|
||||
],
|
||||
AC_MSG_NOTICE(canusb sniffing is not supported; install libusb1.0 lib devel to enable it)
|
||||
ac_lbl_has_libusb=no,
|
||||
-lpthread
|
||||
)
|
||||
],
|
||||
ac_lbl_has_libusb=no
|
||||
)
|
||||
if test "x$ac_lbl_has_libusb" = "xyes" ; then
|
||||
AC_MSG_NOTICE(canusb sniffing is supported)
|
||||
else
|
||||
if test "x$enable_canusb" = "xyes" ; then
|
||||
AC_MSG_ERROR(canusb sniffing is not supported; install libusb1.0 lib devel to enable it)
|
||||
else
|
||||
AC_MSG_NOTICE(canusb sniffing is not supported; install libusb1.0 lib devel to enable it)
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_canusb" = "xyes" ; then
|
||||
AC_MSG_ERROR(no canusb support implemented for $host_os)
|
||||
else
|
||||
AC_MSG_NOTICE(no canusb support implemented for $host_os)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(PCAP_SUPPORT_CANUSB)
|
||||
@@ -1516,15 +1591,27 @@ if test "x$enable_can" != "xno" ; then
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
AC_CHECK_HEADER(linux/can.h,
|
||||
[ AC_DEFINE(PCAP_SUPPORT_CAN, 1, [target host supports CAN sniffing])
|
||||
[
|
||||
AC_DEFINE(PCAP_SUPPORT_CAN, 1, [target host supports CAN sniffing])
|
||||
CAN_SRC=pcap-can-linux.c
|
||||
AC_MSG_NOTICE(CAN sniffing is supported)],
|
||||
AC_MSG_NOTICE(CAN sniffing is not supported),
|
||||
AC_MSG_NOTICE(CAN sniffing is supported)
|
||||
],
|
||||
[
|
||||
if test "x$enable_can" = "xyes" ; then
|
||||
AC_MSG_ERROR(CAN sniffing is not supported)
|
||||
else
|
||||
AC_MSG_NOTICE(CAN sniffing is not supported)
|
||||
fi
|
||||
],
|
||||
[#include <sys/socket.h>]
|
||||
)
|
||||
;;
|
||||
*)
|
||||
if test "x$enable_can" = "xyes" ; then
|
||||
AC_MSG_ERROR(no CAN sniffing support implemented for $host_os)
|
||||
else
|
||||
AC_MSG_NOTICE(no CAN sniffing support implemented for $host_os)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(PCAP_SUPPORT_CAN)
|
||||
@@ -1536,6 +1623,38 @@ AC_ARG_ENABLE([dbus],
|
||||
[],
|
||||
[enable_dbus=no])
|
||||
|
||||
if test "x$enable_dbus" != "xno"; then
|
||||
if test "x$enable_dbus" = "xyes"; then
|
||||
case "$host_os" in
|
||||
|
||||
darwin*)
|
||||
#
|
||||
# We don't support D-Bus sniffing on OS X; see
|
||||
#
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=74029
|
||||
#
|
||||
# The user requested it, so fail.
|
||||
#
|
||||
AC_MSG_ERROR([Due to freedesktop.org bug 74029, D-Bus capture support is not available on OS X])
|
||||
esac
|
||||
else
|
||||
case "$host_os" in
|
||||
|
||||
darwin*)
|
||||
#
|
||||
# We don't support D-Bus sniffing on OS X; see
|
||||
#
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=74029
|
||||
#
|
||||
# The user dind't explicitly request it, so just
|
||||
# silently refuse to enable it.
|
||||
#
|
||||
enable_dbus="no"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$enable_dbus" != "xno"; then
|
||||
AC_CHECK_PROG([PKGCONFIG], [pkg-config], [pkg-config], [no])
|
||||
if test "x$PKGCONFIG" != "xno"; then
|
||||
|
||||
@@ -10,10 +10,6 @@
|
||||
* This file contains dlpi/libdlpi related common functions used
|
||||
* by pcap-[dlpi,libdlpi].c.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/dlpisubs.c,v 1.3 2008-12-02 16:40:19 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
/*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/dlpisubs.h,v 1.2 2008-04-04 19:37:45 guy Exp $
|
||||
*/
|
||||
|
||||
#ifndef dlpisubs_h
|
||||
#define dlpisubs_h
|
||||
|
||||
|
||||
@@ -19,11 +19,6 @@
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/etherent.c,v 1.23 2006-10-04 18:09:22 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/ethertype.h,v 1.14 2005-09-05 09:06:58 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -32,11 +32,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-getad.c,v 1.12 2007-09-14 00:44:55 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -146,7 +141,7 @@ get_sa_len(struct sockaddr *addr)
|
||||
* Get a list of all interfaces that are up and that we can open.
|
||||
* Returns -1 on error, 0 otherwise.
|
||||
* The list, as returned through "alldevsp", may be null if no interfaces
|
||||
* were up and could be opened.
|
||||
* could be opened.
|
||||
*/
|
||||
int
|
||||
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
@@ -162,10 +157,10 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
* Get the list of interface addresses.
|
||||
*
|
||||
* Note: this won't return information about interfaces
|
||||
* with no addresses; are there any such interfaces
|
||||
* that would be capable of receiving packets?
|
||||
* (Interfaces incapable of receiving packets aren't
|
||||
* very interesting from libpcap's point of view.)
|
||||
* with no addresses, so, if a platform has interfaces
|
||||
* with no interfaces on which traffic can be captured,
|
||||
* we must check for those interfaces as well (see, for
|
||||
* example, what's done on Linux).
|
||||
*
|
||||
* LAN interfaces will probably have link-layer
|
||||
* addresses; I don't know whether all implementations
|
||||
@@ -178,35 +173,12 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
return (-1);
|
||||
}
|
||||
for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
|
||||
/*
|
||||
* Is this interface up?
|
||||
*/
|
||||
if (!(ifa->ifa_flags & IFF_UP)) {
|
||||
/*
|
||||
* No, so don't add it to the list.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* "ifa_addr" was apparently null on at least one
|
||||
* interface on some system.
|
||||
*
|
||||
* "ifa_broadaddr" may be non-null even on
|
||||
* non-broadcast interfaces, and was null on
|
||||
* at least one OpenBSD 3.4 system on at least
|
||||
* one interface with IFF_BROADCAST set.
|
||||
*
|
||||
* "ifa_dstaddr" was, on at least one FreeBSD 4.1
|
||||
* system, non-null on a non-point-to-point
|
||||
* interface.
|
||||
*
|
||||
* Therefore, we supply the address and netmask only
|
||||
* if "ifa_addr" is non-null (if there's no address,
|
||||
* there's obviously no netmask), and supply the
|
||||
* broadcast and destination addresses if the appropriate
|
||||
* flag is set *and* the appropriate "ifa_" entry doesn't
|
||||
* evaluate to a null pointer.
|
||||
* interface on some system. Therefore, we supply
|
||||
* the address and netmask only if "ifa_addr" is
|
||||
* non-null (if there's no address, there's obviously
|
||||
* no netmask).
|
||||
*/
|
||||
if (ifa->ifa_addr != NULL) {
|
||||
addr = ifa->ifa_addr;
|
||||
@@ -217,6 +189,22 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
addr_size = 0;
|
||||
netmask = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Note that, on some platforms, ifa_broadaddr and
|
||||
* ifa_dstaddr could be the same field (true on at
|
||||
* least some versions of *BSD and OS X), so we
|
||||
* can't just check whether the broadcast address
|
||||
* is null and add it if so and check whether the
|
||||
* destination address is null and add it if so.
|
||||
*
|
||||
* Therefore, we must also check the IFF_BROADCAST
|
||||
* flag, and only add a broadcast address if it's
|
||||
* set, and check the IFF_POINTTOPOINT flag, and
|
||||
* only add a destination address if it's set (as
|
||||
* per man page recommendations on some of those
|
||||
* platforms).
|
||||
*/
|
||||
if (ifa->ifa_flags & IFF_BROADCAST &&
|
||||
ifa->ifa_broadaddr != NULL) {
|
||||
broadaddr = ifa->ifa_broadaddr;
|
||||
|
||||
@@ -32,11 +32,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-gifc.c,v 1.12 2008-08-06 07:34:09 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -242,8 +237,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Get the flags for this interface, and skip it if it's
|
||||
* not up.
|
||||
* Get the flags for this interface.
|
||||
*/
|
||||
strncpy(ifrflags.ifr_name, ifrp->ifr_name,
|
||||
sizeof(ifrflags.ifr_name));
|
||||
@@ -258,8 +252,6 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
if (!(ifrflags.ifr_flags & IFF_UP))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Get the netmask for this address on this interface.
|
||||
|
||||
@@ -32,11 +32,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-glifc.c,v 1.7 2008-01-30 09:35:48 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -208,8 +203,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Get the flags for this interface, and skip it if it's
|
||||
* not up.
|
||||
* Get the flags for this interface.
|
||||
*/
|
||||
strncpy(ifrflags.lifr_name, ifrp->lifr_name,
|
||||
sizeof(ifrflags.lifr_name));
|
||||
@@ -224,8 +218,6 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
if (!(ifrflags.lifr_flags & IFF_UP))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Get the netmask for this address on this interface.
|
||||
|
||||
@@ -32,11 +32,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-null.c,v 1.2 2003-11-15 23:23:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
/* $Id: fad-sita.c */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -31,11 +31,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-win32.c,v 1.15 2007-09-25 20:34:36 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -46,102 +41,6 @@ static const char rcsid[] _U_ =
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
/*
|
||||
* Add an entry to the list of addresses for an interface.
|
||||
* "curdev" is the entry for that interface.
|
||||
*/
|
||||
static int
|
||||
add_addr_to_list(pcap_if_t *curdev, struct sockaddr *addr,
|
||||
struct sockaddr *netmask, struct sockaddr *broadaddr,
|
||||
struct sockaddr *dstaddr, char *errbuf)
|
||||
{
|
||||
pcap_addr_t *curaddr, *prevaddr, *nextaddr;
|
||||
|
||||
/*
|
||||
* Allocate the new entry and fill it in.
|
||||
*/
|
||||
curaddr = (pcap_addr_t*)malloc(sizeof(pcap_addr_t));
|
||||
if (curaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
|
||||
curaddr->next = NULL;
|
||||
if (addr != NULL) {
|
||||
curaddr->addr = (struct sockaddr*)dup_sockaddr(addr, sizeof(struct sockaddr_storage));
|
||||
if (curaddr->addr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
} else
|
||||
curaddr->addr = NULL;
|
||||
|
||||
if (netmask != NULL) {
|
||||
curaddr->netmask = (struct sockaddr*)dup_sockaddr(netmask, sizeof(struct sockaddr_storage));
|
||||
if (curaddr->netmask == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
} else
|
||||
curaddr->netmask = NULL;
|
||||
|
||||
if (broadaddr != NULL) {
|
||||
curaddr->broadaddr = (struct sockaddr*)dup_sockaddr(broadaddr, sizeof(struct sockaddr_storage));
|
||||
if (curaddr->broadaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
} else
|
||||
curaddr->broadaddr = NULL;
|
||||
|
||||
if (dstaddr != NULL) {
|
||||
curaddr->dstaddr = (struct sockaddr*)dup_sockaddr(dstaddr, sizeof(struct sockaddr_storage));
|
||||
if (curaddr->dstaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc: %s", pcap_strerror(errno));
|
||||
free(curaddr);
|
||||
return (-1);
|
||||
}
|
||||
} else
|
||||
curaddr->dstaddr = NULL;
|
||||
|
||||
/*
|
||||
* Find the end of the list of addresses.
|
||||
*/
|
||||
for (prevaddr = curdev->addresses; prevaddr != NULL; prevaddr = nextaddr) {
|
||||
nextaddr = prevaddr->next;
|
||||
if (nextaddr == NULL) {
|
||||
/*
|
||||
* This is the end of the list.
|
||||
*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (prevaddr == NULL) {
|
||||
/*
|
||||
* The list was empty; this is the first member.
|
||||
*/
|
||||
curdev->addresses = curaddr;
|
||||
} else {
|
||||
/*
|
||||
* "prevaddr" is the last member of the list; append
|
||||
* this member to it.
|
||||
*/
|
||||
prevaddr->next = curaddr;
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
pcap_add_if_win32(pcap_if_t **devlist, char *name, const char *desc,
|
||||
char *errbuf)
|
||||
@@ -189,11 +88,15 @@ pcap_add_if_win32(pcap_if_t **devlist, char *name, const char *desc,
|
||||
*/
|
||||
if(curdev == NULL)
|
||||
break;
|
||||
res = add_addr_to_list(curdev,
|
||||
res = add_addr_to_dev(curdev,
|
||||
(struct sockaddr *)&if_addrs[if_addr_size].IPAddress,
|
||||
sizeof (struct sockaddr_storage),
|
||||
(struct sockaddr *)&if_addrs[if_addr_size].SubnetMask,
|
||||
sizeof (struct sockaddr_storage),
|
||||
(struct sockaddr *)&if_addrs[if_addr_size].Broadcast,
|
||||
sizeof (struct sockaddr_storage),
|
||||
NULL,
|
||||
0,
|
||||
errbuf);
|
||||
if (res == -1) {
|
||||
/*
|
||||
|
||||
2357
libpcap/gencode.c
2357
libpcap/gencode.c
File diff suppressed because it is too large
Load Diff
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.71 2007-11-18 02:03:52 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
@@ -296,9 +294,9 @@ void gen_not(struct block *);
|
||||
struct block *gen_scode(const char *, struct qual);
|
||||
struct block *gen_ecode(const u_char *, struct qual);
|
||||
struct block *gen_acode(const u_char *, struct qual);
|
||||
struct block *gen_mcode(const char *, const char *, int, struct qual);
|
||||
struct block *gen_mcode(const char *, const char *, unsigned int, struct qual);
|
||||
#ifdef INET6
|
||||
struct block *gen_mcode6(const char *, const char *, int, struct qual);
|
||||
struct block *gen_mcode6(const char *, const char *, unsigned int, struct qual);
|
||||
#endif
|
||||
struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
|
||||
struct block *gen_proto_abbrev(int);
|
||||
@@ -310,12 +308,21 @@ struct block *gen_broadcast(int);
|
||||
struct block *gen_multicast(int);
|
||||
struct block *gen_inbound(int);
|
||||
|
||||
struct block *gen_llc(void);
|
||||
struct block *gen_llc_i(void);
|
||||
struct block *gen_llc_s(void);
|
||||
struct block *gen_llc_u(void);
|
||||
struct block *gen_llc_s_subtype(bpf_u_int32);
|
||||
struct block *gen_llc_u_subtype(bpf_u_int32);
|
||||
|
||||
struct block *gen_vlan(int);
|
||||
struct block *gen_mpls(int);
|
||||
|
||||
struct block *gen_pppoed(void);
|
||||
struct block *gen_pppoes(int);
|
||||
|
||||
struct block *gen_geneve(int);
|
||||
|
||||
struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
|
||||
struct block *gen_atmtype_abbrev(int type);
|
||||
struct block *gen_atmmulti_abbrev(int type);
|
||||
|
||||
2140
libpcap/grammar.c
2140
libpcap/grammar.c
File diff suppressed because it is too large
Load Diff
@@ -20,10 +20,6 @@
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.101 2007-11-18 02:03:52 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@@ -58,6 +54,7 @@ struct rtentry;
|
||||
#include <net/pfvar.h>
|
||||
#include <net/if_pflog.h>
|
||||
#endif
|
||||
#include "llc.h"
|
||||
#include "ieee80211.h"
|
||||
#include <pcap/namedb.h>
|
||||
|
||||
@@ -132,6 +129,23 @@ static const struct tok ieee80211_data_subtypes[] = {
|
||||
{ IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_NODATA_CF_ACPL, "qos-cf-ack-poll" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static const struct tok llc_s_subtypes[] = {
|
||||
{ LLC_RR, "rr" },
|
||||
{ LLC_RNR, "rnr" },
|
||||
{ LLC_REJ, "rej" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
static const struct tok llc_u_subtypes[] = {
|
||||
{ LLC_UI, "ui" },
|
||||
{ LLC_UA, "ua" },
|
||||
{ LLC_DISC, "disc" },
|
||||
{ LLC_DM, "dm" },
|
||||
{ LLC_SABME, "sabme" },
|
||||
{ LLC_TEST, "test" },
|
||||
{ LLC_XID, "xid" },
|
||||
{ LLC_FRMR, "frmr" },
|
||||
{ 0, NULL }
|
||||
};
|
||||
struct type2tok {
|
||||
int type;
|
||||
const struct tok *tok;
|
||||
@@ -261,7 +275,7 @@ pfaction_to_num(const char *action)
|
||||
%type <a> arth narth
|
||||
%type <i> byteop pname pnum relop irelop
|
||||
%type <blk> and or paren not null prog
|
||||
%type <rblk> other pfvar p80211
|
||||
%type <rblk> other pfvar p80211 pllc
|
||||
%type <i> atmtype atmmultitype
|
||||
%type <blk> atmfield
|
||||
%type <blk> atmfieldvalue atmvalue atmlistvalue
|
||||
@@ -285,7 +299,7 @@ pfaction_to_num(const char *action)
|
||||
%token LEN
|
||||
%token IPV6 ICMPV6 AH ESP
|
||||
%token VLAN MPLS
|
||||
%token PPPOED PPPOES
|
||||
%token PPPOED PPPOES GENEVE
|
||||
%token ISO ESIS CLNP ISIS L1 L2 IIH LSP SNP CSNP PSNP
|
||||
%token STP
|
||||
%token IPX
|
||||
@@ -509,8 +523,11 @@ other: pqual TK_BROADCAST { $$ = gen_broadcast($1); }
|
||||
| PPPOED { $$ = gen_pppoed(); }
|
||||
| PPPOES pnum { $$ = gen_pppoes($2); }
|
||||
| PPPOES { $$ = gen_pppoes(-1); }
|
||||
| GENEVE pnum { $$ = gen_geneve($2); }
|
||||
| GENEVE { $$ = gen_geneve(-1); }
|
||||
| pfvar { $$ = $1; }
|
||||
| pqual p80211 { $$ = $2; }
|
||||
| pllc { $$ = $1; }
|
||||
;
|
||||
|
||||
pfvar: PF_IFNAME ID { $$ = gen_pf_ifname($2); }
|
||||
@@ -580,6 +597,31 @@ type_subtype: ID { int i;
|
||||
}
|
||||
;
|
||||
|
||||
pllc: LLC { $$ = gen_llc(); }
|
||||
| LLC ID { if (pcap_strcasecmp($2, "i") == 0)
|
||||
$$ = gen_llc_i();
|
||||
else if (pcap_strcasecmp($2, "s") == 0)
|
||||
$$ = gen_llc_s();
|
||||
else if (pcap_strcasecmp($2, "u") == 0)
|
||||
$$ = gen_llc_u();
|
||||
else {
|
||||
u_int subtype;
|
||||
|
||||
subtype = str2tok($2, llc_s_subtypes);
|
||||
if (subtype != -1)
|
||||
$$ = gen_llc_s_subtype(subtype);
|
||||
else {
|
||||
subtype = str2tok($2, llc_u_subtypes);
|
||||
if (subtype == -1)
|
||||
bpf_error("unknown LLC type name \"%s\"", $2);
|
||||
$$ = gen_llc_u_subtype(subtype);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* sigh, "rnr" is already a keyword for PF */
|
||||
| LLC PF_RNR { $$ = gen_llc_s_subtype(LLC_RNR); }
|
||||
;
|
||||
|
||||
dir: NUM
|
||||
| ID { if (pcap_strcasecmp($1, "nods") == 0)
|
||||
$$ = IEEE80211_FC1_DIR_NODS;
|
||||
@@ -618,8 +660,10 @@ narth: pname '[' arth ']' { $$ = gen_load($1, $3, 1); }
|
||||
| arth '-' arth { $$ = gen_arth(BPF_SUB, $1, $3); }
|
||||
| arth '*' arth { $$ = gen_arth(BPF_MUL, $1, $3); }
|
||||
| arth '/' arth { $$ = gen_arth(BPF_DIV, $1, $3); }
|
||||
| arth '%' arth { $$ = gen_arth(BPF_MOD, $1, $3); }
|
||||
| arth '&' arth { $$ = gen_arth(BPF_AND, $1, $3); }
|
||||
| arth '|' arth { $$ = gen_arth(BPF_OR, $1, $3); }
|
||||
| arth '^' arth { $$ = gen_arth(BPF_XOR, $1, $3); }
|
||||
| arth LSH arth { $$ = gen_arth(BPF_LSH, $1, $3); }
|
||||
| arth RSH arth { $$ = gen_arth(BPF_RSH, $1, $3); }
|
||||
| '-' arth %prec UMINUS { $$ = gen_neg($2); }
|
||||
@@ -636,7 +680,6 @@ pnum: NUM
|
||||
| paren pnum ')' { $$ = $2; }
|
||||
;
|
||||
atmtype: LANE { $$ = A_LANE; }
|
||||
| LLC { $$ = A_LLC; }
|
||||
| METAC { $$ = A_METAC; }
|
||||
| BCC { $$ = A_BCC; }
|
||||
| OAMF4EC { $$ = A_OAMF4EC; }
|
||||
|
||||
320
libpcap/inet.c
320
libpcap/inet.c
@@ -32,11 +32,6 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.79 2008-04-20 18:19:02 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -90,6 +85,18 @@ struct rtentry; /* declarations in <net/if.h> */
|
||||
(isdigit((unsigned char)((name)[2])) || (name)[2] == '\0'))
|
||||
#endif
|
||||
|
||||
#ifdef IFF_UP
|
||||
#define ISUP(flags) ((flags) & IFF_UP)
|
||||
#else
|
||||
#define ISUP(flags) 0
|
||||
#endif
|
||||
|
||||
#ifdef IFF_RUNNING
|
||||
#define ISRUNNING(flags) ((flags) & IFF_RUNNING)
|
||||
#else
|
||||
#define ISRUNNING(flags) 0
|
||||
#endif
|
||||
|
||||
struct sockaddr *
|
||||
dup_sockaddr(struct sockaddr *sa, size_t sa_length)
|
||||
{
|
||||
@@ -100,40 +107,85 @@ dup_sockaddr(struct sockaddr *sa, size_t sa_length)
|
||||
return (memcpy(newsa, sa, sa_length));
|
||||
}
|
||||
|
||||
static int
|
||||
get_instance(const char *name)
|
||||
/*
|
||||
* Construct a "figure of merit" for an interface, for use when sorting
|
||||
* the list of interfaces, in which interfaces that are up are superior
|
||||
* to interfaces that aren't up, interfaces that are up and running are
|
||||
* superior to interfaces that are up but not running, and non-loopback
|
||||
* interfaces that are up and running are superior to loopback interfaces,
|
||||
* and interfaces with the same flags have a figure of merit that's higher
|
||||
* the lower the instance number.
|
||||
*
|
||||
* The goal is to try to put the interfaces most likely to be useful for
|
||||
* capture at the beginning of the list.
|
||||
*
|
||||
* The figure of merit, which is lower the "better" the interface is,
|
||||
* has the uppermost bit set if the interface isn't running, the bit
|
||||
* below that set if the interface isn't up, the bit below that set
|
||||
* if the interface is a loopback interface, and the interface index
|
||||
* in the 29 bits below that. (Yes, we assume u_int is 32 bits.)
|
||||
*/
|
||||
static u_int
|
||||
get_figure_of_merit(pcap_if_t *dev)
|
||||
{
|
||||
const char *cp, *endcp;
|
||||
int n;
|
||||
const char *cp;
|
||||
u_int n;
|
||||
|
||||
if (strcmp(name, "any") == 0) {
|
||||
if (strcmp(dev->name, "any") == 0) {
|
||||
/*
|
||||
* Give the "any" device an artificially high instance
|
||||
* number, so it shows up after all other non-loopback
|
||||
* interfaces.
|
||||
*/
|
||||
return INT_MAX;
|
||||
}
|
||||
|
||||
endcp = name + strlen(name);
|
||||
for (cp = name; cp < endcp && !isdigit((unsigned char)*cp); ++cp)
|
||||
continue;
|
||||
|
||||
if (isdigit((unsigned char)*cp))
|
||||
n = 0x1FFFFFFF; /* 29 all-1 bits */
|
||||
} else {
|
||||
/*
|
||||
* A number at the end of the device name string is
|
||||
* assumed to be a unit number.
|
||||
*/
|
||||
cp = dev->name + strlen(dev->name) - 1;
|
||||
while (cp-1 >= dev->name && *(cp-1) >= '0' && *(cp-1) <= '9')
|
||||
cp--;
|
||||
if (*cp >= '0' && *cp <= '9')
|
||||
n = atoi(cp);
|
||||
else
|
||||
n = 0;
|
||||
}
|
||||
if (!(dev->flags & PCAP_IF_RUNNING))
|
||||
n |= 0x80000000;
|
||||
if (!(dev->flags & PCAP_IF_UP))
|
||||
n |= 0x40000000;
|
||||
if (dev->flags & PCAP_IF_LOOPBACK)
|
||||
n |= 0x20000000;
|
||||
return (n);
|
||||
}
|
||||
|
||||
/*
|
||||
* Look for a given device in the specified list of devices.
|
||||
*
|
||||
* If we find it, return 0 and set *curdev_ret to point to it.
|
||||
*
|
||||
* If we don't find it, check whether we can open it:
|
||||
*
|
||||
* If that fails with PCAP_ERROR_NO_SUCH_DEVICE or
|
||||
* PCAP_ERROR_IFACE_NOT_UP, don't attempt to add an entry for
|
||||
* it, as that probably means it exists but doesn't support
|
||||
* packet capture.
|
||||
*
|
||||
* Otherwise, attempt to add an entry for it, with the specified
|
||||
* ifnet flags and description, and, if that succeeds, return 0
|
||||
* and set *curdev_ret to point to the new entry, otherwise
|
||||
* return PCAP_ERROR and set errbuf to an error message.
|
||||
*/
|
||||
int
|
||||
add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
u_int flags, const char *description, char *errbuf)
|
||||
{
|
||||
pcap_t *p;
|
||||
pcap_if_t *curdev, *prevdev, *nextdev;
|
||||
int this_instance;
|
||||
u_int this_figure_of_merit, nextdev_figure_of_merit;
|
||||
char open_errbuf[PCAP_ERRBUF_SIZE];
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Is there already an entry in the list for this interface?
|
||||
@@ -193,23 +245,72 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
}
|
||||
strcpy(en_name, "en");
|
||||
strcat(en_name, name + 3);
|
||||
p = pcap_open_live(en_name, 68, 0, 0, open_errbuf);
|
||||
p = pcap_create(en_name, open_errbuf);
|
||||
free(en_name);
|
||||
} else
|
||||
#endif /* __APPLE */
|
||||
p = pcap_open_live(name, 68, 0, 0, open_errbuf);
|
||||
p = pcap_create(name, open_errbuf);
|
||||
if (p == NULL) {
|
||||
/*
|
||||
* No. Don't bother including it.
|
||||
* Don't treat this as an error, though.
|
||||
* The attempt to create the pcap_t failed;
|
||||
* that's probably an indication that we're
|
||||
* out of memory.
|
||||
*
|
||||
* Don't bother including this interface,
|
||||
* but don't treat it as an error.
|
||||
*/
|
||||
*curdev_ret = NULL;
|
||||
return (0);
|
||||
}
|
||||
/* Small snaplen, so we don't try to allocate much memory. */
|
||||
pcap_set_snaplen(p, 68);
|
||||
ret = pcap_activate(p);
|
||||
pcap_close(p);
|
||||
switch (ret) {
|
||||
|
||||
case PCAP_ERROR_NO_SUCH_DEVICE:
|
||||
case PCAP_ERROR_IFACE_NOT_UP:
|
||||
/*
|
||||
* We expect these two errors - they're the
|
||||
* reason we try to open the device.
|
||||
*
|
||||
* PCAP_ERROR_NO_SUCH_DEVICE typically means
|
||||
* "there's no such device *known to the
|
||||
* OS's capture mechanism*", so, even though
|
||||
* it might be a valid network interface, you
|
||||
* can't capture on it (e.g., the loopback
|
||||
* device in Solaris up to Solaris 10, or
|
||||
* the vmnet devices in OS X with VMware
|
||||
* Fusion). We don't include those devices
|
||||
* in our list of devices, as there's no
|
||||
* point in doing so - they're not available
|
||||
* for capture.
|
||||
*
|
||||
* PCAP_ERROR_IFACE_NOT_UP means that the
|
||||
* OS's capture mechanism doesn't work on
|
||||
* interfaces not marked as up; some capture
|
||||
* mechanisms *do* support that, so we no
|
||||
* longer reject those interfaces out of hand,
|
||||
* but we *do* want to reject them if they
|
||||
* can't be opened for capture.
|
||||
*/
|
||||
*curdev_ret = NULL;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Yes, we can open it.
|
||||
* Yes, we can open it, or we can't, for some other
|
||||
* reason.
|
||||
*
|
||||
* If we can open it, we want to offer it for
|
||||
* capture, as you can capture on it. If we can't,
|
||||
* we want to offer it for capture, so that, if
|
||||
* the user tries to capture on it, they'll get
|
||||
* an error and they'll know why they can't
|
||||
* capture on it (e.g., insufficient permissions)
|
||||
* or they'll report it as a problem (and then
|
||||
* have the error message to provide as information).
|
||||
*
|
||||
* Allocate a new entry.
|
||||
*/
|
||||
curdev = malloc(sizeof(pcap_if_t));
|
||||
@@ -252,20 +353,22 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
curdev->flags = 0;
|
||||
if (ISLOOPBACK(name, flags))
|
||||
curdev->flags |= PCAP_IF_LOOPBACK;
|
||||
if (ISUP(flags))
|
||||
curdev->flags |= PCAP_IF_UP;
|
||||
if (ISRUNNING(flags))
|
||||
curdev->flags |= PCAP_IF_RUNNING;
|
||||
|
||||
/*
|
||||
* Add it to the list, in the appropriate location.
|
||||
* First, get the instance number of this interface.
|
||||
* First, get the "figure of merit" for this
|
||||
* interface.
|
||||
*/
|
||||
this_instance = get_instance(name);
|
||||
this_figure_of_merit = get_figure_of_merit(curdev);
|
||||
|
||||
/*
|
||||
* Now look for the last interface with an instance number
|
||||
* less than or equal to the new interface's instance
|
||||
* number - except that non-loopback interfaces are
|
||||
* arbitrarily treated as having interface numbers less
|
||||
* than those of loopback interfaces, so the loopback
|
||||
* interfaces are put at the end of the list.
|
||||
* Now look for the last interface with an figure of merit
|
||||
* less than or equal to the new interface's figure of
|
||||
* merit.
|
||||
*
|
||||
* We start with "prevdev" being NULL, meaning we're before
|
||||
* the first element in the list.
|
||||
@@ -295,34 +398,13 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
}
|
||||
|
||||
/*
|
||||
* Is the new interface a non-loopback interface
|
||||
* and the next interface a loopback interface?
|
||||
* Is the new interface's figure of merit less
|
||||
* than the next interface's figure of merit,
|
||||
* meaning that the new interface is better
|
||||
* than the next interface?
|
||||
*/
|
||||
if (!(curdev->flags & PCAP_IF_LOOPBACK) &&
|
||||
(nextdev->flags & PCAP_IF_LOOPBACK)) {
|
||||
/*
|
||||
* Yes, we should put the new entry
|
||||
* before "nextdev", i.e. after "prevdev".
|
||||
*/
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Is the new interface's instance number less
|
||||
* than the next interface's instance number,
|
||||
* and is it the case that the new interface is a
|
||||
* non-loopback interface or the next interface is
|
||||
* a loopback interface?
|
||||
*
|
||||
* (The goal of both loopback tests is to make
|
||||
* sure that we never put a loopback interface
|
||||
* before any non-loopback interface and that we
|
||||
* always put a non-loopback interface before all
|
||||
* loopback interfaces.)
|
||||
*/
|
||||
if (this_instance < get_instance(nextdev->name) &&
|
||||
(!(curdev->flags & PCAP_IF_LOOPBACK) ||
|
||||
(nextdev->flags & PCAP_IF_LOOPBACK))) {
|
||||
nextdev_figure_of_merit = get_figure_of_merit(nextdev);
|
||||
if (this_figure_of_merit < nextdev_figure_of_merit) {
|
||||
/*
|
||||
* Yes - we should put the new entry
|
||||
* before "nextdev", i.e. after "prevdev".
|
||||
@@ -358,6 +440,9 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to get a description for a given device.
|
||||
* Returns a mallocated description if it could and NULL if it couldn't.
|
||||
*
|
||||
* XXX - on FreeBSDs that support it, should it get the sysctl named
|
||||
* "dev.{adapter family name}.{adapter unit}.%desc" to get a description
|
||||
* of the adapter? Note that "dev.an.0.%desc" is "Aironet PC4500/PC4800"
|
||||
@@ -403,18 +488,11 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||
* Do any other UN*Xes, or desktop environments support getting a
|
||||
* description?
|
||||
*/
|
||||
int
|
||||
add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
struct sockaddr *addr, size_t addr_size,
|
||||
struct sockaddr *netmask, size_t netmask_size,
|
||||
struct sockaddr *broadaddr, size_t broadaddr_size,
|
||||
struct sockaddr *dstaddr, size_t dstaddr_size,
|
||||
char *errbuf)
|
||||
static char *
|
||||
get_if_description(const char *name)
|
||||
{
|
||||
pcap_if_t *curdev;
|
||||
char *description = NULL;
|
||||
pcap_addr_t *curaddr, *prevaddr, *nextaddr;
|
||||
#ifdef SIOCGIFDESCR
|
||||
char *description = NULL;
|
||||
int s;
|
||||
struct ifreq ifrdesc;
|
||||
#ifndef IFDESCRSIZE
|
||||
@@ -422,9 +500,7 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
#else
|
||||
size_t descrlen = IFDESCRSIZE;
|
||||
#endif /* IFDESCRSIZE */
|
||||
#endif /* SIOCGIFDESCR */
|
||||
|
||||
#ifdef SIOCGIFDESCR
|
||||
/*
|
||||
* Get the description for the interface.
|
||||
*/
|
||||
@@ -485,8 +561,53 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
description = NULL;
|
||||
}
|
||||
}
|
||||
#endif /* SIOCGIFDESCR */
|
||||
|
||||
return (description);
|
||||
#else /* SIOCGIFDESCR */
|
||||
return (NULL);
|
||||
#endif /* SIOCGIFDESCR */
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to get a description for a given device, and then look for that
|
||||
* device in the specified list of devices.
|
||||
*
|
||||
* If we find it, then, if the specified address isn't null, add it to
|
||||
* the list of addresses for the device and return 0.
|
||||
*
|
||||
* If we don't find it, check whether we can open it:
|
||||
*
|
||||
* If that fails with PCAP_ERROR_NO_SUCH_DEVICE or
|
||||
* PCAP_ERROR_IFACE_NOT_UP, don't attempt to add an entry for
|
||||
* it, as that probably means it exists but doesn't support
|
||||
* packet capture.
|
||||
*
|
||||
* Otherwise, attempt to add an entry for it, with the specified
|
||||
* ifnet flags and description, and, if that succeeds, add the
|
||||
* specified address to its list of addresses if that address is
|
||||
* non-null, set *curdev_ret to point to the new entry, and
|
||||
* return 0, otherwise return PCAP_ERROR and set errbuf to an
|
||||
* error message.
|
||||
*
|
||||
* (We can get called with a null address because we might get a list
|
||||
* of interface name/address combinations from the underlying OS, with
|
||||
* the address being absent in some cases, rather than a list of
|
||||
* interfaces with each interface having a list of addresses, so this
|
||||
* call may be the only call made to add to the list, and we want to
|
||||
* add interfaces even if they have no addresses.)
|
||||
*/
|
||||
int
|
||||
add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
struct sockaddr *addr, size_t addr_size,
|
||||
struct sockaddr *netmask, size_t netmask_size,
|
||||
struct sockaddr *broadaddr, size_t broadaddr_size,
|
||||
struct sockaddr *dstaddr, size_t dstaddr_size,
|
||||
char *errbuf)
|
||||
{
|
||||
char *description;
|
||||
pcap_if_t *curdev;
|
||||
|
||||
description = get_if_description(name);
|
||||
if (add_or_find_if(&curdev, alldevs, name, flags, description,
|
||||
errbuf) == -1) {
|
||||
free(description);
|
||||
@@ -504,12 +625,42 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (addr == NULL) {
|
||||
/*
|
||||
* "curdev" is an entry for this interface; add an entry for this
|
||||
* address to its list of addresses.
|
||||
* There's no address to add; this entry just meant
|
||||
* "here's a new interface".
|
||||
*/
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* "curdev" is an entry for this interface, and we have an
|
||||
* address for it; add an entry for that address to the
|
||||
* interface's list of addresses.
|
||||
*
|
||||
* Allocate the new entry and fill it in.
|
||||
*/
|
||||
return (add_addr_to_dev(curdev, addr, addr_size, netmask,
|
||||
netmask_size, broadaddr, broadaddr_size, dstaddr,
|
||||
dstaddr_size, errbuf));
|
||||
}
|
||||
|
||||
/*
|
||||
* Add an entry to the list of addresses for an interface.
|
||||
* "curdev" is the entry for that interface.
|
||||
* If this is the first IP address added to the interface, move it
|
||||
* in the list as appropriate.
|
||||
*/
|
||||
int
|
||||
add_addr_to_dev(pcap_if_t *curdev,
|
||||
struct sockaddr *addr, size_t addr_size,
|
||||
struct sockaddr *netmask, size_t netmask_size,
|
||||
struct sockaddr *broadaddr, size_t broadaddr_size,
|
||||
struct sockaddr *dstaddr, size_t dstaddr_size,
|
||||
char *errbuf)
|
||||
{
|
||||
pcap_addr_t *curaddr, *prevaddr, *nextaddr;
|
||||
|
||||
curaddr = malloc(sizeof(pcap_addr_t));
|
||||
if (curaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
@@ -603,6 +754,23 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Look for a given device in the specified list of devices.
|
||||
*
|
||||
* If we find it, return 0.
|
||||
*
|
||||
* If we don't find it, check whether we can open it:
|
||||
*
|
||||
* If that fails with PCAP_ERROR_NO_SUCH_DEVICE or
|
||||
* PCAP_ERROR_IFACE_NOT_UP, don't attempt to add an entry for
|
||||
* it, as that probably means it exists but doesn't support
|
||||
* packet capture.
|
||||
*
|
||||
* Otherwise, attempt to add an entry for it, with the specified
|
||||
* ifnet flags and description, and, if that succeeds, return 0
|
||||
* and set *curdev_ret to point to the new entry, otherwise
|
||||
* return PCAP_ERROR and set errbuf to an error message.
|
||||
*/
|
||||
int
|
||||
pcap_add_if(pcap_if_t **devlist, const char *name, u_int flags,
|
||||
const char *description, char *errbuf)
|
||||
@@ -756,7 +924,7 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
||||
/* XXX Work around Linux kernel bug */
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
#endif
|
||||
(void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
||||
(void)strlcpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
||||
if (ioctl(fd, SIOCGIFADDR, (char *)&ifr) < 0) {
|
||||
if (errno == EADDRNOTAVAIL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
@@ -776,7 +944,7 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
||||
/* XXX Work around Linux kernel bug */
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
#endif
|
||||
(void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
||||
(void)strlcpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
||||
if (ioctl(fd, SIOCGIFNETMASK, (char *)&ifr) < 0) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"SIOCGIFNETMASK: %s: %s", device, pcap_strerror(errno));
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-aix4.h,v 1.1 2002-06-01 09:37:40 guy Exp $
|
||||
*/
|
||||
|
||||
/* Prototypes missing in AIX 4.x */
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-hpux11.h,v 1.1 2002-06-01 09:37:41 guy Exp $
|
||||
*/
|
||||
|
||||
/* Prototypes missing in HP-UX 11.x */
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-osf4.h,v 1.2 2000-12-22 11:51:33 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* Prototypes missing in Digital UNIX 4.x */
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-osf5.h,v 1.2 2002-08-02 03:24:15 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-solaris2.h,v 1.19 2000-10-11 04:02:52 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* Prototypes missing in SunOS 5 */
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-sunos4.h,v 1.32 1999-10-07 23:46:41 mcr Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* Prototypes missing in SunOS 4 */
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-ultrix4.h,v 1.19 1999-10-07 23:46:41 mcr Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/* Prototypes missing in Ultrix 4 */
|
||||
|
||||
@@ -17,10 +17,39 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/llc.h,v 1.2 2001-01-28 09:44:50 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
* Definitions for information in the LLC header.
|
||||
*/
|
||||
|
||||
#define LLC_U_FMT 3
|
||||
#define LLC_GSAP 1
|
||||
#define LLC_IG 1 /* Individual / Group */
|
||||
#define LLC_S_FMT 1
|
||||
|
||||
#define LLC_U_POLL 0x10
|
||||
#define LLC_IS_POLL 0x0100
|
||||
#define LLC_XID_FI 0x81
|
||||
|
||||
#define LLC_U_CMD_MASK 0xef
|
||||
#define LLC_UI 0x03
|
||||
#define LLC_UA 0x63
|
||||
#define LLC_DISC 0x43
|
||||
#define LLC_DM 0x0f
|
||||
#define LLC_SABME 0x6f
|
||||
#define LLC_TEST 0xe3
|
||||
#define LLC_XID 0xaf
|
||||
#define LLC_FRMR 0x87
|
||||
|
||||
#define LLC_S_CMD_MASK 0x0f
|
||||
#define LLC_RR 0x0001
|
||||
#define LLC_RNR 0x0005
|
||||
#define LLC_REJ 0x0009
|
||||
|
||||
#define LLC_IS_NR(is) (((is) >> 9) & 0x7f)
|
||||
#define LLC_I_NS(is) (((is) >> 1) & 0x7f)
|
||||
|
||||
/*
|
||||
* 802.2 LLC SAP values.
|
||||
*/
|
||||
@@ -31,10 +60,10 @@
|
||||
#ifndef LLCSAP_GLOBAL
|
||||
#define LLCSAP_GLOBAL 0xff
|
||||
#endif
|
||||
#ifndef LLCSAP_8021B
|
||||
#ifndef LLCSAP_8021B_I
|
||||
#define LLCSAP_8021B_I 0x02
|
||||
#endif
|
||||
#ifndef LLCSAP_8021B
|
||||
#ifndef LLCSAP_8021B_G
|
||||
#define LLCSAP_8021B_G 0x03
|
||||
#endif
|
||||
#ifndef LLCSAP_IP
|
||||
|
||||
@@ -31,17 +31,10 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: snprintf.c,v 1.1 2004-04-05 22:43:51 guy Exp $ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/missing/snprintf.c,v 1.1 2004-04-05 22:43:51 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -13,9 +13,6 @@
|
||||
# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88
|
||||
#
|
||||
|
||||
PATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/bin:/usr/sfw/bin
|
||||
export PATH
|
||||
|
||||
MAKE=Makefile # default makefile name is "Makefile"
|
||||
CC=cc # default C compiler is "cc"
|
||||
DEPENDENCY_CFLAG=-M # default dependency-generation flag is -M
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
#
|
||||
# Common defines for libpcap and 16/32-bit network drivers (djgpp)
|
||||
#
|
||||
# @(#) $Header: /tcpdump/master/libpcap/msdos/common.dj,v 1.2 2004-12-19 19:36:33 guy Exp $ (LBL)
|
||||
|
||||
.SUFFIXES: .exe .wlm .dxe .l .y
|
||||
.PHONY: check_gcclib
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#
|
||||
# c:\net\pcap> make -f msdos/makefile.dj
|
||||
#
|
||||
# @(#) $Header: /tcpdump/master/libpcap/msdos/makefile.dj,v 1.2 2004-12-19 19:41:06 guy Exp $ (LBL)
|
||||
|
||||
VPATH = missing msdos
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
@(#) $Header: /tcpdump/master/libpcap/msdos/readme.dos,v 1.3 2004-12-19 19:47:01 guy Exp $ (LBL)
|
||||
|
||||
libpcap for DOS
|
||||
---------------
|
||||
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
* These functions are not time critical.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/nametoaddr.c,v 1.83 2008-02-06 10:21:30 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/nlpid.h,v 1.2 2002-12-06 00:01:34 hannes Exp $ (Juniper)
|
||||
*/
|
||||
|
||||
/* Types missing from some systems */
|
||||
|
||||
@@ -20,10 +20,6 @@
|
||||
*
|
||||
* Optimization module for tcpdump intermediate representation.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/optimize.c,v 1.91 2008-01-02 04:16:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@@ -610,6 +606,12 @@ fold_op(struct stmt *s, int v0, int v1)
|
||||
a /= b;
|
||||
break;
|
||||
|
||||
case BPF_MOD:
|
||||
if (b == 0)
|
||||
bpf_error("modulus by zero");
|
||||
a %= b;
|
||||
break;
|
||||
|
||||
case BPF_AND:
|
||||
a &= b;
|
||||
break;
|
||||
@@ -618,6 +620,10 @@ fold_op(struct stmt *s, int v0, int v1)
|
||||
a |= b;
|
||||
break;
|
||||
|
||||
case BPF_XOR:
|
||||
a ^= b;
|
||||
break;
|
||||
|
||||
case BPF_LSH:
|
||||
a <<= b;
|
||||
break;
|
||||
@@ -978,8 +984,10 @@ opt_stmt(struct stmt *s, int val[], int alter)
|
||||
case BPF_ALU|BPF_SUB|BPF_K:
|
||||
case BPF_ALU|BPF_MUL|BPF_K:
|
||||
case BPF_ALU|BPF_DIV|BPF_K:
|
||||
case BPF_ALU|BPF_MOD|BPF_K:
|
||||
case BPF_ALU|BPF_AND|BPF_K:
|
||||
case BPF_ALU|BPF_OR|BPF_K:
|
||||
case BPF_ALU|BPF_XOR|BPF_K:
|
||||
case BPF_ALU|BPF_LSH|BPF_K:
|
||||
case BPF_ALU|BPF_RSH|BPF_K:
|
||||
op = BPF_OP(s->code);
|
||||
@@ -990,7 +998,7 @@ opt_stmt(struct stmt *s, int val[], int alter)
|
||||
* fixup the generated math code */
|
||||
if (op == BPF_ADD ||
|
||||
op == BPF_LSH || op == BPF_RSH ||
|
||||
op == BPF_OR) {
|
||||
op == BPF_OR || op == BPF_XOR) {
|
||||
s->code = NOP;
|
||||
break;
|
||||
}
|
||||
@@ -1013,8 +1021,10 @@ opt_stmt(struct stmt *s, int val[], int alter)
|
||||
case BPF_ALU|BPF_SUB|BPF_X:
|
||||
case BPF_ALU|BPF_MUL|BPF_X:
|
||||
case BPF_ALU|BPF_DIV|BPF_X:
|
||||
case BPF_ALU|BPF_MOD|BPF_X:
|
||||
case BPF_ALU|BPF_AND|BPF_X:
|
||||
case BPF_ALU|BPF_OR|BPF_X:
|
||||
case BPF_ALU|BPF_XOR|BPF_X:
|
||||
case BPF_ALU|BPF_LSH|BPF_X:
|
||||
case BPF_ALU|BPF_RSH|BPF_X:
|
||||
op = BPF_OP(s->code);
|
||||
@@ -1041,12 +1051,12 @@ opt_stmt(struct stmt *s, int val[], int alter)
|
||||
*/
|
||||
if (alter && vmap[val[A_ATOM]].is_const
|
||||
&& vmap[val[A_ATOM]].const_val == 0) {
|
||||
if (op == BPF_ADD || op == BPF_OR) {
|
||||
if (op == BPF_ADD || op == BPF_OR || op == BPF_XOR) {
|
||||
s->code = BPF_MISC|BPF_TXA;
|
||||
vstore(s, &val[A_ATOM], val[X_ATOM], alter);
|
||||
break;
|
||||
}
|
||||
else if (op == BPF_MUL || op == BPF_DIV ||
|
||||
else if (op == BPF_MUL || op == BPF_DIV || op == BPF_MOD ||
|
||||
op == BPF_AND || op == BPF_LSH || op == BPF_RSH) {
|
||||
s->code = BPF_LD|BPF_IMM;
|
||||
s->k = 0;
|
||||
@@ -2234,7 +2244,92 @@ install_bpf_program(pcap_t *p, struct bpf_program *fp)
|
||||
|
||||
#ifdef BDEBUG
|
||||
static void
|
||||
opt_dump(struct block *root)
|
||||
dot_dump_node(struct block *block, struct bpf_program *prog, FILE *out)
|
||||
{
|
||||
int icount, noffset;
|
||||
int i;
|
||||
|
||||
if (block == NULL || isMarked(block))
|
||||
return;
|
||||
Mark(block);
|
||||
|
||||
icount = slength(block->stmts) + 1 + block->longjt + block->longjf;
|
||||
noffset = min(block->offset + icount, (int)prog->bf_len);
|
||||
|
||||
fprintf(out, "\tblock%d [shape=ellipse, id=\"block-%d\" label=\"BLOCK%d\\n", block->id, block->id, block->id);
|
||||
for (i = block->offset; i < noffset; i++) {
|
||||
fprintf(out, "\\n%s", bpf_image(prog->bf_insns + i, i));
|
||||
}
|
||||
fprintf(out, "\" tooltip=\"");
|
||||
for (i = 0; i < BPF_MEMWORDS; i++)
|
||||
if (block->val[i] != 0)
|
||||
fprintf(out, "val[%d]=%d ", i, block->val[i]);
|
||||
fprintf(out, "val[A]=%d ", block->val[A_ATOM]);
|
||||
fprintf(out, "val[X]=%d", block->val[X_ATOM]);
|
||||
fprintf(out, "\"");
|
||||
if (JT(block) == NULL)
|
||||
fprintf(out, ", peripheries=2");
|
||||
fprintf(out, "];\n");
|
||||
|
||||
dot_dump_node(JT(block), prog, out);
|
||||
dot_dump_node(JF(block), prog, out);
|
||||
}
|
||||
static void
|
||||
dot_dump_edge(struct block *block, FILE *out)
|
||||
{
|
||||
if (block == NULL || isMarked(block))
|
||||
return;
|
||||
Mark(block);
|
||||
|
||||
if (JT(block)) {
|
||||
fprintf(out, "\t\"block%d\":se -> \"block%d\":n [label=\"T\"]; \n",
|
||||
block->id, JT(block)->id);
|
||||
fprintf(out, "\t\"block%d\":sw -> \"block%d\":n [label=\"F\"]; \n",
|
||||
block->id, JF(block)->id);
|
||||
}
|
||||
dot_dump_edge(JT(block), out);
|
||||
dot_dump_edge(JF(block), out);
|
||||
}
|
||||
/* Output the block CFG using graphviz/DOT language
|
||||
* In the CFG, block's code, value index for each registers at EXIT,
|
||||
* and the jump relationship is show.
|
||||
*
|
||||
* example DOT for BPF `ip src host 1.1.1.1' is:
|
||||
digraph BPF {
|
||||
block0 [shape=ellipse, id="block-0" label="BLOCK0\n\n(000) ldh [12]\n(001) jeq #0x800 jt 2 jf 5" tooltip="val[A]=0 val[X]=0"];
|
||||
block1 [shape=ellipse, id="block-1" label="BLOCK1\n\n(002) ld [26]\n(003) jeq #0x1010101 jt 4 jf 5" tooltip="val[A]=0 val[X]=0"];
|
||||
block2 [shape=ellipse, id="block-2" label="BLOCK2\n\n(004) ret #68" tooltip="val[A]=0 val[X]=0", peripheries=2];
|
||||
block3 [shape=ellipse, id="block-3" label="BLOCK3\n\n(005) ret #0" tooltip="val[A]=0 val[X]=0", peripheries=2];
|
||||
"block0":se -> "block1":n [label="T"];
|
||||
"block0":sw -> "block3":n [label="F"];
|
||||
"block1":se -> "block2":n [label="T"];
|
||||
"block1":sw -> "block3":n [label="F"];
|
||||
}
|
||||
*
|
||||
* After install graphviz on http://www.graphviz.org/, save it as bpf.dot
|
||||
* and run `dot -Tpng -O bpf.dot' to draw the graph.
|
||||
*/
|
||||
static void
|
||||
dot_dump(struct block *root)
|
||||
{
|
||||
struct bpf_program f;
|
||||
FILE *out = stdout;
|
||||
|
||||
memset(bids, 0, sizeof bids);
|
||||
f.bf_insns = icode_to_fcode(root, &f.bf_len);
|
||||
|
||||
fprintf(out, "digraph BPF {\n");
|
||||
unMarkAll();
|
||||
dot_dump_node(root, &f, out);
|
||||
unMarkAll();
|
||||
dot_dump_edge(root, out);
|
||||
fprintf(out, "}\n");
|
||||
|
||||
free((char *)f.bf_insns);
|
||||
}
|
||||
|
||||
static void
|
||||
plain_dump(struct block *root)
|
||||
{
|
||||
struct bpf_program f;
|
||||
|
||||
@@ -2244,4 +2339,17 @@ opt_dump(struct block *root)
|
||||
putchar('\n');
|
||||
free((char *)f.bf_insns);
|
||||
}
|
||||
static void
|
||||
opt_dump(struct block *root)
|
||||
{
|
||||
/* if optimizer debugging is enabled, output DOT graph
|
||||
* `dflag=4' is equivalent to -dddd to follow -d/-dd/-ddd
|
||||
* convention in tcpdump command line
|
||||
*/
|
||||
if (dflag > 3)
|
||||
dot_dump(root);
|
||||
else
|
||||
plain_dump(root);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
%define prefix /usr
|
||||
%define version @VERSION@
|
||||
|
||||
Summary: A system-independent interface for user-level packet capture
|
||||
Name: libpcap
|
||||
Version: %version
|
||||
Release: 1
|
||||
Group: Development/Libraries
|
||||
License: BSD with advertising
|
||||
Source: @NAME@.tar.gz
|
||||
BuildRoot: /tmp/%{name}-buildroot
|
||||
URL: http://www.tcpdump.org
|
||||
|
||||
Source: http://www.tcpdump.org/release/%{name}-%{version}.tar.gz
|
||||
|
||||
%description
|
||||
Libpcap provides a portable framework for low-level network
|
||||
monitoring. Libpcap can provide network statistics collection,
|
||||
security monitoring and network debugging. Since almost every system
|
||||
vendor provides a different interface for packet capture, the libpcap
|
||||
authors created this system-independent API to ease in porting and to
|
||||
alleviate the need for several system-dependent packet capture modules
|
||||
in each application.
|
||||
|
||||
Install libpcap if you need to do low-level network traffic monitoring
|
||||
on your network.
|
||||
|
||||
%package devel
|
||||
Summary: Libraries and header files for the libpcap library
|
||||
Group: Development/Libraries
|
||||
|
||||
%description devel
|
||||
Libpcap provides a portable framework for low-level network
|
||||
monitoring. Libpcap can provide network statistics collection,
|
||||
security monitoring and network debugging. Since almost every system
|
||||
vendor provides a different interface for packet capture, the libpcap
|
||||
authors created this system-independent API to ease in porting and to
|
||||
alleviate the need for several system-dependent packet capture modules
|
||||
in each application.
|
||||
|
||||
This package provides the libraries, include files, and other
|
||||
resources needed for developing libpcap applications.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
||||
%configure
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
make DESTDIR=$RPM_BUILD_ROOT install
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
%doc LICENSE README CHANGES INSTALL.txt README.linux TODO VERSION CREDITS packaging/pcap.spec
|
||||
%{_libdir}/libpcap.so.*
|
||||
%{_mandir}/man7/pcap*.7*
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root)
|
||||
%{_bindir}/pcap-config
|
||||
%{_includedir}/pcap/*.h
|
||||
%{_includedir}/pcap.h
|
||||
%{_includedir}/pcap-bpf.h
|
||||
%{_includedir}/pcap-namedb.h
|
||||
%{_libdir}/libpcap.so
|
||||
%{_libdir}/libpcap.a
|
||||
%{_mandir}/man1/pcap-config.1*
|
||||
%{_mandir}/man3/pcap*.3*
|
||||
%{_mandir}/man5/pcap*.5*
|
||||
@@ -18,10 +18,6 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-bpf.c,v 1.116 2008-09-16 18:42:29 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@@ -1480,6 +1476,9 @@ pcap_activate_bpf(pcap_t *p)
|
||||
{
|
||||
struct pcap_bpf *pb = p->priv;
|
||||
int status = 0;
|
||||
#ifdef HAVE_BSD_IEEE80211
|
||||
int retv;
|
||||
#endif
|
||||
int fd;
|
||||
#ifdef LIFNAMSIZ
|
||||
char *zonesep;
|
||||
@@ -1539,22 +1538,43 @@ pcap_activate_bpf(pcap_t *p)
|
||||
|
||||
#if defined(LIFNAMSIZ) && defined(ZONENAME_MAX) && defined(lifr_zoneid)
|
||||
/*
|
||||
* Check if the given source network device has a '/' separated
|
||||
* zonename prefix string. The zonename prefixed source device
|
||||
* can be used by libpcap consumers to capture network traffic
|
||||
* in non-global zones from the global zone on Solaris 11 and
|
||||
* above. If the zonename prefix is present then we strip the
|
||||
* prefix and pass the zone ID as part of lifr_zoneid.
|
||||
* Retrieve the zoneid of the zone we are currently executing in.
|
||||
*/
|
||||
if ((ifr.lifr_zoneid = getzoneid()) == -1) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "getzoneid(): %s",
|
||||
pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
/*
|
||||
* Check if the given source datalink name has a '/' separated
|
||||
* zonename prefix string. The zonename prefixed source datalink can
|
||||
* be used by pcap consumers in the Solaris global zone to capture
|
||||
* traffic on datalinks in non-global zones. Non-global zones
|
||||
* do not have access to datalinks outside of their own namespace.
|
||||
*/
|
||||
if ((zonesep = strchr(p->opt.source, '/')) != NULL) {
|
||||
char zonename[ZONENAME_MAX];
|
||||
char path_zname[ZONENAME_MAX];
|
||||
int znamelen;
|
||||
char *lnamep;
|
||||
|
||||
if (ifr.lifr_zoneid != GLOBAL_ZONEID) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"zonename/linkname only valid in global zone.");
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
znamelen = zonesep - p->opt.source;
|
||||
(void) strlcpy(zonename, p->opt.source, znamelen + 1);
|
||||
(void) strlcpy(path_zname, p->opt.source, znamelen + 1);
|
||||
ifr.lifr_zoneid = getzoneidbyname(path_zname);
|
||||
if (ifr.lifr_zoneid == -1) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"getzoneidbyname(%s): %s", path_zname,
|
||||
pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
lnamep = strdup(zonesep + 1);
|
||||
ifr.lifr_zoneid = getzoneidbyname(zonename);
|
||||
free(p->opt.source);
|
||||
p->opt.source = lnamep;
|
||||
}
|
||||
@@ -1683,6 +1703,7 @@ pcap_activate_bpf(pcap_t *p)
|
||||
if (ioctl(fd, BIOCGETZMAX, (caddr_t)&zbufmax) < 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCGETZMAX: %s",
|
||||
pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
@@ -1709,6 +1730,7 @@ pcap_activate_bpf(pcap_t *p)
|
||||
if (pb->zbuf1 == MAP_FAILED || pb->zbuf2 == MAP_FAILED) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "mmap: %s",
|
||||
pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
memset(&bz, 0, sizeof(bz)); /* bzero() deprecated, replaced with memset() */
|
||||
@@ -1718,12 +1740,14 @@ pcap_activate_bpf(pcap_t *p)
|
||||
if (ioctl(fd, BIOCSETZBUF, (caddr_t)&bz) < 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCSETZBUF: %s",
|
||||
pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
(void)strncpy(ifrname, p->opt.source, ifnamsiz);
|
||||
if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCSETIF: %s: %s",
|
||||
p->opt.source, pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
v = pb->zbufsize - sizeof(struct bpf_zbuf_header);
|
||||
@@ -1977,11 +2001,12 @@ pcap_activate_bpf(pcap_t *p)
|
||||
/*
|
||||
* Try to put the interface into monitor mode.
|
||||
*/
|
||||
status = monitor_mode(p, 1);
|
||||
if (status != 0) {
|
||||
retv = monitor_mode(p, 1);
|
||||
if (retv != 0) {
|
||||
/*
|
||||
* We failed.
|
||||
*/
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
* 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/pcap-bpf.h,v 1.50 2007-04-01 21:43:55 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -31,10 +31,6 @@
|
||||
* By Paolo Abeni <paolo.abeni@email.it>
|
||||
*
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-bt-linux.c,v 1.15 2008-07-01 07:05:54 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -29,8 +29,6 @@
|
||||
*
|
||||
* Bluetooth sniffing API implementation for Linux platform
|
||||
* By Paolo Abeni <paolo.abeni@email.it>
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-bt-linux.h,v 1.5 2008-04-04 19:37:45 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
242
libpcap/pcap-bt-monitor-linux.c
Normal file
242
libpcap/pcap-bt-monitor-linux.c
Normal file
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Michal Labedzki for Tieto Corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not 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
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <bluetooth/bluetooth.h>
|
||||
#include <bluetooth/hci.h>
|
||||
#include <bluetooth/mgmt.h>
|
||||
|
||||
#include "pcap/bluetooth.h"
|
||||
#include "pcap-int.h"
|
||||
|
||||
#include "pcap-bt-monitor-linux.h"
|
||||
|
||||
#define BT_CONTROL_SIZE 32
|
||||
#define INTERFACE_NAME "bluetooth-monitor"
|
||||
|
||||
int
|
||||
bt_monitor_findalldevs(pcap_if_t **alldevsp, char *err_str)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (pcap_add_if(alldevsp, INTERFACE_NAME, 0,
|
||||
"Bluetooth Linux Monitor", err_str) < 0)
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
bt_monitor_read(pcap_t *handle, int max_packets _U_, pcap_handler callback, u_char *user)
|
||||
{
|
||||
struct cmsghdr *cmsg;
|
||||
struct msghdr msg;
|
||||
struct iovec iv[2];
|
||||
ssize_t ret;
|
||||
struct pcap_pkthdr pkth;
|
||||
pcap_bluetooth_linux_monitor_header *bthdr;
|
||||
struct mgmt_hdr hdr;
|
||||
|
||||
bthdr = (pcap_bluetooth_linux_monitor_header*) &handle->buffer[handle->offset];
|
||||
|
||||
iv[0].iov_base = &hdr;
|
||||
iv[0].iov_len = MGMT_HDR_SIZE;
|
||||
iv[1].iov_base = &handle->buffer[handle->offset + sizeof(pcap_bluetooth_linux_monitor_header)];
|
||||
iv[1].iov_len = handle->snapshot;
|
||||
|
||||
memset(&pkth.ts, 0, sizeof(pkth.ts));
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.msg_iov = iv;
|
||||
msg.msg_iovlen = 2;
|
||||
msg.msg_control = handle->buffer;
|
||||
msg.msg_controllen = handle->offset;
|
||||
|
||||
do {
|
||||
ret = recvmsg(handle->fd, &msg, 0);
|
||||
if (handle->break_loop)
|
||||
{
|
||||
handle->break_loop = 0;
|
||||
return -2;
|
||||
}
|
||||
} while ((ret == -1) && (errno == EINTR));
|
||||
|
||||
if (ret < 0) {
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"Can't receive packet: %s", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
pkth.caplen = ret - MGMT_HDR_SIZE + sizeof(pcap_bluetooth_linux_monitor_header);
|
||||
pkth.len = pkth.caplen;
|
||||
|
||||
for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
||||
if (cmsg->cmsg_level != SOL_SOCKET) continue;
|
||||
|
||||
if (cmsg->cmsg_type == SCM_TIMESTAMP) {
|
||||
memcpy(&pkth.ts, CMSG_DATA(cmsg), sizeof(pkth.ts));
|
||||
}
|
||||
}
|
||||
|
||||
bthdr->adapter_id = htons(hdr.index);
|
||||
bthdr->opcode = htons(hdr.opcode);
|
||||
|
||||
if (handle->fcode.bf_insns == NULL ||
|
||||
bpf_filter(handle->fcode.bf_insns, &handle->buffer[handle->offset],
|
||||
pkth.len, pkth.caplen)) {
|
||||
callback(user, &pkth, &handle->buffer[handle->offset]);
|
||||
return 1;
|
||||
}
|
||||
return 0; /* didn't pass filter */
|
||||
}
|
||||
|
||||
static int
|
||||
bt_monitor_inject(pcap_t *handle, const void *buf _U_, size_t size _U_)
|
||||
{
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "inject not supported yet");
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
bt_monitor_setdirection(pcap_t *p, pcap_direction_t d)
|
||||
{
|
||||
p->direction = d;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bt_monitor_stats(pcap_t *handle _U_, struct pcap_stat *stats)
|
||||
{
|
||||
stats->ps_recv = 0;
|
||||
stats->ps_drop = 0;
|
||||
stats->ps_ifdrop = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
bt_monitor_activate(pcap_t* handle)
|
||||
{
|
||||
struct sockaddr_hci addr;
|
||||
int err = PCAP_ERROR;
|
||||
int opt;
|
||||
|
||||
if (handle->opt.rfmon) {
|
||||
/* monitor mode doesn't apply here */
|
||||
return PCAP_ERROR_RFMON_NOTSUP;
|
||||
}
|
||||
|
||||
handle->bufsize = handle->snapshot + BT_CONTROL_SIZE + sizeof(pcap_bluetooth_linux_monitor_header);
|
||||
handle->offset = BT_CONTROL_SIZE;
|
||||
handle->linktype = DLT_BLUETOOTH_LINUX_MONITOR;
|
||||
|
||||
handle->read_op = bt_monitor_read;
|
||||
handle->inject_op = bt_monitor_inject;
|
||||
handle->setfilter_op = install_bpf_program; /* no kernel filtering */
|
||||
handle->setdirection_op = bt_monitor_setdirection;
|
||||
handle->set_datalink_op = NULL; /* can't change data link type */
|
||||
handle->getnonblock_op = pcap_getnonblock_fd;
|
||||
handle->setnonblock_op = pcap_setnonblock_fd;
|
||||
handle->stats_op = bt_monitor_stats;
|
||||
|
||||
handle->fd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
|
||||
if (handle->fd < 0) {
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"Can't create raw socket: %s", strerror(errno));
|
||||
return PCAP_ERROR;
|
||||
}
|
||||
|
||||
handle->buffer = malloc(handle->bufsize);
|
||||
if (!handle->buffer) {
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "Can't allocate dump buffer: %s",
|
||||
pcap_strerror(errno));
|
||||
goto close_fail;
|
||||
}
|
||||
|
||||
/* Bind socket to the HCI device */
|
||||
addr.hci_family = AF_BLUETOOTH;
|
||||
addr.hci_dev = HCI_DEV_NONE;
|
||||
addr.hci_channel = HCI_CHANNEL_MONITOR;
|
||||
|
||||
if (bind(handle->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"Can't attach to interface: %s", strerror(errno));
|
||||
goto close_fail;
|
||||
}
|
||||
|
||||
opt = 1;
|
||||
if (setsockopt(handle->fd, SOL_SOCKET, SO_TIMESTAMP, &opt, sizeof(opt)) < 0) {
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"Can't enable time stamp: %s", strerror(errno));
|
||||
goto close_fail;
|
||||
}
|
||||
|
||||
handle->selectable_fd = handle->fd;
|
||||
|
||||
return 0;
|
||||
|
||||
close_fail:
|
||||
pcap_cleanup_live_common(handle);
|
||||
return err;
|
||||
}
|
||||
|
||||
pcap_t *
|
||||
bt_monitor_create(const char *device, char *ebuf, int *is_ours)
|
||||
{
|
||||
pcap_t *p;
|
||||
const char *cp;
|
||||
|
||||
cp = strrchr(device, '/');
|
||||
if (cp == NULL)
|
||||
cp = device;
|
||||
|
||||
if (strcmp(cp, INTERFACE_NAME) != 0) {
|
||||
*is_ours = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*is_ours = 1;
|
||||
p = pcap_create_common(device, ebuf, 0);
|
||||
if (p == NULL)
|
||||
return NULL;
|
||||
|
||||
p->activate_op = bt_monitor_activate;
|
||||
|
||||
return p;
|
||||
}
|
||||
32
libpcap/pcap-bt-monitor-linux.h
Normal file
32
libpcap/pcap-bt-monitor-linux.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Michal Labedzki for Tieto Corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not 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
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER 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.
|
||||
*/
|
||||
|
||||
int bt_monitor_findalldevs(pcap_if_t **alldevsp, char *err_str);
|
||||
pcap_t *bt_monitor_create(const char *device, char *ebuf, int *is_ours);
|
||||
@@ -171,7 +171,7 @@ can_activate(pcap_t* handle)
|
||||
|
||||
/* get interface index */
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strncpy(ifr.ifr_name, handle->opt.source, sizeof(ifr.ifr_name));
|
||||
strlcpy(ifr.ifr_name, handle->opt.source, sizeof(ifr.ifr_name));
|
||||
if (ioctl(handle->fd, SIOCGIFINDEX, &ifr) < 0)
|
||||
{
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
|
||||
@@ -243,7 +243,7 @@ can_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_char *u
|
||||
}
|
||||
} while ((pkth.caplen == -1) && (errno == EINTR));
|
||||
|
||||
if (pkth.caplen < 0)
|
||||
if (pkth.caplen == -1)
|
||||
{
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "Can't receive packet %d:%s",
|
||||
errno, strerror(errno));
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <pthread.h>
|
||||
|
||||
@@ -277,7 +278,8 @@ static void* canusb_capture_thread(void *arg)
|
||||
for(i = 0; i<status.rxsz; i++)
|
||||
{
|
||||
libusb_bulk_transfer(canusb->dev, 0x85, (unsigned char*)&msg, sizeof(msg), &sz, 100);
|
||||
write(canusb->wrpipe, &msg, sizeof(msg));
|
||||
if(write(canusb->wrpipe, &msg, sizeof(msg)) < 0)
|
||||
fprintf(stderr,"write() error: %s\n", strerror(errno));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
|
||||
#include "pcap-int.h"
|
||||
#include "pcap/usb.h"
|
||||
#include "pcap/nflog.h"
|
||||
|
||||
#include "pcap-common.h"
|
||||
|
||||
@@ -932,7 +933,74 @@
|
||||
*/
|
||||
#define LINKTYPE_WIRESHARK_UPPER_PDU 252
|
||||
|
||||
#define LINKTYPE_MATCHING_MAX 252 /* highest value in the "matching" range */
|
||||
/*
|
||||
* Link-layer header type for the netlink protocol (nlmon devices).
|
||||
*/
|
||||
#define LINKTYPE_NETLINK 253
|
||||
|
||||
/*
|
||||
* Bluetooth Linux Monitor headers for the BlueZ stack.
|
||||
*/
|
||||
#define LINKTYPE_BLUETOOTH_LINUX_MONITOR 254
|
||||
|
||||
/*
|
||||
* Bluetooth Basic Rate/Enhanced Data Rate baseband packets, as
|
||||
* captured by Ubertooth.
|
||||
*/
|
||||
#define LINKTYPE_BLUETOOTH_BREDR_BB 255
|
||||
|
||||
/*
|
||||
* Bluetooth Low Energy link layer packets, as captured by Ubertooth.
|
||||
*/
|
||||
#define LINKTYPE_BLUETOOTH_LE_LL_WITH_PHDR 256
|
||||
|
||||
/*
|
||||
* PROFIBUS data link layer.
|
||||
*/
|
||||
#define LINKTYPE_PROFIBUS_DL 257
|
||||
|
||||
|
||||
/*
|
||||
* Apple's DLT_PKTAP headers.
|
||||
*
|
||||
* Sadly, the folks at Apple either had no clue that the DLT_USERn values
|
||||
* are for internal use within an organization and partners only, and
|
||||
* didn't know that the right way to get a link-layer header type is to
|
||||
* ask tcpdump.org for one, or knew and didn't care, so they just
|
||||
* used DLT_USER2, which causes problems for everything except for
|
||||
* their version of tcpdump.
|
||||
*
|
||||
* So I'll just give them one; hopefully this will show up in a
|
||||
* libpcap release in time for them to get this into 10.10 Big Sur
|
||||
* or whatever Mavericks' successor is called. LINKTYPE_PKTAP
|
||||
* will be 258 *even on OS X*; that is *intentional*, so that
|
||||
* PKTAP files look the same on *all* OSes (different OSes can have
|
||||
* different numerical values for a given DLT_, but *MUST NOT* have
|
||||
* different values for what goes in a file, as files can be moved
|
||||
* between OSes!).
|
||||
*/
|
||||
#define LINKTYPE_PKTAP 258
|
||||
|
||||
/*
|
||||
* Ethernet packets preceded by a header giving the last 6 octets
|
||||
* of the preamble specified by 802.3-2012 Clause 65, section
|
||||
* 65.1.3.2 "Transmit".
|
||||
*/
|
||||
#define LINKTYPE_EPON 259
|
||||
|
||||
/*
|
||||
* IPMI trace packets, as specified by Table 3-20 "Trace Data Block Format"
|
||||
* in the PICMG HPM.2 specification.
|
||||
*/
|
||||
#define LINKTYPE_IPMI_HPM_2 260
|
||||
|
||||
/*
|
||||
* per Joshua Wright <jwright@hasborg.com>, formats for Zwave captures.
|
||||
*/
|
||||
#define LINKTYPE_ZWAVE_R1_R2 261
|
||||
#define LINKTYPE_ZWAVE_R3 262
|
||||
|
||||
#define LINKTYPE_MATCHING_MAX 262 /* highest value in the "matching" range */
|
||||
|
||||
static struct linktype_map {
|
||||
int dlt;
|
||||
@@ -1005,13 +1073,20 @@ dlt_to_linktype(int dlt)
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Map DLT_PFSYNC, whatever it might be, to LINKTYPE_PFSYNC.
|
||||
* DLTs that, on some platforms, have values in the matching range
|
||||
* but that *don't* have the same value as the corresponding
|
||||
* LINKTYPE because, for some reason, not all OSes have the
|
||||
* same value for that DLT (note that the DLT's value might be
|
||||
* outside the matching range on some of those OSes).
|
||||
*/
|
||||
if (dlt == DLT_PFSYNC)
|
||||
return (LINKTYPE_PFSYNC);
|
||||
if (dlt == DLT_PKTAP)
|
||||
return (LINKTYPE_PKTAP);
|
||||
|
||||
/*
|
||||
* Map the values in the matching range.
|
||||
* For all other values in the matching range, the DLT
|
||||
* value is the same as the LINKTYPE value.
|
||||
*/
|
||||
if (dlt >= DLT_MATCHING_MIN && dlt <= DLT_MATCHING_MAX)
|
||||
return (dlt);
|
||||
@@ -1025,9 +1100,9 @@ dlt_to_linktype(int dlt)
|
||||
}
|
||||
|
||||
/*
|
||||
* If we don't have a mapping for this DLT_ code, return an
|
||||
* If we don't have a mapping for this DLT, return an
|
||||
* error; that means that this is a value with no corresponding
|
||||
* LINKTYPE_ code, and we need to assign one.
|
||||
* LINKTYPE, and we need to assign one.
|
||||
*/
|
||||
return (-1);
|
||||
}
|
||||
@@ -1038,16 +1113,19 @@ linktype_to_dlt(int linktype)
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Map LINKTYPE_PFSYNC to DLT_PFSYNC, whatever it might be.
|
||||
* LINKTYPE_PFSYNC is in the matching range, to make sure
|
||||
* it's as safe from reuse as we can arrange, so we do
|
||||
* this test first.
|
||||
* LINKTYPEs in the matching range that *don't*
|
||||
* have the same value as the corresponding DLTs
|
||||
* because, for some reason, not all OSes have the
|
||||
* same value for that DLT.
|
||||
*/
|
||||
if (linktype == LINKTYPE_PFSYNC)
|
||||
return (DLT_PFSYNC);
|
||||
if (linktype == LINKTYPE_PKTAP)
|
||||
return (DLT_PKTAP);
|
||||
|
||||
/*
|
||||
* Map the values in the matching range.
|
||||
* For all other values in the matching range, the LINKTYPE
|
||||
* value is the same as the DLT value.
|
||||
*/
|
||||
if (linktype >= LINKTYPE_MATCHING_MIN &&
|
||||
linktype <= LINKTYPE_MATCHING_MAX)
|
||||
@@ -1062,9 +1140,9 @@ linktype_to_dlt(int linktype)
|
||||
}
|
||||
|
||||
/*
|
||||
* If we don't have an entry for this link type, return
|
||||
* the link type value; it may be a DLT_ value from an
|
||||
* older version of libpcap.
|
||||
* If we don't have an entry for this LINKTYPE, return
|
||||
* the link type value; it may be a DLT from an older
|
||||
* version of libpcap.
|
||||
*/
|
||||
return linktype;
|
||||
}
|
||||
@@ -1075,17 +1153,15 @@ linktype_to_dlt(int linktype)
|
||||
* memory-mapped buffer shared by the kernel).
|
||||
*
|
||||
* When reading a DLT_USB_LINUX or DLT_USB_LINUX_MMAPPED capture file,
|
||||
* we need to convert it from the capturing host's byte order to
|
||||
* the reading host's byte order.
|
||||
* we need to convert it from the byte order of the host that wrote
|
||||
* the file to this host's byte order.
|
||||
*/
|
||||
void
|
||||
static void
|
||||
swap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
|
||||
int header_len_64_bytes)
|
||||
{
|
||||
pcap_usb_header_mmapped *uhdr = (pcap_usb_header_mmapped *)buf;
|
||||
bpf_u_int32 offset = 0;
|
||||
usb_isodesc *pisodesc;
|
||||
int32_t numdesc, i;
|
||||
|
||||
/*
|
||||
* "offset" is the offset *past* the field we're swapping;
|
||||
@@ -1149,6 +1225,17 @@ swap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
|
||||
} else
|
||||
offset += 8; /* skip USB setup header */
|
||||
|
||||
/*
|
||||
* With the old header, there are no isochronous descriptors
|
||||
* after the header.
|
||||
*
|
||||
* With the new header, the actual number of descriptors in
|
||||
* the header is not s.iso.numdesc, it's ndesc - only the
|
||||
* first N descriptors, for some value of N, are put into
|
||||
* the header, and ndesc is set to the actual number copied.
|
||||
* In addition, if s.iso.numdesc is negative, no descriptors
|
||||
* are captured, and ndesc is set to 0.
|
||||
*/
|
||||
if (header_len_64_bytes) {
|
||||
/*
|
||||
* This is either the "version 1" header, with
|
||||
@@ -1177,13 +1264,14 @@ swap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
|
||||
if (hdr->caplen < offset)
|
||||
return;
|
||||
uhdr->ndesc = SWAPLONG(uhdr->ndesc);
|
||||
}
|
||||
|
||||
if (uhdr->transfer_type == URB_ISOCHRONOUS) {
|
||||
/* swap the values in struct linux_usb_isodesc */
|
||||
usb_isodesc *pisodesc;
|
||||
u_int32_t i;
|
||||
|
||||
pisodesc = (usb_isodesc *)(void *)(buf+offset);
|
||||
numdesc = uhdr->s.iso.numdesc;
|
||||
for (i = 0; i < numdesc; i++) {
|
||||
for (i = 0; i < uhdr->ndesc; i++) {
|
||||
offset += 4; /* skip past status */
|
||||
if (hdr->caplen < offset)
|
||||
return;
|
||||
@@ -1205,3 +1293,94 @@ swap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The DLT_NFLOG "packets" have a mixture of big-endian and host-byte-order
|
||||
* data. They begin with a fixed-length header with big-endian fields,
|
||||
* followed by a set of TLVs, where the type and length are in host
|
||||
* byte order but the values are either big-endian or are a raw byte
|
||||
* sequence that's the same regardless of the host's byte order.
|
||||
*
|
||||
* When reading a DLT_NFLOG capture file, we need to convert the type
|
||||
* and length values from the byte order of the host that wrote the
|
||||
* file to the byte order of this host.
|
||||
*/
|
||||
static void
|
||||
swap_nflog_header(const struct pcap_pkthdr *hdr, u_char *buf)
|
||||
{
|
||||
u_char *p = buf;
|
||||
nflog_hdr_t *nfhdr = (nflog_hdr_t *)buf;
|
||||
nflog_tlv_t *tlv;
|
||||
u_int caplen = hdr->caplen;
|
||||
u_int length = hdr->len;
|
||||
u_int16_t size;
|
||||
|
||||
if (caplen < (int) sizeof(nflog_hdr_t) || length < (int) sizeof(nflog_hdr_t)) {
|
||||
/* Not enough data to have any TLVs. */
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(nfhdr->nflog_version) == 0) {
|
||||
/* Unknown NFLOG version */
|
||||
return;
|
||||
}
|
||||
|
||||
length -= sizeof(nflog_hdr_t);
|
||||
caplen -= sizeof(nflog_hdr_t);
|
||||
p += sizeof(nflog_hdr_t);
|
||||
|
||||
while (caplen >= sizeof(nflog_tlv_t)) {
|
||||
tlv = (nflog_tlv_t *) p;
|
||||
|
||||
/* Swap the type and length. */
|
||||
tlv->tlv_type = SWAPSHORT(tlv->tlv_type);
|
||||
tlv->tlv_length = SWAPSHORT(tlv->tlv_length);
|
||||
|
||||
/* Get the length of the TLV. */
|
||||
size = tlv->tlv_length;
|
||||
if (size % 4 != 0)
|
||||
size += 4 - size % 4;
|
||||
|
||||
/* Is the TLV's length less than the minimum? */
|
||||
if (size < sizeof(nflog_tlv_t)) {
|
||||
/* Yes. Give up now. */
|
||||
return;
|
||||
}
|
||||
|
||||
/* Do we have enough data for the full TLV? */
|
||||
if (caplen < size || length < size) {
|
||||
/* No. */
|
||||
return;
|
||||
}
|
||||
|
||||
/* Skip over the TLV. */
|
||||
length -= size;
|
||||
caplen -= size;
|
||||
p += size;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
swap_pseudo_headers(int linktype, struct pcap_pkthdr *hdr, u_char *data)
|
||||
{
|
||||
/*
|
||||
* Convert pseudo-headers from the byte order of
|
||||
* the host on which the file was saved to our
|
||||
* byte order, as necessary.
|
||||
*/
|
||||
switch (linktype) {
|
||||
|
||||
case DLT_USB_LINUX:
|
||||
swap_linux_usb_header(hdr, data, 0);
|
||||
break;
|
||||
|
||||
case DLT_USB_LINUX_MMAPPED:
|
||||
swap_linux_usb_header(hdr, data, 1);
|
||||
break;
|
||||
|
||||
case DLT_NFLOG:
|
||||
swap_nflog_header(hdr, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,5 +21,5 @@ extern int dlt_to_linktype(int dlt);
|
||||
|
||||
extern int linktype_to_dlt(int linktype);
|
||||
|
||||
extern void swap_linux_usb_header(const struct pcap_pkthdr *hdr, u_char *buf,
|
||||
int header_len_64_bytes);
|
||||
extern void swap_pseudo_headers(int linktype, struct pcap_pkthdr *hdr,
|
||||
u_char *data);
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
.\" @(#) $Header: /tcpdump/master/libpcap/pcap-config.1,v 1.1 2008-09-23 18:04:01 guy Exp $ (LBL)
|
||||
.\"
|
||||
.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\" All rights reserved.
|
||||
@@ -20,7 +18,7 @@
|
||||
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
.\"
|
||||
.TH PCAP-CONFIG 1 "26 March 2009"
|
||||
.TH PCAP-CONFIG 1 "22 May 2009"
|
||||
.SH NAME
|
||||
pcap-config \- write libpcap compiler and linker flags to standard output
|
||||
.SH SYNOPSIS
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* pcap-dag.c: Packet capture interface for Endace DAG card.
|
||||
* pcap-dag.c: Packet capture interface for Emulex EndaceDAG cards.
|
||||
*
|
||||
* The functionality of this code attempts to mimic that of pcap-linux as much
|
||||
* as possible. This code is compiled in several different ways depending on
|
||||
@@ -10,16 +10,11 @@
|
||||
* called as required from their pcap-linux/bpf equivalents.
|
||||
*
|
||||
* Authors: Richard Littin, Sean Irvine ({richard,sean}@reeltwo.com)
|
||||
* Modifications: Jesper Peterson <support@endace.com>
|
||||
* Koryn Grant <support@endace.com>
|
||||
* Stephen Donnelly <support@endace.com>
|
||||
* Modifications: Jesper Peterson
|
||||
* Koryn Grant
|
||||
* Stephen Donnelly <stephen.donnelly@emulex.com>
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-dag.c,v 1.39 2008-04-14 20:40:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -45,6 +40,7 @@ struct rtentry; /* declarations in <net/if.h> */
|
||||
|
||||
#include "dagnew.h"
|
||||
#include "dagapi.h"
|
||||
#include "dagpci.h"
|
||||
|
||||
#include "pcap-dag.h"
|
||||
|
||||
@@ -253,6 +249,7 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
int flags = pd->dag_offset_flags;
|
||||
unsigned int nonblocking = flags & DAGF_NONBLOCK;
|
||||
unsigned int num_ext_hdr = 0;
|
||||
unsigned int ticks_per_second;
|
||||
|
||||
/* Get the next bufferful of packets (if necessary). */
|
||||
while (pd->dag_mem_top - pd->dag_mem_bottom < dag_record_size) {
|
||||
@@ -439,6 +436,9 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
caplen = rlen - dag_record_size - 4;
|
||||
dp+=4;
|
||||
}
|
||||
/* Skip over extension headers */
|
||||
caplen -= (8 * num_ext_hdr);
|
||||
|
||||
if (header->type == TYPE_ATM) {
|
||||
caplen = packet_len = ATM_CELL_SIZE;
|
||||
}
|
||||
@@ -470,6 +470,8 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
packet_len = ntohs(header->wlen);
|
||||
packet_len -= (pd->dag_fcs_bits >> 3);
|
||||
caplen = rlen - dag_record_size - 2;
|
||||
/* Skip over extension headers */
|
||||
caplen -= (8 * num_ext_hdr);
|
||||
if (caplen > packet_len) {
|
||||
caplen = packet_len;
|
||||
}
|
||||
@@ -483,6 +485,8 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
packet_len = ntohs(header->wlen);
|
||||
packet_len -= (pd->dag_fcs_bits >> 3);
|
||||
caplen = rlen - dag_record_size;
|
||||
/* Skip over extension headers */
|
||||
caplen -= (8 * num_ext_hdr);
|
||||
if (caplen > packet_len) {
|
||||
caplen = packet_len;
|
||||
}
|
||||
@@ -493,6 +497,8 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
packet_len = ntohs(header->wlen);
|
||||
packet_len -= (pd->dag_fcs_bits >> 3);
|
||||
caplen = rlen - dag_record_size - 4;
|
||||
/* Skip over extension headers */
|
||||
caplen -= (8 * num_ext_hdr);
|
||||
if (caplen > packet_len) {
|
||||
caplen = packet_len;
|
||||
}
|
||||
@@ -518,6 +524,8 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
case TYPE_IPV6:
|
||||
packet_len = ntohs(header->wlen);
|
||||
caplen = rlen - dag_record_size;
|
||||
/* Skip over extension headers */
|
||||
caplen -= (8 * num_ext_hdr);
|
||||
if (caplen > packet_len) {
|
||||
caplen = packet_len;
|
||||
}
|
||||
@@ -538,9 +546,6 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
continue;
|
||||
} /* switch type */
|
||||
|
||||
/* Skip over extension headers */
|
||||
caplen -= (8 * num_ext_hdr);
|
||||
|
||||
} /* ERF encapsulation */
|
||||
|
||||
if (caplen > p->snapshot)
|
||||
@@ -558,12 +563,22 @@ dag_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
ts = header->ts;
|
||||
}
|
||||
|
||||
switch (p->opt.tstamp_precision) {
|
||||
case PCAP_TSTAMP_PRECISION_NANO:
|
||||
ticks_per_second = 1000000000;
|
||||
break;
|
||||
case PCAP_TSTAMP_PRECISION_MICRO:
|
||||
default:
|
||||
ticks_per_second = 1000000;
|
||||
break;
|
||||
|
||||
}
|
||||
pcap_header.ts.tv_sec = ts >> 32;
|
||||
ts = (ts & 0xffffffffULL) * 1000000;
|
||||
ts = (ts & 0xffffffffULL) * ticks_per_second;
|
||||
ts += 0x80000000; /* rounding */
|
||||
pcap_header.ts.tv_usec = ts >> 32;
|
||||
if (pcap_header.ts.tv_usec >= 1000000) {
|
||||
pcap_header.ts.tv_usec -= 1000000;
|
||||
if (pcap_header.ts.tv_usec >= ticks_per_second) {
|
||||
pcap_header.ts.tv_usec -= ticks_per_second;
|
||||
pcap_header.ts.tv_sec++;
|
||||
}
|
||||
|
||||
@@ -922,6 +937,26 @@ pcap_t *dag_create(const char *device, char *ebuf, int *is_ours)
|
||||
return NULL;
|
||||
|
||||
p->activate_op = dag_activate;
|
||||
|
||||
/*
|
||||
* We claim that we support microsecond and nanosecond time
|
||||
* stamps.
|
||||
*
|
||||
* XXX Our native precision is 2^-32s, but libpcap doesn't support
|
||||
* power of two precisions yet. We can convert to either MICRO or NANO.
|
||||
*/
|
||||
p->tstamp_precision_count = 2;
|
||||
p->tstamp_precision_list = malloc(2 * sizeof(u_int));
|
||||
if (p->tstamp_precision_list == NULL) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "malloc: %s",
|
||||
pcap_strerror(errno));
|
||||
if (p->tstamp_type_list != NULL)
|
||||
free(p->tstamp_type_list);
|
||||
free(p);
|
||||
return NULL;
|
||||
}
|
||||
p->tstamp_precision_list[0] = PCAP_TSTAMP_PRECISION_MICRO;
|
||||
p->tstamp_precision_list[1] = PCAP_TSTAMP_PRECISION_NANO;
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -958,6 +993,8 @@ dag_findalldevs(pcap_if_t **devlistp, char *errbuf)
|
||||
char dagname[DAGNAME_BUFSIZE];
|
||||
int dagstream;
|
||||
int dagfd;
|
||||
dag_card_inf_t *inf;
|
||||
char *description;
|
||||
|
||||
/* Try all the DAGs 0-DAG_MAX_BOARDS */
|
||||
for (c = 0; c < DAG_MAX_BOARDS; c++) {
|
||||
@@ -966,8 +1003,11 @@ dag_findalldevs(pcap_if_t **devlistp, char *errbuf)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
description = NULL;
|
||||
if ( (dagfd = dag_open(dagname)) >= 0 ) {
|
||||
if (pcap_add_if(devlistp, name, 0, NULL, errbuf) == -1) {
|
||||
if ((inf = dag_pciinfo(dagfd)))
|
||||
description = dag_device_name(inf->device_code, 1);
|
||||
if (pcap_add_if(devlistp, name, 0, description, errbuf) == -1) {
|
||||
/*
|
||||
* Failure.
|
||||
*/
|
||||
@@ -982,7 +1022,7 @@ dag_findalldevs(pcap_if_t **devlistp, char *errbuf)
|
||||
dag_detach_stream(dagfd, stream);
|
||||
|
||||
snprintf(name, 10, "dag%d:%d", c, stream);
|
||||
if (pcap_add_if(devlistp, name, 0, NULL, errbuf) == -1) {
|
||||
if (pcap_add_if(devlistp, name, 0, description, errbuf) == -1) {
|
||||
/*
|
||||
* Failure.
|
||||
*/
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
* at the same time as another type of device.
|
||||
*
|
||||
* Author: Richard Littin, Sean Irvine ({richard,sean}@reeltwo.com)
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-dag.h,v 1.7 2008-04-04 19:37:45 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
pcap_t *dag_create(const char *, char *, int *);
|
||||
|
||||
@@ -68,11 +68,6 @@
|
||||
* DL_HP_RAWDLS?
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-dlpi.c,v 1.128 2008-12-02 16:20:23 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -341,6 +336,8 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
#ifdef DL_HP_RAWDLS
|
||||
struct pcap_dlpi *pd = p->priv;
|
||||
#endif
|
||||
int status = 0;
|
||||
int retv;
|
||||
register char *cp;
|
||||
int ppa;
|
||||
#ifdef HAVE_SOLARIS
|
||||
@@ -359,7 +356,6 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
#ifndef HAVE_DEV_DLPI
|
||||
char dname2[100];
|
||||
#endif
|
||||
int status = PCAP_ERROR;
|
||||
|
||||
#ifdef HAVE_DEV_DLPI
|
||||
/*
|
||||
@@ -397,6 +393,8 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
if ((p->fd = open(cp, O_RDWR)) < 0) {
|
||||
if (errno == EPERM || errno == EACCES)
|
||||
status = PCAP_ERROR_PERM_DENIED;
|
||||
else
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"%s: %s", cp, pcap_strerror(errno));
|
||||
goto bad;
|
||||
@@ -461,6 +459,8 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
if (errno != ENOENT) {
|
||||
if (errno == EPERM || errno == EACCES)
|
||||
status = PCAP_ERROR_PERM_DENIED;
|
||||
else
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "%s: %s", dname,
|
||||
pcap_strerror(errno));
|
||||
goto bad;
|
||||
@@ -497,6 +497,8 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
} else {
|
||||
if (errno == EPERM || errno == EACCES)
|
||||
status = PCAP_ERROR_PERM_DENIED;
|
||||
else
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "%s: %s",
|
||||
dname2, pcap_strerror(errno));
|
||||
}
|
||||
@@ -511,22 +513,29 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** Attach if "style 2" provider
|
||||
*/
|
||||
if (dlinforeq(p->fd, p->errbuf) < 0 ||
|
||||
dlinfoack(p->fd, (char *)buf, p->errbuf) < 0)
|
||||
dlinfoack(p->fd, (char *)buf, p->errbuf) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
infop = &(MAKE_DL_PRIMITIVES(buf))->info_ack;
|
||||
#ifdef HAVE_SOLARIS
|
||||
if (infop->dl_mac_type == DL_IPATM)
|
||||
isatm = 1;
|
||||
#endif
|
||||
if (infop->dl_provider_style == DL_STYLE2) {
|
||||
status = dl_doattach(p->fd, ppa, p->errbuf);
|
||||
if (status < 0)
|
||||
retv = dl_doattach(p->fd, ppa, p->errbuf);
|
||||
if (retv < 0) {
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
#ifdef DL_HP_RAWDLS
|
||||
if (pd->send_fd >= 0) {
|
||||
if (dl_doattach(pd->send_fd, ppa, p->errbuf) < 0)
|
||||
retv = dl_doattach(pd->send_fd, ppa, p->errbuf);
|
||||
if (retv < 0) {
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -572,31 +581,39 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
*/
|
||||
if ((dlbindreq(p->fd, 1537, p->errbuf) < 0 &&
|
||||
dlbindreq(p->fd, 2, p->errbuf) < 0) ||
|
||||
dlbindack(p->fd, (char *)buf, p->errbuf, NULL) < 0)
|
||||
dlbindack(p->fd, (char *)buf, p->errbuf, NULL) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
#elif defined(DL_HP_RAWDLS)
|
||||
/*
|
||||
** HP-UX 10.0x and 10.1x.
|
||||
*/
|
||||
if (dl_dohpuxbind(p->fd, p->errbuf) < 0)
|
||||
if (dl_dohpuxbind(p->fd, p->errbuf) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
if (pd->send_fd >= 0) {
|
||||
/*
|
||||
** XXX - if this fails, just close send_fd and
|
||||
** set it to -1, so that you can't send but can
|
||||
** still receive?
|
||||
*/
|
||||
if (dl_dohpuxbind(pd->send_fd, p->errbuf) < 0)
|
||||
if (dl_dohpuxbind(pd->send_fd, p->errbuf) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
#else /* neither AIX nor HP-UX */
|
||||
/*
|
||||
** Not Sinix, and neither AIX nor HP-UX - Solaris, and any other
|
||||
** OS using DLPI.
|
||||
**/
|
||||
if (dlbindreq(p->fd, 0, p->errbuf) < 0 ||
|
||||
dlbindack(p->fd, (char *)buf, p->errbuf, NULL) < 0)
|
||||
dlbindack(p->fd, (char *)buf, p->errbuf, NULL) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
#endif /* AIX vs. HP-UX vs. other */
|
||||
#endif /* !HP-UX 9 and !HP-UX 10.20 or later and !SINIX */
|
||||
|
||||
@@ -609,6 +626,7 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** help, and may break things.
|
||||
*/
|
||||
if (strioctl(p->fd, A_PROMISCON_REQ, 0, NULL) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"A_PROMISCON_REQ: %s", pcap_strerror(errno));
|
||||
goto bad;
|
||||
@@ -619,10 +637,12 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
/*
|
||||
** Enable promiscuous (not necessary on send FD)
|
||||
*/
|
||||
status = dlpromiscon(p, DL_PROMISC_PHYS);
|
||||
if (status < 0) {
|
||||
if (status == PCAP_ERROR_PERM_DENIED)
|
||||
retv = dlpromiscon(p, DL_PROMISC_PHYS);
|
||||
if (retv < 0) {
|
||||
if (retv == PCAP_ERROR_PERM_DENIED)
|
||||
status = PCAP_ERROR_PROMISC_PERM_DENIED;
|
||||
else
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
@@ -632,8 +652,8 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** HP-UX or SINIX) (Not necessary on send FD)
|
||||
*/
|
||||
#if !defined(__hpux) && !defined(sinix)
|
||||
status = dlpromiscon(p, DL_PROMISC_MULTI);
|
||||
if (status < 0)
|
||||
retv = dlpromiscon(p, DL_PROMISC_MULTI);
|
||||
if (retv < 0)
|
||||
status = PCAP_WARNING;
|
||||
#endif
|
||||
}
|
||||
@@ -653,18 +673,25 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
/* Everything else (except for SINIX) - always do this */
|
||||
{
|
||||
#endif
|
||||
status = dlpromiscon(p, DL_PROMISC_SAP);
|
||||
if (status < 0) {
|
||||
retv = dlpromiscon(p, DL_PROMISC_SAP);
|
||||
if (retv < 0) {
|
||||
if (p->opt.promisc) {
|
||||
/*
|
||||
* Not fatal, since the DL_PROMISC_PHYS mode worked.
|
||||
* Not fatal, since the DL_PROMISC_PHYS mode
|
||||
* worked.
|
||||
*
|
||||
* Report it as a warning, however.
|
||||
*/
|
||||
if (p->opt.promisc)
|
||||
status = PCAP_WARNING;
|
||||
else
|
||||
} else {
|
||||
/*
|
||||
* Fatal.
|
||||
*/
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* sinix */
|
||||
|
||||
/*
|
||||
@@ -672,8 +699,10 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** promiscuous options.
|
||||
*/
|
||||
#if defined(HAVE_HPUX9) || defined(HAVE_HPUX10_20_OR_LATER)
|
||||
if (dl_dohpuxbind(p->fd, p->errbuf) < 0)
|
||||
if (dl_dohpuxbind(p->fd, p->errbuf) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
/*
|
||||
** We don't set promiscuous mode on the send FD, but we'll defer
|
||||
** binding it anyway, just to keep the HP-UX 9/10.20 or later
|
||||
@@ -685,9 +714,11 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** set it to -1, so that you can't send but can
|
||||
** still receive?
|
||||
*/
|
||||
if (dl_dohpuxbind(pd->send_fd, p->errbuf) < 0)
|
||||
if (dl_dohpuxbind(pd->send_fd, p->errbuf) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -696,12 +727,16 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** when sending packets.
|
||||
*/
|
||||
if (dlinforeq(p->fd, p->errbuf) < 0 ||
|
||||
dlinfoack(p->fd, (char *)buf, p->errbuf) < 0)
|
||||
dlinfoack(p->fd, (char *)buf, p->errbuf) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
infop = &(MAKE_DL_PRIMITIVES(buf))->info_ack;
|
||||
if (pcap_process_mactype(p, infop->dl_mac_type) != 0)
|
||||
if (pcap_process_mactype(p, infop->dl_mac_type) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
#ifdef DLIOCRAW
|
||||
/*
|
||||
@@ -709,6 +744,7 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
** header.
|
||||
*/
|
||||
if (strioctl(p->fd, DLIOCRAW, 0, NULL) < 0) {
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "DLIOCRAW: %s",
|
||||
pcap_strerror(errno));
|
||||
goto bad;
|
||||
@@ -739,28 +775,31 @@ pcap_activate_dlpi(pcap_t *p)
|
||||
#endif
|
||||
|
||||
/* Push and configure bufmod. */
|
||||
if (pcap_conf_bufmod(p, ss) != 0)
|
||||
if (pcap_conf_bufmod(p, ss) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
** As the last operation flush the read side.
|
||||
*/
|
||||
if (ioctl(p->fd, I_FLUSH, FLUSHR) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "FLUSHR: %s",
|
||||
pcap_strerror(errno));
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/* Allocate data buffer. */
|
||||
if (pcap_alloc_databuf(p) != 0)
|
||||
if (pcap_alloc_databuf(p) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
|
||||
/* Success - but perhaps with a warning */
|
||||
if (status < 0)
|
||||
status = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Success.
|
||||
*
|
||||
* "p->fd" is an FD for a STREAMS device, so "select()" and
|
||||
* "poll()" should work on it.
|
||||
*/
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
*
|
||||
* pcap-dos.c: Interface to PKTDRVR, NDIS2 and 32-bit pmode
|
||||
* network drivers.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-dos.c,v 1.7 2008-04-22 17:16:30 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* Internal details for libpcap on DOS.
|
||||
* 32-bit targets: djgpp, Pharlap or DOS4GW.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-dos.h,v 1.1 2004-12-18 08:52:10 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef __PCAP_DOS_H
|
||||
|
||||
@@ -6,10 +6,6 @@
|
||||
*
|
||||
* Rayan Zachariassen, CA*Net
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-enet.c,v 1.9 2006-10-04 18:09:22 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
.\" @(#) $Header: /tcpdump/master/libpcap/pcap-filter.manmisc.in,v 1.1 2008-10-21 07:33:01 guy Exp $ (LBL)
|
||||
.\"
|
||||
.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\" All rights reserved.
|
||||
@@ -20,7 +18,7 @@
|
||||
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
.\"
|
||||
.TH PCAP-FILTER @MAN_MISC_INFO@ "6 January 2008"
|
||||
.TH PCAP-FILTER @MAN_MISC_INFO@ "17 May 2013"
|
||||
.SH NAME
|
||||
pcap-filter \- packet filter syntax
|
||||
.br
|
||||
@@ -332,8 +330,9 @@ The packet may contain, for example,
|
||||
authentication header, routing header, or hop-by-hop option header,
|
||||
between IPv6 header and TCP header.
|
||||
The BPF code emitted by this primitive is complex and
|
||||
cannot be optimized by the BPF optimizer code, so this can be somewhat
|
||||
slow.
|
||||
cannot be optimized by the BPF optimizer code, and is not supported by
|
||||
filter engines in the kernel, so this can be somewhat slow, and may
|
||||
cause more packets to be dropped.
|
||||
.IP "\fBip protochain \fIprotocol\fR"
|
||||
Equivalent to \fBip6 protochain \fIprotocol\fR, but this is for IPv4.
|
||||
.IP "\fBprotochain \fIprotocol\fR"
|
||||
@@ -453,6 +452,67 @@ True if the DECNET destination address is
|
||||
.IP "\fBdecnet host \fIhost\fR"
|
||||
True if either the DECNET source or destination address is
|
||||
.IR host .
|
||||
.IP \fBllc\fP
|
||||
True if the packet has an 802.2 LLC header. This includes:
|
||||
.IP
|
||||
Ethernet packets with a length field rather than a type field that
|
||||
aren't raw NetWare-over-802.3 packets;
|
||||
.IP
|
||||
IEEE 802.11 data packets;
|
||||
.IP
|
||||
Token Ring packets (no check is done for LLC frames);
|
||||
.IP
|
||||
FDDI packets (no check is done for LLC frames);
|
||||
.IP
|
||||
LLC-encapsulated ATM packets, for SunATM on Solaris.
|
||||
.IP
|
||||
|
||||
.IP "\fBllc\fP \Fitype\fR"
|
||||
True if the packet has an 802.2 LLC header and has the specified
|
||||
.IR type .
|
||||
.I type
|
||||
can be one of:
|
||||
.RS
|
||||
.TP
|
||||
\fBi\fR
|
||||
Information (I) PDUs
|
||||
.TP
|
||||
\fBs\fR
|
||||
Supervisory (S) PDUs
|
||||
.TP
|
||||
\fBu\fR
|
||||
Unnumbered (U) PDUs
|
||||
.TP
|
||||
\fBrr\fR
|
||||
Receiver Ready (RR) S PDUs
|
||||
.TP
|
||||
\fBrnr\fR
|
||||
Receiver Not Ready (RNR) S PDUs
|
||||
.TP
|
||||
\fBrej\fR
|
||||
Reject (REJ) S PDUs
|
||||
.TP
|
||||
\fBui\fR
|
||||
Unnumbered Information (UI) U PDUs
|
||||
.TP
|
||||
\fBua\fR
|
||||
Unnumbered Acknowledgment (UA) U PDUs
|
||||
.TP
|
||||
\fBdisc\fR
|
||||
Disconnect (DISC) U PDUs
|
||||
.TP
|
||||
\fBsabme\fR
|
||||
Set Asynchronous Balanced Mode Extended (SABME) U PDUs
|
||||
.TP
|
||||
\fBtest\fR
|
||||
Test (TEST) U PDUs
|
||||
.TP
|
||||
\fBxid\fR
|
||||
Exchange Identification (XID) U PDUs
|
||||
.TP
|
||||
\fBfrmr\fR
|
||||
Frame Reject (FRMR) U PDUs
|
||||
.RE
|
||||
.IP "\fBifname \fIinterface\fR"
|
||||
True if the packet was logged as coming from the specified interface (applies
|
||||
only to packets logged by OpenBSD's or FreeBSD's
|
||||
@@ -487,7 +547,7 @@ name of an anchored ruleset (applies only to packets logged by OpenBSD's
|
||||
or FreeBSD's
|
||||
.BR pf (4)).
|
||||
.IP "\fBruleset \fIname\fR"
|
||||
Synonomous with the
|
||||
Synonymous with the
|
||||
.B rset
|
||||
modifier.
|
||||
.IP "\fBsrnr \fInum\fR"
|
||||
@@ -496,7 +556,7 @@ of an anchored ruleset (applies only to packets logged by OpenBSD's or
|
||||
FreeBSD's
|
||||
.BR pf (4)).
|
||||
.IP "\fBsubrulenum \fInum\fR"
|
||||
Synonomous with the
|
||||
Synonymous with the
|
||||
.B srnr
|
||||
modifier.
|
||||
.IP "\fBaction \fIact\fR"
|
||||
@@ -673,6 +733,22 @@ For example:
|
||||
.fi
|
||||
.in -.5i
|
||||
filters IPv4 protocols encapsulated in PPPoE session id 0x27.
|
||||
.IP "\fBgeneve \fI[vni]\fR"
|
||||
True if the packet is a Geneve packet (UDP port 6081). If \fI[vni]\fR
|
||||
is specified, only true if the packet has the specified \fIvni\fR.
|
||||
Note that when the \fBgeneve\fR keyword is encountered in
|
||||
\fIexpression\fR, it changes the decoding offsets for the remainder of
|
||||
\fIexpression\fR on the assumption that the packet is a Geneve packet.
|
||||
.IP
|
||||
For example:
|
||||
.in +.5i
|
||||
.nf
|
||||
\fBgeneve 0xb && ip\fR
|
||||
.fi
|
||||
.in -.5i
|
||||
filters IPv4 protocols encapsulated in Geneve with VNI 0xb. This will
|
||||
match both IP directly encapsulated in Geneve as well as IP contained
|
||||
inside an Ethernet frame.
|
||||
.IP "\fBiso proto \fIprotocol\fR"
|
||||
True if the packet is an OSI packet of protocol type \fIprotocol\fP.
|
||||
\fIProtocol\fP can be a number or one of the names
|
||||
@@ -704,9 +780,6 @@ on the assumption that the packet is either a LANE emulated Ethernet
|
||||
packet or a LANE LE Control packet. If \fBlane\fR isn't specified, the
|
||||
tests are done under the assumption that the packet is an
|
||||
LLC-encapsulated packet.
|
||||
.IP \fBllc\fP
|
||||
True if the packet is an ATM packet, for SunATM on Solaris, and is
|
||||
an LLC-encapsulated packet.
|
||||
.IP \fBoamf4s\fP
|
||||
True if the packet is an ATM packet, for SunATM on Solaris, and is
|
||||
a segment OAM F4 flow cell (VPI=0 & VCI=3).
|
||||
@@ -743,11 +816,17 @@ Release, or Release Done message.
|
||||
True if the relation holds, where \fIrelop\fR is one of >, <, >=, <=, =,
|
||||
!=, and \fIexpr\fR is an arithmetic expression composed of integer
|
||||
constants (expressed in standard C syntax), the normal binary operators
|
||||
[+, -, *, /, &, |, <<, >>], a length operator, and special packet data
|
||||
[+, -, *, /, %, &, |, ^, <<, >>], a length operator, and special packet data
|
||||
accessors. Note that all comparisons are unsigned, so that, for example,
|
||||
0x80000000 and 0xffffffff are > 0.
|
||||
To access
|
||||
data inside the packet, use the following syntax:
|
||||
.IP
|
||||
The % and ^ operators are currently only supported for filtering in the
|
||||
kernel on Linux with 3.7 and later kernels; on all other systems, if
|
||||
those operators are used, filtering will be done in user mode, which
|
||||
will increase the overhead of capturing packets and may cause more
|
||||
packets to be dropped.
|
||||
.IP
|
||||
To access data inside the packet, use the following syntax:
|
||||
.in +.5i
|
||||
.nf
|
||||
\fIproto\fB [ \fIexpr\fB : \fIsize\fB ]\fR
|
||||
|
||||
@@ -29,8 +29,6 @@
|
||||
* 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/pcap-int.h,v 1.94 2008-09-16 00:20:23 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef pcap_int_h
|
||||
@@ -84,6 +82,29 @@ extern CRITICAL_SECTION g_PcapCompileCriticalSection;
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
/*
|
||||
* Maximum snapshot length.
|
||||
*
|
||||
* Somewhat arbitrary, but chosen to be:
|
||||
*
|
||||
* 1) big enough for maximum-size Linux loopback packets (65549)
|
||||
* and some USB packets captured with USBPcap:
|
||||
*
|
||||
* http://desowin.org/usbpcap/
|
||||
*
|
||||
* (> 131072, < 262144)
|
||||
*
|
||||
* and
|
||||
*
|
||||
* 2) small enough not to cause attempts to allocate huge amounts of
|
||||
* memory; some applications might use the snapshot length in a
|
||||
* savefile header to control the size of the buffer they allocate,
|
||||
* so a size of, say, 2^31-1 might not work well.
|
||||
*
|
||||
* We don't enforce this in pcap_set_snaplen(), but we use it internally.
|
||||
*/
|
||||
#define MAXIMUM_SNAPLEN 262144
|
||||
|
||||
struct pcap_opt {
|
||||
char *source;
|
||||
int timeout; /* timeout for buffering */
|
||||
@@ -181,6 +202,11 @@ struct pcap {
|
||||
/* We're accepting only packets in this direction/these directions. */
|
||||
pcap_direction_t direction;
|
||||
|
||||
/*
|
||||
* Flags to affect BPF code generation.
|
||||
*/
|
||||
int bpf_codegen_flags;
|
||||
|
||||
/*
|
||||
* Placeholder for filter code if bpf not in kernel.
|
||||
*/
|
||||
@@ -227,6 +253,11 @@ struct pcap {
|
||||
cleanup_op_t cleanup_op;
|
||||
};
|
||||
|
||||
/*
|
||||
* BPF code generation flags.
|
||||
*/
|
||||
#define BPF_SPECIAL_VLAN_HANDLING 0x00000001 /* special VLAN handling for Linux */
|
||||
|
||||
/*
|
||||
* This is a timeval as stored in a savefile.
|
||||
* It has to use the same types everywhere, independent of the actual
|
||||
@@ -387,6 +418,9 @@ int pcap_platform_finddevs(pcap_if_t **, char *);
|
||||
int add_addr_to_iflist(pcap_if_t **, const char *, u_int, struct sockaddr *,
|
||||
size_t, struct sockaddr *, size_t, struct sockaddr *, size_t,
|
||||
struct sockaddr *, size_t, char *);
|
||||
int add_addr_to_dev(pcap_if_t *, struct sockaddr *, size_t,
|
||||
struct sockaddr *, size_t, struct sockaddr *, size_t,
|
||||
struct sockaddr *dstaddr, size_t, char *errbuf);
|
||||
int pcap_add_if(pcap_if_t **, const char *, u_int, const char *, char *);
|
||||
struct sockaddr *dup_sockaddr(struct sockaddr *, size_t);
|
||||
int add_or_find_if(pcap_if_t **, pcap_if_t **, const char *, u_int,
|
||||
|
||||
@@ -24,11 +24,6 @@
|
||||
* Packet capture routines for DLPI using libdlpi under SunOS 5.11.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-libdlpi.c,v 1.6 2008-04-14 20:40:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -101,10 +96,10 @@ static int
|
||||
pcap_activate_libdlpi(pcap_t *p)
|
||||
{
|
||||
struct pcap_dlpi *pd = p->priv;
|
||||
int status = 0;
|
||||
int retv;
|
||||
dlpi_handle_t dh;
|
||||
dlpi_info_t dlinfo;
|
||||
int err = PCAP_ERROR;
|
||||
|
||||
/*
|
||||
* Enable Solaris raw and passive DLPI extensions;
|
||||
@@ -114,13 +109,15 @@ pcap_activate_libdlpi(pcap_t *p)
|
||||
retv = dlpi_open(p->opt.source, &dh, DLPI_RAW|DLPI_PASSIVE);
|
||||
if (retv != DLPI_SUCCESS) {
|
||||
if (retv == DLPI_ELINKNAMEINVAL || retv == DLPI_ENOLINK)
|
||||
err = PCAP_ERROR_NO_SUCH_DEVICE;
|
||||
status = PCAP_ERROR_NO_SUCH_DEVICE;
|
||||
else if (retv == DL_SYSERR &&
|
||||
(errno == EPERM || errno == EACCES))
|
||||
err = PCAP_ERROR_PERM_DENIED;
|
||||
status = PCAP_ERROR_PERM_DENIED;
|
||||
else
|
||||
status = PCAP_ERROR;
|
||||
pcap_libdlpi_err(p->opt.source, "dlpi_open", retv,
|
||||
p->errbuf);
|
||||
return (err);
|
||||
return (status);
|
||||
}
|
||||
pd->dlpi_hd = dh;
|
||||
|
||||
@@ -129,20 +126,21 @@ pcap_activate_libdlpi(pcap_t *p)
|
||||
* This device exists, but we don't support monitor mode
|
||||
* any platforms that support DLPI.
|
||||
*/
|
||||
err = PCAP_ERROR_RFMON_NOTSUP;
|
||||
status = PCAP_ERROR_RFMON_NOTSUP;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/* Bind with DLPI_ANY_SAP. */
|
||||
if ((retv = dlpi_bind(pd->dlpi_hd, DLPI_ANY_SAP, 0)) != DLPI_SUCCESS) {
|
||||
status = PCAP_ERROR;
|
||||
pcap_libdlpi_err(p->opt.source, "dlpi_bind", retv, p->errbuf);
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/* Enable promiscuous mode. */
|
||||
if (p->opt.promisc) {
|
||||
err = dlpromiscon(p, DL_PROMISC_PHYS);
|
||||
if (err < 0) {
|
||||
retv = dlpromiscon(p, DL_PROMISC_PHYS);
|
||||
if (retv < 0) {
|
||||
/*
|
||||
* "You don't have permission to capture on
|
||||
* this device" and "you don't have permission
|
||||
@@ -156,57 +154,71 @@ pcap_activate_libdlpi(pcap_t *p)
|
||||
* XXX - you might have to capture in
|
||||
* promiscuous mode to see outgoing packets.
|
||||
*/
|
||||
if (err == PCAP_ERROR_PERM_DENIED)
|
||||
err = PCAP_ERROR_PROMISC_PERM_DENIED;
|
||||
if (retv == PCAP_ERROR_PERM_DENIED)
|
||||
status = PCAP_ERROR_PROMISC_PERM_DENIED;
|
||||
else
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
} else {
|
||||
/* Try to enable multicast. */
|
||||
err = dlpromiscon(p, DL_PROMISC_MULTI);
|
||||
if (err < 0)
|
||||
retv = dlpromiscon(p, DL_PROMISC_MULTI);
|
||||
if (retv < 0) {
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
|
||||
/* Try to enable SAP promiscuity. */
|
||||
err = dlpromiscon(p, DL_PROMISC_SAP);
|
||||
if (err < 0) {
|
||||
retv = dlpromiscon(p, DL_PROMISC_SAP);
|
||||
if (retv < 0) {
|
||||
/*
|
||||
* Not fatal, since the DL_PROMISC_PHYS mode worked.
|
||||
* Report it as a warning, however.
|
||||
*/
|
||||
if (p->opt.promisc)
|
||||
err = PCAP_WARNING;
|
||||
else
|
||||
status = PCAP_WARNING;
|
||||
else {
|
||||
status = retv;
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
|
||||
/* Determine link type. */
|
||||
if ((retv = dlpi_info(pd->dlpi_hd, &dlinfo, 0)) != DLPI_SUCCESS) {
|
||||
status = PCAP_ERROR;
|
||||
pcap_libdlpi_err(p->opt.source, "dlpi_info", retv, p->errbuf);
|
||||
goto bad;
|
||||
}
|
||||
|
||||
if (pcap_process_mactype(p, dlinfo.di_mactype) != 0)
|
||||
if (pcap_process_mactype(p, dlinfo.di_mactype) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
p->fd = dlpi_fd(pd->dlpi_hd);
|
||||
|
||||
/* Push and configure bufmod. */
|
||||
if (pcap_conf_bufmod(p, p->snapshot) != 0)
|
||||
if (pcap_conf_bufmod(p, p->snapshot) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/*
|
||||
* Flush the read side.
|
||||
*/
|
||||
if (ioctl(p->fd, I_FLUSH, FLUSHR) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "FLUSHR: %s",
|
||||
pcap_strerror(errno));
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/* Allocate data buffer. */
|
||||
if (pcap_alloc_databuf(p) != 0)
|
||||
if (pcap_alloc_databuf(p) != 0) {
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/*
|
||||
* "p->fd" is a FD for a STREAMS device, so "select()" and
|
||||
@@ -224,10 +236,10 @@ pcap_activate_libdlpi(pcap_t *p)
|
||||
p->stats_op = pcap_stats_dlpi;
|
||||
p->cleanup_op = pcap_cleanup_libdlpi;
|
||||
|
||||
return (0);
|
||||
return (status);
|
||||
bad:
|
||||
pcap_cleanup_libdlpi(p);
|
||||
return (err);
|
||||
return (status);
|
||||
}
|
||||
|
||||
#define STRINGIFY(n) #n
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
.\" @(#) $Header: /tcpdump/master/libpcap/pcap-linktype.manmisc.in,v 1.3 2008-10-27 22:52:30 guy Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\" All rights reserved.
|
||||
@@ -20,7 +18,7 @@
|
||||
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
.\"
|
||||
.TH PCAP-LINKTYPE @MAN_MISC_INFO@ "23 October 2008"
|
||||
.TH PCAP-LINKTYPE @MAN_MISC_INFO@ "12 March 2011"
|
||||
.SH NAME
|
||||
pcap-linktype \- link-layer header types supported by libpcap
|
||||
.SH DESCRIPTION
|
||||
|
||||
1104
libpcap/pcap-linux.c
1104
libpcap/pcap-linux.c
File diff suppressed because it is too large
Load Diff
@@ -29,8 +29,6 @@
|
||||
* 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/pcap-namedb.h,v 1.13 2006-10-04 18:13:32 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -119,8 +119,7 @@ netfilter_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_c
|
||||
if (NFNL_SUBSYS_ID(nlh->nlmsg_type) == NFNL_SUBSYS_ULOG &&
|
||||
NFNL_MSG_TYPE(nlh->nlmsg_type) == NFULNL_MSG_PACKET)
|
||||
type = NFLOG;
|
||||
|
||||
if (NFNL_SUBSYS_ID(nlh->nlmsg_type) == NFNL_SUBSYS_QUEUE &&
|
||||
else if (NFNL_SUBSYS_ID(nlh->nlmsg_type) == NFNL_SUBSYS_QUEUE &&
|
||||
NFNL_MSG_TYPE(nlh->nlmsg_type) == NFQNL_MSG_PACKET)
|
||||
type = NFQUEUE;
|
||||
|
||||
@@ -128,7 +127,7 @@ netfilter_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_c
|
||||
const unsigned char *payload = NULL;
|
||||
struct pcap_pkthdr pkth;
|
||||
|
||||
const struct nfgenmsg *nfg;
|
||||
const struct nfgenmsg *nfg = NULL;
|
||||
int id = 0;
|
||||
|
||||
if (handle->linktype != DLT_NFLOG) {
|
||||
@@ -195,6 +194,9 @@ netfilter_read_linux(pcap_t *handle, int max_packets, pcap_handler callback, u_c
|
||||
|
||||
if (type == NFQUEUE) {
|
||||
/* XXX, possible responses: NF_DROP, NF_ACCEPT, NF_STOLEN, NF_QUEUE, NF_REPEAT, NF_STOP */
|
||||
/* if type == NFQUEUE, handle->linktype is always != DLT_NFLOG,
|
||||
so nfg is always initialized to NLMSG_DATA(nlh). */
|
||||
if (nfg != NULL)
|
||||
nfqueue_send_verdict(handle, ntohs(nfg->res_id), id, NF_ACCEPT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-nit.c,v 1.62 2008-04-14 20:40:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-null.c,v 1.22 2008-04-04 19:37:45 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -22,11 +22,6 @@
|
||||
* Extraction/creation by Jeffrey Mogul, DECWRL
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-pf.c,v 1.97 2008-04-14 20:40:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
'\" t
|
||||
.\" @(#) $Header: /tcpdump/master/libpcap/pcap-savefile.manfile.in,v 1.2 2008-10-24 07:33:50 guy Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1994, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
@@ -20,7 +17,7 @@
|
||||
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
.\"
|
||||
.TH PCAP-SAVEFILE @MAN_FILE_FORMATS@ "21 October 2008"
|
||||
.TH PCAP-SAVEFILE @MAN_FILE_FORMATS@ "29 July 2013"
|
||||
.SH NAME
|
||||
pcap-savefile \- libpcap savefile format
|
||||
.SH DESCRIPTION
|
||||
|
||||
@@ -14,11 +14,6 @@
|
||||
* (+961 3 485243)
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-septel.c,v 1.4 2008-04-14 20:40:58 guy Exp $";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
@@ -259,13 +254,8 @@ static int septel_stats(pcap_t *p, struct pcap_stat *ps) {
|
||||
int
|
||||
septel_findalldevs(pcap_if_t **devlistp, char *errbuf)
|
||||
{
|
||||
unsigned char *p;
|
||||
const char description[512]= "Intel/Septel device";
|
||||
char name[512]="septel" ;
|
||||
int ret = 0;
|
||||
pcap_add_if(devlistp,name,0,description,errbuf);
|
||||
|
||||
return (ret);
|
||||
return (pcap_add_if(devlistp,"septel",0,
|
||||
"Intel/Septel device",errbuf));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
*
|
||||
* Authors: Gilbert HOYEK (gil_hoyek@hotmail.com), Elias M. KHOURY
|
||||
* (+961 3 485343);
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-septel.h,v 1.2 2008-04-04 19:37:45 guy Exp $
|
||||
*/
|
||||
|
||||
pcap_t *septel_create(const char *device, char *ebuf, int *is_ours);
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
/* $Id: pcap-sita.c */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
* pcap-sita.h: Packet capture interface for SITA WAN devices
|
||||
*
|
||||
* Authors: Fulko Hew (fulko.hew@sita.aero) (+1 905 6815570);
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-sita.h
|
||||
*/
|
||||
|
||||
extern int acn_parse_hosts_file(char *errbuf);
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include <snf.h>
|
||||
#if SNF_VERSION_API >= 0x0003
|
||||
#define SNF_HAVE_INJECT_API
|
||||
#endif
|
||||
|
||||
#include "pcap-int.h"
|
||||
#include "pcap-snf.h"
|
||||
@@ -26,6 +29,9 @@
|
||||
struct pcap_snf {
|
||||
snf_handle_t snf_handle; /* opaque device handle */
|
||||
snf_ring_t snf_ring; /* opaque device ring handle */
|
||||
#ifdef SNF_HAVE_INJECT_API
|
||||
snf_inject_t snf_inj; /* inject handle, if inject is used */
|
||||
#endif
|
||||
int snf_timeout;
|
||||
int snf_boardnum;
|
||||
};
|
||||
@@ -41,9 +47,10 @@ static int
|
||||
snf_pcap_stats(pcap_t *p, struct pcap_stat *ps)
|
||||
{
|
||||
struct snf_ring_stats stats;
|
||||
struct pcap_snf *snfps = p->priv;
|
||||
int rc;
|
||||
|
||||
if ((rc = snf_ring_getstats(ps->snf_ring, &stats))) {
|
||||
if ((rc = snf_ring_getstats(snfps->snf_ring, &stats))) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "snf_get_stats: %s",
|
||||
pcap_strerror(rc));
|
||||
return -1;
|
||||
@@ -62,6 +69,10 @@ snf_platform_cleanup(pcap_t *p)
|
||||
if (p == NULL)
|
||||
return;
|
||||
|
||||
#ifdef SNF_HAVE_INJECT_API
|
||||
if (ps->snf_inj)
|
||||
snf_inject_close(ps->snf_inj);
|
||||
#endif
|
||||
snf_ring_close(ps->snf_ring);
|
||||
snf_close(ps->snf_handle);
|
||||
pcap_cleanup_live_common(p);
|
||||
@@ -95,14 +106,23 @@ snf_setnonblock(pcap_t *p, int nonblock, char *errbuf)
|
||||
|
||||
static inline
|
||||
struct timeval
|
||||
snf_timestamp_to_timeval(const int64_t ts_nanosec)
|
||||
snf_timestamp_to_timeval(const int64_t ts_nanosec, const int tstamp_precision)
|
||||
{
|
||||
struct timeval tv;
|
||||
int32_t rem;
|
||||
long tv_nsec;
|
||||
|
||||
if (ts_nanosec == 0)
|
||||
return (struct timeval) { 0, 0 };
|
||||
|
||||
tv.tv_sec = ts_nanosec / _NSEC_PER_SEC;
|
||||
tv.tv_usec = (ts_nanosec % _NSEC_PER_SEC) / 1000;
|
||||
tv_nsec = (ts_nanosec % _NSEC_PER_SEC);
|
||||
|
||||
/* libpcap expects tv_usec to be nanos if using nanosecond precision. */
|
||||
if (tstamp_precision == PCAP_TSTAMP_PRECISION_NANO)
|
||||
tv.tv_usec = tv_nsec;
|
||||
else
|
||||
tv.tv_usec = tv_nsec / 1000;
|
||||
|
||||
return tv;
|
||||
}
|
||||
|
||||
@@ -113,11 +133,13 @@ snf_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
struct pcap_pkthdr hdr;
|
||||
int i, flags, err, caplen, n;
|
||||
struct snf_recv_req req;
|
||||
int nonblock, timeout;
|
||||
|
||||
if (!p || cnt == 0)
|
||||
if (!p)
|
||||
return -1;
|
||||
|
||||
n = 0;
|
||||
timeout = ps->snf_timeout;
|
||||
while (n < cnt || PACKET_COUNT_IS_UNLIMITED(cnt)) {
|
||||
/*
|
||||
* Has "pcap_breakloop()" been called?
|
||||
@@ -131,14 +153,17 @@ snf_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
}
|
||||
}
|
||||
|
||||
err = snf_ring_recv(ps->snf_ring, ps->snf_timeout, &req);
|
||||
err = snf_ring_recv(ps->snf_ring, timeout, &req);
|
||||
|
||||
if (err) {
|
||||
if (err == EBUSY || err == EAGAIN)
|
||||
return (0);
|
||||
if (err == EINTR)
|
||||
if (err == EBUSY || err == EAGAIN) {
|
||||
return (n);
|
||||
}
|
||||
else if (err == EINTR) {
|
||||
timeout = 0;
|
||||
continue;
|
||||
if (err != 0) {
|
||||
}
|
||||
else {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "snf_read: %s",
|
||||
pcap_strerror(err));
|
||||
return -1;
|
||||
@@ -151,12 +176,17 @@ snf_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
||||
|
||||
if ((p->fcode.bf_insns == NULL) ||
|
||||
bpf_filter(p->fcode.bf_insns, req.pkt_addr, req.length, caplen)) {
|
||||
hdr.ts = snf_timestamp_to_timeval(req.timestamp);
|
||||
hdr.ts = snf_timestamp_to_timeval(req.timestamp, p->opt.tstamp_precision);
|
||||
hdr.caplen = caplen;
|
||||
hdr.len = req.length;
|
||||
callback(user, &hdr, req.pkt_addr);
|
||||
}
|
||||
n++;
|
||||
|
||||
/* After one successful packet is received, we won't block
|
||||
* again for that timeout. */
|
||||
if (timeout != 0)
|
||||
timeout = 0;
|
||||
}
|
||||
return (n);
|
||||
}
|
||||
@@ -183,9 +213,32 @@ snf_setfilter(pcap_t *p, struct bpf_program *fp)
|
||||
static int
|
||||
snf_inject(pcap_t *p, const void *buf _U_, size_t size _U_)
|
||||
{
|
||||
strlcpy(p->errbuf, "Sending packets isn't supported with snf",
|
||||
#ifdef SNF_HAVE_INJECT_API
|
||||
struct pcap_snf *ps = p->priv;
|
||||
int rc;
|
||||
if (ps->snf_inj == NULL) {
|
||||
rc = snf_inject_open(ps->snf_boardnum, 0, &ps->snf_inj);
|
||||
if (rc) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_inject_open: %s", pcap_strerror(rc));
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
|
||||
rc = snf_inject_send(ps->snf_inj, -1, 0, buf, size);
|
||||
if (!rc) {
|
||||
return (size);
|
||||
}
|
||||
else {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "snf_inject_send: %s",
|
||||
pcap_strerror(rc));
|
||||
return (-1);
|
||||
}
|
||||
#else
|
||||
strlcpy(p->errbuf, "Sending packets isn't supported with this snf version",
|
||||
PCAP_ERRBUF_SIZE);
|
||||
return (-1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -195,7 +248,7 @@ snf_activate(pcap_t* p)
|
||||
char *device = p->opt.source;
|
||||
const char *nr = NULL;
|
||||
int err;
|
||||
int flags = 0;
|
||||
int flags = -1, ring_id = -1;
|
||||
|
||||
if (device == NULL) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
@@ -205,8 +258,10 @@ snf_activate(pcap_t* p)
|
||||
|
||||
/* In Libpcap, we set pshared by default if NUM_RINGS is set to > 1.
|
||||
* Since libpcap isn't thread-safe */
|
||||
if ((nr = getenv("SNF_NUM_RINGS")) && *nr && atoi(nr) > 1)
|
||||
flags |= SNF_F_PSHARED;
|
||||
if ((nr = getenv("SNF_FLAGS")) && *nr)
|
||||
flags = strtol(nr, NULL, 0);
|
||||
else if ((nr = getenv("SNF_NUM_RINGS")) && *nr && atoi(nr) > 1)
|
||||
flags = SNF_F_PSHARED;
|
||||
else
|
||||
nr = NULL;
|
||||
|
||||
@@ -222,10 +277,14 @@ snf_activate(pcap_t* p)
|
||||
return -1;
|
||||
}
|
||||
|
||||
err = snf_ring_open(ps->snf_handle, &ps->snf_ring);
|
||||
if ((nr = getenv("SNF_PCAP_RING_ID")) && *nr) {
|
||||
ring_id = (int) strtol(nr, NULL, 0);
|
||||
}
|
||||
err = snf_ring_open_id(ps->snf_handle, ring_id, &ps->snf_ring);
|
||||
if (err != 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_ring_open failed: %s", pcap_strerror(err));
|
||||
"snf_ring_open_id(ring=%d) failed: %s",
|
||||
ring_id, pcap_strerror(err));
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -255,12 +314,104 @@ snf_activate(pcap_t* p)
|
||||
p->setnonblock_op = snf_setnonblock;
|
||||
p->stats_op = snf_pcap_stats;
|
||||
p->cleanup_op = snf_platform_cleanup;
|
||||
#ifdef SNF_HAVE_INJECT_API
|
||||
ps->snf_inj = NULL;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MAX_DESC_LENGTH 128
|
||||
int
|
||||
snf_findalldevs(pcap_if_t **devlistp, char *errbuf)
|
||||
{
|
||||
pcap_if_t *devlist = NULL,*curdev,*prevdev;
|
||||
pcap_addr_t *curaddr;
|
||||
struct snf_ifaddrs *ifaddrs, *ifa;
|
||||
char desc[MAX_DESC_LENGTH];
|
||||
int ret;
|
||||
|
||||
if (snf_init(SNF_VERSION_API))
|
||||
return (-1);
|
||||
|
||||
if (snf_getifaddrs(&ifaddrs) || ifaddrs == NULL)
|
||||
{
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_getifaddrs: %s", pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
ifa = ifaddrs;
|
||||
while (ifa)
|
||||
{
|
||||
/*
|
||||
* Allocate a new entry
|
||||
*/
|
||||
curdev = (pcap_if_t *)malloc(sizeof(pcap_if_t));
|
||||
if (curdev == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_findalldevs malloc: %s", pcap_strerror(errno));
|
||||
return (-1);
|
||||
}
|
||||
if (devlist == NULL) /* save first entry */
|
||||
devlist = curdev;
|
||||
else
|
||||
prevdev->next = curdev;
|
||||
/*
|
||||
* Fill in the entry.
|
||||
*/
|
||||
curdev->next = NULL;
|
||||
curdev->name = strdup(ifa->snf_ifa_name);
|
||||
if (curdev->name == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_findalldevs strdup: %s", pcap_strerror(errno));
|
||||
free(curdev);
|
||||
return (-1);
|
||||
}
|
||||
(void)snprintf(desc,MAX_DESC_LENGTH,"Myricom snf%d",
|
||||
ifa->snf_ifa_portnum);
|
||||
curdev->description = strdup(desc);
|
||||
if (curdev->description == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_findalldevs strdup1: %s", pcap_strerror(errno));
|
||||
free(curdev->name);
|
||||
free(curdev);
|
||||
return (-1);
|
||||
}
|
||||
curdev->addresses = NULL;
|
||||
curdev->flags = 0;
|
||||
|
||||
curaddr = (pcap_addr_t *)malloc(sizeof(pcap_addr_t));
|
||||
if (curaddr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"snf_findalldevs malloc1: %s", pcap_strerror(errno));
|
||||
free(curdev->description);
|
||||
free(curdev->name);
|
||||
free(curdev);
|
||||
return (-1);
|
||||
}
|
||||
curdev->addresses = curaddr;
|
||||
curaddr->next = NULL;
|
||||
curaddr->addr = (struct sockaddr*)malloc(sizeof(struct sockaddr_storage));
|
||||
if (curaddr->addr == NULL) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"malloc2: %s", pcap_strerror(errno));
|
||||
free(curdev->description);
|
||||
free(curdev->name);
|
||||
free(curaddr);
|
||||
free(curdev);
|
||||
return (-1);
|
||||
}
|
||||
curaddr->addr->sa_family = AF_INET;
|
||||
curaddr->netmask = NULL;
|
||||
curaddr->broadaddr = NULL;
|
||||
curaddr->dstaddr = NULL;
|
||||
curaddr->next = NULL;
|
||||
|
||||
prevdev = curdev;
|
||||
ifa = ifa->snf_ifa_next;
|
||||
}
|
||||
snf_freeifaddrs(ifaddrs);
|
||||
*devlistp = devlist;
|
||||
|
||||
/*
|
||||
* There are no platform-specific devices since each device
|
||||
* exists as a regular Ethernet device.
|
||||
@@ -324,6 +475,22 @@ snf_create(const char *device, char *ebuf, int *is_ours)
|
||||
return NULL;
|
||||
ps = p->priv;
|
||||
|
||||
/*
|
||||
* We support microsecond and nanosecond time stamps.
|
||||
*/
|
||||
p->tstamp_precision_count = 2;
|
||||
p->tstamp_precision_list = malloc(2 * sizeof(u_int));
|
||||
if (p->tstamp_precision_list == NULL) {
|
||||
snprintf(ebuf, PCAP_ERRBUF_SIZE, "malloc: %s",
|
||||
pcap_strerror(errno));
|
||||
if (p->tstamp_type_list != NULL)
|
||||
free(p->tstamp_type_list);
|
||||
free(p);
|
||||
return NULL;
|
||||
}
|
||||
p->tstamp_precision_list[0] = PCAP_TSTAMP_PRECISION_MICRO;
|
||||
p->tstamp_precision_list[1] = PCAP_TSTAMP_PRECISION_NANO;
|
||||
|
||||
p->activate_op = snf_activate;
|
||||
ps->snf_boardnum = boardnum;
|
||||
return p;
|
||||
|
||||
@@ -23,11 +23,6 @@
|
||||
* This module now handles the STREAMS based NIT.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-snit.c,v 1.77 2008-04-14 20:40:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
@@ -18,10 +18,6 @@
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-snoop.c,v 1.59 2008-12-02 16:25:14 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
* 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/pcap-stdinc.h,v 1.10.2.1 2008-10-06 15:38:39 gianluca Exp $ (LBL)
|
||||
*/
|
||||
#ifndef pcap_stdinc_h
|
||||
#define pcap_stdinc_h
|
||||
@@ -41,21 +39,18 @@
|
||||
#ifdef _WINSOCKAPI_
|
||||
#undef _WINSOCKAPI_
|
||||
#endif
|
||||
|
||||
#include <winsock2.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "bittypes.h"
|
||||
#include <time.h>
|
||||
#include <io.h>
|
||||
|
||||
#ifndef __MINGW32__
|
||||
#include "bittypes.h"
|
||||
#include "IP6_misc.h"
|
||||
#endif
|
||||
|
||||
#define caddr_t char*
|
||||
|
||||
#if _MSC_VER < 1500
|
||||
#if defined(_MSC_VER)
|
||||
#define snprintf _snprintf
|
||||
#define vsnprintf _vsnprintf
|
||||
#define strdup _strdup
|
||||
@@ -65,8 +60,7 @@
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#include <stdint.h>
|
||||
#else /*__MINGW32__*/
|
||||
/* MSVC compiler */
|
||||
#else
|
||||
#ifndef _UINTPTR_T_DEFINED
|
||||
#ifdef _WIN64
|
||||
typedef unsigned __int64 uintptr_t;
|
||||
@@ -84,6 +78,6 @@ typedef _W64 int intptr_t;
|
||||
#endif
|
||||
#define _INTPTR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#endif /*__MINGW32__*/
|
||||
|
||||
#endif /* pcap_stdinc_h */
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
.\"
|
||||
.TH PCAP-TSTAMP @MAN_MISC_INFO@ "22 August 2010"
|
||||
.TH PCAP-TSTAMP @MAN_MISC_INFO@ "21 December 2013"
|
||||
.SH NAME
|
||||
pcap-tstamp \- packet time stamps in libpcap
|
||||
.SH DESCRIPTION
|
||||
@@ -95,7 +95,7 @@ The time stamp types are listed here; the first value is the #define to
|
||||
use in code, the second value is the value returned by
|
||||
.B pcap_tstamp_type_val_to_name()
|
||||
and accepted by
|
||||
.BR pcap_tstamp_name_to_val() .
|
||||
.BR pcap_tstamp_type_name_to_val() .
|
||||
.RS 5
|
||||
.TP 5
|
||||
.BR PCAP_TSTAMP_HOST " - " host
|
||||
@@ -125,8 +125,51 @@ Time stamp provided by the network adapter on which the capture is being
|
||||
done. This is a high-precision time stamp; it is not synchronized with
|
||||
the host operating system's clock.
|
||||
.RE
|
||||
.LP
|
||||
By default, when performing a live capture or reading from a savefile,
|
||||
time stamps are supplied as seconds since January 1, 1970, 00:00:00 UTC,
|
||||
and microseconds since that seconds value, even if higher-resolution
|
||||
time stamps are available from the capture device or in the savefile.
|
||||
If, when reading a savefile, the time stamps in the file have a higher
|
||||
resolution than one microsecond, the additional digits of resolution are
|
||||
discarded.
|
||||
.LP
|
||||
The
|
||||
.BR pcap_set_tstamp_precision (3PCAP)
|
||||
routine can be used after a
|
||||
.B pcap_create()
|
||||
call and after a
|
||||
.B pcap_activate()
|
||||
call to specify the resolution of the time stamps to get for the device.
|
||||
If the hardware or software cannot supply a higher-resolution time
|
||||
stamp, the
|
||||
.B pcap_set_tstamp_precision()
|
||||
call will fail, and the time stamps supplied after the
|
||||
.B pcap_activate()
|
||||
call will have microsecond resolution.
|
||||
.LP
|
||||
When opening a savefile, the
|
||||
.BR pcap_open_offline_with_tstamp_precision (3PCAP)
|
||||
and
|
||||
.BR pcap_fopen_offline_with_tstamp_precision (3PCAP)
|
||||
routines can be used to specify the resolution of time stamps to be read
|
||||
from the file; if the time stamps in the file have a lower resolution,
|
||||
the fraction-of-a-second portion of the time stamps will be scaled to
|
||||
the specified resolution.
|
||||
.LP
|
||||
The
|
||||
.BR pcap_get_tstamp_precision (3PCAP)
|
||||
routine returns the resolution of time stamps that will be supplied;
|
||||
when capturing packets, this does not reflect the actual precision of
|
||||
the time stamp supplied by the hardware or operating system and, when
|
||||
reading a savefile, this does not indicate the actual precision of time
|
||||
stamps in the file.
|
||||
.SH SEE ALSO
|
||||
pcap_set_tstamp_type(3PCAP),
|
||||
pcap_list_tstamp_types(3PCAP),
|
||||
pcap_tstamp_type_val_to_name(3PCAP),
|
||||
pcap_tstamp_name_to_val(3PCAP)
|
||||
pcap_tstamp_type_name_to_val(3PCAP),
|
||||
pcap_set_tstamp_precision(3PCAP),
|
||||
pcap_open_offline_with_tstamp_precision(3PCAP),
|
||||
pcap_fopen_offline_with_tstamp_precision(3PCAP),
|
||||
pcap_get_tstamp_precision(3PCAP)
|
||||
|
||||
@@ -32,10 +32,6 @@
|
||||
* Modifications: Kris Katterjohn <katterjohn@gmail.com>
|
||||
*
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-usb-linux.c,v 1.33 2008-12-23 21:38:50 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
@@ -225,6 +221,8 @@ int usb_mmap(pcap_t* handle)
|
||||
return handlep->mmapbuf != MAP_FAILED;
|
||||
}
|
||||
|
||||
#ifdef HAVE_LINUX_USBDEVICE_FS_H
|
||||
|
||||
#define CTRL_TIMEOUT (5*1000) /* milliseconds */
|
||||
|
||||
#define USB_DIR_IN 0x80
|
||||
@@ -293,6 +291,7 @@ probe_devices(int bus)
|
||||
}
|
||||
closedir(dir);
|
||||
}
|
||||
#endif /* HAVE_LINUX_USBDEVICE_FS_H */
|
||||
|
||||
pcap_t *
|
||||
usb_create(const char *device, char *ebuf, int *is_ours)
|
||||
@@ -382,7 +381,9 @@ usb_activate(pcap_t* handle)
|
||||
handle->stats_op = usb_stats_linux_bin;
|
||||
handle->read_op = usb_read_linux_mmap;
|
||||
handle->cleanup_op = usb_cleanup_linux_mmap;
|
||||
#ifdef HAVE_LINUX_USBDEVICE_FS_H
|
||||
probe_devices(handlep->bus_index);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "handle->fd" is a real file, so "select()" and
|
||||
@@ -395,7 +396,9 @@ usb_activate(pcap_t* handle)
|
||||
/* can't mmap, use plain binary interface access */
|
||||
handle->stats_op = usb_stats_linux_bin;
|
||||
handle->read_op = usb_read_linux_bin;
|
||||
#ifdef HAVE_LINUX_USBDEVICE_FS_H
|
||||
probe_devices(handlep->bus_index);
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
/*Binary interface not available, try open text interface */
|
||||
@@ -914,7 +917,11 @@ usb_read_linux_mmap(pcap_t *handle, int max_packets, pcap_handler callback, u_ch
|
||||
}
|
||||
|
||||
/* flush pending events*/
|
||||
ioctl(handle->fd, MON_IOCH_MFLUSH, nflush);
|
||||
if (ioctl(handle->fd, MON_IOCH_MFLUSH, nflush) == -1) {
|
||||
snprintf(handle->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"Can't mflush fd %d: %s", handle->fd, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return packets;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user