mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Update libpcap to 1.1.1.
Changes: Thu. April 1, 2010. guy@alum.mit.edu. Summary for 1.1.1 libpcap release Update CHANGES to reflect more of the changes in 1.1.0. Fix build on RHEL5. Fix shared library build on AIX. Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu. Summary for 1.1.0 libpcap release Add SocketCAN capture support Add Myricom SNF API support Update Endace DAG and ERF support Add support for shared libraries on Solaris, HP-UX, and AIX Build, install, and un-install shared libraries by default; don't build/install shared libraries on platforms we don't support Fix building from a directory other than the source directory Fix compiler warnings and builds on some platforms Update config.guess and config.sub Support monitor mode on mac80211 devices on Linux Fix USB memory-mapped capturing on Linux; it requires a new DLT_ value On Linux, scan /sys/class/net for devices if we have it; scan it, or /proc/net/dev if we don't have /sys/class/net, even if we have getifaddrs(), as it'll find interfaces with no addresses Add limited support for reading pcap-ng files Fix BPF driver-loading error handling on AIX Support getting the full-length interface description on FreeBSD In the lexical analyzer, free up any addrinfo structure we got back from getaddrinfo(). Add support for BPF and libdlpi in OpenSolaris (and SXCE) Hyphenate "link-layer" everywhere Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations In pcap_read_linux_mmap(), if there are no frames available, call poll() even if we're in non-blocking mode, so we pick up errors, and check for the errors in question. Note that poll() works on BPF devices is Snow Leopard If an ENXIO or ENETDOWN is received, it may mean the device has gone away. Deal with it. For BPF, raise the default capture buffer size to from 32k to 512k Support ps_ifdrop on Linux Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile under cygwin. Changes to Linux mmapped captures. Fix bug where create_ring would fail for particular snaplen and buffer size combinations Update pcap-config so that it handles libpcap requiring additional libraries Add workaround for threadsafeness on Windows Add missing mapping for DLT_ENC <-> LINKTYPE_ENC DLT: Add DLT_CAN_SOCKETCAN DLT: Add Solaris ipnet Don't check for DLT_IPNET if it's not defined Add link-layer types for Fibre Channel FC-2 Add link-layer types for Wireless HART Add link-layer types for AOS Add link-layer types for DECT Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups) Install headers unconditionally, and include vlan.h/bluetooth.h if enabled Autoconf fixes+cleanup Support enabling/disabling bluetooth (--{en,dis}able-bluetooth) Support disabling SITA support (--without-sita) Return -1 on failure to create packet ring (if supported but creation failed) Fix handling of 'any' device, so that it can be opened, and no longer attempt to open it in Monitor mode Add support for snapshot length for USB Memory-Mapped Interface Fix configure and build on recent Linux kernels Fix memory-mapped Linux capture to support pcap_next() and pcap_next_ex() Fixes for Linux USB capture DLT: Add DLT_LINUX_EVDEV DLT: Add DLT_GSMTAP_UM DLT: Add DLT_GSMTAP_ABIS
This commit is contained in:
parent
c6a6c5e28b
commit
e89167f07a
205 changed files with 20016 additions and 4664 deletions
80
CHANGES
80
CHANGES
|
|
@ -1,4 +1,77 @@
|
|||
@(#) $Header: /tcpdump/master/libpcap/CHANGES,v 1.67.2.4 2008-10-28 00:27:42 ken Exp $ (LBL)
|
||||
Thu. April 1, 2010. guy@alum.mit.edu.
|
||||
Summary for 1.1.1 libpcap release
|
||||
Update CHANGES to reflect more of the changes in 1.1.0.
|
||||
Fix build on RHEL5.
|
||||
Fix shared library build on AIX.
|
||||
|
||||
Thu. March 11, 2010. ken@netfunctional.ca/guy@alum.mit.edu.
|
||||
Summary for 1.1.0 libpcap release
|
||||
Add SocketCAN capture support
|
||||
Add Myricom SNF API support
|
||||
Update Endace DAG and ERF support
|
||||
Add support for shared libraries on Solaris, HP-UX, and AIX
|
||||
Build, install, and un-install shared libraries by default;
|
||||
don't build/install shared libraries on platforms we don't support
|
||||
Fix building from a directory other than the source directory
|
||||
Fix compiler warnings and builds on some platforms
|
||||
Update config.guess and config.sub
|
||||
Support monitor mode on mac80211 devices on Linux
|
||||
Fix USB memory-mapped capturing on Linux; it requires a new DLT_
|
||||
value
|
||||
On Linux, scan /sys/class/net for devices if we have it; scan
|
||||
it, or /proc/net/dev if we don't have /sys/class/net, even if
|
||||
we have getifaddrs(), as it'll find interfaces with no
|
||||
addresses
|
||||
Add limited support for reading pcap-ng files
|
||||
Fix BPF driver-loading error handling on AIX
|
||||
Support getting the full-length interface description on FreeBSD
|
||||
In the lexical analyzer, free up any addrinfo structure we got back
|
||||
from getaddrinfo().
|
||||
Add support for BPF and libdlpi in OpenSolaris (and SXCE)
|
||||
Hyphenate "link-layer" everywhere
|
||||
Add /sys/kernel/debug/usb/usbmon to the list of usbmon locations
|
||||
In pcap_read_linux_mmap(), if there are no frames available, call
|
||||
poll() even if we're in non-blocking mode, so we pick up
|
||||
errors, and check for the errors in question.
|
||||
Note that poll() works on BPF devices is Snow Leopard
|
||||
If an ENXIO or ENETDOWN is received, it may mean the device has
|
||||
gone away. Deal with it.
|
||||
For BPF, raise the default capture buffer size to from 32k to 512k
|
||||
Support ps_ifdrop on Linux
|
||||
Added a bunch of #ifdef directives to make wpcap.dll (WinPcap) compile
|
||||
under cygwin.
|
||||
Changes to Linux mmapped captures.
|
||||
Fix bug where create_ring would fail for particular snaplen and
|
||||
buffer size combinations
|
||||
Update pcap-config so that it handles libpcap requiring
|
||||
additional libraries
|
||||
Add workaround for threadsafeness on Windows
|
||||
Add missing mapping for DLT_ENC <-> LINKTYPE_ENC
|
||||
DLT: Add DLT_CAN_SOCKETCAN
|
||||
DLT: Add Solaris ipnet
|
||||
Don't check for DLT_IPNET if it's not defined
|
||||
Add link-layer types for Fibre Channel FC-2
|
||||
Add link-layer types for Wireless HART
|
||||
Add link-layer types for AOS
|
||||
Add link-layer types for DECT
|
||||
Autoconf fixes (AIX, HP-UX, OSF/1, Tru64 cleanups)
|
||||
Install headers unconditionally, and include vlan.h/bluetooth.h if
|
||||
enabled
|
||||
Autoconf fixes+cleanup
|
||||
Support enabling/disabling bluetooth (--{en,dis}able-bluetooth)
|
||||
Support disabling SITA support (--without-sita)
|
||||
Return -1 on failure to create packet ring (if supported but
|
||||
creation failed)
|
||||
Fix handling of 'any' device, so that it can be opened, and no longer
|
||||
attempt to open it in Monitor mode
|
||||
Add support for snapshot length for USB Memory-Mapped Interface
|
||||
Fix configure and build on recent Linux kernels
|
||||
Fix memory-mapped Linux capture to support pcap_next() and
|
||||
pcap_next_ex()
|
||||
Fixes for Linux USB capture
|
||||
DLT: Add DLT_LINUX_EVDEV
|
||||
DLT: Add DLT_GSMTAP_UM
|
||||
DLT: Add DLT_GSMTAP_ABIS
|
||||
|
||||
Mon. October 27, 2008. ken@netfunctional.ca. Summary for 1.0.0 libpcap release
|
||||
Compile with IPv6 support by default
|
||||
|
|
@ -12,7 +85,10 @@ Mon. October 27, 2008. ken@netfunctional.ca. Summary for 1.0.0 libpcap rele
|
|||
Variable length 802.11 header support
|
||||
X2E data type support
|
||||
SITA ACN Interface support - see README.sita
|
||||
Support for memory-mapped capture on Linux
|
||||
Support for zerocopy BPF on platforms that support it
|
||||
Support for setting buffer size when opening devices
|
||||
Support for setting monitor mode when opening 802.11 devices
|
||||
Better support for dealing with VLAN tagging/stripping on Linux
|
||||
Fix dynamic library support on OSX
|
||||
Return PCAP_ERROR_IFACE_NOT_UP if the interface isn't 'UP', so applications
|
||||
|
|
@ -22,7 +98,7 @@ Mon. October 27, 2008. ken@netfunctional.ca. Summary for 1.0.0 libpcap rele
|
|||
On Linux, ignore ENETDOWN so we can continue to capture packets if the
|
||||
interface goes down and comes back up again.
|
||||
On Linux, support new tpacket frame headers (2.6.27+)
|
||||
On Mac OS X, add scripts for changing permissions on /dev/pbf* and launchd plist
|
||||
On Mac OS X, add scripts for changing permissions on /dev/bpf* and launchd plist
|
||||
On Solaris, support 'passive mode' on systems that support it
|
||||
Fixes to autoconf and general build environment
|
||||
Man page reorganization + cleanup
|
||||
|
|
|
|||
27
CREDITS
27
CREDITS
|
|
@ -10,9 +10,10 @@ The current maintainers:
|
|||
Additional people who have contributed patches:
|
||||
|
||||
Alan Bawden <Alan at LCS dot MIT dot EDU>
|
||||
Albert Chin <china at thewrittenword dot com>
|
||||
Alexander 'Leo' Bergolth <Leo dot Bergolth at wu-wien dot ac dot at>
|
||||
Alexey Kuznetsov <kuznet at ms2 dot inr dot ac dot ru>
|
||||
Albert Chin <china at thewrittenword dot com>
|
||||
Alon Bar-Lev <alonbl at sourceforge dot net>
|
||||
Andrew Brown <atatat at atatdot dot net>
|
||||
Antti Kantee <pooka at netbsd dot org>
|
||||
Arien Vijn <arienvijn at sourceforge dot net>
|
||||
|
|
@ -23,24 +24,28 @@ Additional people who have contributed patches:
|
|||
Charles M. Hannum <mycroft at netbsd dot org>
|
||||
Chris G. Demetriou <cgd at netbsd dot org>
|
||||
Chris Lightfoot <cwrl at users dot sourceforge dot net>
|
||||
Chris Maynard <Chris dot Maynard at gtech dot com>
|
||||
Chris Pepper <pepper at mail dot reppep dot com>
|
||||
Christian Bell <csbell at myri dot com>
|
||||
Christian Peron <csjp at freebsd dot org>
|
||||
Daniele Orlandi <daniele at orlandi dot com>
|
||||
Darren Reed <darrenr at reed dot wattle dot id dot au>
|
||||
Darren Reed <darrenr at sun dot com>
|
||||
David Kaelbling <drk at sgi dot com>
|
||||
David Young <dyoung at ojctech dot com>
|
||||
Dean Gaudet <dean at arctic dot org>
|
||||
Don Ebright <Don dot Ebright at compuware dot com>
|
||||
Dug Song <dugsong at monkey dot org>
|
||||
Dustin Spicuzza <dustin at virtualroadside dot com>
|
||||
Eric Anderson <anderse at hpl dot hp dot com>
|
||||
Erik de Castro Lopo <erik dot de dot castro dot lopo at sensorynetworks dot com>
|
||||
Felix Obenhuber <felix at obenhuber dot de>
|
||||
Florent Drouin <Florent dot Drouin at alcatel-lucent dot fr>
|
||||
Franz Schaefer <schaefer at mond dot at>
|
||||
Fulko Hew <fulko dot hew at gmail dot com>
|
||||
Fumiyuki Shimizu <fumifumi at abacustech dot jp>
|
||||
Gianluca Varenni <varenni at netgroup-serv dot polito dot it>
|
||||
Gilbert Hoyek <gil_hoyek at hotmail dot com>
|
||||
Gisle Vanem <gvanem at broadpark dot no>
|
||||
Gisle Vanem <giva at bgnett dot no>
|
||||
Graeme Hewson <ghewson at cix dot compulink dot co dot uk>
|
||||
Greg Stark <gsstark at mit dot edu>
|
||||
Greg Troxel <gdt at ir dot bbn dot com>
|
||||
|
|
@ -53,11 +58,13 @@ Additional people who have contributed patches:
|
|||
Jason R. Thorpe <thorpej at netbsd dot org>
|
||||
Javier Achirica <achirica at ttd dot net>
|
||||
Jean Tourrilhes <jt at hpl dot hp dot com>
|
||||
Jean-Louis Charton <Jean-Louis.CHARTON at oikialog dot com>
|
||||
Jefferson Ogata <jogata at nodc dot noaa dot gov>
|
||||
Jesper Peterson <jesper at endace dot com>
|
||||
Joerg Mayer <jmayer at loplof dot de>
|
||||
John Bankier <jbankier at rainfinity dot com>
|
||||
Jon Lindgren <jonl at yubyub dot net>
|
||||
Jon Smirl <jonsmirl at gmail dot com>
|
||||
Juergen Schoenwaelder <schoenw at ibr dot cs dot tu-bs dot de>
|
||||
Jung-uk Kim <jkim at FreeBSD dot org>
|
||||
Kazushi Sugyo <sugyo at pb dot jp dot nec dot com>
|
||||
|
|
@ -67,19 +74,22 @@ Additional people who have contributed patches:
|
|||
Krzysztof Halasa <khc at pm dot waw dot pl>
|
||||
Lorenzo Cavallaro <sullivan at sikurezza dot org>
|
||||
Loris Degioanni <loris at netgroup-serv dot polito dot it>
|
||||
Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
|
||||
Love Hörnquist-Åstrand <lha at stacken dot kth dot se>
|
||||
Luis Martin Garcia <luis dot mgarc at gmail dot com>
|
||||
Maciej W. Rozycki <macro at ds2 dot pg dot gda dot pl>
|
||||
Marcus Felipe Pereira <marcus at task dot com dot br>
|
||||
Mark C. Brown <mbrown at hp 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>
|
||||
Mike Frysinger <vapier at gmail dot com>
|
||||
Mike Kershaw <dragorn at kismetwireless dot net>
|
||||
Mike Wiacek <mike at iroot dot net>
|
||||
Monroe Williams <monroe at pobox dot com>
|
||||
N. Leiten <nleiten at sourceforge dot net>
|
||||
Nicolas Dade <ndade at nsd dot dyndns dot org>
|
||||
Octavian Cerna <tavy at ylabs dot com>
|
||||
Olaf Kirch <okir at caldera dot de>
|
||||
|
|
@ -93,15 +103,20 @@ Additional people who have contributed patches:
|
|||
Pawel Pokrywka <publicpp at gmail dot com>
|
||||
Peter Fales <peter at fales-lorenz dot net>
|
||||
Peter Jeremy <peter dot jeremy at alcatel dot com dot au>
|
||||
Peter Volkov <pva at gentoo dot org>
|
||||
Phil Wood <cpw at lanl dot gov>
|
||||
Rafal Maszkowski <rzm at icm dot edu dot pl>
|
||||
<rcb-isis at users dot sourceforge dot net>
|
||||
Richard Stearn <richard at rns-stearn dot demon dot co dot uk>
|
||||
Rick Jones <raj at cup dot hp dot com>
|
||||
Robert Edmonds <stu-42 at sourceforge dot net>
|
||||
Roberto Mariani <jelot-tcpdump at jelot dot it>
|
||||
Romain Francoise <rfrancoise at debian dot org>
|
||||
Sagun Shakya <sagun dot shakya at sun dot com>
|
||||
Scott Barron <sb125499 at ohiou dot edu>
|
||||
Scott Gifford <sgifford at tir dot com>
|
||||
Sebastian Krahmer <krahmer at cs dot uni-potsdam dot de>
|
||||
Sebastien Roy <Sebastien dot Roy at Sun dot COM>
|
||||
Sepherosa Ziehau <sepherosa at gmail dot com>
|
||||
Shaun Clowes <delius at progsoc dot uts dot edu dot au>
|
||||
Solomon Peachy <pizza at shaftnet dot org>
|
||||
|
|
@ -109,12 +124,16 @@ Additional people who have contributed patches:
|
|||
Stephen Donnelly <stephen at endace dot com>
|
||||
Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp>
|
||||
Tanaka Shin-ya <zstanaka at archer dot livedoor dot com>
|
||||
Tobias Poschwatta <posch at sourceforge dot net>
|
||||
Tony Li <tli at procket dot com>
|
||||
Torsten Landschoff <torsten at debian dot org>
|
||||
Uns Lider <unslider at miranda dot org>
|
||||
Uwe Girlich <Uwe dot Girlich at philosys dot de>
|
||||
Wesley Shields <wxs at FreeBSD dot org>
|
||||
Xianjie Zhang <xzhang at cup dot hp dot com>
|
||||
Xin Li <delphij at FreeBSD dot org>
|
||||
Yen Yen Lim
|
||||
Yvan Vanhullebus <vanhu at sourceforge dot net>
|
||||
Yoann Vandoorselaere <yoann at prelude-ids dot org>
|
||||
|
||||
The original LBL crew:
|
||||
|
|
|
|||
33
ChmodBPF/ChmodBPF
Executable file
33
ChmodBPF/ChmodBPF
Executable file
|
|
@ -0,0 +1,33 @@
|
|||
#! /bin/sh
|
||||
|
||||
. /etc/rc.common
|
||||
|
||||
StartService ()
|
||||
{
|
||||
#
|
||||
# Unfortunately, Mac OS X's devfs is based on the old FreeBSD
|
||||
# one, not the current one, so there's no way to configure it
|
||||
# to create BPF devices with particular owners or groups.
|
||||
# This startup item will make it owned by the admin group,
|
||||
# with permissions rw-rw----, so that anybody in the admin
|
||||
# group can use programs that capture or send raw packets.
|
||||
#
|
||||
# Change this as appropriate for your site, e.g. to make
|
||||
# it owned by a particular user without changing the permissions,
|
||||
# so only that user and the super-user can capture or send raw
|
||||
# packets, or give it the permissions rw-r-----, so that
|
||||
# only the super-user can send raw packets but anybody in the
|
||||
# admin group can capture packets.
|
||||
#
|
||||
chgrp admin /dev/bpf*
|
||||
chmod g+rw /dev/bpf*
|
||||
}
|
||||
|
||||
StopService ()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
RestartService () { StartService; }
|
||||
|
||||
RunService "$1"
|
||||
4
ChmodBPF/StartupParameters.plist
Normal file
4
ChmodBPF/StartupParameters.plist
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
Description = "Change BPF permissions";
|
||||
Provides = ("ChmodBPF");
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
@(#) $Header: /tcpdump/master/libpcap/INSTALL.txt,v 1.21.2.8 2008-06-12 20:25:38 guy Exp $ (LBL)
|
||||
@(#) $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
|
||||
|
|
|
|||
330
Makefile.in
330
Makefile.in
|
|
@ -17,7 +17,7 @@
|
|||
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# @(#) $Header: /tcpdump/master/libpcap/Makefile.in,v 1.108.2.28 2008-10-23 22:13:21 guy Exp $ (LBL)
|
||||
# @(#) $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)
|
||||
|
|
@ -44,14 +44,17 @@ VPATH = @srcdir@
|
|||
# You shouldn't need to edit anything below.
|
||||
#
|
||||
|
||||
LD = /usr/bin/ld
|
||||
CC = @CC@
|
||||
CCOPT = @V_CCOPT@
|
||||
INCLS = -I. @V_INCLS@
|
||||
DEFS = @DEFS@ @V_DEFS@
|
||||
LIBS = @V_LIBS@
|
||||
DAGLIBS = @DAGLIBS@
|
||||
DEPLIBS = @DEPLIBS@
|
||||
ADDLOBJS = @ADDLOBJS@
|
||||
ADDLARCHIVEOBJS = @ADDLARCHIVEOBJS@
|
||||
LIBS = @LIBS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
DYEXT = @DYEXT@
|
||||
V_RPATH_OPT = @V_RPATH_OPT@
|
||||
PROG=libpcap
|
||||
|
||||
# Standard CFLAGS
|
||||
|
|
@ -77,12 +80,13 @@ YACC = @V_YACC@
|
|||
@rm -f $@
|
||||
$(CC) $(CFLAGS) -c $(srcdir)/$*.c
|
||||
|
||||
PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@
|
||||
PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @CAN_SRC@
|
||||
FSRC = fad-@V_FINDALLDEVS@.c
|
||||
SSRC = @SSRC@
|
||||
CSRC = pcap.c inet.c gencode.c optimize.c nametoaddr.c \
|
||||
etherent.c savefile.c bpf_filter.c bpf_image.c bpf_dump.c
|
||||
GENSRC = scanner.c grammar.c version.c
|
||||
CSRC = pcap.c inet.c gencode.c optimize.c nametoaddr.c etherent.c \
|
||||
savefile.c sf-pcap.c sf-pcap-ng.c pcap-common.c \
|
||||
bpf_image.c bpf_dump.c
|
||||
GENSRC = scanner.c grammar.c bpf_filter.c version.c
|
||||
LIBOBJS = @LIBOBJS@
|
||||
|
||||
SRC = $(PSRC) $(FSRC) $(CSRC) $(SSRC) $(GENSRC)
|
||||
|
|
@ -90,8 +94,20 @@ SRC = $(PSRC) $(FSRC) $(CSRC) $(SSRC) $(GENSRC)
|
|||
# We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
|
||||
# hack the extra indirection
|
||||
OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS)
|
||||
HDR = \
|
||||
acconfig.h \
|
||||
PUBHDR = \
|
||||
pcap.h \
|
||||
pcap-bpf.h \
|
||||
pcap-namedb.h \
|
||||
pcap/bpf.h \
|
||||
pcap/bluetooth.h \
|
||||
pcap/ipnet.h \
|
||||
pcap/namedb.h \
|
||||
pcap/pcap.h \
|
||||
pcap/sll.h \
|
||||
pcap/vlan.h \
|
||||
pcap/usb.h
|
||||
|
||||
HDR = $(PUBHDR) \
|
||||
arcnet.h \
|
||||
atmuni31.h \
|
||||
ethertype.h \
|
||||
|
|
@ -99,30 +115,23 @@ HDR = \
|
|||
ieee80211.h \
|
||||
llc.h \
|
||||
nlpid.h \
|
||||
pcap/bluetooth.h \
|
||||
pcap/bpf.h \
|
||||
pcap/namedb.h \
|
||||
pcap/pcap.h \
|
||||
pcap/sll.h \
|
||||
pcap/usb.h \
|
||||
pcap/vlan.h \
|
||||
pcap.h \
|
||||
pcap-common.h \
|
||||
pcap-int.h \
|
||||
pcap-namedb.h \
|
||||
pcap-stdinc.h \
|
||||
ppp.h \
|
||||
sf-pcap.h \
|
||||
sf-pcap-ng.h \
|
||||
sunatmpos.h
|
||||
|
||||
GENHDR = \
|
||||
scanner.h tokdefs.h version.h
|
||||
|
||||
TAGHDR = \
|
||||
pcap-bpf.h
|
||||
|
||||
TAGFILES = \
|
||||
$(SRC) $(HDR) $(TAGHDR)
|
||||
$(SRC) $(HDR)
|
||||
|
||||
CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
|
||||
CLEANFILES = $(OBJ) libpcap.* filtertest findalldevstest selpolltest \
|
||||
opentest $(PROG)-`cat $(srcdir)/VERSION`.tar.gz $(GENSRC) $(GENHDR) \
|
||||
lex.yy.c pcap-config
|
||||
|
||||
MAN1 = pcap-config.1
|
||||
|
||||
|
|
@ -254,13 +263,14 @@ EXTRA_DIST = \
|
|||
msdos/pktdrvr.c \
|
||||
msdos/pktdrvr.h \
|
||||
msdos/readme.dos \
|
||||
net/bpf_filter.c \
|
||||
opentest.c \
|
||||
org.tcpdump.chmod_bpf.plist \
|
||||
packaging/pcap.spec.in \
|
||||
pcap-bpf.c \
|
||||
pcap-bpf.h \
|
||||
pcap-bt-linux.c \
|
||||
pcap-bt-linux.h \
|
||||
pcap-can-linux.c \
|
||||
pcap-can-linux.h \
|
||||
pcap-config.in \
|
||||
pcap-dag.c \
|
||||
pcap-dag.h \
|
||||
|
|
@ -280,6 +290,8 @@ EXTRA_DIST = \
|
|||
pcap-sita.h \
|
||||
pcap-sita.c \
|
||||
pcap-sita.html \
|
||||
pcap-snf.c \
|
||||
pcap-snf.h \
|
||||
pcap-snit.c \
|
||||
pcap-snoop.c \
|
||||
pcap-usb-linux.c \
|
||||
|
|
@ -287,6 +299,7 @@ EXTRA_DIST = \
|
|||
pcap-win32.c \
|
||||
runlex.sh \
|
||||
scanner.l \
|
||||
selpolltest.c \
|
||||
Win32/Include/Gnuc.h \
|
||||
Win32/Include/addrinfo.h \
|
||||
Win32/Include/bittypes.h \
|
||||
|
|
@ -311,42 +324,94 @@ EXTRA_DIST = \
|
|||
Win32/Src/inet_net.c \
|
||||
Win32/Src/inet_pton.c
|
||||
|
||||
all: libpcap.a pcap-config
|
||||
all: libpcap.a shared pcap-config
|
||||
|
||||
libpcap.a: $(OBJ)
|
||||
@rm -f $@
|
||||
$(AR) rc $@ $(OBJ) $(LIBS)
|
||||
ar rc $@ $(OBJ) $(ADDLARCHIVEOBJS)
|
||||
$(RANLIB) $@
|
||||
|
||||
shared: libpcap.$(DYEXT)
|
||||
|
||||
#
|
||||
# XXX - this works with GNU ld, but won't necessarily work with native
|
||||
# ld on, for example, various SVR4-flavored platforms, or Digital UNIX.
|
||||
#
|
||||
libpcap.so: $(OBJ)
|
||||
@rm -f $@
|
||||
$(CC) -shared -Wl,-soname,$@.1 -o $@.`cat $(srcdir)/VERSION` $(OBJ) $(DAGLIBS)
|
||||
VER=`cat $(srcdir)/VERSION`; \
|
||||
MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
@V_SHLIB_CMD@ @V_SHLIB_OPT@ @V_SONAME_OPT@$@.$$MAJOR_VER $(LDFLAGS) \
|
||||
-o $@.$$VER $(OBJ) $(ADDLOBJS) $(LIBS)
|
||||
|
||||
#
|
||||
# The following rule succeeds, but the result is untested.
|
||||
#
|
||||
# XXX - OS X installs the library as "libpcap.A.dylib", with that as the
|
||||
# install_name, and sets the current version to 1 as well. VERSION
|
||||
# might contain a not-purely-numeric version number, but
|
||||
# -current_version requires a purely numeric version, so this won't
|
||||
# work with top-of-tree builds.
|
||||
# In Mac OS X, the libpcap dylib has the name "libpcap.A.dylib", with
|
||||
# its full path as the install_name, and with the compatibility and
|
||||
# current version both set to 1. The compatibility version is set to
|
||||
# 1 so that programs built with a newer version of the library will run
|
||||
# against older versions; multi-platform software probably will fail if
|
||||
# it uses APIs added in the newer version, but Mac OS X-specific software
|
||||
# will use weak linking and check at run time whether those APIs are
|
||||
# available.
|
||||
#
|
||||
# We also use "A" as the major version, and 1 as the compatibility version,
|
||||
# but set the current version to the value in VERSION, with any non-numeric
|
||||
# stuff stripped off (the compatibility and current version must be of the
|
||||
# form X[.Y[.Z]], with Y and Z possibly absent, and with all components
|
||||
# numeric).
|
||||
#
|
||||
libpcap.dylib: $(OBJ)
|
||||
rm -f libpcap*.dylib
|
||||
$(CC) -dynamiclib -undefined error -o libpcap.`cat $(srcdir)/VERSION`.dylib $(OBJ) \
|
||||
-install_name $(libdir)/libpcap.A.dylib \
|
||||
-compatibility_version 1 \
|
||||
-current_version `sed 's/[^0-9.].*$$//' $(srcdir)/VERSION`
|
||||
VER=`cat $(srcdir)/VERSION`; \
|
||||
MAJOR_VER=A; \
|
||||
COMPAT_VER=1; \
|
||||
CURRENT_VER=`sed 's/[^0-9.].*$$//' $(srcdir)/VERSION`; \
|
||||
$(CC) -dynamiclib -undefined error $(LDFLAGS) \
|
||||
-o libpcap.$$VER.dylib $(OBJ) $(ADDLOBJS) $(LIBS) \
|
||||
-install_name $(libdir)/libpcap.$$MAJOR_VER.dylib \
|
||||
-compatibility_version $$COMPAT_VER \
|
||||
-current_version $$CURRENT_VER
|
||||
|
||||
#
|
||||
# The HP-UX linker manual says that the convention for a versioned library
|
||||
# is libXXX.{number}, not libXXX.sl.{number}. That appears to be the case
|
||||
# on at least one HP-UX 11.00 system; libXXX.sl is a symlink to
|
||||
# libXXX.{number}.
|
||||
#
|
||||
# The manual also says "library-level versioning" (think "sonames") was
|
||||
# added in HP-UX 10.0.
|
||||
#
|
||||
# XXX - this assumes we're using the HP linker, rather than the GNU
|
||||
# linker, even with GCC.
|
||||
#
|
||||
libpcap.sl: $(OBJ)
|
||||
@MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
rm -f libpcap.$$MAJOR_VER
|
||||
MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
ld -b $(LDFLAGS) -o libpcap.$$MAJOR_VER +h libpcap.$$MAJOR_VER \
|
||||
$(OBJ) $(ADDLOBJS) $(LIBS)
|
||||
|
||||
#
|
||||
# AIX is different from everybody else. A shared library is an archive
|
||||
# library with one or more shared-object components. We still build a
|
||||
# normal static archive library on AIX, for the benefit of the traditional
|
||||
# scheme of building libpcap and tcpdump in subdirectories of the
|
||||
# same directory, with tcpdump statically linked with the libpcap
|
||||
# in question, but we also build a shared library as "libpcap.shareda"
|
||||
# and install *it*, rather than the static library, as "libpcap.a".
|
||||
#
|
||||
libpcap.shareda: $(OBJ)
|
||||
@rm -f $@ shr.o
|
||||
$(CC) @V_SHLIB_OPT@ -o shr.o $(OBJ) $(ADDLOBJS) $(LDFLAGS) $(LIBS)
|
||||
ar rc $@ shr.o
|
||||
|
||||
#
|
||||
# For platforms that don't support shared libraries (or on which we
|
||||
# don't support shared libraries).
|
||||
#
|
||||
libpcap.none:
|
||||
|
||||
scanner.c: $(srcdir)/scanner.l
|
||||
@rm -f $@
|
||||
./runlex.sh $(LEX) -o$@ $<
|
||||
$(srcdir)/runlex.sh $(LEX) -o$@ $<
|
||||
|
||||
scanner.o: scanner.c tokdefs.h
|
||||
$(CC) $(CFLAGS) -c scanner.c
|
||||
|
|
@ -372,7 +437,13 @@ snprintf.o: $(srcdir)/missing/snprintf.c
|
|||
|
||||
version.c: $(srcdir)/VERSION
|
||||
@rm -f $@
|
||||
sed -e 's/.*/char pcap_version[] = "&";/' $(srcdir)/VERSION > $@
|
||||
if grep GIT ${srcdir}/VERSION >/dev/null; then \
|
||||
read ver <${srcdir}/VERSION; \
|
||||
echo $$ver | tr -d '\012'; \
|
||||
date +_%Y_%m_%d; \
|
||||
else \
|
||||
cat ${srcdir}/VERSION; \
|
||||
fi | sed -e 's/.*/char pcap_version[] = "&";/' > $@
|
||||
|
||||
#
|
||||
# NOTE: this really is supposed to be static; importing a string
|
||||
|
|
@ -383,7 +454,13 @@ version.c: $(srcdir)/VERSION
|
|||
#
|
||||
version.h: $(srcdir)/VERSION
|
||||
@rm -f $@
|
||||
sed -e 's/.*/static const char pcap_version_string[] = "libpcap version &";/' $(srcdir)/VERSION > $@
|
||||
if grep GIT ${srcdir}/VERSION >/dev/null; then \
|
||||
read ver <${srcdir}/VERSION; \
|
||||
echo $$ver | tr -d '\012'; \
|
||||
date +_%Y_%m_%d; \
|
||||
else \
|
||||
cat ${srcdir}/VERSION; \
|
||||
fi | sed -e 's/.*/static const char pcap_version_string[] = "libpcap version &";/' > $@
|
||||
|
||||
bpf_filter.c: $(srcdir)/bpf/net/bpf_filter.c
|
||||
rm -f bpf_filter.c
|
||||
|
|
@ -395,12 +472,13 @@ bpf_filter.o: bpf_filter.c
|
|||
#
|
||||
# Generate the pcap-config script.
|
||||
#
|
||||
pcap-config: pcap-config.in Makefile
|
||||
pcap-config: $(srcdir)/pcap-config.in
|
||||
@rm -f $@ $@.tmp
|
||||
sed -e 's|@includedir[@]|$(includedir)|g' \
|
||||
-e 's|@libdir[@]|$(libdir)|g' \
|
||||
-e 's|@DEPLIBS[@]|$(DEPLIBS)|g' \
|
||||
pcap-config.in >$@.tmp
|
||||
-e 's|@LIBS[@]|$(LIBS)|g' \
|
||||
-e 's|@V_RPATH_OPT[@]|$(V_RPATH_OPT)|g' \
|
||||
$(srcdir)/pcap-config.in >$@.tmp
|
||||
mv $@.tmp $@
|
||||
chmod a+x $@
|
||||
|
||||
|
|
@ -408,16 +486,20 @@ pcap-config: pcap-config.in Makefile
|
|||
# Test programs - not built by default, and not installed.
|
||||
#
|
||||
filtertest: filtertest.c libpcap.a
|
||||
$(CC) $(CFLAGS) -I. -L. -o filtertest filtertest.c libpcap.a
|
||||
$(CC) $(CFLAGS) -I. -L. -o filtertest $(srcdir)/filtertest.c libpcap.a $(LIBS)
|
||||
|
||||
findalldevstest: findalldevstest.c libpcap.a
|
||||
$(CC) $(CFLAGS) -I. -L. -o findalldevstest findalldevstest.c libpcap.a
|
||||
$(CC) $(CFLAGS) -I. -L. -o findalldevstest $(srcdir)/findalldevstest.c libpcap.a $(LIBS)
|
||||
|
||||
install: libpcap.a pcap-config
|
||||
selpolltest: selpolltest.c libpcap.a
|
||||
$(CC) $(CFLAGS) -I. -L. -o selpolltest $(srcdir)/selpolltest.c libpcap.a $(LIBS)
|
||||
|
||||
opentest: opentest.c libpcap.a
|
||||
$(CC) $(CFLAGS) -I. -L. -o opentest $(srcdir)/opentest.c libpcap.a $(LIBS)
|
||||
|
||||
install: install-shared install-archive pcap-config
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
$(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
|
||||
$(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
|
||||
[ -d $(DESTDIR)$(includedir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(includedir); chmod 755 $(DESTDIR)$(includedir))
|
||||
[ -d $(DESTDIR)$(includedir)/pcap ] || \
|
||||
|
|
@ -430,91 +512,151 @@ install: libpcap.a pcap-config
|
|||
(mkdir -p $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@; chmod 755 $(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@)
|
||||
[ -d $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@ ] || \
|
||||
(mkdir -p $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@; chmod 755 $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@)
|
||||
$(INSTALL_DATA) $(srcdir)/pcap/pcap.h \
|
||||
$(DESTDIR)$(includedir)/pcap/pcap.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap/bpf.h \
|
||||
$(DESTDIR)$(includedir)/pcap/bpf.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap/namedb.h \
|
||||
$(DESTDIR)$(includedir)/pcap/namedb.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap/sll.h \
|
||||
$(DESTDIR)$(includedir)/pcap/sll.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap/usb.h \
|
||||
$(DESTDIR)$(includedir)/pcap/usb.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap.h $(DESTDIR)$(includedir)/pcap.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap-bpf.h \
|
||||
$(DESTDIR)$(includedir)/pcap-bpf.h
|
||||
$(INSTALL_DATA) $(srcdir)/pcap-namedb.h \
|
||||
$(DESTDIR)$(includedir)/pcap-namedb.h
|
||||
for i in $(PUBHDR); do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$i \
|
||||
$(DESTDIR)$(includedir)/$$i; done
|
||||
[ -d $(DESTDIR)$(bindir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(bindir); chmod 755 $(DESTDIR)$(bindir))
|
||||
$(INSTALL_PROGRAM) pcap-config $(DESTDIR)$(bindir)/pcap-config
|
||||
for i in $(MAN1); do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$i \
|
||||
$(DESTDIR)$(mandir)/man1/$$i; done
|
||||
for i in $(MAN3PCAP); do \
|
||||
for i in $(MAN3PCAP_NOEXPAND); do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$i \
|
||||
$(DESTDIR)$(mandir)/man3/$$i; done
|
||||
for i in $(MAN3PCAP_EXPAND:.in=); do \
|
||||
$(INSTALL_DATA) $$i \
|
||||
$(DESTDIR)$(mandir)/man3/$$i; done
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_name.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_dump_open.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_geterr.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_inject.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_loop.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_major_version.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_next_ex.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_next.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_open_offline.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
|
||||
ln $(DESTDIR)$(mandir)/man3/pcap_setnonblock.3pcap \
|
||||
$(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
|
||||
for i in $(MANFILE); do \
|
||||
$(INSTALL_DATA) $(srcdir)/`echo $$i | sed 's/.manfile.in/.manfile/'` \
|
||||
$(INSTALL_DATA) `echo $$i | sed 's/.manfile.in/.manfile/'` \
|
||||
$(DESTDIR)$(mandir)/man@MAN_FILE_FORMATS@/`echo $$i | sed 's/.manfile.in/.@MAN_FILE_FORMATS@/'`; done
|
||||
for i in $(MANMISC); do \
|
||||
$(INSTALL_DATA) $(srcdir)/`echo $$i | sed 's/.manmisc.in/.manmisc/'` \
|
||||
$(INSTALL_DATA) `echo $$i | sed 's/.manmisc.in/.manmisc/'` \
|
||||
$(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
|
||||
|
||||
install-shared: install-shared-$(DYEXT)
|
||||
install-shared-so: libpcap.so
|
||||
$(INSTALL_PROGRAM) libpcap.so.`cat VERSION` $(DESTDIR)$(libdir)/libpcap.so.`cat VERSION`
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
VER=`cat $(srcdir)/VERSION`; \
|
||||
MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
$(INSTALL_PROGRAM) libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$VER; \
|
||||
ln -sf libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$MAJOR_VER; \
|
||||
ln -sf libpcap.so.$$MAJOR_VER $(DESTDIR)$(libdir)/libpcap.so
|
||||
install-shared-dylib: libpcap.dylib
|
||||
$(INSTALL_PROGRAM) libpcap.`cat VERSION`.dylib $(DESTDIR)$(libdir)/libpcap.`cat VERSION`.dylib
|
||||
VER=`cat VERSION`; cd $(DESTDIR)$(libdir) && ln -sf libpcap.$$VER.dylib libpcap.A.dylib; ln -sf libpcap.A.dylib libpcap.dylib
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
VER=`cat $(srcdir)/VERSION`; \
|
||||
MAJOR_VER=A; \
|
||||
$(INSTALL_PROGRAM) libpcap.$$VER.dylib $(DESTDIR)$(libdir)/libpcap.$$VER.dylib; \
|
||||
ln -sf libpcap.$$VER.dylib $(DESTDIR)$(libdir)/libpcap.$$MAJOR_VER.dylib; \
|
||||
ln -sf libpcap.$$MAJOR_VER.dylib $(DESTDIR)$(libdir)/libpcap.dylib
|
||||
install-shared-sl: libpcap.sl
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
$(INSTALL_PROGRAM) libpcap.$$MAJOR_VER $(DESTDIR)$(libdir)
|
||||
ln -sf libpcap.$$MAJOR_VER $(DESTDIR)$(libdir)/libpcap.sl
|
||||
install-shared-shareda: libpcap.shareda
|
||||
#
|
||||
# AIX shared libraries are weird. They're archive libraries
|
||||
# with one or more shared object components.
|
||||
#
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
$(INSTALL_PROGRAM) libpcap.shareda $(DESTDIR)$(libdir)/libpcap.a
|
||||
install-shared-none:
|
||||
|
||||
uninstall:
|
||||
install-archive: install-archive-$(DYEXT)
|
||||
install-archive-so install-archive-dylib install-archive-sl install-archive-none: libpcap.a
|
||||
#
|
||||
# Most platforms have separate suffixes for shared and
|
||||
# archive libraries, so we install both.
|
||||
#
|
||||
[ -d $(DESTDIR)$(libdir) ] || \
|
||||
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
|
||||
$(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
|
||||
$(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
|
||||
install-archive-shareda:
|
||||
#
|
||||
# AIX, however, doesn't, so we don't install the archive
|
||||
# library on AIX.
|
||||
#
|
||||
|
||||
uninstall: uninstall-shared
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.a
|
||||
rm -f $(DESTDIR)$(includedir)/pcap/pcap.h
|
||||
rm -f $(DESTDIR)$(includedir)/pcap/bpf.h
|
||||
rm -f $(DESTDIR)$(includedir)/pcap/namedb.h
|
||||
rm -f $(DESTDIR)$(includedir)/pcap/sll.h
|
||||
rm -f $(DESTDIR)$(includedir)/pcap/usb.h
|
||||
for i in $(PUBHDR); do \
|
||||
rm -f $(DESTDIR)$(includedir)/$$i; done
|
||||
-rmdir $(DESTDIR)$(includedir)/pcap
|
||||
rm -f $(DESTDIR)$(includedir)/pcap.h
|
||||
rm -f $(DESTDIR)$(includedir)/pcap-bpf.h
|
||||
rm -f $(DESTDIR)$(includedir)/pcap-namedb.h
|
||||
rm -f $(DESTDIR)/$(bindir)/pcap-config
|
||||
for i in $(MAN1); do \
|
||||
rm -f $(DESTDIR)$(mandir)/man1/$$i; done
|
||||
for i in $(MAN3PCAP); do \
|
||||
rm -f $(DESTDIR)$(mandir)/man3/$$i; done
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_datalink_val_to_description.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_dump_fopen.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_perror.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_sendpacket.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_dispatch.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_minor_version.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_next.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_fopen_offline.3pcap
|
||||
rm -f $(DESTDIR)$(mandir)/man3/pcap_getnonblock.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 \
|
||||
rm -f $(DESTDIR)$(mandir)/man@MAN_MISC_INFO@/`echo $$i | sed 's/.manmisc.in/.@MAN_MISC_INFO@/'`; done
|
||||
|
||||
uninstall-shared: uninstall-shared-$(DYEXT)
|
||||
uninstall-shared-so:
|
||||
VER=`cat $(srcdir)/VERSION`; \
|
||||
MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.so.$$VER; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.so.$$MAJOR_VER; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.so
|
||||
uninstall-shared-dylib:
|
||||
VER=`cat $(srcdir)/VERSION`; \
|
||||
MAJOR_VER=A; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.$$VER.dylib; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.$$MAJOR_VER.dylib; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.dylib
|
||||
uninstall-shared-sl:
|
||||
MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.$$MAJOR_VER; \
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.sl
|
||||
uninstall-shared-shareda:
|
||||
rm -f $(DESTDIR)$(libdir)/libpcap.a
|
||||
uninstall-shared-none:
|
||||
|
||||
clean:
|
||||
rm -f $(CLEANFILES) libpcap*.dylib libpcap.so*
|
||||
rm -f $(CLEANFILES)
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile config.cache config.log config.status \
|
||||
|
|
@ -530,7 +672,7 @@ 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:
|
||||
releasetar:
|
||||
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
|
||||
mkdir $$name; \
|
||||
tar cf - $(CSRC) $(HDR) $(MAN1) $(MAN3PCAP_EXPAND) \
|
||||
|
|
|
|||
18
README
18
README
|
|
@ -1,19 +1,17 @@
|
|||
@(#) $Header: /tcpdump/master/libpcap/README,v 1.30.4.3 2008-10-17 10:39:20 ken Exp $ (LBL)
|
||||
@(#) $Header: /tcpdump/master/libpcap/README,v 1.34 2008-12-14 19:44:14 guy Exp $ (LBL)
|
||||
|
||||
LIBPCAP 1.0.0
|
||||
LIBPCAP 1.x.y
|
||||
|
||||
www.tcpdump.org
|
||||
|
||||
Please send inquiries/comments/reports to:
|
||||
tcpdump-workers@lists.tcpdump.org
|
||||
|
||||
Anonymous CVS is available via:
|
||||
cvs -d :pserver:tcpdump@cvs.tcpdump.org:/tcpdump/master login
|
||||
(password "anoncvs")
|
||||
cvs -d :pserver:tcpdump@cvs.tcpdump.org:/tcpdump/master checkout libpcap
|
||||
Anonymous Git is available via:
|
||||
git clone git://bpf.tcpdump.org/libpcap
|
||||
|
||||
Version 1.0.0 of LIBPCAP can be retrieved with the CVS tag "libpcap_1_0":
|
||||
cvs -d :pserver:tcpdump@cvs.tcpdump.org:/tcpdump/master checkout -r libpcap_1_0 libpcap
|
||||
Version 1.x.y of LIBPCAP can be retrieved with the CVS tag "libpcap_1_{x}rel{y}":
|
||||
cvs -d :pserver:tcpdump@cvs.tcpdump.org:/tcpdump/master checkout -r libpcap_1_{x}rel{y} libpcap
|
||||
|
||||
Please submit patches against the master copy to the libpcap project on
|
||||
sourceforge.net.
|
||||
|
|
@ -80,10 +78,10 @@ information on configuring that option.
|
|||
Note to Linux distributions and *BSD systems that include libpcap:
|
||||
|
||||
There's now a rule to make a shared library, which should work on Linux
|
||||
and *BSD (and OS X).
|
||||
and *BSD, among other platforms.
|
||||
|
||||
It sets the soname of the library to "libpcap.so.1"; this is what it
|
||||
should be, *NOT* libpcap.so.1.0 or libpcap.so.1.0.0 or something such as
|
||||
should be, *NOT* libpcap.so.1.x or libpcap.so.1.x.y or something such as
|
||||
that.
|
||||
|
||||
We've been maintaining binary compatibility between libpcap releases for
|
||||
|
|
|
|||
46
README.Win32
Normal file
46
README.Win32
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
Under Win32, libpcap is integrated in the WinPcap packet capture system.
|
||||
WinPcap provides a framework that allows libpcap to capture the packets
|
||||
under Windows 95, Windows 98, Windows ME, Windows NT 4, Windows 2000
|
||||
and Windows XP.
|
||||
WinPcap binaries and source code can be found at http://winpcap.polito.it:
|
||||
they include also a developer's pack with all the necessary to compile
|
||||
libpcap-based applications under Windows.
|
||||
|
||||
How to compile libpcap with Visual Studio
|
||||
-----------------------------------------
|
||||
|
||||
In order to compile libpcap you will need:
|
||||
|
||||
- version 6 (or higher) of Microsoft Visual Studio
|
||||
- The November 2001 (or later) edition of Microsoft Platform
|
||||
Software Development Kit (SDK), that contains some necessary includes
|
||||
for IPv6 support. You can download it from http://www.microsoft.com/sdk
|
||||
- the latest WinPcap sources from http://winpcap.polito.it/install
|
||||
|
||||
The WinPcap source code already contains a recent (usually the latest
|
||||
stable) version of libpcap. If you need to compile a different one,
|
||||
simply download it from www.tcpdump.org and copy the sources in the
|
||||
winpcap\wpcap\libpcap folder of the WinPcap distribution. If you want to
|
||||
compile a libpcap source retrieved from the tcpdump.org Git, you will
|
||||
have to create the scanner and the grammar by hand (with lex and yacc)
|
||||
or with the cygnus makefile, since The Visual Studio project is not able
|
||||
to build them.
|
||||
|
||||
Open the project file winpcap\wpcap\prj\wpcap.dsw with Visual Studio and
|
||||
build wpcap.dll. wpcap.lib, the library file to link with the applications,
|
||||
will be generated in winpcap\wpcap\lib\. wpcap.dll will be generated in
|
||||
winpcap\wpcap\prj\release or winpcap\wpcap\prj\debug depending on the type
|
||||
of binary that is being created.
|
||||
|
||||
How to compile libpcap with Cygnus
|
||||
----------------------------------
|
||||
|
||||
To build wpcap.dll, cd to the directory WPCAP/PRJ of the WinPcap source code
|
||||
distribution and type "make". libwpcap.a, the library file to link with the
|
||||
applications, will be generated in winpcap\wpcap\lib\. wpcap.dll will be
|
||||
generated in winpcap\wpcap\prj.
|
||||
|
||||
Remember, you CANNOT use the MSVC-generated .lib files with gcc, use
|
||||
libwpcap.a instead.
|
||||
|
||||
"make install" installs wpcap.dll in the Windows system folder.
|
||||
81
README.aix
Normal file
81
README.aix
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
Using BPF:
|
||||
|
||||
(1) AIX 4.x's version of BPF is undocumented and somewhat unstandard; the
|
||||
current BPF support code includes changes that should work around
|
||||
that; it appears to compile and work on at least one AIX 4.3.3
|
||||
machine.
|
||||
|
||||
Note that the BPF driver and the "/dev/bpf" devices might not exist
|
||||
on your machine; AIX's tcpdump loads the driver and creates the
|
||||
devices if they don't already exist. Our libpcap should do the
|
||||
same, and the configure script should detect that it's on an AIX
|
||||
system and choose BPF even if the devices aren't there.
|
||||
|
||||
(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
|
||||
report (if the compile fails, send us the compile error messages;
|
||||
if it compiles but fails to work correctly, send us as detailed as
|
||||
possible a description of the symptoms, including indications of the
|
||||
network link-layer type being wrong or time stamps being wrong).
|
||||
|
||||
If you fix the problems yourself, please submit a patch to
|
||||
|
||||
http://sourceforge.net/projects/libpcap/
|
||||
|
||||
so we can incorporate them into the next release.
|
||||
|
||||
If you don't fix the problems yourself, you can, as a workaround,
|
||||
make libpcap use DLPI instead of BPF.
|
||||
|
||||
This can be done by specifying the flag:
|
||||
|
||||
--with-pcap=dlpi
|
||||
|
||||
to the "configure" script for libpcap.
|
||||
|
||||
If you use DLPI:
|
||||
|
||||
(1) It is a good idea to have the latest version of the DLPI driver on
|
||||
your system, since certain versions may be buggy and cause your AIX
|
||||
system to crash. DLPI is included in the fileset bos.rte.tty. I
|
||||
found that the DLPI driver that came with AIX 4.3.2 was buggy, and
|
||||
had to upgrade to bos.rte.tty 4.3.2.4:
|
||||
|
||||
lslpp -l bos.rte.tty
|
||||
|
||||
bos.rte.tty 4.3.2.4 COMMITTED Base TTY Support and Commands
|
||||
|
||||
Updates for AIX filesets can be obtained from:
|
||||
ftp://service.software.ibm.com/aix/fixes/
|
||||
|
||||
These updates can be installed with the smit program.
|
||||
|
||||
(2) After compiling libpcap, you need to make sure that the DLPI driver
|
||||
is loaded. Type:
|
||||
|
||||
strload -q -d dlpi
|
||||
|
||||
If the result is:
|
||||
|
||||
dlpi: yes
|
||||
|
||||
then the DLPI driver is loaded correctly.
|
||||
|
||||
If it is:
|
||||
|
||||
dlpi: no
|
||||
|
||||
Then you need to type:
|
||||
|
||||
strload -f /etc/dlpi.conf
|
||||
|
||||
Check again with strload -q -d dlpi that the dlpi driver is loaded.
|
||||
|
||||
Alternatively, you can uncomment the lines for DLPI in
|
||||
/etc/pse.conf and reboot the machine; this way DLPI will always
|
||||
be loaded when you boot your system.
|
||||
|
||||
(3) There appears to be a problem in the DLPI code in some versions of
|
||||
AIX, causing a warning about DL_PROMISC_MULTI failing; this might
|
||||
be responsible for DLPI not being able to capture outgoing packets.
|
||||
114
README.dag
Normal file
114
README.dag
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
|
||||
The following instructions apply if you have a Linux or FreeBSD platform and
|
||||
want libpcap to support the DAG range of passive network monitoring cards from
|
||||
Endace (http://www.endace.com, see below for further contact details).
|
||||
|
||||
1) Install and build the DAG software distribution by following the
|
||||
instructions supplied with that package. Current Endace customers can download
|
||||
the DAG software distibution from https://www.endace.com
|
||||
|
||||
2) Configure libcap. To allow the 'configure' script to locate the DAG
|
||||
software distribution use the '--with-dag' option:
|
||||
|
||||
./configure --with-dag=DIR
|
||||
|
||||
Where DIR is the root of the DAG software distribution, for example
|
||||
/var/src/dag. If the DAG software is correctly detected 'configure' will
|
||||
report:
|
||||
|
||||
checking whether we have DAG API... yes
|
||||
|
||||
If 'configure' reports that there is no DAG API, the directory may have been
|
||||
incorrectly specified or the DAG software was not built before configuring
|
||||
libpcap.
|
||||
|
||||
See also the libpcap INSTALL.txt file for further libpcap configuration
|
||||
options.
|
||||
|
||||
Building libpcap at this stage will include support for both the native packet
|
||||
capture stream (linux or bpf) and for capturing from DAG cards. To build
|
||||
libpcap with only DAG support specify the capture type as 'dag' when
|
||||
configuring libpcap:
|
||||
|
||||
./configure --with-dag=DIR --with-pcap=dag
|
||||
|
||||
Applications built with libpcap configured in this way will only detect DAG
|
||||
cards and will not capture from the native OS packet stream.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Libpcap when built for DAG cards against dag-2.5.1 or later releases:
|
||||
|
||||
Timeouts are supported. pcap_dispatch() will return after to_ms milliseconds
|
||||
regardless of how many packets are received. If to_ms is zero pcap_dispatch()
|
||||
will block waiting for data indefinitely.
|
||||
|
||||
pcap_dispatch() will block on and process a minimum of 64kB of data (before
|
||||
filtering) for efficiency. This can introduce high latencies on quiet
|
||||
interfaces unless a timeout value is set. The timeout expiring will override
|
||||
the 64kB minimum causing pcap_dispatch() to process any available data and
|
||||
return.
|
||||
|
||||
pcap_setnonblock is supported. When nonblock is set, pcap_dispatch() will
|
||||
check once for available data, process any data available up to count, then
|
||||
return immediately.
|
||||
|
||||
pcap_findalldevs() is supported, e.g. dag0, dag1...
|
||||
|
||||
Some DAG cards can provide more than one 'stream' of received data.
|
||||
This can be data from different physical ports, or separated by filtering
|
||||
or load balancing mechanisms. Receive streams have even numbers, e.g.
|
||||
dag0:0, dag0:2 etc. Specifying transmit streams for capture is not supported.
|
||||
|
||||
pcap_setfilter() is supported, BPF programs run in userspace.
|
||||
|
||||
pcap_setdirection() is not supported. Only received traffic is captured.
|
||||
DAG cards normally do not have IP or link layer addresses assigned as
|
||||
they are used to passively monitor links.
|
||||
|
||||
pcap_breakloop() is supported.
|
||||
|
||||
pcap_datalink() and pcap_list_datalinks() are supported. The DAG card does
|
||||
not attempt to set the correct datalink type automatically where more than
|
||||
one type is possible.
|
||||
|
||||
pcap_stats() is supported. ps_drop is the number of packets dropped due to
|
||||
RX stream buffer overflow, this count is before filters are applied (it will
|
||||
include packets that would have been dropped by the filter). The RX stream
|
||||
buffer size is user configurable outside libpcap, typically 16-512MB.
|
||||
|
||||
pcap_get_selectable_fd() is not supported, as DAG cards do not support
|
||||
poll/select methods.
|
||||
|
||||
pcap_inject() and pcap_sendpacket() are not supported.
|
||||
|
||||
Some DAG cards now support capturing to multiple virtual interfaces, called
|
||||
streams. Capture streams have even numbers. These are available via libpcap
|
||||
as separate interfaces, e.g. dag0:0, dag0:2, dag0:4 etc. dag0:0 is the same
|
||||
as dag0. These are visible via pcap_findalldevs().
|
||||
|
||||
libpcap now does NOT set the card's hardware snaplen (slen). This must now be
|
||||
set using the appropriate DAG coniguration program, e.g. dagthree, dagfour,
|
||||
dagsix, dagconfig. This is because the snaplen is currently shared between
|
||||
all of the streams. In future this may change if per-stream slen is
|
||||
implemented.
|
||||
|
||||
DAG cards by default capture entire packets including the L2
|
||||
CRC/FCS. If the card is not configured to discard the CRC/FCS, this
|
||||
can confuse applications that use libpcap if they're not prepared for
|
||||
packets to have an FCS. Libpcap now reads the environment variable
|
||||
ERF_FCS_BITS to determine how many bits of CRC/FCS to strip from the
|
||||
end of the captured frame. This defaults to 32 for use with
|
||||
Ethernet. If the card is configured to strip the CRC/FCS, then set
|
||||
ERF_FCS_BITS=0. If used with a HDLC/PoS/PPP/Frame Relay link with 16
|
||||
bit CRC/FCS, then set ERF_FCS_BITS=16.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Please submit bug reports via <support@endace.com>.
|
||||
|
||||
Please also visit our Web site at:
|
||||
|
||||
http://www.endace.com/
|
||||
|
||||
For more information about Endace DAG cards contact <sales@endace.com>.
|
||||
254
README.hpux
Normal file
254
README.hpux
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
For HP-UX 11i (11.11) and later, there are no known issues with
|
||||
promiscuous mode under HP-UX. If you are using a earlier version of
|
||||
HP-UX and cannot upgrade, please continue reading.
|
||||
|
||||
HP-UX patches to fix packet capture problems
|
||||
|
||||
Note that packet-capture programs such as tcpdump may, on HP-UX, not be
|
||||
able to see packets sent from the machine on which they're running.
|
||||
Some articles on groups.google.com discussing this are:
|
||||
|
||||
http://groups.google.com/groups?selm=82ld3v%2480i%241%40mamenchi.zrz.TU-Berlin.DE
|
||||
|
||||
which says:
|
||||
|
||||
Newsgroups: comp.sys.hp.hpux
|
||||
Subject: Re: Did someone made tcpdump working on 10.20 ?
|
||||
Date: 12/08/1999
|
||||
From: Lutz Jaenicke <jaenicke@emserv1.ee.TU-Berlin.DE>
|
||||
|
||||
In article <82ks5i$5vc$1@news1.dti.ne.jp>, mtsat <mtsat@iris.dti.ne.jp>
|
||||
wrote:
|
||||
>Hello,
|
||||
>
|
||||
>I downloaded and compiled tcpdump3.4 a couple of week ago. I tried to use
|
||||
>it, but I can only see incoming data, never outgoing.
|
||||
>Someone (raj) explained me that a patch was missing, and that this patch
|
||||
>must me "patched" (poked) in order to see outbound data in promiscuous mode.
|
||||
>Many things to do .... So the question is : did someone has already this
|
||||
>"ready to use" PHNE_**** patch ?
|
||||
|
||||
Two things:
|
||||
1. You do need a late "LAN products cumulative patch" (e.g. PHNE_18173
|
||||
for s700/10.20).
|
||||
2. You must use
|
||||
echo 'lanc_outbound_promisc_flag/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem
|
||||
You can insert this e.g. into /sbin/init.d/lan
|
||||
|
||||
Best regards,
|
||||
Lutz
|
||||
|
||||
and
|
||||
|
||||
http://groups.google.com/groups?selm=88cf4t%24p03%241%40web1.cup.hp.com
|
||||
|
||||
which says:
|
||||
|
||||
Newsgroups: comp.sys.hp.hpux
|
||||
Subject: Re: tcpdump only shows incoming packets
|
||||
Date: 02/15/2000
|
||||
From: Rick Jones <foo@bar.baz.invalid>
|
||||
|
||||
Harald Skotnes <harald@cc.uit.no> wrote:
|
||||
> I am running HPUX 11.0 on a C200 hanging on a 100Mb switch. I have
|
||||
> compiled libpcap-0.4 an tcpdump-3.4 and it seems to work. But at a
|
||||
> closer look I only get to see the incoming packets not the
|
||||
> outgoing. I have tried tcpflow-0.12 which also uses libpcap and the
|
||||
> same thing happens. Could someone please give me a hint on how to
|
||||
> get this right?
|
||||
|
||||
Search/Read the archives ?-)
|
||||
|
||||
What you are seeing is expected, un-patched, behaviour for an HP-UX
|
||||
system. On 11.00, you need to install the latest lancommon/DLPI
|
||||
patches, and then the latest driver patch for the interface(s) in use.
|
||||
At that point, a miracle happens and you should start seeing outbound
|
||||
traffic.
|
||||
|
||||
[That article also mentions the patch that appears below.]
|
||||
|
||||
and
|
||||
|
||||
http://groups.google.com/groups?selm=38AA973E.96BE7DF7%40cc.uit.no
|
||||
|
||||
which says:
|
||||
|
||||
Newsgroups: comp.sys.hp.hpux
|
||||
Subject: Re: tcpdump only shows incoming packets
|
||||
Date: 02/16/2000
|
||||
From: Harald Skotnes <harald@cc.uit.no>
|
||||
|
||||
Rick Jones wrote:
|
||||
|
||||
...
|
||||
|
||||
> What you are seeing is expected, un-patched, behaviour for an HP-UX
|
||||
> system. On 11.00, you need to install the latest lancommon/DLPI
|
||||
> patches, and then the latest driver patch for the interface(s) in
|
||||
> use. At that point, a miracle happens and you should start seeing
|
||||
> outbound traffic.
|
||||
|
||||
Thanks a lot. I have this problem on several machines running HPUX
|
||||
10.20 and 11.00. The machines where patched up before y2k so did not
|
||||
know what to think. Anyway I have now installed PHNE_19766,
|
||||
PHNE_19826, PHNE_20008, PHNE_20735 on the C200 and now I can see the
|
||||
outbound traffic too. Thanks again.
|
||||
|
||||
(although those patches may not be the ones to install - there may be
|
||||
later patches).
|
||||
|
||||
And another message to tcpdump-workers@tcpdump.org, from Rick Jones:
|
||||
|
||||
Date: Mon, 29 Apr 2002 15:59:55 -0700
|
||||
From: Rick Jones
|
||||
To: tcpdump-workers@tcpdump.org
|
||||
Subject: Re: [tcpdump-workers] I Can't Capture the Outbound Traffic
|
||||
|
||||
...
|
||||
|
||||
http://itrc.hp.com/ would be one place to start in a search for the most
|
||||
up-to-date patches for DLPI and the lan driver(s) used on your system (I
|
||||
cannot guess because 9000/800 is too generic - one hs to use the "model"
|
||||
command these days and/or an ioscan command (see manpage) to guess what
|
||||
the drivers (btlan[3456], gelan, etc) might be involved in addition to
|
||||
DLPI.
|
||||
|
||||
Another option is to upgrade to 11i as outbound promiscuous mode support
|
||||
is there in the base OS, no patches required.
|
||||
|
||||
Another posting:
|
||||
|
||||
http://groups.google.com/groups?selm=7d6gvn%24b3%241%40ocean.cup.hp.com
|
||||
|
||||
indicates that you need to install the optional STREAMS product to do
|
||||
captures on HP-UX 9.x:
|
||||
|
||||
Newsgroups: comp.sys.hp.hpux
|
||||
Subject: Re: tcpdump HP/UX 9.x
|
||||
Date: 03/22/1999
|
||||
From: Rick Jones <foo@bar.baz>
|
||||
|
||||
Dave Barr (barr@cis.ohio-state.edu) wrote:
|
||||
: Has anyone ported tcpdump (or something similar) to HP/UX 9.x?
|
||||
|
||||
I'm reasonably confident that any port of tcpdump to 9.X would require
|
||||
the (then optional) STREAMS product. This would bring DLPI, which is
|
||||
what one uses to access interfaces in promiscuous mode.
|
||||
|
||||
I'm not sure that HP even sells the 9.X STREAMS product any longer,
|
||||
since HP-UX 9.X is off the pricelist (well, maybe 9.10 for the old 68K
|
||||
devices).
|
||||
|
||||
Your best bet is to be up on 10.20 or better if that is at all
|
||||
possible. If your hardware is supported by it, I'd go with HP-UX 11.
|
||||
If you want to see the system's own outbound traffic, you'll never get
|
||||
that functionality on 9.X, but it might happen at some point for 10.20
|
||||
and 11.X.
|
||||
|
||||
rick jones
|
||||
|
||||
(as per other messages cited here, the ability to see the system's own
|
||||
outbound traffic did happen).
|
||||
|
||||
Rick Jones reports that HP-UX 11i needs no patches for outbound
|
||||
promiscuous mode support.
|
||||
|
||||
An additional note, from Jost Martin, for HP-UX 10.20:
|
||||
|
||||
Q: How do I get ethereral on HPUX to capture the _outgoing_ packets
|
||||
of an interface
|
||||
A: You need to get PHNE_20892,PHNE_20725 and PHCO_10947 (or
|
||||
newer, this is as of 4.4.00) and its dependencies. Then you can
|
||||
enable the feature as descibed below:
|
||||
|
||||
Patch Name: PHNE_20892
|
||||
Patch Description: s700 10.20 PCI 100Base-T cumulative patch
|
||||
To trace the outbound packets, please do the following
|
||||
to turn on a global promiscuous switch before running
|
||||
the promiscuous applications like snoop or tcpdump:
|
||||
|
||||
adb -w /stand/vmunix /dev/mem
|
||||
lanc_outbound_promisc_flag/W 1
|
||||
(adb will echo the result showing that the flag has
|
||||
been changed)
|
||||
$quit
|
||||
(Thanks for this part to HP-support, Ratingen)
|
||||
|
||||
The attached hack does this and some security-related stuff
|
||||
(thanks to hildeb@www.stahl.bau.tu-bs.de (Ralf Hildebrandt) who
|
||||
posted the security-part some time ago)
|
||||
|
||||
<<hack_ip_stack>>
|
||||
|
||||
(Don't switch IP-forwarding off, if you need it !)
|
||||
Install the hack as /sbin/init.d/hacl_ip_stack (adjust
|
||||
permissions !) and make a sequencing-symlink
|
||||
/sbin/rc2.d/S350hack_ip_stack pointing to this script.
|
||||
Now all this is done on every reboot.
|
||||
|
||||
According to Rick Jones, the global promiscuous switch also has to be
|
||||
turned on for HP-UX 11.00, but not for 11i - and, in fact, the switch
|
||||
doesn't even exist on 11i.
|
||||
|
||||
Here's the "hack_ip_stack" script:
|
||||
|
||||
-----------------------------------Cut Here-------------------------------------
|
||||
#!/sbin/sh
|
||||
#
|
||||
# nettune: hack kernel parms for safety
|
||||
|
||||
OKAY=0
|
||||
ERROR=-1
|
||||
|
||||
# /usr/contrib/bin fuer nettune auf Pfad
|
||||
PATH=/sbin:/usr/sbin:/usr/bin:/usr/contrib/bin
|
||||
export PATH
|
||||
|
||||
|
||||
##########
|
||||
# main #
|
||||
##########
|
||||
|
||||
case $1 in
|
||||
start_msg)
|
||||
print "Tune IP-Stack for security"
|
||||
exit $OKAY
|
||||
;;
|
||||
|
||||
stop_msg)
|
||||
print "This action is not applicable"
|
||||
exit $OKAY
|
||||
;;
|
||||
|
||||
stop)
|
||||
exit $OKAY
|
||||
;;
|
||||
|
||||
start)
|
||||
;; # fall through
|
||||
|
||||
*)
|
||||
print "USAGE: $0 {start_msg | stop_msg | start | stop}" >&2
|
||||
exit $ERROR
|
||||
;;
|
||||
esac
|
||||
|
||||
###########
|
||||
# start #
|
||||
###########
|
||||
|
||||
#
|
||||
# tcp-Sequence-Numbers nicht mehr inkrementieren sondern random
|
||||
# Syn-Flood-Protection an
|
||||
# ip_forwarding aus
|
||||
# Source-Routing aus
|
||||
# Ausgehende Packets an ethereal/tcpdump etc.
|
||||
|
||||
/usr/contrib/bin/nettune -s tcp_random_seq 2 || exit $ERROR
|
||||
/usr/contrib/bin/nettune -s hp_syn_protect 1 || exit $ERROR
|
||||
/usr/contrib/bin/nettune -s ip_forwarding 0 || exit $ERROR
|
||||
echo 'ip_block_source_routed/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem || exit $ERROR
|
||||
echo 'lanc_outbound_promisc_flag/W 1' | adb -w /stand/vmunix /dev/mem || exit $ERROR
|
||||
|
||||
exit $OKAY
|
||||
-----------------------------------Cut Here-------------------------------------
|
||||
108
README.linux
Normal file
108
README.linux
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
In order for libpcap to be able to capture packets on a Linux system,
|
||||
the "packet" protocol must be supported by your kernel. If it is not,
|
||||
you may get error messages such as
|
||||
|
||||
modprobe: can't locate module net-pf-17
|
||||
|
||||
in "/var/adm/messages", or may get messages such as
|
||||
|
||||
socket: Address family not supported by protocol
|
||||
|
||||
from applications using libpcap.
|
||||
|
||||
You must configure the kernel with the CONFIG_PACKET option for this
|
||||
protocol; the following note is from the Linux "Configure.help" file for
|
||||
the 2.0[.x] kernel:
|
||||
|
||||
Packet socket
|
||||
CONFIG_PACKET
|
||||
The Packet protocol is used by applications which communicate
|
||||
directly with network devices without an intermediate network
|
||||
protocol implemented in the kernel, e.g. tcpdump. If you want them
|
||||
to work, choose Y.
|
||||
|
||||
This driver is also available as a module called af_packet.o ( =
|
||||
code which can be inserted in and removed from the running kernel
|
||||
whenever you want). If you want to compile it as a module, say M
|
||||
here and read Documentation/modules.txt; if you use modprobe or
|
||||
kmod, you may also want to add "alias net-pf-17 af_packet" to
|
||||
/etc/modules.conf.
|
||||
|
||||
and the note for the 2.2[.x] kernel says:
|
||||
|
||||
Packet socket
|
||||
CONFIG_PACKET
|
||||
The Packet protocol is used by applications which communicate
|
||||
directly with network devices without an intermediate network
|
||||
protocol implemented in the kernel, e.g. tcpdump. If you want them
|
||||
to work, choose Y. This driver is also available as a module called
|
||||
af_packet.o ( = code which can be inserted in and removed from the
|
||||
running kernel whenever you want). If you want to compile it as a
|
||||
module, say M here and read Documentation/modules.txt. You will
|
||||
need to add 'alias net-pf-17 af_packet' to your /etc/conf.modules
|
||||
file for the module version to function automatically. If unsure,
|
||||
say Y.
|
||||
|
||||
In addition, there is an option that, in 2.2 and later kernels, will
|
||||
allow packet capture filters specified to programs such as tcpdump to be
|
||||
executed in the kernel, so that packets that don't pass the filter won't
|
||||
be copied from the kernel to the program, rather than having all packets
|
||||
copied to the program and libpcap doing the filtering in user mode.
|
||||
|
||||
Copying packets from the kernel to the program consumes a significant
|
||||
amount of CPU, so filtering in the kernel can reduce the overhead of
|
||||
capturing packets if a filter has been specified that discards a
|
||||
significant number of packets. (If no filter is specified, it makes no
|
||||
difference whether the filtering isn't performed in the kernel or isn't
|
||||
performed in user mode. :-))
|
||||
|
||||
The option for this is the CONFIG_FILTER option; the "Configure.help"
|
||||
file says:
|
||||
|
||||
Socket filtering
|
||||
CONFIG_FILTER
|
||||
The Linux Socket Filter is derived from the Berkeley Packet Filter.
|
||||
If you say Y here, user-space programs can attach a filter to any
|
||||
socket and thereby tell the kernel that it should allow or disallow
|
||||
certain types of data to get through the socket. Linux Socket
|
||||
Filtering works on all socket types except TCP for now. See the text
|
||||
file linux/Documentation/networking/filter.txt for more information.
|
||||
If unsure, say N.
|
||||
|
||||
Note that, by default, libpcap will, if libnl is present, build with it;
|
||||
it uses libnl to support monitor mode on mac80211 devices. There is a
|
||||
configuration option to disable building with libnl, but, if that option
|
||||
is chosen, the monitor-mode APIs (as used by tcpdump's "-I" flag, and as
|
||||
will probably be used by other applications in the future) won't work
|
||||
properly on mac80211 devices.
|
||||
|
||||
Linux's run-time linker allows shared libraries to be linked with other
|
||||
shared libraries, which means that if an older version of a shared
|
||||
library doesn't require routines from some other shared library, and a
|
||||
later version of the shared library does require those routines, the
|
||||
later version of the shared library can be linked with that other shared
|
||||
library and, if it's otherwise binary-compatible with the older version,
|
||||
can replace that older version without breaking applications built with
|
||||
the older version, and without breaking configure scripts or the build
|
||||
procedure for applications whose configure script doesn't use the
|
||||
pcap-config script if they build with the shared library. (The build
|
||||
procedure for applications whose configure scripts use the pcap-config
|
||||
script if present will not break even if they build with the static
|
||||
library.)
|
||||
|
||||
Statistics:
|
||||
Statistics reported by pcap are platform specific. The statistics
|
||||
reported by pcap_stats on Linux are as follows:
|
||||
|
||||
2.2.x
|
||||
=====
|
||||
ps_recv Number of packets that were accepted by the pcap filter
|
||||
ps_drops Always 0, this statistic is not gatherd on this platform
|
||||
|
||||
2.4.x
|
||||
=====
|
||||
ps_rec Number of packets that were accepted by the pcap filter
|
||||
ps_drops Number of packets that had passed filtering but were not
|
||||
passed on to pcap due to things like buffer shortage, etc.
|
||||
This is useful because these are packets you are interested in
|
||||
but won't be reported by, for example, tcpdump output.
|
||||
74
README.macosx
Normal file
74
README.macosx
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
As with other systems using BPF, Mac OS X allows users with read access
|
||||
to the BPF devices to capture packets with libpcap and allows users with
|
||||
write access to the BPF devices to send packets with libpcap.
|
||||
|
||||
On some systems that use BPF, the BPF devices live on the root file
|
||||
system, and the permissions and/or ownership on those devices can be
|
||||
changed to give users other than root permission to read or write those
|
||||
devices.
|
||||
|
||||
On newer versions of FreeBSD, the BPF devices live on devfs, and devfs
|
||||
can be configured to set the permissions and/or ownership of those
|
||||
devices to give users other than root permission to read or write those
|
||||
devices.
|
||||
|
||||
On Mac OS X, the BPF devices live on devfs, but the OS X version of
|
||||
devfs is based on an older (non-default) FreeBSD devfs, and that version
|
||||
of devfs cannot be configured to set the permissions and/or ownership of
|
||||
those devices.
|
||||
|
||||
Therefore, we supply:
|
||||
|
||||
a "startup item" for older versions of Mac OS X;
|
||||
|
||||
a launchd daemon for Tiger and later versions of Mac OS X;
|
||||
|
||||
Both of them will change the ownership of the BPF devices so that the
|
||||
"admin" group owns them, and will change the permission of the BPF
|
||||
devices to rw-rw----, so that all users in the "admin" group - i.e., all
|
||||
users with "Allow user to administer this computer" turned on - have
|
||||
both read and write access to them.
|
||||
|
||||
The startup item is in the ChmodBPF directory in the source tree. A
|
||||
/Library/StartupItems directory should be created if it doesn't already
|
||||
exist, and the ChmodBPF directory should be copied to the
|
||||
/Library/StartupItems directory (copy the entire directory, so that
|
||||
there's a /Library/StartupItems/ChmodBPF directory, containing all the
|
||||
files in the source tree's ChmodBPF directory; don't copy the individual
|
||||
items in that directory to /Library/StartupItems). The ChmodBPF
|
||||
directory, and all files under it, must be owned by root. Installing
|
||||
the files won't immediately cause the startup item to be executed; it
|
||||
will be executed on the next reboot. To change the permissions before
|
||||
the reboot, run
|
||||
|
||||
sudo SystemStarter start ChmodBPF
|
||||
|
||||
The launchd daemon is the chmod_bpf script, plus the
|
||||
org.tcpdump.chmod_bpf.plist launchd plist file. chmod_bpf should be
|
||||
installed in /usr/local/bin/chmod_bpf, and org.tcpdump.chmod_bpf.plist
|
||||
should be installed in /Library/LaunchDaemons. chmod_bpf, and
|
||||
org.tcpdump.chmod_bpf.plist, must be owned by root. Installing the
|
||||
script and plist file won't immediately cause the script to be executed;
|
||||
it will be executed on the next reboot. To change the permissions
|
||||
before the reboot, run
|
||||
|
||||
sudo /usr/local/bin/chmod_bpf
|
||||
|
||||
or
|
||||
|
||||
sudo launchctl load /Library/LaunchDaemons/org.tcpdump.chmod_bpf.plist
|
||||
|
||||
If you want to give a particular user permission to access the BPF
|
||||
devices, rather than giving all administrative users permission to
|
||||
access them, you can have the ChmodBPF/ChmodBPF script change the
|
||||
ownership of /dev/bpf* without changing the permissions. If you want to
|
||||
give a particular user permission to read and write the BPF devices and
|
||||
give the administrative users permission to read but not write the BPF
|
||||
devices, you can have the script change the owner to that user, the
|
||||
group to "admin", and the permissions to rw-r-----. Other possibilities
|
||||
are left as an exercise for the reader.
|
||||
|
||||
(NOTE: due to a bug in Snow Leopard, if you change the permissions not
|
||||
to grant write permission to everybody who should be allowed to capture
|
||||
traffic, non-root users who cannot open the BPF devices for writing will
|
||||
not be able to capture outgoing packets.)
|
||||
50
README.septel
Normal file
50
README.septel
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
The following instructions apply if you have a Linux platform and want
|
||||
libpcap to support the Septel range of passive network monitoring cards
|
||||
from Intel (http://www.intel.com)
|
||||
|
||||
1) Install and build the Septel software distribution by following the
|
||||
instructions supplied with that package.
|
||||
|
||||
2) Configure libcap. To allow the 'configure' script to locate the Septel
|
||||
software distribution use the '--with-septel' option:
|
||||
|
||||
./configure --with-septel=DIR
|
||||
|
||||
where DIR is the root of the Septel software distribution, for example
|
||||
/var/src/septel.
|
||||
|
||||
By default (if you write only ./configure --with-septel) it takes
|
||||
./../septel as argument for DIR.
|
||||
|
||||
If the Septel software is correctly detected 'configure' will
|
||||
report:
|
||||
|
||||
checking whether we have Septel API... yes
|
||||
|
||||
If 'configure' reports that there is no Septel API, the directory may have been
|
||||
incorrectly specified or the Septel software was not built before configuring
|
||||
libpcap.
|
||||
|
||||
See also the libpcap INSTALL.txt file for further libpcap configuration
|
||||
options.
|
||||
|
||||
Building libpcap at this stage will include support for both the native
|
||||
packet capture stream and for capturing from Septel cards. To build
|
||||
libpcap with only Septel support specify the capture type as 'septel'
|
||||
when configuring libpcap:
|
||||
|
||||
./configure --with-septel=DIR --with-pcap=septel
|
||||
|
||||
Applications built with libpcap configured in this way will only detect Septel
|
||||
cards and will not capture from the native OS packet stream.
|
||||
|
||||
Note: As mentioned in pcap-septel.c we should first edit the system.txt
|
||||
file to change the user part example (UPE) module id to 0xdd instead of
|
||||
0x2d for technical reason. So this change in system.txt is crutial and
|
||||
things will go wrong if it's not done. System.txt along with config.txt
|
||||
are configuration files that are edited by the user before running the
|
||||
gctload program that uses these files for initialising modules and
|
||||
configuring parameters.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
for more information please contact me : gil_hoyek@hotmail.com
|
||||
64
README.sita
Normal file
64
README.sita
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
The following instructions apply if you have a Linux platform and want
|
||||
libpcap to support the 'ACN' WAN/LAN router product from from SITA
|
||||
(http://www.sita.aero)
|
||||
|
||||
This might also work on non-Linux Unix-compatible platforms, but that
|
||||
has not been tested.
|
||||
|
||||
See also the libpcap INSTALL.txt file for further libpcap configuration
|
||||
options.
|
||||
|
||||
These additions/extensions have been made to PCAP to allow it to
|
||||
capture packets from a SITA ACN device (and potentially others).
|
||||
|
||||
To enable its support you need to ensure that the distribution has
|
||||
a correct configure.in file; that can be created if neccessay by
|
||||
using the normal autoconf procedure of:
|
||||
|
||||
aclocal
|
||||
autoconf
|
||||
autoheader
|
||||
automake
|
||||
|
||||
Then run configure with the 'sita' option:
|
||||
|
||||
./configure --with-sita
|
||||
|
||||
Applications built with libpcap configured in this way will only detect SITA
|
||||
ACN interfaces and will not capture from the native OS packet stream.
|
||||
|
||||
The SITA extension provides a remote datascope operation for capturing
|
||||
both WAN and LAN protocols. It effectively splits the operation of
|
||||
PCAP into two halves. The top layer performs the majority of the
|
||||
work, but interfaces via a TCP session to remote agents that
|
||||
provide the lower layer functionality of actual sniffing and
|
||||
filtering. More detailed information regarding the functions and
|
||||
inter-device protocol and naming conventions are described in detail
|
||||
in 'pcap-sita.html'.
|
||||
|
||||
pcap_findalldevs() reads the local system's /etc/hosts file looking
|
||||
for host names that match the format of IOP type devices. ie. aaa_I_x_y
|
||||
and then queries each associated IP address for a list of its WAN and
|
||||
LAN devices. The local system the aggregates the lists obtained from
|
||||
each IOP, sorts it, and provides it (to Wireshark et.al) as the
|
||||
list of monitorable interfaces.
|
||||
|
||||
Once a valid interface has been selected, pcap_open() is called
|
||||
which opens a TCP session (to a well known port) on the target IOP
|
||||
and tells it to start monitoring.
|
||||
|
||||
All captured packets are then forwarded across that TCP session
|
||||
back to the local 'top layer' for forwarding to the actual
|
||||
sniffing program (wireshark...)
|
||||
|
||||
Note that the DLT_SITA link-layer type includes a proprietary header
|
||||
that is documented as part of the SITA dissector of Wireshark and is
|
||||
also described in 'pcap-sita.html' for posterity sake.
|
||||
|
||||
That header provides:
|
||||
- Packet direction (in/out) (1 octet)
|
||||
- Link layer hardware signal status (1 octet)
|
||||
- Transmit/Receive error status (2 octets)
|
||||
- Encapsulated WAN protocol ID (1 octet)
|
||||
|
||||
|
||||
49
README.tru64
Normal file
49
README.tru64
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
The following instructions are applicable to Tru64 UNIX
|
||||
(formerly Digital UNIX (formerly DEC OSF/1)) version 4.0, and
|
||||
probably to later versions as well; at least some options apply to
|
||||
Digital UNIX 3.2 - perhaps all do.
|
||||
|
||||
In order to use kernel packet filtering on this system, you have
|
||||
to configure it in such a way:
|
||||
|
||||
Kernel configuration
|
||||
--------------------
|
||||
|
||||
The packet filtering kernel option must be enabled at kernel
|
||||
installation. If it was not the case, you can rebuild the kernel with
|
||||
"doconfig -c" after adding the following line in the kernel
|
||||
configuration file (/sys/conf/<HOSTNAME>):
|
||||
|
||||
option PACKETFILTER
|
||||
|
||||
or use "doconfig" without any arguments to add the packet filter driver
|
||||
option via the kernel option menu (see the system administration
|
||||
documentation for information on how to do this).
|
||||
|
||||
Device configuration
|
||||
--------------------
|
||||
|
||||
Devices used for packet filtering must be created thanks to
|
||||
the following command (executed in the /dev directory):
|
||||
|
||||
./MAKEDEV pfilt
|
||||
|
||||
Interface configuration
|
||||
-----------------------
|
||||
|
||||
In order to capture all packets on a network, you may want to allow
|
||||
applications to put the interface on that network into "local copy"
|
||||
mode, so that tcpdump can see packets sent by the host on which it's
|
||||
running as well as packets received by that host, and to put the
|
||||
interface into "promiscuous" mode, so that tcpdump can see packets on
|
||||
the network segment not sent to the host on which it's running, by using
|
||||
the pfconfig(1) command:
|
||||
|
||||
pfconfig +c +p <network_device>
|
||||
|
||||
or allow application to put any interface into "local copy" or
|
||||
"promiscuous" mode by using the command:
|
||||
|
||||
pfconfig +c +p -a
|
||||
|
||||
Note: all instructions given require root privileges.
|
||||
BIN
SUNOS4/nit_if.o.sparc
Normal file
BIN
SUNOS4/nit_if.o.sparc
Normal file
Binary file not shown.
BIN
SUNOS4/nit_if.o.sun3
Normal file
BIN
SUNOS4/nit_if.o.sun3
Normal file
Binary file not shown.
BIN
SUNOS4/nit_if.o.sun4c.4.0.3c
Normal file
BIN
SUNOS4/nit_if.o.sun4c.4.0.3c
Normal file
Binary file not shown.
2
TODO
2
TODO
|
|
@ -6,7 +6,7 @@ Important stuff (to be done before the next release)
|
|||
|
||||
General
|
||||
|
||||
- configure should not be in the CVS. Most open source projects have an
|
||||
- configure should not be in Git. Most open source projects have an
|
||||
autogen.sh script to run autoconf etc. after checkout. I think we
|
||||
should stick to the standard.
|
||||
|
||||
|
|
|
|||
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
1.0.0
|
||||
1.1.1
|
||||
|
|
|
|||
46
Win32/Include/Gnuc.h
Normal file
46
Win32/Include/Gnuc.h
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
/* @(#) $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
|
||||
#if __STDC__
|
||||
#define __P(protos) protos
|
||||
#else
|
||||
#define __P(protos) ()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* inline foo */
|
||||
#ifndef __cplusplus
|
||||
#ifdef __GNUC__
|
||||
#define inline __inline
|
||||
#else
|
||||
#define inline
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Handle new and old "dead" routine prototypes
|
||||
*
|
||||
* For example:
|
||||
*
|
||||
* __dead void foo(void) __attribute__((volatile));
|
||||
*
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#ifndef __dead
|
||||
#define __dead volatile
|
||||
#endif
|
||||
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
#ifndef __dead
|
||||
#define __dead
|
||||
#endif
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
146
Win32/Include/addrinfo.h
Normal file
146
Win32/Include/addrinfo.h
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the project nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: addrinfo.h,v 1.1 2002-08-01 08:33:05 risso Exp $ */
|
||||
|
||||
#ifndef HAVE_ADDRINFO
|
||||
|
||||
/*
|
||||
* Error return codes from getaddrinfo()
|
||||
*/
|
||||
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
|
||||
#define EAI_AGAIN 2 /* temporary failure in name resolution */
|
||||
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
|
||||
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
|
||||
#define EAI_FAMILY 5 /* ai_family not supported */
|
||||
#define EAI_MEMORY 6 /* memory allocation failure */
|
||||
#define EAI_NODATA 7 /* no address associated with hostname */
|
||||
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
|
||||
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
|
||||
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
|
||||
#define EAI_SYSTEM 11 /* system error returned in errno */
|
||||
#define EAI_BADHINTS 12
|
||||
#define EAI_PROTOCOL 13
|
||||
#define EAI_MAX 14
|
||||
|
||||
/* internal error */
|
||||
#define NETDB_INTERNAL -1 /* see errno */
|
||||
|
||||
/*
|
||||
* Flag values for getaddrinfo()
|
||||
*/
|
||||
#define AI_PASSIVE 0x00000001 /* get address to use bind() */
|
||||
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */
|
||||
#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */
|
||||
/* valid flags for addrinfo */
|
||||
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
|
||||
|
||||
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
|
||||
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
|
||||
#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
|
||||
#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
|
||||
/* special recommended flags for getipnodebyname */
|
||||
#define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
|
||||
|
||||
struct addrinfo {
|
||||
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
|
||||
int ai_family; /* PF_xxx */
|
||||
int ai_socktype; /* SOCK_xxx */
|
||||
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
|
||||
size_t ai_addrlen; /* length of ai_addr */
|
||||
char *ai_canonname; /* canonical name for hostname */
|
||||
struct sockaddr *ai_addr; /* binary address */
|
||||
struct addrinfo *ai_next; /* next structure in linked list */
|
||||
};
|
||||
|
||||
extern void freeaddrinfo (struct addrinfo *);
|
||||
extern void freehostent (struct hostent *);
|
||||
extern char *gai_strerror (int);
|
||||
extern int getaddrinfo (const char *, const char *,
|
||||
const struct addrinfo *, struct addrinfo **);
|
||||
extern int getnameinfo (const struct sockaddr *, size_t, char *,
|
||||
size_t, char *, size_t, int);
|
||||
extern struct hostent *getipnodebyaddr (const void *, size_t, int, int *);
|
||||
extern struct hostent *getipnodebyname (const char *, int, int, int *);
|
||||
extern int inet_pton (int, const char *, void *);
|
||||
extern const char *inet_ntop (int, const void *, char *, size_t);
|
||||
#else
|
||||
|
||||
#ifndef EAI_BADHINTS
|
||||
#define EAI_BADHINTS 12
|
||||
#endif
|
||||
|
||||
#ifndef EAI_PROTOCOL
|
||||
#define EAI_PROTOCOL 13
|
||||
#endif
|
||||
|
||||
#ifndef EAI_MAX
|
||||
#define EAI_MAX 14
|
||||
#endif
|
||||
|
||||
#ifndef NETDB_INTERNAL
|
||||
#define NETDB_INTERNAL -1 /* see errno */
|
||||
#endif
|
||||
|
||||
#ifndef AI_MASK
|
||||
/* valid flags for addrinfo */
|
||||
#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
|
||||
#endif
|
||||
|
||||
#endif /* HAVE_ADDRINFO */
|
||||
|
||||
/*
|
||||
* Constants for getnameinfo()
|
||||
*/
|
||||
#ifndef NI_MAXHOST
|
||||
#define NI_MAXHOST 1025
|
||||
#endif
|
||||
#ifndef NI_MAXSERV
|
||||
#define NI_MAXSERV 32
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Flag values for getnameinfo()
|
||||
*/
|
||||
#ifndef NI_NOFQDN
|
||||
#define NI_NOFQDN 0x00000001
|
||||
#endif
|
||||
#ifndef NI_NUMERICHOST
|
||||
#define NI_NUMERICHOST 0x00000002
|
||||
#endif
|
||||
#ifndef NI_NAMEREQD
|
||||
#define NI_NAMEREQD 0x00000004
|
||||
#endif
|
||||
#ifndef NI_NUMERICSERV
|
||||
#define NI_NUMERICSERV 0x00000008
|
||||
#endif
|
||||
#ifndef NI_DGRAM
|
||||
#define NI_DGRAM 0x00000010
|
||||
#endif
|
||||
|
||||
349
Win32/Include/arpa/nameser.h
Normal file
349
Win32/Include/arpa/nameser.h
Normal file
|
|
@ -0,0 +1,349 @@
|
|||
/*
|
||||
* ++Copyright++ 1983, 1989, 1993
|
||||
* -
|
||||
* Copyright (c) 1983, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* -
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
* -
|
||||
* --Copyright--
|
||||
*/
|
||||
|
||||
/*
|
||||
* @(#)nameser.h 8.1 (Berkeley) 6/2/93
|
||||
* nameser.h,v 1.2 1995/05/06 14:23:54 hjl Exp
|
||||
*/
|
||||
|
||||
#ifndef _NAMESER_H_
|
||||
#define _NAMESER_H_
|
||||
|
||||
#ifndef WIN32
|
||||
#include <sys/param.h>
|
||||
#if (!defined(BSD)) || (BSD < 199306)
|
||||
# include <sys/bitypes.h>
|
||||
#else
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
#else
|
||||
#include <pcap-stdinc.h>
|
||||
#define __LITTLE_ENDIAN 1
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
#endif
|
||||
|
||||
/*
|
||||
* revision information. this is the release date in YYYYMMDD format.
|
||||
* it can change every day so the right thing to do with it is use it
|
||||
* in preprocessor commands such as "#if (__BIND > 19931104)". do not
|
||||
* compare for equality; rather, use it to determine whether your resolver
|
||||
* is new enough to contain a certain feature.
|
||||
*/
|
||||
|
||||
#define __BIND 19940417 /* interface version stamp */
|
||||
|
||||
/*
|
||||
* Define constants based on rfc883
|
||||
*/
|
||||
#define PACKETSZ 512 /* maximum packet size */
|
||||
#define MAXDNAME 256 /* maximum domain name */
|
||||
#define MAXCDNAME 255 /* maximum compressed domain name */
|
||||
#define MAXLABEL 63 /* maximum length of domain label */
|
||||
#define HFIXEDSZ 12 /* #/bytes of fixed data in header */
|
||||
#define QFIXEDSZ 4 /* #/bytes of fixed data in query */
|
||||
#define RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
|
||||
#define INT32SZ 4 /* for systems without 32-bit ints */
|
||||
#define INT16SZ 2 /* for systems without 16-bit ints */
|
||||
#define INADDRSZ 4 /* for sizeof(struct inaddr) != 4 */
|
||||
|
||||
/*
|
||||
* Internet nameserver port number
|
||||
*/
|
||||
#define NAMESERVER_PORT 53
|
||||
|
||||
/*
|
||||
* Currently defined opcodes
|
||||
*/
|
||||
#define QUERY 0x0 /* standard query */
|
||||
#define IQUERY 0x1 /* inverse query */
|
||||
#define STATUS 0x2 /* nameserver status query */
|
||||
/*#define xxx 0x3 *//* 0x3 reserved */
|
||||
#define NS_NOTIFY_OP 0x4 /* notify secondary of SOA change */
|
||||
#ifdef ALLOW_UPDATES
|
||||
/* non standard - supports ALLOW_UPDATES stuff from Mike Schwartz */
|
||||
# define UPDATEA 0x9 /* add resource record */
|
||||
# define UPDATED 0xa /* delete a specific resource record */
|
||||
# define UPDATEDA 0xb /* delete all named resource record */
|
||||
# define UPDATEM 0xc /* modify a specific resource record */
|
||||
# define UPDATEMA 0xd /* modify all named resource record */
|
||||
# define ZONEINIT 0xe /* initial zone transfer */
|
||||
# define ZONEREF 0xf /* incremental zone referesh */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Currently defined response codes
|
||||
*/
|
||||
#ifdef HAVE_ADDRINFO
|
||||
#define NOERROR 0 /* no error */
|
||||
#endif /* HAVE_ADDRINFO */
|
||||
#define FORMERR 1 /* format error */
|
||||
#define SERVFAIL 2 /* server failure */
|
||||
#define NXDOMAIN 3 /* non existent domain */
|
||||
#define NOTIMP 4 /* not implemented */
|
||||
#define REFUSED 5 /* query refused */
|
||||
#ifdef ALLOW_UPDATES
|
||||
/* non standard */
|
||||
# define NOCHANGE 0xf /* update failed to change db */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Type values for resources and queries
|
||||
*/
|
||||
#define T_A 1 /* host address */
|
||||
#define T_NS 2 /* authoritative server */
|
||||
#define T_MD 3 /* mail destination */
|
||||
#define T_MF 4 /* mail forwarder */
|
||||
#define T_CNAME 5 /* canonical name */
|
||||
#define T_SOA 6 /* start of authority zone */
|
||||
#define T_MB 7 /* mailbox domain name */
|
||||
#define T_MG 8 /* mail group member */
|
||||
#define T_MR 9 /* mail rename name */
|
||||
#define T_NULL 10 /* null resource record */
|
||||
#define T_WKS 11 /* well known service */
|
||||
#define T_PTR 12 /* domain name pointer */
|
||||
#define T_HINFO 13 /* host information */
|
||||
#define T_MINFO 14 /* mailbox information */
|
||||
#define T_MX 15 /* mail routing information */
|
||||
#define T_TXT 16 /* text strings */
|
||||
#define T_RP 17 /* responsible person */
|
||||
#define T_AFSDB 18 /* AFS cell database */
|
||||
#define T_X25 19 /* X_25 calling address */
|
||||
#define T_ISDN 20 /* ISDN calling address */
|
||||
#define T_RT 21 /* router */
|
||||
#define T_NSAP 22 /* NSAP address */
|
||||
#define T_NSAP_PTR 23 /* reverse NSAP lookup (deprecated) */
|
||||
#define T_SIG 24 /* security signature */
|
||||
#define T_KEY 25 /* security key */
|
||||
#define T_PX 26 /* X.400 mail mapping */
|
||||
#define T_GPOS 27 /* geographical position (withdrawn) */
|
||||
#define T_AAAA 28 /* IP6 Address */
|
||||
#define T_LOC 29 /* Location Information */
|
||||
/* non standard */
|
||||
#define T_UINFO 100 /* user (finger) information */
|
||||
#define T_UID 101 /* user ID */
|
||||
#define T_GID 102 /* group ID */
|
||||
#define T_UNSPEC 103 /* Unspecified format (binary data) */
|
||||
/* Query type values which do not appear in resource records */
|
||||
#define T_AXFR 252 /* transfer zone of authority */
|
||||
#define T_MAILB 253 /* transfer mailbox records */
|
||||
#define T_MAILA 254 /* transfer mail agent records */
|
||||
#define T_ANY 255 /* wildcard match */
|
||||
|
||||
/*
|
||||
* Values for class field
|
||||
*/
|
||||
|
||||
#define C_IN 1 /* the arpa internet */
|
||||
#define C_CHAOS 3 /* for chaos net (MIT) */
|
||||
#define C_HS 4 /* for Hesiod name server (MIT) (XXX) */
|
||||
/* Query class values which do not appear in resource records */
|
||||
#define C_ANY 255 /* wildcard match */
|
||||
|
||||
/*
|
||||
* Status return codes for T_UNSPEC conversion routines
|
||||
*/
|
||||
#define CONV_SUCCESS 0
|
||||
#define CONV_OVERFLOW (-1)
|
||||
#define CONV_BADFMT (-2)
|
||||
#define CONV_BADCKSUM (-3)
|
||||
#define CONV_BADBUFLEN (-4)
|
||||
|
||||
#ifndef __BYTE_ORDER
|
||||
#if (BSD >= 199103)
|
||||
# include <machine/endian.h>
|
||||
#else
|
||||
#ifdef linux
|
||||
# include <endian.h>
|
||||
#else
|
||||
#define __LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */
|
||||
#define __BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */
|
||||
#define __PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/
|
||||
|
||||
#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
|
||||
defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
|
||||
defined(__alpha__) || defined(__alpha)
|
||||
#define __BYTE_ORDER __LITTLE_ENDIAN
|
||||
#endif
|
||||
|
||||
#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
|
||||
defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
|
||||
defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
|
||||
defined(apollo) || defined(__convex__) || defined(_CRAY) || \
|
||||
defined(__hppa) || defined(__hp9000) || \
|
||||
defined(__hp9000s300) || defined(__hp9000s700) || \
|
||||
defined (BIT_ZERO_ON_LEFT) || defined(m68k)
|
||||
#define __BYTE_ORDER __BIG_ENDIAN
|
||||
#endif
|
||||
#endif /* linux */
|
||||
#endif /* BSD */
|
||||
#endif /* __BYTE_ORDER */
|
||||
|
||||
#if !defined(__BYTE_ORDER) || \
|
||||
(__BYTE_ORDER != __BIG_ENDIAN && __BYTE_ORDER != __LITTLE_ENDIAN && \
|
||||
__BYTE_ORDER != __PDP_ENDIAN)
|
||||
/* you must determine what the correct bit order is for
|
||||
* your compiler - the next line is an intentional error
|
||||
* which will force your compiles to bomb until you fix
|
||||
* the above macros.
|
||||
*/
|
||||
error "Undefined or invalid __BYTE_ORDER";
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure for query header. The order of the fields is machine- and
|
||||
* compiler-dependent, depending on the byte/bit order and the layout
|
||||
* of bit fields. We use bit fields only in int variables, as this
|
||||
* is all ANSI requires. This requires a somewhat confusing rearrangement.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
unsigned id :16; /* query identification number */
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
/* fields in third byte */
|
||||
unsigned qr: 1; /* response flag */
|
||||
unsigned opcode: 4; /* purpose of message */
|
||||
unsigned aa: 1; /* authoritive answer */
|
||||
unsigned tc: 1; /* truncated message */
|
||||
unsigned rd: 1; /* recursion desired */
|
||||
/* fields in fourth byte */
|
||||
unsigned ra: 1; /* recursion available */
|
||||
unsigned pr: 1; /* primary server req'd (!standard) */
|
||||
unsigned unused :2; /* unused bits (MBZ as of 4.9.3a3) */
|
||||
unsigned rcode :4; /* response code */
|
||||
#endif
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN || __BYTE_ORDER == __PDP_ENDIAN
|
||||
/* fields in third byte */
|
||||
unsigned rd :1; /* recursion desired */
|
||||
unsigned tc :1; /* truncated message */
|
||||
unsigned aa :1; /* authoritive answer */
|
||||
unsigned opcode :4; /* purpose of message */
|
||||
unsigned qr :1; /* response flag */
|
||||
/* fields in fourth byte */
|
||||
unsigned rcode :4; /* response code */
|
||||
unsigned unused :2; /* unused bits (MBZ as of 4.9.3a3) */
|
||||
unsigned pr :1; /* primary server req'd (!standard) */
|
||||
unsigned ra :1; /* recursion available */
|
||||
#endif
|
||||
/* remaining bytes */
|
||||
unsigned qdcount :16; /* number of question entries */
|
||||
unsigned ancount :16; /* number of answer entries */
|
||||
unsigned nscount :16; /* number of authority entries */
|
||||
unsigned arcount :16; /* number of resource entries */
|
||||
} HEADER;
|
||||
|
||||
/*
|
||||
* Defines for handling compressed domain names
|
||||
*/
|
||||
#define INDIR_MASK 0xc0
|
||||
|
||||
/*
|
||||
* Structure for passing resource records around.
|
||||
*/
|
||||
struct rrec {
|
||||
int16_t r_zone; /* zone number */
|
||||
int16_t r_class; /* class number */
|
||||
int16_t r_type; /* type number */
|
||||
u_int32_t r_ttl; /* time to live */
|
||||
int r_size; /* size of data area */
|
||||
char *r_data; /* pointer to data */
|
||||
};
|
||||
|
||||
//extern u_int16_t _getshort __P((const u_char *));
|
||||
//extern u_int32_t _getlong __P((const u_char *));
|
||||
|
||||
/*
|
||||
* Inline versions of get/put short/long. Pointer is advanced.
|
||||
*
|
||||
* These macros demonstrate the property of C whereby it can be
|
||||
* portable or it can be elegant but rarely both.
|
||||
*/
|
||||
#define GETSHORT(s, cp) { \
|
||||
register u_char *t_cp = (u_char *)(cp); \
|
||||
(s) = ((u_int16_t)t_cp[0] << 8) \
|
||||
| ((u_int16_t)t_cp[1]) \
|
||||
; \
|
||||
(cp) += INT16SZ; \
|
||||
}
|
||||
|
||||
#define GETLONG(l, cp) { \
|
||||
register u_char *t_cp = (u_char *)(cp); \
|
||||
(l) = ((u_int32_t)t_cp[0] << 24) \
|
||||
| ((u_int32_t)t_cp[1] << 16) \
|
||||
| ((u_int32_t)t_cp[2] << 8) \
|
||||
| ((u_int32_t)t_cp[3]) \
|
||||
; \
|
||||
(cp) += INT32SZ; \
|
||||
}
|
||||
|
||||
#define PUTSHORT(s, cp) { \
|
||||
register u_int16_t t_s = (u_int16_t)(s); \
|
||||
register u_char *t_cp = (u_char *)(cp); \
|
||||
*t_cp++ = t_s >> 8; \
|
||||
*t_cp = t_s; \
|
||||
(cp) += INT16SZ; \
|
||||
}
|
||||
|
||||
#define PUTLONG(l, cp) { \
|
||||
register u_int32_t t_l = (u_int32_t)(l); \
|
||||
register u_char *t_cp = (u_char *)(cp); \
|
||||
*t_cp++ = t_l >> 24; \
|
||||
*t_cp++ = t_l >> 16; \
|
||||
*t_cp++ = t_l >> 8; \
|
||||
*t_cp = t_l; \
|
||||
(cp) += INT32SZ; \
|
||||
}
|
||||
|
||||
#endif /* !_NAMESER_H_ */
|
||||
139
Win32/Include/bittypes.h
Normal file
139
Win32/Include/bittypes.h
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* Copyright (C) 1999 WIDE Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the project nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef _BITTYPES_H
|
||||
#define _BITTYPES_H
|
||||
|
||||
#ifndef HAVE_U_INT8_T
|
||||
|
||||
#if SIZEOF_CHAR == 1
|
||||
typedef unsigned char u_int8_t;
|
||||
typedef signed char int8_t;
|
||||
#elif SIZEOF_INT == 1
|
||||
typedef unsigned int u_int8_t;
|
||||
typedef signed int int8_t;
|
||||
#else /* XXX */
|
||||
#error "there's no appropriate type for u_int8_t"
|
||||
#endif
|
||||
#define HAVE_U_INT8_T 1
|
||||
#define HAVE_INT8_T 1
|
||||
|
||||
#endif /* HAVE_U_INT8_T */
|
||||
|
||||
#ifndef HAVE_U_INT16_T
|
||||
|
||||
#if SIZEOF_SHORT == 2
|
||||
typedef unsigned short u_int16_t;
|
||||
typedef signed short int16_t;
|
||||
#elif SIZEOF_INT == 2
|
||||
typedef unsigned int u_int16_t;
|
||||
typedef signed int int16_t;
|
||||
#elif SIZEOF_CHAR == 2
|
||||
typedef unsigned char u_int16_t;
|
||||
typedef signed char int16_t;
|
||||
#else /* XXX */
|
||||
#error "there's no appropriate type for u_int16_t"
|
||||
#endif
|
||||
#define HAVE_U_INT16_T 1
|
||||
#define HAVE_INT16_T 1
|
||||
|
||||
#endif /* HAVE_U_INT16_T */
|
||||
|
||||
#ifndef HAVE_U_INT32_T
|
||||
|
||||
#if SIZEOF_INT == 4
|
||||
typedef unsigned int u_int32_t;
|
||||
typedef signed int int32_t;
|
||||
#elif SIZEOF_LONG == 4
|
||||
typedef unsigned long u_int32_t;
|
||||
typedef signed long int32_t;
|
||||
#elif SIZEOF_SHORT == 4
|
||||
typedef unsigned short u_int32_t;
|
||||
typedef signed short int32_t;
|
||||
#else /* XXX */
|
||||
#error "there's no appropriate type for u_int32_t"
|
||||
#endif
|
||||
#define HAVE_U_INT32_T 1
|
||||
#define HAVE_INT32_T 1
|
||||
|
||||
#endif /* HAVE_U_INT32_T */
|
||||
|
||||
#ifndef HAVE_U_INT64_T
|
||||
#if SIZEOF_LONG_LONG == 8
|
||||
typedef unsigned long long u_int64_t;
|
||||
typedef long long int64_t;
|
||||
#elif defined(_MSC_EXTENSIONS)
|
||||
typedef unsigned _int64 u_int64_t;
|
||||
typedef _int64 int64_t;
|
||||
#elif SIZEOF_INT == 8
|
||||
typedef unsigned int u_int64_t;
|
||||
#elif SIZEOF_LONG == 8
|
||||
typedef unsigned long u_int64_t;
|
||||
#elif SIZEOF_SHORT == 8
|
||||
typedef unsigned short u_int64_t;
|
||||
#else /* XXX */
|
||||
#error "there's no appropriate type for u_int64_t"
|
||||
#endif
|
||||
#define HAVE_U_INT64_T 1
|
||||
#define HAVE_INT64_T 1
|
||||
|
||||
#endif /* HAVE_U_INT64_T */
|
||||
|
||||
#ifndef PRId64
|
||||
#ifdef _MSC_EXTENSIONS
|
||||
#define PRId64 "I64d"
|
||||
#else /* _MSC_EXTENSIONS */
|
||||
#define PRId64 "lld"
|
||||
#endif /* _MSC_EXTENSIONS */
|
||||
#endif /* PRId64 */
|
||||
|
||||
#ifndef PRIo64
|
||||
#ifdef _MSC_EXTENSIONS
|
||||
#define PRIo64 "I64o"
|
||||
#else /* _MSC_EXTENSIONS */
|
||||
#define PRIo64 "llo"
|
||||
#endif /* _MSC_EXTENSIONS */
|
||||
#endif /* PRIo64 */
|
||||
|
||||
#ifndef PRIx64
|
||||
#ifdef _MSC_EXTENSIONS
|
||||
#define PRIx64 "I64x"
|
||||
#else /* _MSC_EXTENSIONS */
|
||||
#define PRIx64 "llx"
|
||||
#endif /* _MSC_EXTENSIONS */
|
||||
#endif /* PRIx64 */
|
||||
|
||||
#ifndef PRIu64
|
||||
#ifdef _MSC_EXTENSIONS
|
||||
#define PRIu64 "I64u"
|
||||
#else /* _MSC_EXTENSIONS */
|
||||
#define PRIu64 "llu"
|
||||
#endif /* _MSC_EXTENSIONS */
|
||||
#endif /* PRIu64 */
|
||||
|
||||
#endif /* _BITTYPES_H */
|
||||
37
Win32/Include/cdecl_ext.h
Normal file
37
Win32/Include/cdecl_ext.h
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (C) 1999 WIDE Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the project nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
#ifndef HAVE_PORTABLE_PROTOTYPE
|
||||
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
#define __P(protos) protos /* full-blown ANSI C */
|
||||
#else
|
||||
#define __P(protos) () /* traditional C preprocessor */
|
||||
#endif
|
||||
|
||||
#endif /* !HAVE_PORTABLE_PROTOTYPE */
|
||||
67
Win32/Include/inetprivate.h
Normal file
67
Win32/Include/inetprivate.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
* Copyright (c) 1999 - 2003
|
||||
* NetGroup, Politecnico di Torino (Italy)
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Politecnico di Torino nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <net/netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <arpa/nameser.h>
|
||||
|
||||
extern void _sethtent(int f);
|
||||
extern void _endhtent(void);
|
||||
extern struct hostent *_gethtent(void);
|
||||
extern struct hostent *_gethtbyname(const char *name);
|
||||
extern struct hostent *_gethtbyaddr(const char *addr, int len,
|
||||
int type);
|
||||
extern int _validuser(FILE *hostf, const char *rhost,
|
||||
const char *luser, const char *ruser, int baselen);
|
||||
extern int _checkhost(const char *rhost, const char *lhost, int len);
|
||||
#if 0
|
||||
extern void putlong(u_long l, u_char *msgp);
|
||||
extern void putshort(u_short l, u_char *msgp);
|
||||
extern u_int32_t _getlong(register const u_char *msgp);
|
||||
extern u_int16_t _getshort(register const u_char *msgp);
|
||||
extern void p_query(char *msg);
|
||||
extern void fp_query(char *msg, FILE *file);
|
||||
extern char *p_cdname(char *cp, char *msg, FILE *file);
|
||||
extern char *p_rr(char *cp, char *msg, FILE *file);
|
||||
extern char *p_type(int type);
|
||||
extern char * p_class(int class);
|
||||
extern char *p_time(u_long value);
|
||||
#endif
|
||||
extern char * hostalias(const char *name);
|
||||
extern void sethostfile(char *name);
|
||||
extern void _res_close (void);
|
||||
extern void ruserpass(const char *host, char **aname, char **apass);
|
||||
163
Win32/Include/ip6_misc.h
Normal file
163
Win32/Include/ip6_misc.h
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* Copyright (c) 1993, 1994, 1997
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that: (1) source code distributions
|
||||
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||
* distributions including binary code include the above copyright notice and
|
||||
* this paragraph in its entirety in the documentation or other materials
|
||||
* provided with the distribution, and (3) all advertising materials mentioning
|
||||
* features or use of this software display the following acknowledgement:
|
||||
* ``This product includes software developed by the University of California,
|
||||
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||
* the University nor the names of its contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior
|
||||
* written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows
|
||||
*/
|
||||
|
||||
#include <winsock2.h>
|
||||
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
#ifndef __MINGW32__
|
||||
#define IN_MULTICAST(a) IN_CLASSD(a)
|
||||
#endif
|
||||
|
||||
#define IN_EXPERIMENTAL(a) ((((u_int32_t) (a)) & 0xf0000000) == 0xf0000000)
|
||||
|
||||
#define IN_LOOPBACKNET 127
|
||||
|
||||
#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
|
||||
/* IPv6 address */
|
||||
struct in6_addr
|
||||
{
|
||||
union
|
||||
{
|
||||
u_int8_t u6_addr8[16];
|
||||
u_int16_t u6_addr16[8];
|
||||
u_int32_t u6_addr32[4];
|
||||
} in6_u;
|
||||
#define s6_addr in6_u.u6_addr8
|
||||
#define s6_addr16 in6_u.u6_addr16
|
||||
#define s6_addr32 in6_u.u6_addr32
|
||||
#define s6_addr64 in6_u.u6_addr64
|
||||
};
|
||||
|
||||
#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
|
||||
#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }
|
||||
#endif /* __MINGW32__ */
|
||||
|
||||
|
||||
#if (defined _MSC_VER) || (defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF))
|
||||
typedef unsigned short sa_family_t;
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
|
||||
|
||||
#define __SOCKADDR_COMMON(sa_prefix) \
|
||||
sa_family_t sa_prefix##family
|
||||
|
||||
/* Ditto, for IPv6. */
|
||||
struct sockaddr_in6
|
||||
{
|
||||
__SOCKADDR_COMMON (sin6_);
|
||||
u_int16_t sin6_port; /* Transport layer port # */
|
||||
u_int32_t sin6_flowinfo; /* IPv6 flow information */
|
||||
struct in6_addr sin6_addr; /* IPv6 address */
|
||||
};
|
||||
|
||||
#define IN6_IS_ADDR_V4MAPPED(a) \
|
||||
((((u_int32_t *) (a))[0] == 0) && (((u_int32_t *) (a))[1] == 0) && \
|
||||
(((u_int32_t *) (a))[2] == htonl (0xffff)))
|
||||
|
||||
#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
|
||||
|
||||
#define IN6_IS_ADDR_LINKLOCAL(a) \
|
||||
((((u_int32_t *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
|
||||
|
||||
#define IN6_IS_ADDR_LOOPBACK(a) \
|
||||
(((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \
|
||||
((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))
|
||||
#endif /* __MINGW32__ */
|
||||
|
||||
#define ip6_vfc ip6_ctlun.ip6_un2_vfc
|
||||
#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
|
||||
#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
|
||||
#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt
|
||||
#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
|
||||
#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
|
||||
|
||||
#define nd_rd_type nd_rd_hdr.icmp6_type
|
||||
#define nd_rd_code nd_rd_hdr.icmp6_code
|
||||
#define nd_rd_cksum nd_rd_hdr.icmp6_cksum
|
||||
#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0]
|
||||
|
||||
/*
|
||||
* IPV6 extension headers
|
||||
*/
|
||||
#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */
|
||||
#define IPPROTO_IPV6 41 /* IPv6 header. */
|
||||
#define IPPROTO_ROUTING 43 /* IPv6 routing header */
|
||||
#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */
|
||||
#define IPPROTO_ESP 50 /* encapsulating security payload */
|
||||
#define IPPROTO_AH 51 /* authentication header */
|
||||
#define IPPROTO_ICMPV6 58 /* ICMPv6 */
|
||||
#define IPPROTO_NONE 59 /* IPv6 no next header */
|
||||
#define IPPROTO_DSTOPTS 60 /* IPv6 destination options */
|
||||
#define IPPROTO_PIM 103 /* Protocol Independent Multicast. */
|
||||
|
||||
#define IPV6_RTHDR_TYPE_0 0
|
||||
|
||||
/* Option types and related macros */
|
||||
#define IP6OPT_PAD1 0x00 /* 00 0 00000 */
|
||||
#define IP6OPT_PADN 0x01 /* 00 0 00001 */
|
||||
#define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */
|
||||
#define IP6OPT_JUMBO_LEN 6
|
||||
#define IP6OPT_ROUTER_ALERT 0x05 /* 00 0 00101 */
|
||||
|
||||
#define IP6OPT_RTALERT_LEN 4
|
||||
#define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */
|
||||
#define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */
|
||||
#define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */
|
||||
#define IP6OPT_MINLEN 2
|
||||
|
||||
#define IP6OPT_BINDING_UPDATE 0xc6 /* 11 0 00110 */
|
||||
#define IP6OPT_BINDING_ACK 0x07 /* 00 0 00111 */
|
||||
#define IP6OPT_BINDING_REQ 0x08 /* 00 0 01000 */
|
||||
#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */
|
||||
#define IP6OPT_EID 0x8a /* 10 0 01010 */
|
||||
|
||||
#define IP6OPT_TYPE(o) ((o) & 0xC0)
|
||||
#define IP6OPT_TYPE_SKIP 0x00
|
||||
#define IP6OPT_TYPE_DISCARD 0x40
|
||||
#define IP6OPT_TYPE_FORCEICMP 0x80
|
||||
#define IP6OPT_TYPE_ICMP 0xC0
|
||||
|
||||
#define IP6OPT_MUTABLE 0x20
|
||||
|
||||
|
||||
#if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
|
||||
#ifndef EAI_ADDRFAMILY
|
||||
struct addrinfo {
|
||||
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
|
||||
int ai_family; /* PF_xxx */
|
||||
int ai_socktype; /* SOCK_xxx */
|
||||
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
|
||||
size_t ai_addrlen; /* length of ai_addr */
|
||||
char *ai_canonname; /* canonical name for hostname */
|
||||
struct sockaddr *ai_addr; /* binary address */
|
||||
struct addrinfo *ai_next; /* next structure in linked list */
|
||||
};
|
||||
#endif
|
||||
#endif /* __MINGW32__ */
|
||||
230
Win32/Include/net/if.h
Normal file
230
Win32/Include/net/if.h
Normal file
|
|
@ -0,0 +1,230 @@
|
|||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)if.h 8.1 (Berkeley) 6/10/93
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _NET_IF_H_
|
||||
#define _NET_IF_H_
|
||||
|
||||
/*
|
||||
* <net/if.h> does not depend on <sys/time.h> on most other systems. This
|
||||
* helps userland compatability. (struct timeval ifi_lastchange)
|
||||
*/
|
||||
#ifndef KERNEL
|
||||
#include <pcap-stdinc.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure describing information about an interface
|
||||
* which may be of interest to management entities.
|
||||
*/
|
||||
struct if_data {
|
||||
/* generic interface information */
|
||||
u_char ifi_type; /* ethernet, tokenring, etc */
|
||||
u_char ifi_physical; /* e.g., AUI, Thinnet, 10base-T, etc */
|
||||
u_char ifi_addrlen; /* media address length */
|
||||
u_char ifi_hdrlen; /* media header length */
|
||||
u_char ifi_recvquota; /* polling quota for receive intrs */
|
||||
u_char ifi_xmitquota; /* polling quota for xmit intrs */
|
||||
u_long ifi_mtu; /* maximum transmission unit */
|
||||
u_long ifi_metric; /* routing metric (external only) */
|
||||
u_long ifi_baudrate; /* linespeed */
|
||||
/* volatile statistics */
|
||||
u_long ifi_ipackets; /* packets received on interface */
|
||||
u_long ifi_ierrors; /* input errors on interface */
|
||||
u_long ifi_opackets; /* packets sent on interface */
|
||||
u_long ifi_oerrors; /* output errors on interface */
|
||||
u_long ifi_collisions; /* collisions on csma interfaces */
|
||||
u_long ifi_ibytes; /* total number of octets received */
|
||||
u_long ifi_obytes; /* total number of octets sent */
|
||||
u_long ifi_imcasts; /* packets received via multicast */
|
||||
u_long ifi_omcasts; /* packets sent via multicast */
|
||||
u_long ifi_iqdrops; /* dropped on input, this interface */
|
||||
u_long ifi_noproto; /* destined for unsupported protocol */
|
||||
u_long ifi_recvtiming; /* usec spent receiving when timing */
|
||||
u_long ifi_xmittiming; /* usec spent xmitting when timing */
|
||||
struct timeval ifi_lastchange; /* time of last administrative change */
|
||||
};
|
||||
|
||||
/* ws2tcpip.h has interface flags: IFF_* */
|
||||
#if 0
|
||||
#define IFF_UP 0x1 /* interface is up */
|
||||
#define IFF_BROADCAST 0x2 /* broadcast address valid */
|
||||
#define IFF_DEBUG 0x4 /* turn on debugging */
|
||||
#define IFF_LOOPBACK 0x8 /* is a loopback net */
|
||||
#define IFF_POINTOPOINT 0x10 /* interface is point-to-point link */
|
||||
/*#define IFF_NOTRAILERS 0x20 * obsolete: avoid use of trailers */
|
||||
#define IFF_RUNNING 0x40 /* resources allocated */
|
||||
#define IFF_NOARP 0x80 /* no address resolution protocol */
|
||||
#define IFF_PROMISC 0x100 /* receive all packets */
|
||||
#define IFF_ALLMULTI 0x200 /* receive all multicast packets */
|
||||
#define IFF_OACTIVE 0x400 /* transmission in progress */
|
||||
#define IFF_SIMPLEX 0x800 /* can't hear own transmissions */
|
||||
#define IFF_LINK0 0x1000 /* per link layer defined bit */
|
||||
#define IFF_LINK1 0x2000 /* per link layer defined bit */
|
||||
#define IFF_LINK2 0x4000 /* per link layer defined bit */
|
||||
#define IFF_ALTPHYS IFF_LINK2 /* use alternate physical connection */
|
||||
#define IFF_MULTICAST 0x8000 /* supports multicast */
|
||||
#endif /* 0 */
|
||||
|
||||
/* flags set internally only: */
|
||||
#define IFF_CANTCHANGE \
|
||||
(IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
|
||||
IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI)
|
||||
|
||||
#define IFQ_MAXLEN 50
|
||||
#define IFNET_SLOWHZ 1 /* granularity is 1 second */
|
||||
|
||||
/*
|
||||
* Message format for use in obtaining information about interfaces
|
||||
* from getkerninfo and the routing socket
|
||||
*/
|
||||
struct if_msghdr {
|
||||
u_short ifm_msglen; /* to skip over non-understood messages */
|
||||
u_char ifm_version; /* future binary compatability */
|
||||
u_char ifm_type; /* message type */
|
||||
int ifm_addrs; /* like rtm_addrs */
|
||||
int ifm_flags; /* value of if_flags */
|
||||
u_short ifm_index; /* index for associated ifp */
|
||||
struct if_data ifm_data;/* statistics and other data about if */
|
||||
};
|
||||
|
||||
/*
|
||||
* Message format for use in obtaining information about interface addresses
|
||||
* from getkerninfo and the routing socket
|
||||
*/
|
||||
struct ifa_msghdr {
|
||||
u_short ifam_msglen; /* to skip over non-understood messages */
|
||||
u_char ifam_version; /* future binary compatability */
|
||||
u_char ifam_type; /* message type */
|
||||
int ifam_addrs; /* like rtm_addrs */
|
||||
int ifam_flags; /* value of ifa_flags */
|
||||
u_short ifam_index; /* index for associated ifp */
|
||||
int ifam_metric; /* value of ifa_metric */
|
||||
};
|
||||
|
||||
/*
|
||||
* Message format for use in obtaining information about multicast addresses
|
||||
* from the routing socket
|
||||
*/
|
||||
struct ifma_msghdr {
|
||||
u_short ifmam_msglen; /* to skip over non-understood messages */
|
||||
u_char ifmam_version; /* future binary compatability */
|
||||
u_char ifmam_type; /* message type */
|
||||
int ifmam_addrs; /* like rtm_addrs */
|
||||
int ifmam_flags; /* value of ifa_flags */
|
||||
u_short ifmam_index; /* index for associated ifp */
|
||||
};
|
||||
|
||||
/*
|
||||
* Interface request structure used for socket
|
||||
* ioctl's. All interface ioctl's must have parameter
|
||||
* definitions which begin with ifr_name. The
|
||||
* remainder may be interface specific.
|
||||
*/
|
||||
struct ifreq {
|
||||
#define IFNAMSIZ 16
|
||||
char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
||||
union {
|
||||
struct sockaddr ifru_addr;
|
||||
struct sockaddr ifru_dstaddr;
|
||||
struct sockaddr ifru_broadaddr;
|
||||
short ifru_flags;
|
||||
int ifru_metric;
|
||||
int ifru_mtu;
|
||||
int ifru_phys;
|
||||
int ifru_media;
|
||||
caddr_t ifru_data;
|
||||
} ifr_ifru;
|
||||
#define ifr_addr ifr_ifru.ifru_addr /* address */
|
||||
#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */
|
||||
#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
|
||||
#define ifr_flags ifr_ifru.ifru_flags /* flags */
|
||||
#define ifr_metric ifr_ifru.ifru_metric /* metric */
|
||||
#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
|
||||
#define ifr_phys ifr_ifru.ifru_phys /* physical wire */
|
||||
#define ifr_media ifr_ifru.ifru_media /* physical media */
|
||||
#define ifr_data ifr_ifru.ifru_data /* for use by interface */
|
||||
};
|
||||
|
||||
#define _SIZEOF_ADDR_IFREQ(ifr) \
|
||||
((ifr).ifr_addr.sa_len > sizeof(struct sockaddr) ? \
|
||||
(sizeof(struct ifreq) - sizeof(struct sockaddr) + \
|
||||
(ifr).ifr_addr.sa_len) : sizeof(struct ifreq))
|
||||
|
||||
struct ifaliasreq {
|
||||
char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
||||
struct sockaddr ifra_addr;
|
||||
struct sockaddr ifra_broadaddr;
|
||||
struct sockaddr ifra_mask;
|
||||
};
|
||||
|
||||
struct ifmediareq {
|
||||
char ifm_name[IFNAMSIZ]; /* if name, e.g. "en0" */
|
||||
int ifm_current; /* current media options */
|
||||
int ifm_mask; /* don't care mask */
|
||||
int ifm_status; /* media status */
|
||||
int ifm_active; /* active options */
|
||||
int ifm_count; /* # entries in ifm_ulist array */
|
||||
int *ifm_ulist; /* media words */
|
||||
};
|
||||
/*
|
||||
* Structure used in SIOCGIFCONF request.
|
||||
* Used to retrieve interface configuration
|
||||
* for machine (useful for programs which
|
||||
* must know all networks accessible).
|
||||
*/
|
||||
struct ifconf {
|
||||
int ifc_len; /* size of associated buffer */
|
||||
union {
|
||||
caddr_t ifcu_buf;
|
||||
struct ifreq *ifcu_req;
|
||||
} ifc_ifcu;
|
||||
#define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
|
||||
#define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */
|
||||
};
|
||||
|
||||
#ifdef KERNEL
|
||||
#ifdef MALLOC_DECLARE
|
||||
MALLOC_DECLARE(M_IFADDR);
|
||||
MALLOC_DECLARE(M_IFMADDR);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* XXX - this should go away soon */
|
||||
#ifdef KERNEL
|
||||
#include <net/if_var.h>
|
||||
#endif
|
||||
|
||||
#endif /* !_NET_IF_H_ */
|
||||
164
Win32/Include/net/netdb.h
Normal file
164
Win32/Include/net/netdb.h
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
/*-
|
||||
* Copyright (c) 1980, 1983, 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)netdb.h 8.1 (Berkeley) 6/2/93
|
||||
* netdb.h,v 1.4 1995/08/14 04:05:04 hjl Exp
|
||||
* -
|
||||
* Portions Copyright (c) 1993 by Digital Equipment Corporation.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies, and that
|
||||
* the name of Digital Equipment Corporation not be used in advertising or
|
||||
* publicity pertaining to distribution of the document or software without
|
||||
* specific, written prior permission.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
|
||||
* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
* -
|
||||
* --Copyright--
|
||||
*/
|
||||
|
||||
#ifndef _NETDB_H_
|
||||
#define _NETDB_H_
|
||||
|
||||
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_REENTRANT)
|
||||
#include <stdio.h>
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <net/paths.h>
|
||||
|
||||
#define _PATH_HEQUIV __PATH_ETC_INET"/hosts.equiv"
|
||||
#define _PATH_HOSTS __PATH_ETC_INET"/hosts"
|
||||
#define _PATH_NETWORKS __PATH_ETC_INET"/networks"
|
||||
#define _PATH_PROTOCOLS __PATH_ETC_INET"/protocols"
|
||||
#define _PATH_SERVICES __PATH_ETC_INET"/services"
|
||||
#define _PATH_RESCONF __PATH_ETC_INET"/resolv.conf"
|
||||
#define _PATH_RPC __PATH_ETC_INET"/rpc"
|
||||
|
||||
struct rpcent {
|
||||
char *r_name; /* name of server for this rpc program */
|
||||
char **r_aliases; /* alias list */
|
||||
int r_number; /* rpc program number */
|
||||
};
|
||||
|
||||
#ifndef WIN32
|
||||
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_REENTRANT)
|
||||
|
||||
#define __NETDB_MAXALIASES 35
|
||||
#define __NETDB_MAXADDRS 35
|
||||
|
||||
/*
|
||||
* Error return codes from gethostbyname() and gethostbyaddr()
|
||||
* (left in extern int h_errno).
|
||||
*/
|
||||
#define h_errno (*__h_errno_location ())
|
||||
#else
|
||||
extern int h_errno;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define NETDB_INTERNAL -1 /* see errno */
|
||||
#define NETDB_SUCCESS 0 /* no problem */
|
||||
|
||||
//#include <features.h>
|
||||
|
||||
void endhostent (void);
|
||||
void endnetent (void);
|
||||
void endprotoent (void);
|
||||
void endservent (void);
|
||||
void endrpcent (void);
|
||||
struct hostent *gethostent (void);
|
||||
struct netent *getnetbyaddr (long, int); /* u_long? */
|
||||
struct netent *getnetbyname (const char *);
|
||||
struct netent *getnetent (void);
|
||||
struct protoent *getprotoent (void);
|
||||
struct servent *getservent (void);
|
||||
struct rpcent *getrpcent (void);
|
||||
struct rpcent *getrpcbyname (const char *);
|
||||
struct rpcent *getrpcbynumber (int);
|
||||
void herror (const char *);
|
||||
void sethostent (int);
|
||||
/* void sethostfile (const char *); */
|
||||
void setnetent (int);
|
||||
void setprotoent (int);
|
||||
void setservent (int);
|
||||
void setrpcent (int);
|
||||
|
||||
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS) || defined(_REENTRANT)
|
||||
struct hostent *gethostbyaddr_r (const char *__addr,
|
||||
int __length, int __type,
|
||||
struct hostent *__result,
|
||||
char *__buffer, int __buflen, int *__h_errnop);
|
||||
struct hostent *gethostbyname_r (const char * __name,
|
||||
struct hostent *__result, char *__buffer,
|
||||
int __buflen, int *__h_errnop);
|
||||
struct hostent *gethostent_r (struct hostent *__result,
|
||||
char *__buffer, int __buflen, int *__h_errnop);
|
||||
struct netent *getnetbyaddr_r (long __net, int __type,
|
||||
struct netent *__result, char *__buffer,
|
||||
int __buflen);
|
||||
struct netent *getnetbyname_r (const char * __name,
|
||||
struct netent *__result, char *__buffer,
|
||||
int __buflen);
|
||||
struct netent *getnetent_r (struct netent *__result,
|
||||
char *__buffer, int __buflen);
|
||||
struct protoent *getprotobyname_r (const char * __name,
|
||||
struct protoent *__result, char *__buffer,
|
||||
int __buflen);
|
||||
struct protoent *getprotobynumber_r (int __proto,
|
||||
struct protoent *__result, char *__buffer,
|
||||
int __buflen);
|
||||
struct protoent *getprotoent_r (struct protoent *__result,
|
||||
char *__buffer, int __buflen);
|
||||
struct servent *getservbyname_r (const char * __name,
|
||||
const char *__proto, struct servent *__result,
|
||||
char *__buffer, int __buflen);
|
||||
struct servent *getservbyport_r (int __port,
|
||||
const char *__proto, struct servent *__result,
|
||||
char *__buffer, int __buflen);
|
||||
struct servent *getservent_r (struct servent *__result,
|
||||
char *__buffer, int __buflen);
|
||||
|
||||
int *__h_errno_location (void);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* !_NETDB_H_ */
|
||||
105
Win32/Include/net/paths.h
Normal file
105
Win32/Include/net/paths.h
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright (c) 1989 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)paths.h 5.15 (Berkeley) 5/29/91
|
||||
*/
|
||||
|
||||
#ifndef _PATHS_H_
|
||||
#define _PATHS_H_
|
||||
|
||||
#if 0
|
||||
#define __PATH_ETC_INET "/usr/etc/inet"
|
||||
#else
|
||||
#define __PATH_ETC_INET "/etc"
|
||||
#endif
|
||||
|
||||
/* Default search path. */
|
||||
#define _PATH_DEFPATH "/usr/local/bin:/usr/bin:/bin:."
|
||||
#define _PATH_DEFPATH_ROOT "/sbin:/bin:/usr/sbin:/usr/bin"
|
||||
|
||||
#define _PATH_BSHELL "/bin/sh"
|
||||
#define _PATH_CONSOLE "/dev/console"
|
||||
#define _PATH_CSHELL "/bin/csh"
|
||||
#define _PATH_DEVDB "/var/run/dev.db"
|
||||
#define _PATH_DEVNULL "/dev/null"
|
||||
#define _PATH_DRUM "/dev/drum"
|
||||
#define _PATH_HEQUIV __PATH_ETC_INET"/hosts.equiv"
|
||||
#define _PATH_KMEM "/dev/kmem"
|
||||
#define _PATH_MAILDIR "/var/spool/mail"
|
||||
#define _PATH_MAN "/usr/man"
|
||||
#define _PATH_MEM "/dev/mem"
|
||||
#define _PATH_LOGIN "/bin/login"
|
||||
#define _PATH_NOLOGIN "/etc/nologin"
|
||||
#define _PATH_SENDMAIL "/usr/sbin/sendmail"
|
||||
#define _PATH_SHELLS "/etc/shells"
|
||||
#define _PATH_TTY "/dev/tty"
|
||||
#define _PATH_UNIX "/vmlinux"
|
||||
#define _PATH_VI "/usr/bin/vi"
|
||||
|
||||
/* Provide trailing slash, since mostly used for building pathnames. */
|
||||
#define _PATH_DEV "/dev/"
|
||||
#define _PATH_TMP "/tmp/"
|
||||
#define _PATH_VARRUN "/var/run/"
|
||||
#define _PATH_VARTMP "/var/tmp/"
|
||||
|
||||
#define _PATH_KLOG "/proc/kmsg"
|
||||
#define _PATH_LOGCONF __PATH_ETC_INET"/syslog.conf"
|
||||
#if 0
|
||||
#define _PATH_LOGPID __PATH_ETC_INET"/syslog.pid"
|
||||
#else
|
||||
#define _PATH_LOGPID "/var/run/syslog.pid"
|
||||
#endif
|
||||
#define _PATH_LOG "/dev/log"
|
||||
#define _PATH_CONSOLE "/dev/console"
|
||||
|
||||
#if 0
|
||||
#define _PATH_UTMP "/var/adm/utmp"
|
||||
#define _PATH_WTMP "/var/adm/wtmp"
|
||||
#define _PATH_LASTLOG "/var/adm/lastlog"
|
||||
#else
|
||||
#define _PATH_UTMP "/var/run/utmp"
|
||||
#define _PATH_WTMP "/var/log/wtmp"
|
||||
#define _PATH_LASTLOG "/var/log/lastlog"
|
||||
#endif
|
||||
|
||||
#define _PATH_LOCALE "/usr/lib/locale"
|
||||
|
||||
#define _PATH_RWHODIR "/var/spool/rwho"
|
||||
|
||||
#if _MIT_POSIX_THREADS
|
||||
/* For the MIT pthreads */
|
||||
#define _PATH_PTY "/dev/"
|
||||
#define _PATH_TZDIR "/usr/lib/zoneinfo"
|
||||
#define _PATH_TZFILE "/usr/lib/zoneinfo/localtime"
|
||||
#endif
|
||||
|
||||
#endif /* !_PATHS_H_ */
|
||||
38
Win32/Include/sockstorage.h
Normal file
38
Win32/Include/sockstorage.h
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright (C) 1999 WIDE Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the project nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
struct sockaddr_storage {
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
u_int8_t __ss_len;
|
||||
u_int8_t __ss_family;
|
||||
u_int8_t fill[126];
|
||||
#else
|
||||
u_int8_t __ss_family;
|
||||
u_int8_t fill[127];
|
||||
#endif /* HAVE_SOCKADDR_SA_LEN */
|
||||
};
|
||||
168
Win32/Prj/libpcap.dsp
Normal file
168
Win32/Prj/libpcap.dsp
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
# Microsoft Developer Studio Project File - Name="libpcap" - Package Owner=<4>
|
||||
# Microsoft Developer Studio Generated Build File, Format Version 6.00
|
||||
# ** DO NOT EDIT **
|
||||
|
||||
# TARGTYPE "Win32 (x86) Static Library" 0x0104
|
||||
|
||||
CFG=libpcap - Win32 Debug
|
||||
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
|
||||
!MESSAGE use the Export Makefile command and run
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "libpcap.mak".
|
||||
!MESSAGE
|
||||
!MESSAGE You can specify a configuration when running NMAKE
|
||||
!MESSAGE by defining the macro CFG on the command line. For example:
|
||||
!MESSAGE
|
||||
!MESSAGE NMAKE /f "libpcap.mak" CFG="libpcap - Win32 Debug"
|
||||
!MESSAGE
|
||||
!MESSAGE Possible choices for configuration are:
|
||||
!MESSAGE
|
||||
!MESSAGE "libpcap - Win32 Release" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE "libpcap - Win32 Debug" (based on "Win32 (x86) Static Library")
|
||||
!MESSAGE
|
||||
|
||||
# Begin Project
|
||||
# PROP AllowPerConfigDependencies 0
|
||||
# PROP Scc_ProjName ""
|
||||
# PROP Scc_LocalPath ""
|
||||
CPP=cl.exe
|
||||
RSC=rc.exe
|
||||
|
||||
!IF "$(CFG)" == "libpcap - Win32 Release"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 0
|
||||
# PROP BASE Output_Dir "Release"
|
||||
# PROP BASE Intermediate_Dir "Release"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 0
|
||||
# PROP Output_Dir "Release"
|
||||
# PROP Intermediate_Dir "Release"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
|
||||
# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../" /I "../../lbl/" /I "../../bpf/" /I "../include/" /I "../../../../common" /I "../../../../dag/include" /I "../../../../dag/drv/windows" /D "NDEBUG" /D "YY_NEVER_INTERACTIVE" /D yylval=pcap_lval /D "_USRDLL" /D "LIBPCAP_EXPORTS" /D "HAVE_STRERROR" /D "__STDC__" /D "INET6" /D "_WINDOWS" /D "_MBCS" /D SIZEOF_CHAR=1 /D SIZEOF_SHORT=2 /D SIZEOF_INT=4 /D "HAVE_ADDRINFO" /D "WIN32" /D _U_= /D "HAVE_SNPRINTF" /D "HAVE_VSNPRINTF" /YX /FD /c
|
||||
# ADD BASE RSC /l 0x409 /d "NDEBUG"
|
||||
# ADD RSC /l 0x409 /d "NDEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ELSEIF "$(CFG)" == "libpcap - Win32 Debug"
|
||||
|
||||
# PROP BASE Use_MFC 0
|
||||
# PROP BASE Use_Debug_Libraries 1
|
||||
# PROP BASE Output_Dir "Debug"
|
||||
# PROP BASE Intermediate_Dir "Debug"
|
||||
# PROP BASE Target_Dir ""
|
||||
# PROP Use_MFC 0
|
||||
# PROP Use_Debug_Libraries 1
|
||||
# PROP Output_Dir "Debug"
|
||||
# PROP Intermediate_Dir "Debug"
|
||||
# PROP Target_Dir ""
|
||||
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
|
||||
# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../" /I "../../lbl/" /I "../../bpf/" /I "../include/" /I "../../../../common" /I "../../../../dag/include" /I "../../../../dag/drv/windows" /D "_DEBUG" /D "YY_NEVER_INTERACTIVE" /D yylval=pcap_lval /D "_USRDLL" /D "LIBPCAP_EXPORTS" /D "HAVE_STRERROR" /D "__STDC__" /D "INET6" /D "_WINDOWS" /D "_MBCS" /D SIZEOF_CHAR=1 /D SIZEOF_SHORT=2 /D SIZEOF_INT=4 /D "HAVE_ADDRINFO" /D "WIN32" /D _U_= /D "HAVE_SNPRINTF" /D "HAVE_VSNPRINTF" /YX /FD /GZ /c
|
||||
# ADD BASE RSC /l 0x409 /d "_DEBUG"
|
||||
# ADD RSC /l 0x409 /d "_DEBUG"
|
||||
BSC32=bscmake.exe
|
||||
# ADD BASE BSC32 /nologo
|
||||
# ADD BSC32 /nologo
|
||||
LIB32=link.exe -lib
|
||||
# ADD BASE LIB32 /nologo
|
||||
# ADD LIB32 /nologo
|
||||
|
||||
!ENDIF
|
||||
|
||||
# Begin Target
|
||||
|
||||
# Name "libpcap - Win32 Release"
|
||||
# Name "libpcap - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\bpf_dump.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\bpf\net\bpf_filter.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\bpf_image.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\etherent.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\..\fad-win32.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\ffs.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\gencode.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\getnetbynm.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\getnetent.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\getservent.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\grammar.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\inet.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\inet_aton.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\inet_net.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\Src\inet_pton.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\nametoaddr.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\optimize.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE="..\..\Pcap-win32.c"
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\pcap.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\savefile.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\scanner.c
|
||||
# End Source File
|
||||
# End Target
|
||||
# End Project
|
||||
29
Win32/Prj/libpcap.dsw
Normal file
29
Win32/Prj/libpcap.dsw
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Microsoft Developer Studio Workspace File, Format Version 6.00
|
||||
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
|
||||
|
||||
###############################################################################
|
||||
|
||||
Project: "libpcap"=".\libpcap.dsp" - Package Owner=<4>
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<4>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
Global:
|
||||
|
||||
Package=<5>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
Package=<3>
|
||||
{{{
|
||||
}}}
|
||||
|
||||
###############################################################################
|
||||
|
||||
54
Win32/Src/ffs.c
Normal file
54
Win32/Src/ffs.c
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)ffs.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* ffs -- vax ffs instruction
|
||||
*/
|
||||
int
|
||||
ffs(mask)
|
||||
register int mask;
|
||||
{
|
||||
register int bit;
|
||||
|
||||
if (mask == 0)
|
||||
return(0);
|
||||
for (bit = 1; !(mask & 1); bit++)
|
||||
mask >>= 1;
|
||||
return(bit);
|
||||
}
|
||||
83
Win32/Src/gai_strerror.c
Normal file
83
Win32/Src/gai_strerror.c
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the project nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
#else
|
||||
|
||||
#include <netdb.h>
|
||||
|
||||
#endif
|
||||
|
||||
/* Entries EAI_ADDRFAMILY (1) and EAI_NODATA (7) are obsoleted, but left */
|
||||
/* for backward compatibility with userland code prior to 2553bis-02 */
|
||||
static char *ai_errlist[] = {
|
||||
"Success", /* 0 */
|
||||
"Address family for hostname not supported", /* 1 */
|
||||
"Temporary failure in name resolution", /* EAI_AGAIN */
|
||||
"Invalid value for ai_flags", /* EAI_BADFLAGS */
|
||||
"Non-recoverable failure in name resolution", /* EAI_FAIL */
|
||||
"ai_family not supported", /* EAI_FAMILY */
|
||||
"Memory allocation failure", /* EAI_MEMORY */
|
||||
"No address associated with hostname", /* 7 */
|
||||
"hostname nor servname provided, or not known", /* EAI_NONAME */
|
||||
"servname not supported for ai_socktype", /* EAI_SERVICE */
|
||||
"ai_socktype not supported", /* EAI_SOCKTYPE */
|
||||
"System error returned in errno", /* EAI_SYSTEM */
|
||||
"Invalid value for hints", /* EAI_BADHINTS */
|
||||
"Resolved protocol is unknown" /* EAI_PROTOCOL */
|
||||
};
|
||||
|
||||
#ifndef EAI_MAX
|
||||
#define EAI_MAX (sizeof(ai_errlist)/sizeof(ai_errlist[0]))
|
||||
#endif
|
||||
|
||||
/* on MingW, gai_strerror is available.
|
||||
We need to compile gai_strerrorA only for Cygwin
|
||||
*/
|
||||
#ifndef gai_strerror
|
||||
|
||||
char *
|
||||
WSAAPI gai_strerrorA(int ecode)
|
||||
{
|
||||
if (ecode >= 0 && ecode < EAI_MAX)
|
||||
return ai_errlist[ecode];
|
||||
return "Unknown error";
|
||||
}
|
||||
|
||||
#endif /* gai_strerror */
|
||||
1120
Win32/Src/getaddrinfo.c
Normal file
1120
Win32/Src/getaddrinfo.c
Normal file
File diff suppressed because it is too large
Load diff
44
Win32/Src/getnetbynm.c
Normal file
44
Win32/Src/getnetbynm.c
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (c) 1983 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that the above copyright notice and this paragraph are
|
||||
* duplicated in all such forms and that any documentation,
|
||||
* advertising materials, and other materials related to such
|
||||
* distribution and use acknowledge that the software was developed
|
||||
* by the University of California, Berkeley. The name of the
|
||||
* University may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)getnetbyname.c 5.5 (Berkeley) 6/27/88";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include "inetprivate.h"
|
||||
|
||||
extern int _net_stayopen;
|
||||
|
||||
struct netent *
|
||||
getnetbyname(const char *name)
|
||||
{
|
||||
register struct netent *p;
|
||||
register char **cp;
|
||||
|
||||
setnetent(_net_stayopen);
|
||||
while (p = getnetent()) {
|
||||
if (strcmp(p->n_name, name) == 0)
|
||||
break;
|
||||
for (cp = p->n_aliases; *cp != 0; cp++)
|
||||
if (strcmp(*cp, name) == 0)
|
||||
goto found;
|
||||
}
|
||||
found:
|
||||
if (!_net_stayopen)
|
||||
endnetent();
|
||||
return (p);
|
||||
}
|
||||
119
Win32/Src/getnetent.c
Normal file
119
Win32/Src/getnetent.c
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
* Copyright (c) 1983 Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms are permitted
|
||||
* provided that the above copyright notice and this paragraph are
|
||||
* duplicated in all such forms and that any documentation,
|
||||
* advertising materials, and other materials related to such
|
||||
* distribution and use acknowledge that the software was developed
|
||||
* by the University of California, Berkeley. The name of the
|
||||
* University may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)getnetent.c 5.5 (Berkeley) 6/27/88";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include "inetprivate.h"
|
||||
|
||||
#define MAXALIASES 35
|
||||
|
||||
static char NETDB[] = _PATH_NETWORKS;
|
||||
static FILE *netf = NULL;
|
||||
static char line[BUFSIZ+1];
|
||||
static struct netent net;
|
||||
static char *net_aliases[MAXALIASES];
|
||||
static char *any(char *, char *);
|
||||
|
||||
int _net_stayopen;
|
||||
extern u_int32_t inet_network(const char *cp);
|
||||
|
||||
void
|
||||
setnetent(f)
|
||||
int f;
|
||||
{
|
||||
if (netf == NULL)
|
||||
netf = fopen(NETDB, "r" );
|
||||
else
|
||||
rewind(netf);
|
||||
_net_stayopen |= f;
|
||||
}
|
||||
|
||||
void
|
||||
endnetent()
|
||||
{
|
||||
if (netf) {
|
||||
fclose(netf);
|
||||
netf = NULL;
|
||||
}
|
||||
_net_stayopen = 0;
|
||||
}
|
||||
|
||||
struct netent *
|
||||
getnetent()
|
||||
{
|
||||
char *p;
|
||||
register char *cp, **q;
|
||||
|
||||
if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL)
|
||||
return (NULL);
|
||||
again:
|
||||
p = fgets(line, BUFSIZ, netf);
|
||||
if (p == NULL)
|
||||
return (NULL);
|
||||
if (*p == '#')
|
||||
goto again;
|
||||
cp = any(p, "#\n");
|
||||
if (cp == NULL)
|
||||
goto again;
|
||||
*cp = '\0';
|
||||
net.n_name = p;
|
||||
cp = any(p, " \t");
|
||||
if (cp == NULL)
|
||||
goto again;
|
||||
*cp++ = '\0';
|
||||
while (*cp == ' ' || *cp == '\t')
|
||||
cp++;
|
||||
p = any(cp, " \t");
|
||||
if (p != NULL)
|
||||
*p++ = '\0';
|
||||
net.n_net = inet_network(cp);
|
||||
net.n_addrtype = AF_INET;
|
||||
q = net.n_aliases = net_aliases;
|
||||
if (p != NULL)
|
||||
cp = p;
|
||||
while (cp && *cp) {
|
||||
if (*cp == ' ' || *cp == '\t') {
|
||||
cp++;
|
||||
continue;
|
||||
}
|
||||
if (q < &net_aliases[MAXALIASES - 1])
|
||||
*q++ = cp;
|
||||
cp = any(cp, " \t");
|
||||
if (cp != NULL)
|
||||
*cp++ = '\0';
|
||||
}
|
||||
*q = NULL;
|
||||
return (&net);
|
||||
}
|
||||
|
||||
static char *
|
||||
any(cp, match)
|
||||
register char *cp;
|
||||
char *match;
|
||||
{
|
||||
register char *mp, c;
|
||||
|
||||
while (c = *cp) {
|
||||
for (mp = match; *mp; mp++)
|
||||
if (*mp == c)
|
||||
return (cp);
|
||||
cp++;
|
||||
}
|
||||
return ((char *)0);
|
||||
}
|
||||
121
Win32/Src/getopt.c
Normal file
121
Win32/Src/getopt.c
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Copyright (c) 1987, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int opterr = 1, /* if error message should be printed */
|
||||
optind = 1, /* index into parent argv vector */
|
||||
optopt, /* character checked for validity */
|
||||
optreset; /* reset getopt */
|
||||
char *optarg; /* argument associated with option */
|
||||
|
||||
#define BADCH (int)'?'
|
||||
#define BADARG (int)':'
|
||||
#define EMSG ""
|
||||
|
||||
/*
|
||||
* getopt --
|
||||
* Parse argc/argv argument vector.
|
||||
*/
|
||||
int
|
||||
getopt(nargc, nargv, ostr)
|
||||
int nargc;
|
||||
char * const *nargv;
|
||||
const char *ostr;
|
||||
{
|
||||
#ifdef WIN32
|
||||
char *__progname="windump";
|
||||
#else
|
||||
extern char *__progname;
|
||||
#endif
|
||||
static char *place = EMSG; /* option letter processing */
|
||||
char *oli; /* option letter list index */
|
||||
|
||||
if (optreset || !*place) { /* update scanning pointer */
|
||||
optreset = 0;
|
||||
if (optind >= nargc || *(place = nargv[optind]) != '-') {
|
||||
place = EMSG;
|
||||
return (-1);
|
||||
}
|
||||
if (place[1] && *++place == '-') { /* found "--" */
|
||||
++optind;
|
||||
place = EMSG;
|
||||
return (-1);
|
||||
}
|
||||
} /* option letter okay? */
|
||||
if ((optopt = (int)*place++) == (int)':' ||
|
||||
!(oli = strchr(ostr, optopt))) {
|
||||
/*
|
||||
* if the user didn't specify '-' as an option,
|
||||
* assume it means -1.
|
||||
*/
|
||||
if (optopt == (int)'-')
|
||||
return (-1);
|
||||
if (!*place)
|
||||
++optind;
|
||||
if (opterr && *ostr != ':')
|
||||
(void)fprintf(stderr,
|
||||
"%s: illegal option -- %c\n", __progname, optopt);
|
||||
return (BADCH);
|
||||
}
|
||||
if (*++oli != ':') { /* don't need argument */
|
||||
optarg = NULL;
|
||||
if (!*place)
|
||||
++optind;
|
||||
}
|
||||
else { /* need an argument */
|
||||
if (*place) /* no white space */
|
||||
optarg = place;
|
||||
else if (nargc <= ++optind) { /* no arg */
|
||||
place = EMSG;
|
||||
if (*ostr == ':')
|
||||
return (BADARG);
|
||||
if (opterr)
|
||||
(void)fprintf(stderr,
|
||||
"%s: option requires an argument -- %c\n",
|
||||
__progname, optopt);
|
||||
return (BADCH);
|
||||
}
|
||||
else /* white space */
|
||||
optarg = nargv[optind];
|
||||
place = EMSG;
|
||||
++optind;
|
||||
}
|
||||
return (optopt); /* dump back option letter */
|
||||
}
|
||||
125
Win32/Src/getservent.c
Normal file
125
Win32/Src/getservent.c
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
* Copyright (c) 1983, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)getservent.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <net/netdb.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <arpa/nameser.h>
|
||||
|
||||
#define MAXALIASES 35
|
||||
|
||||
static char SERVDB[] = _PATH_SERVICES;
|
||||
static FILE *servf = NULL;
|
||||
static char line[BUFSIZ+1];
|
||||
static struct servent serv;
|
||||
static char *serv_aliases[MAXALIASES];
|
||||
int _serv_stayopen;
|
||||
|
||||
void
|
||||
setservent(f)
|
||||
int f;
|
||||
{
|
||||
if (servf == NULL)
|
||||
servf = fopen(SERVDB, "r" );
|
||||
else
|
||||
rewind(servf);
|
||||
_serv_stayopen |= f;
|
||||
}
|
||||
|
||||
void
|
||||
endservent()
|
||||
{
|
||||
if (servf) {
|
||||
fclose(servf);
|
||||
servf = NULL;
|
||||
}
|
||||
_serv_stayopen = 0;
|
||||
}
|
||||
|
||||
struct servent *
|
||||
getservent()
|
||||
{
|
||||
char *p;
|
||||
register char *cp, **q;
|
||||
|
||||
if (servf == NULL && (servf = fopen(SERVDB, "r" )) == NULL)
|
||||
return (NULL);
|
||||
again:
|
||||
if ((p = fgets(line, BUFSIZ, servf)) == NULL)
|
||||
return (NULL);
|
||||
if (*p == '#')
|
||||
goto again;
|
||||
cp = strpbrk(p, "#\n");
|
||||
if (cp == NULL)
|
||||
goto again;
|
||||
*cp = '\0';
|
||||
serv.s_name = p;
|
||||
p = strpbrk(p, " \t");
|
||||
if (p == NULL)
|
||||
goto again;
|
||||
*p++ = '\0';
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
cp = strpbrk(p, ",/");
|
||||
if (cp == NULL)
|
||||
goto again;
|
||||
*cp++ = '\0';
|
||||
serv.s_port = htons((u_short)atoi(p));
|
||||
serv.s_proto = cp;
|
||||
q = serv.s_aliases = serv_aliases;
|
||||
cp = strpbrk(cp, " \t");
|
||||
if (cp != NULL)
|
||||
*cp++ = '\0';
|
||||
while (cp && *cp) {
|
||||
if (*cp == ' ' || *cp == '\t') {
|
||||
cp++;
|
||||
continue;
|
||||
}
|
||||
if (q < &serv_aliases[MAXALIASES - 1])
|
||||
*q++ = cp;
|
||||
cp = strpbrk(cp, " \t");
|
||||
if (cp != NULL)
|
||||
*cp++ = '\0';
|
||||
}
|
||||
*q = NULL;
|
||||
return (&serv);
|
||||
}
|
||||
61
Win32/Src/inet_aton.c
Normal file
61
Win32/Src/inet_aton.c
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the Kungliga Tekniska
|
||||
* Högskolan and its contributors.
|
||||
*
|
||||
* 4. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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.
|
||||
*/
|
||||
|
||||
/* $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>
|
||||
|
||||
/* Minimal implementation of inet_aton.
|
||||
* Cannot distinguish between failure and a local broadcast address. */
|
||||
|
||||
#ifndef INADDR_NONE
|
||||
#define INADDR_NONE 0xffffffff
|
||||
#endif
|
||||
|
||||
int
|
||||
inet_aton(const char *cp, struct in_addr *addr)
|
||||
{
|
||||
addr->s_addr = inet_addr(cp);
|
||||
return (addr->s_addr == INADDR_NONE) ? 0 : 1;
|
||||
}
|
||||
101
Win32/Src/inet_net.c
Normal file
101
Win32/Src/inet_net.c
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* Copyright (c) 1983, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static char sccsid[] = "@(#)inet_network.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include "inetprivate.h"
|
||||
|
||||
/*
|
||||
* Internet network address interpretation routine.
|
||||
* The library routines call this routine to interpret
|
||||
* network numbers.
|
||||
*/
|
||||
u_int32_t
|
||||
inet_network(const char *cp)
|
||||
{
|
||||
register u_long val, base, n;
|
||||
register char c;
|
||||
u_long parts[4], *pp = parts;
|
||||
register int i;
|
||||
|
||||
again:
|
||||
/*
|
||||
* Collect number up to ``.''.
|
||||
* Values are specified as for C:
|
||||
* 0x=hex, 0=octal, other=decimal.
|
||||
*/
|
||||
val = 0; base = 10;
|
||||
/*
|
||||
* The 4.4BSD version of this file also accepts 'x__' as a hexa
|
||||
* number. I don't think this is correct. -- Uli
|
||||
*/
|
||||
if (*cp == '0') {
|
||||
if (*++cp == 'x' || *cp == 'X')
|
||||
base = 16, cp++;
|
||||
else
|
||||
base = 8;
|
||||
}
|
||||
while ((c = *cp)) {
|
||||
if (isdigit(c)) {
|
||||
val = (val * base) + (c - '0');
|
||||
cp++;
|
||||
continue;
|
||||
}
|
||||
if (base == 16 && isxdigit(c)) {
|
||||
val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
|
||||
cp++;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (*cp == '.') {
|
||||
if (pp >= parts + 4)
|
||||
return (INADDR_NONE);
|
||||
*pp++ = val, cp++;
|
||||
goto again;
|
||||
}
|
||||
if (*cp && !isspace(*cp))
|
||||
return (INADDR_NONE);
|
||||
*pp++ = val;
|
||||
n = pp - parts;
|
||||
if (n > 4)
|
||||
return (INADDR_NONE);
|
||||
for (val = 0, i = 0; i < (int)n; i++) {
|
||||
val <<= 8;
|
||||
val |= parts[i] & 0xff;
|
||||
}
|
||||
return (val);
|
||||
}
|
||||
71
Win32/Src/inet_pton.c
Normal file
71
Win32/Src/inet_pton.c
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright (c) 1999 Kungliga Tekniska Högskolan
|
||||
* (Royal Institute of Technology, Stockholm, Sweden).
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the Kungliga Tekniska
|
||||
* Högskolan and its contributors.
|
||||
*
|
||||
* 4. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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.
|
||||
*/
|
||||
|
||||
/* $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
|
||||
#ifndef EAFNOSUPPORT
|
||||
#define EAFNOSUPPORT 97 /* not present in errno.h provided with VC */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __MINGW32__
|
||||
int* _errno();
|
||||
#define errno (*_errno())
|
||||
#endif /* __MINGW32__ */
|
||||
|
||||
#include <pcap-stdinc.h>
|
||||
|
||||
int inet_aton(const char *cp, struct in_addr *addr);
|
||||
|
||||
int
|
||||
inet_pton(int af, const char *src, void *dst)
|
||||
{
|
||||
if (af != AF_INET) {
|
||||
errno = EAFNOSUPPORT;
|
||||
return -1;
|
||||
}
|
||||
return inet_aton (src, dst);
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
/* Long story short: aclocal.m4 depends on autoconf 2.13
|
||||
* implementation details wrt "const"; newer versions
|
||||
* have different implementation details so for now we
|
||||
* put "const" here. This may cause duplicate definitions
|
||||
* in config.h but that should be OK since they're the same.
|
||||
*/
|
||||
#undef const
|
||||
400
aclocal.m4
vendored
400
aclocal.m4
vendored
|
|
@ -1,4 +1,4 @@
|
|||
dnl @(#) $Header: /tcpdump/master/libpcap/aclocal.m4,v 1.86.2.6 2008-09-28 17:13:37 guy Exp $ (LBL)
|
||||
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.
|
||||
|
|
@ -23,27 +23,23 @@ dnl LBL autoconf macros
|
|||
dnl
|
||||
|
||||
dnl
|
||||
dnl Determine which compiler we're using (cc or gcc)
|
||||
dnl If using gcc, determine the version number
|
||||
dnl If using cc, require that it support ansi prototypes
|
||||
dnl If using gcc, use -O2 (otherwise use -O)
|
||||
dnl If using cc, explicitly specify /usr/local/include
|
||||
dnl Do whatever AC_LBL_C_INIT work is necessary before using AC_PROG_CC.
|
||||
dnl
|
||||
dnl usage:
|
||||
dnl It appears that newer versions of autoconf (2.64 and later) will,
|
||||
dnl if you use AC_TRY_COMPILE in a macro, stick AC_PROG_CC at the
|
||||
dnl beginning of the macro, even if the macro itself calls AC_PROG_CC.
|
||||
dnl See the "Prerequisite Macros" and "Expanded Before Required" sections
|
||||
dnl in the Autoconf documentation.
|
||||
dnl
|
||||
dnl AC_LBL_C_INIT(copt, incls)
|
||||
dnl This causes a steaming heap of fail in our case, as we were, in
|
||||
dnl AC_LBL_C_INIT, doing the tests we now do in AC_LBL_C_INIT_BEFORE_CC,
|
||||
dnl calling AC_PROG_CC, and then doing the tests we now do in
|
||||
dnl AC_LBL_C_INIT. Now, we run AC_LBL_C_INIT_BEFORE_CC, AC_PROG_CC,
|
||||
dnl and AC_LBL_C_INIT at the top level.
|
||||
dnl
|
||||
dnl results:
|
||||
dnl
|
||||
dnl $1 (copt set)
|
||||
dnl $2 (incls set)
|
||||
dnl CC
|
||||
dnl LDFLAGS
|
||||
dnl ac_cv_lbl_gcc_vers
|
||||
dnl LBL_CFLAGS
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_C_INIT,
|
||||
[AC_PREREQ(2.12)
|
||||
AC_DEFUN(AC_LBL_C_INIT_BEFORE_CC,
|
||||
[AC_PREREQ(2.50)
|
||||
AC_BEFORE([$0], [AC_LBL_C_INIT])
|
||||
AC_BEFORE([$0], [AC_PROG_CC])
|
||||
AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
|
||||
AC_BEFORE([$0], [AC_LBL_DEVEL])
|
||||
|
|
@ -72,7 +68,33 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||
CC=cc
|
||||
export CC
|
||||
fi
|
||||
AC_PROG_CC
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Determine which compiler we're using (cc or gcc)
|
||||
dnl If using gcc, determine the version number
|
||||
dnl If using cc, require that it support ansi prototypes
|
||||
dnl If using gcc, use -O2 (otherwise use -O)
|
||||
dnl If using cc, explicitly specify /usr/local/include
|
||||
dnl
|
||||
dnl usage:
|
||||
dnl
|
||||
dnl AC_LBL_C_INIT(copt, incls)
|
||||
dnl
|
||||
dnl results:
|
||||
dnl
|
||||
dnl $1 (copt set)
|
||||
dnl $2 (incls set)
|
||||
dnl CC
|
||||
dnl LDFLAGS
|
||||
dnl ac_cv_lbl_gcc_vers
|
||||
dnl LBL_CFLAGS
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_C_INIT,
|
||||
[AC_PREREQ(2.50)
|
||||
AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
|
||||
AC_BEFORE([$0], [AC_LBL_DEVEL])
|
||||
AC_BEFORE([$0], [AC_LBL_SHLIBS_INIT])
|
||||
if test "$GCC" = yes ; then
|
||||
if test "$SHLICC2" = yes ; then
|
||||
ac_cv_lbl_gcc_vers=2
|
||||
|
|
@ -117,10 +139,28 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||
fi
|
||||
CFLAGS="$savedcflags"
|
||||
V_CCOPT="-Aa $V_CCOPT"
|
||||
$1="-Aa $$1"
|
||||
AC_DEFINE(_HPUX_SOURCE,1,[needed on HP-UX])
|
||||
;;
|
||||
|
||||
osf*)
|
||||
AC_MSG_CHECKING(for ansi mode in DEC compiler ($CC -std1))
|
||||
savedcflags="$CFLAGS"
|
||||
CFLAGS="-std1"
|
||||
AC_CACHE_VAL(ac_cv_lbl_cc_osf1_cc_std1,
|
||||
AC_TRY_COMPILE(
|
||||
[#include <sys/types.h>],
|
||||
[int frob(int, char *)],
|
||||
ac_cv_lbl_cc_osf1_cc_std1=yes,
|
||||
ac_cv_lbl_cc_osf1_cc_std1=no))
|
||||
AC_MSG_RESULT($ac_cv_lbl_cc_osf1_cc_std1)
|
||||
if test $ac_cv_lbl_cc_osf1_cc_std1 = no ; then
|
||||
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||
fi
|
||||
CFLAGS="$savedcflags"
|
||||
$1="-std1 $$1"
|
||||
;;
|
||||
|
||||
*)
|
||||
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||
;;
|
||||
|
|
@ -132,11 +172,15 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||
case "$host_os" in
|
||||
|
||||
irix*)
|
||||
V_CCOPT="$V_CCOPT -xansi -signed -g3"
|
||||
$1="$$1 -xansi -signed -g3"
|
||||
;;
|
||||
|
||||
osf*)
|
||||
V_CCOPT="$V_CCOPT -std1 -g3"
|
||||
#
|
||||
# Presumed to be DEC OSF/1, Digital UNIX, or
|
||||
# Tru64 UNIX.
|
||||
#
|
||||
$1="$$1 -g3"
|
||||
;;
|
||||
|
||||
ultrix*)
|
||||
|
|
@ -150,13 +194,161 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||
ac_cv_lbl_cc_const_proto=no))
|
||||
AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
|
||||
if test $ac_cv_lbl_cc_const_proto = no ; then
|
||||
AC_DEFINE(const,)
|
||||
AC_DEFINE(const,[],
|
||||
[to handle Ultrix compilers that don't support const in prototypes])
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Determine what options are needed to build a shared library
|
||||
dnl
|
||||
dnl usage:
|
||||
dnl
|
||||
dnl AC_LBL_SHLIBS_INIT
|
||||
dnl
|
||||
dnl results:
|
||||
dnl
|
||||
dnl V_CCOPT (modified to build position-independent code)
|
||||
dnl V_SHLIB_CMD
|
||||
dnl V_SHLIB_OPT
|
||||
dnl V_SONAME_OPT
|
||||
dnl V_RPATH_OPT
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_SHLIBS_INIT,
|
||||
[AC_PREREQ(2.50)
|
||||
if test "$GCC" = yes ; then
|
||||
#
|
||||
# On platforms where we build a shared library:
|
||||
#
|
||||
# add options to generate position-independent code,
|
||||
# if necessary (it's the default in AIX and Darwin/OS X);
|
||||
#
|
||||
# define option to set the soname of the shared library,
|
||||
# if the OS supports that;
|
||||
#
|
||||
# add options to specify, at link time, a directory to
|
||||
# add to the run-time search path, if that's necessary.
|
||||
#
|
||||
V_SHLIB_CMD="\$(CC)"
|
||||
V_SHLIB_OPT="-shared"
|
||||
case "$host_os" in
|
||||
|
||||
aix*)
|
||||
;;
|
||||
|
||||
freebsd*|netbsd*|openbsd*|dragonfly*|linux*|osf*)
|
||||
#
|
||||
# Platforms where the linker is the GNU linker
|
||||
# or accepts command-line arguments like
|
||||
# those the GNU linker accepts.
|
||||
#
|
||||
V_CCOPT="$V_CCOPT -fpic"
|
||||
V_SONAME_OPT="-Wl,-soname,"
|
||||
V_RPATH_OPT="-Wl,-rpath,"
|
||||
;;
|
||||
|
||||
hpux*)
|
||||
V_CCOPT="$V_CCOPT -fpic"
|
||||
#
|
||||
# XXX - this assumes GCC is using the HP linker,
|
||||
# rather than the GNU linker, and that the "+h"
|
||||
# option is used on all HP-UX platforms, both .sl
|
||||
# and .so.
|
||||
#
|
||||
V_SONAME_OPT="-Wl,+h,"
|
||||
#
|
||||
# By default, directories specifed with -L
|
||||
# are added to the run-time search path, so
|
||||
# we don't add them in pcap-config.
|
||||
#
|
||||
;;
|
||||
|
||||
solaris*)
|
||||
V_CCOPT="$V_CCOPT -fpic"
|
||||
#
|
||||
# XXX - this assumes GCC is using the Sun linker,
|
||||
# rather than the GNU linker.
|
||||
#
|
||||
V_SONAME_OPT="-Wl,-h,"
|
||||
V_RPATH_OPT="-Wl,-R,"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
#
|
||||
# Set the appropriate compiler flags and, on platforms
|
||||
# where we build a shared library:
|
||||
#
|
||||
# add options to generate position-independent code,
|
||||
# if necessary (it's the default in Darwin/OS X);
|
||||
#
|
||||
# if we generate ".so" shared libraries, define the
|
||||
# appropriate options for building the shared library;
|
||||
#
|
||||
# add options to specify, at link time, a directory to
|
||||
# add to the run-time search path, if that's necessary.
|
||||
#
|
||||
# Note: spaces after V_SONAME_OPT are significant; on
|
||||
# some platforms the soname is passed with a GCC-like
|
||||
# "-Wl,-soname,{soname}" option, with the soname part
|
||||
# of the option, while on other platforms the C compiler
|
||||
# driver takes it as a regular option with the soname
|
||||
# following the option. The same applies to V_RPATH_OPT.
|
||||
#
|
||||
case "$host_os" in
|
||||
|
||||
aix*)
|
||||
V_SHLIB_CMD="\$(CC)"
|
||||
V_SHLIB_OPT="-G -bnoentry -bexpall"
|
||||
;;
|
||||
|
||||
freebsd*|netbsd*|openbsd*|dragonfly*|linux*)
|
||||
#
|
||||
# "cc" is GCC.
|
||||
#
|
||||
V_CCOPT="$V_CCOPT -fpic"
|
||||
V_SHLIB_CMD="\$(CC)"
|
||||
V_SHLIB_OPT="-shared"
|
||||
V_SONAME_OPT="-Wl,-soname,"
|
||||
V_RPATH_OPT="-Wl,-rpath,"
|
||||
;;
|
||||
|
||||
hpux*)
|
||||
V_CCOPT="$V_CCOPT +z"
|
||||
V_SHLIB_CMD="\$(LD)"
|
||||
V_SHLIB_OPT="-b"
|
||||
V_SONAME_OPT="+h "
|
||||
#
|
||||
# By default, directories specifed with -L
|
||||
# are added to the run-time search path, so
|
||||
# we don't add them in pcap-config.
|
||||
#
|
||||
;;
|
||||
|
||||
osf*)
|
||||
#
|
||||
# Presumed to be DEC OSF/1, Digital UNIX, or
|
||||
# Tru64 UNIX.
|
||||
#
|
||||
V_SHLIB_CMD="\$(CC)"
|
||||
V_SHLIB_OPT="-shared"
|
||||
V_SONAME_OPT="-soname "
|
||||
V_RPATH_OPT="-rpath "
|
||||
;;
|
||||
|
||||
solaris*)
|
||||
V_CCOPT="$V_CCOPT -Kpic"
|
||||
V_SHLIB_CMD="\$(CC)"
|
||||
V_SHLIB_OPT="-G"
|
||||
V_SONAME_OPT="-h "
|
||||
V_RPATH_OPT="-R"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
])
|
||||
|
||||
#
|
||||
# Try compiling a sample of the type of code that appears in
|
||||
# gencode.c with "inline", "__inline__", and "__inline".
|
||||
|
|
@ -208,114 +400,6 @@ AC_DEFUN(AC_LBL_C_INLINE,
|
|||
fi
|
||||
AC_DEFINE_UNQUOTED(inline, $ac_cv_lbl_inline, [Define as token for inline if inlining supported])])
|
||||
|
||||
dnl
|
||||
dnl Use pfopen.c if available and pfopen() not in standard libraries
|
||||
dnl Require libpcap
|
||||
dnl Look for libpcap in ..
|
||||
dnl Use the installed libpcap if there is no local version
|
||||
dnl
|
||||
dnl usage:
|
||||
dnl
|
||||
dnl AC_LBL_LIBPCAP(pcapdep, incls)
|
||||
dnl
|
||||
dnl results:
|
||||
dnl
|
||||
dnl $1 (pcapdep set)
|
||||
dnl $2 (incls appended)
|
||||
dnl LIBS
|
||||
dnl LBL_LIBS
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_LIBPCAP,
|
||||
[AC_REQUIRE([AC_LBL_LIBRARY_NET])
|
||||
dnl
|
||||
dnl save a copy before locating libpcap.a
|
||||
dnl
|
||||
LBL_LIBS="$LIBS"
|
||||
pfopen=/usr/examples/packetfilter/pfopen.c
|
||||
if test -f $pfopen ; then
|
||||
AC_CHECK_FUNCS(pfopen)
|
||||
if test $ac_cv_func_pfopen = "no" ; then
|
||||
AC_MSG_RESULT(Using $pfopen)
|
||||
LIBS="$LIBS $pfopen"
|
||||
fi
|
||||
fi
|
||||
AC_MSG_CHECKING(for local pcap library)
|
||||
libpcap=FAIL
|
||||
lastdir=FAIL
|
||||
places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
|
||||
egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
|
||||
for dir in $places ../libpcap libpcap ; do
|
||||
basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
|
||||
if test $lastdir = $basedir ; then
|
||||
dnl skip alphas when an actual release is present
|
||||
continue;
|
||||
fi
|
||||
lastdir=$dir
|
||||
if test -r $dir/pcap.c ; then
|
||||
libpcap=$dir/libpcap.a
|
||||
d=$dir
|
||||
dnl continue and select the last one that exists
|
||||
fi
|
||||
done
|
||||
if test $libpcap = FAIL ; then
|
||||
AC_MSG_RESULT(not found)
|
||||
AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
|
||||
if test $libpcap = FAIL ; then
|
||||
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||
fi
|
||||
else
|
||||
$1=$libpcap
|
||||
$2="-I$d $$2"
|
||||
AC_MSG_RESULT($libpcap)
|
||||
fi
|
||||
LIBS="$libpcap $LIBS"
|
||||
case "$host_os" in
|
||||
|
||||
aix*)
|
||||
pseexe="/lib/pse.exp"
|
||||
AC_MSG_CHECKING(for $pseexe)
|
||||
if test -f $pseexe ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="$LIBS -I:$pseexe"
|
||||
fi
|
||||
;;
|
||||
esac])
|
||||
|
||||
dnl
|
||||
dnl Define RETSIGTYPE and RETSIGVAL
|
||||
dnl
|
||||
dnl usage:
|
||||
dnl
|
||||
dnl AC_LBL_TYPE_SIGNAL
|
||||
dnl
|
||||
dnl results:
|
||||
dnl
|
||||
dnl RETSIGTYPE (defined)
|
||||
dnl RETSIGVAL (defined)
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_TYPE_SIGNAL,
|
||||
[AC_BEFORE([$0], [AC_LBL_LIBPCAP])
|
||||
AC_TYPE_SIGNAL
|
||||
if test "$ac_cv_type_signal" = void ; then
|
||||
AC_DEFINE(RETSIGVAL,[],[return value of signal handlers])
|
||||
else
|
||||
AC_DEFINE(RETSIGVAL,(0),[return value of signal handlers])
|
||||
fi
|
||||
case "$host_os" in
|
||||
|
||||
irix*)
|
||||
AC_DEFINE(_BSD_SIGNALS,1,[get BSD semantics on Irix])
|
||||
;;
|
||||
|
||||
*)
|
||||
dnl prefer sigset() to sigaction()
|
||||
AC_CHECK_FUNCS(sigset)
|
||||
if test $ac_cv_func_sigset = no ; then
|
||||
AC_CHECK_FUNCS(sigaction)
|
||||
fi
|
||||
;;
|
||||
esac])
|
||||
|
||||
dnl
|
||||
dnl If using gcc, make sure we have ANSI ioctl definitions
|
||||
dnl
|
||||
|
|
@ -452,7 +536,7 @@ dnl
|
|||
dnl HAVE_SOCKADDR_SA_LEN (defined)
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
|
||||
[AC_MSG_CHECKING(if sockaddr struct has sa_len member)
|
||||
[AC_MSG_CHECKING(if sockaddr struct has the sa_len member)
|
||||
AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
|
||||
AC_TRY_COMPILE([
|
||||
# include <sys/types.h>
|
||||
|
|
@ -462,7 +546,7 @@ AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
|
|||
ac_cv_lbl_sockaddr_has_sa_len=no))
|
||||
AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
|
||||
if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
|
||||
AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has sa_len])
|
||||
AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[if struct sockaddr has the sa_len member])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
|
|
@ -545,40 +629,10 @@ AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
|
|||
else
|
||||
ac_cv_lbl_have_run_path=no
|
||||
fi
|
||||
rm -f conftest*])
|
||||
rm -f -r conftest*])
|
||||
AC_MSG_RESULT($ac_cv_lbl_have_run_path)
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless.
|
||||
dnl
|
||||
dnl usage:
|
||||
dnl
|
||||
dnl AC_LBL_CHECK_TYPE
|
||||
dnl
|
||||
dnl results:
|
||||
dnl
|
||||
dnl int32_t (defined)
|
||||
dnl u_int32_t (defined)
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_CHECK_TYPE,
|
||||
[AC_MSG_CHECKING(for $1 using $CC)
|
||||
AC_CACHE_VAL(ac_cv_lbl_have_$1,
|
||||
AC_TRY_COMPILE([
|
||||
# include "confdefs.h"
|
||||
# include <sys/types.h>
|
||||
# if STDC_HEADERS
|
||||
# include <stdlib.h>
|
||||
# include <stddef.h>
|
||||
# endif],
|
||||
[$1 i],
|
||||
ac_cv_lbl_have_$1=yes,
|
||||
ac_cv_lbl_have_$1=no))
|
||||
AC_MSG_RESULT($ac_cv_lbl_have_$1)
|
||||
if test $ac_cv_lbl_have_$1 = no ; then
|
||||
AC_DEFINE($1, $2, [if we have $1])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Checks to see if unaligned memory accesses fail
|
||||
dnl
|
||||
|
|
@ -671,7 +725,7 @@ EOF
|
|||
ac_cv_lbl_unaligned_fail=no
|
||||
fi
|
||||
fi
|
||||
rm -f conftest* core core.conftest
|
||||
rm -f -r conftest* core core.conftest
|
||||
;;
|
||||
esac])
|
||||
AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
|
||||
|
|
@ -726,7 +780,8 @@ AC_DEFUN(AC_LBL_DEVEL,
|
|||
name="lbl/os-$os.h"
|
||||
if test -f $name ; then
|
||||
ln -s $name os-proto.h
|
||||
AC_DEFINE(HAVE_OS_PROTO_H,1,[if there's an os_proto.h])
|
||||
AC_DEFINE(HAVE_OS_PROTO_H, 1,
|
||||
[if there's an os_proto.h for this platform, to use additional prototypes])
|
||||
else
|
||||
AC_MSG_WARN(can't find $name)
|
||||
fi
|
||||
|
|
@ -754,10 +809,11 @@ dnl
|
|||
|
||||
define(AC_LBL_CHECK_LIB,
|
||||
[AC_MSG_CHECKING([for $2 in -l$1])
|
||||
dnl Use a cache variable name containing both the library and function name,
|
||||
dnl because the test really is for library $1 defining function $2, not
|
||||
dnl just for library $1. Separate tests with the same $1 and different $2's
|
||||
dnl may have different results.
|
||||
dnl Use a cache variable name containing the library, function
|
||||
dnl name, and extra libraries to link with, because the test really is
|
||||
dnl for library $1 defining function $2, when linked with potinal
|
||||
dnl library $5, not just for library $1. Separate tests with the same
|
||||
dnl $1 and different $2's or $5's may have different results.
|
||||
ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
|
||||
AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
|
||||
[ac_save_LIBS="$LIBS"
|
||||
|
|
@ -930,6 +986,8 @@ AC_DEFUN(AC_LBL_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI,
|
|||
ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci=no))
|
||||
AC_MSG_RESULT($ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci)
|
||||
if test $ac_cv_lbl_linux_tpacket_auxdata_tp_vlan_tci = yes ; then
|
||||
HAVE_LINUX_TPACKET_AUXDATA=tp_vlan_tci
|
||||
AC_SUBST(HAVE_LINUX_TPACKET_AUXDATA)
|
||||
AC_DEFINE(HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI,1,[if tp_vlan_tci exists])
|
||||
fi])
|
||||
|
||||
|
|
|
|||
2
arcnet.h
2
arcnet.h
|
|
@ -30,7 +30,7 @@
|
|||
* 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)
|
||||
* @(#) $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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
* 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.1.6.2 2007/10/22 19:30:14 guy Exp $ (LBL)
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
#if !(defined(lint) || defined(KERNEL) || defined(_KERNEL))
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf/net/bpf_filter.c,v 1.45.2.1 2008/01/02 04:22:16 guy Exp $ (LBL)";
|
||||
"@(#) $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
|
||||
|
|
@ -53,6 +53,15 @@ static const char rcsid[] _U_ =
|
|||
|
||||
#else /* WIN32 */
|
||||
|
||||
#if HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#elif HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
|
@ -65,9 +74,9 @@ static const char rcsid[] _U_ =
|
|||
# define m_next b_cont
|
||||
# define MLEN(m) ((m)->b_wptr - (m)->b_rptr)
|
||||
# define mtod(m,t) ((t)(m)->b_rptr)
|
||||
#else
|
||||
#else /* defined(__hpux) || SOLARIS */
|
||||
# define MLEN(m) ((m)->m_len)
|
||||
#endif
|
||||
#endif /* defined(__hpux) || SOLARIS */
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_dump.c,v 1.14.4.1 2008/01/02 04:22:16 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_dump.c,v 1.15 2008-01-02 04:16:46 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
|
|||
16
bpf_image.c
16
bpf_image.c
|
|
@ -21,13 +21,27 @@
|
|||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.27.2.1 2008/01/02 04:22:16 guy Exp $ (LBL)";
|
||||
"@(#) $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
|
||||
|
||||
#ifdef WIN32
|
||||
#include <pcap-stdinc.h>
|
||||
#else /* WIN32 */
|
||||
#if HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#elif HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
|
|
|||
875
config.guess
vendored
875
config.guess
vendored
File diff suppressed because it is too large
Load diff
58
config.h.in
58
config.h.in
|
|
@ -1,11 +1,4 @@
|
|||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
/* Long story short: aclocal.m4 depends on autoconf 2.13
|
||||
* implementation details wrt "const"; newer versions
|
||||
* have different implementation details so for now we
|
||||
* put "const" here. This may cause duplicate definitions
|
||||
* in config.h but that should be OK since they're the same.
|
||||
*/
|
||||
#undef const
|
||||
|
||||
/* Enable optimizer debugging */
|
||||
#undef BDEBUG
|
||||
|
|
@ -56,12 +49,18 @@
|
|||
/* if libdlpi exists */
|
||||
#undef HAVE_LIBDLPI
|
||||
|
||||
/* if libnl exists */
|
||||
#undef HAVE_LIBNL
|
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* if tp_vlan_tci exists */
|
||||
#undef HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
|
||||
|
||||
/* Define to 1 if you have the <linux/usbdevice_fs.h> header file. */
|
||||
#undef HAVE_LINUX_USBDEVICE_FS_H
|
||||
|
||||
/* Define to 1 if you have the <linux/wireless.h> header file. */
|
||||
#undef HAVE_LINUX_WIRELESS_H
|
||||
|
||||
|
|
@ -80,7 +79,7 @@
|
|||
/* Define to 1 if you have the <net/pfvar.h> header file. */
|
||||
#undef HAVE_NET_PFVAR_H
|
||||
|
||||
/* if there's an os_proto.h */
|
||||
/* if there's an os_proto.h for this platform, to use additional prototypes */
|
||||
#undef HAVE_OS_PROTO_H
|
||||
|
||||
/* Define to 1 if you have the <paths.h> header file. */
|
||||
|
|
@ -89,16 +88,16 @@
|
|||
/* define if net/pfvar.h defines PF_NAT through PF_NORDR */
|
||||
#undef HAVE_PF_NAT_THROUGH_PF_NORDR
|
||||
|
||||
/* define if you have a /proc/net/dev */
|
||||
#undef HAVE_PROC_NET_DEV
|
||||
|
||||
/* define if you have a Septel API */
|
||||
#undef HAVE_SEPTEL_API
|
||||
|
||||
/* define if you have Myricom SNF API */
|
||||
#undef HAVE_SNF_API
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* if struct sockaddr has sa_len */
|
||||
/* if struct sockaddr has the sa_len member */
|
||||
#undef HAVE_SOCKADDR_SA_LEN
|
||||
|
||||
/* if struct sockaddr_storage exists */
|
||||
|
|
@ -128,9 +127,15 @@
|
|||
/* Define to 1 if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define to 1 if the system has the type `struct BPF_TIMEVAL'. */
|
||||
#undef HAVE_STRUCT_BPF_TIMEVAL
|
||||
|
||||
/* Define to 1 if the system has the type `struct ether_addr'. */
|
||||
#undef HAVE_STRUCT_ETHER_ADDR
|
||||
|
||||
/* Define to 1 if you have the <sys/bitypes.h> header file. */
|
||||
#undef HAVE_SYS_BITYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/bufmod.h> header file. */
|
||||
#undef HAVE_SYS_BUFMOD_H
|
||||
|
||||
|
|
@ -155,6 +160,9 @@
|
|||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* if struct usbdevfs_ctrltransfer has bRequestType */
|
||||
#undef HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE
|
||||
|
||||
/* define if version.h is generated in the build procedure */
|
||||
#undef HAVE_VERSION_H
|
||||
|
||||
|
|
@ -206,6 +214,9 @@
|
|||
/* target host supports Bluetooth sniffing */
|
||||
#undef PCAP_SUPPORT_BT
|
||||
|
||||
/* target host supports CAN sniffing */
|
||||
#undef PCAP_SUPPORT_CAN
|
||||
|
||||
/* target host supports USB sniffing */
|
||||
#undef PCAP_SUPPORT_USB
|
||||
|
||||
|
|
@ -233,20 +244,35 @@
|
|||
/* define on AIX to get certain functions */
|
||||
#undef _SUN
|
||||
|
||||
/* to handle Ultrix compilers that don't support const in prototypes */
|
||||
#undef const
|
||||
|
||||
/* Define as token for inline if inlining supported */
|
||||
#undef inline
|
||||
|
||||
/* Define to `short' if int16_t not defined. */
|
||||
#undef int16_t
|
||||
|
||||
/* Define to `int' if int32_t not defined. */
|
||||
#undef int32_t
|
||||
|
||||
/* Define to `long long' if int64_t not defined. */
|
||||
#undef int64_t
|
||||
|
||||
/* Define to `signed char' if int8_t not defined. */
|
||||
#undef int8_t
|
||||
|
||||
/* on sinix */
|
||||
#undef sinix
|
||||
|
||||
/* if we have u_int16_t */
|
||||
/* Define to `unsigned short' if u_int16_t not defined. */
|
||||
#undef u_int16_t
|
||||
|
||||
/* if we have u_int32_t */
|
||||
/* Define to `unsigned int' if u_int32_t not defined. */
|
||||
#undef u_int32_t
|
||||
|
||||
/* if we have u_int64_t */
|
||||
/* Define to `unsigned long long' if u_int64_t not defined. */
|
||||
#undef u_int64_t
|
||||
|
||||
/* if we have u_int8_t */
|
||||
/* Define to `unsigned char' if u_int8_t not defined. */
|
||||
#undef u_int8_t
|
||||
|
|
|
|||
319
config.sub
vendored
319
config.sub
vendored
|
|
@ -1,9 +1,10 @@
|
|||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
# 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
# Free Software Foundation, Inc.
|
||||
|
||||
timestamp='2003-11-03'
|
||||
timestamp='2009-12-31'
|
||||
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
|
|
@ -21,22 +22,26 @@ timestamp='2003-11-03'
|
|||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
# Boston, MA 02111-1307, USA.
|
||||
|
||||
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
# Please send patches to <config-patches@gnu.org>. Submit a context
|
||||
# diff and a properly formatted ChangeLog entry.
|
||||
# diff and a properly formatted GNU ChangeLog entry.
|
||||
#
|
||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||
# Supply the specified configuration type as an argument.
|
||||
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||
# Otherwise, we print the canonical config type on stdout and succeed.
|
||||
|
||||
# You can get the latest version of this script from:
|
||||
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
|
||||
|
||||
# This file is supposed to be the same for all GNU packages
|
||||
# and recognize all the CPU types, system types and aliases
|
||||
# that are meaningful with *any* GNU software.
|
||||
|
|
@ -70,8 +75,9 @@ 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
|
||||
Free Software Foundation, Inc.
|
||||
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.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||
|
|
@ -83,11 +89,11 @@ Try \`$me --help' for more information."
|
|||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
--time-stamp | --time* | -t )
|
||||
echo "$timestamp" ; exit 0 ;;
|
||||
echo "$timestamp" ; exit ;;
|
||||
--version | -v )
|
||||
echo "$version" ; exit 0 ;;
|
||||
echo "$version" ; exit ;;
|
||||
--help | --h* | -h )
|
||||
echo "$usage"; exit 0 ;;
|
||||
echo "$usage"; exit ;;
|
||||
-- ) # Stop option processing
|
||||
shift; break ;;
|
||||
- ) # Use stdin as input.
|
||||
|
|
@ -99,7 +105,7 @@ while test $# -gt 0 ; do
|
|||
*local*)
|
||||
# First pass through any local machine types.
|
||||
echo $1
|
||||
exit 0;;
|
||||
exit ;;
|
||||
|
||||
* )
|
||||
break ;;
|
||||
|
|
@ -118,8 +124,10 @@ 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-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
|
||||
kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
|
||||
uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
|
||||
kopensolaris*-gnu* | \
|
||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||
os=-$maybe_os
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
|
|
@ -145,10 +153,13 @@ 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)
|
||||
-apple | -axis | -knuth | -cray | -microblaze)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
-bluegene*)
|
||||
os=-cnk
|
||||
;;
|
||||
-sim | -cisco | -oki | -wec | -winbond)
|
||||
os=
|
||||
basic_machine=$1
|
||||
|
|
@ -170,6 +181,10 @@ case $os in
|
|||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
-sco6)
|
||||
os=-sco5v6
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco5)
|
||||
os=-sco3.2v5
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
|
|
@ -186,6 +201,10 @@ case $os in
|
|||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco5v6*)
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
;;
|
||||
-sco*)
|
||||
os=-sco3.2v2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||
|
|
@ -230,22 +249,28 @@ case $basic_machine in
|
|||
| 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 \
|
||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
|
||||
| bfin \
|
||||
| c4x | clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fr30 | frv \
|
||||
| fido | fr30 | frv \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k | iq2000 \
|
||||
| m32r | m68000 | m68k | m88k | mcore \
|
||||
| lm32 \
|
||||
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
||||
| maxq | mb | microblaze | mcore | mep | metag \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64octeon | mips64octeonel \
|
||||
| mips64orion | mips64orionel \
|
||||
| mips64r5900 | mips64r5900el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr4300 | mips64vr4300el \
|
||||
| mips64vr5000 | mips64vr5000el \
|
||||
| mips64vr5900 | mips64vr5900el \
|
||||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa32r2 | mipsisa32r2el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
|
|
@ -254,30 +279,40 @@ case $basic_machine in
|
|||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| moxie \
|
||||
| mt \
|
||||
| msp430 \
|
||||
| nios | nios2 \
|
||||
| ns16k | ns32k \
|
||||
| openrisc | or32 \
|
||||
| or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| pyramid \
|
||||
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||
| 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 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||
| strongarm \
|
||||
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
|
||||
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
|
||||
| spu | strongarm \
|
||||
| tahoe | thumb | tic4x | tic80 | tron \
|
||||
| ubicom32 \
|
||||
| v850 | v850e \
|
||||
| we32k \
|
||||
| x86 | xscale | xstormy16 | xtensa \
|
||||
| z8k)
|
||||
| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||
| z8k | z80)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
m6811 | m68hc11 | m6812 | m68hc12)
|
||||
m6811 | m68hc11 | m6812 | m68hc12 | picochip)
|
||||
# Motorola 68HC11/12.
|
||||
basic_machine=$basic_machine-unknown
|
||||
os=-none
|
||||
;;
|
||||
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
|
||||
;;
|
||||
ms1)
|
||||
basic_machine=mt-unknown
|
||||
;;
|
||||
|
||||
# We use `pc' rather than `unknown'
|
||||
# because (1) that's what they normally are, and
|
||||
|
|
@ -297,28 +332,32 @@ case $basic_machine in
|
|||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* \
|
||||
| bs2000-* \
|
||||
| avr-* | avr32-* \
|
||||
| bfin-* | bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||
| clipper-* | cydra-* \
|
||||
| clipper-* | craynv-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
| elxsi-* \
|
||||
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
||||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* | iq2000-* \
|
||||
| m32r-* \
|
||||
| lm32-* \
|
||||
| m32c-* | m32r-* | m32rle-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64octeon-* | mips64octeonel-* \
|
||||
| mips64orion-* | mips64orionel-* \
|
||||
| mips64r5900-* | mips64r5900el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* \
|
||||
| mips64vr5000-* | mips64vr5000el-* \
|
||||
| mips64vr5900-* | mips64vr5900el-* \
|
||||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
|
|
@ -326,26 +365,35 @@ case $basic_machine in
|
|||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mmix-* \
|
||||
| mt-* \
|
||||
| msp430-* \
|
||||
| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
|
||||
| nios-* | nios2-* \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| orion-* \
|
||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| romp-* | rs6000-* \
|
||||
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
||||
| 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-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
|
||||
| sparclite-* \
|
||||
| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
|
||||
| tron-* \
|
||||
| ubicom32-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||
| xtensa-* \
|
||||
| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||
| xstormy16-* | xtensa*-* \
|
||||
| ymp-* \
|
||||
| z8k-*)
|
||||
| z8k-* | z80-*)
|
||||
;;
|
||||
# Recognize the basic CPU types without company name, with glob match.
|
||||
xtensa*)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
|
|
@ -363,6 +411,9 @@ case $basic_machine in
|
|||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
abacus)
|
||||
basic_machine=abacus-unknown
|
||||
;;
|
||||
adobe68k)
|
||||
basic_machine=m68010-adobe
|
||||
os=-scout
|
||||
|
|
@ -380,6 +431,9 @@ case $basic_machine in
|
|||
amd64)
|
||||
basic_machine=x86_64-pc
|
||||
;;
|
||||
amd64-*)
|
||||
basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
amdahl)
|
||||
basic_machine=580-amdahl
|
||||
os=-sysv
|
||||
|
|
@ -403,6 +457,10 @@ case $basic_machine in
|
|||
basic_machine=m68k-apollo
|
||||
os=-bsd
|
||||
;;
|
||||
aros)
|
||||
basic_machine=i386-pc
|
||||
os=-aros
|
||||
;;
|
||||
aux)
|
||||
basic_machine=m68k-apple
|
||||
os=-aux
|
||||
|
|
@ -411,10 +469,26 @@ case $basic_machine in
|
|||
basic_machine=ns32k-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
blackfin)
|
||||
basic_machine=bfin-unknown
|
||||
os=-linux
|
||||
;;
|
||||
blackfin-*)
|
||||
basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
bluegene*)
|
||||
basic_machine=powerpc-ibm
|
||||
os=-cnk
|
||||
;;
|
||||
c90)
|
||||
basic_machine=c90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
cegcc)
|
||||
basic_machine=arm-unknown
|
||||
os=-cegcc
|
||||
;;
|
||||
convex-c1)
|
||||
basic_machine=c1-convex
|
||||
os=-bsd
|
||||
|
|
@ -439,12 +513,27 @@ case $basic_machine in
|
|||
basic_machine=j90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
craynv)
|
||||
basic_machine=craynv-cray
|
||||
os=-unicosmp
|
||||
;;
|
||||
cr16)
|
||||
basic_machine=cr16-unknown
|
||||
os=-elf
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
crisv32 | crisv32-* | etraxfs*)
|
||||
basic_machine=crisv32-axis
|
||||
;;
|
||||
cris | cris-* | etrax*)
|
||||
basic_machine=cris-axis
|
||||
;;
|
||||
crx)
|
||||
basic_machine=crx-unknown
|
||||
os=-elf
|
||||
;;
|
||||
da30 | da30-*)
|
||||
basic_machine=m68k-da30
|
||||
;;
|
||||
|
|
@ -467,6 +556,14 @@ case $basic_machine in
|
|||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
dicos)
|
||||
basic_machine=i686-pc
|
||||
os=-dicos
|
||||
;;
|
||||
djgpp)
|
||||
basic_machine=i586-pc
|
||||
os=-msdosdjgpp
|
||||
;;
|
||||
dpx20 | dpx20-*)
|
||||
basic_machine=rs6000-bull
|
||||
os=-bosx
|
||||
|
|
@ -617,6 +714,14 @@ case $basic_machine in
|
|||
basic_machine=m68k-isi
|
||||
os=-sysv
|
||||
;;
|
||||
m68knommu)
|
||||
basic_machine=m68k-unknown
|
||||
os=-linux
|
||||
;;
|
||||
m68knommu-*)
|
||||
basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
m88k-omron*)
|
||||
basic_machine=m88k-omron
|
||||
;;
|
||||
|
|
@ -628,10 +733,17 @@ case $basic_machine in
|
|||
basic_machine=ns32k-utek
|
||||
os=-sysv
|
||||
;;
|
||||
microblaze)
|
||||
basic_machine=microblaze-xilinx
|
||||
;;
|
||||
mingw32)
|
||||
basic_machine=i386-pc
|
||||
os=-mingw32
|
||||
;;
|
||||
mingw32ce)
|
||||
basic_machine=arm-unknown
|
||||
os=-mingw32ce
|
||||
;;
|
||||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
|
|
@ -645,10 +757,6 @@ case $basic_machine in
|
|||
mips3*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||
;;
|
||||
mmix*)
|
||||
basic_machine=mmix-knuth
|
||||
os=-mmixware
|
||||
;;
|
||||
monitor)
|
||||
basic_machine=m68k-rom68k
|
||||
os=-coff
|
||||
|
|
@ -661,6 +769,9 @@ case $basic_machine in
|
|||
basic_machine=i386-pc
|
||||
os=-msdos
|
||||
;;
|
||||
ms1-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
||||
;;
|
||||
mvs)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
|
|
@ -729,10 +840,6 @@ case $basic_machine in
|
|||
np1)
|
||||
basic_machine=np1-gould
|
||||
;;
|
||||
nv1)
|
||||
basic_machine=nv1-cray
|
||||
os=-unicosmp
|
||||
;;
|
||||
nsr-tandem)
|
||||
basic_machine=nsr-tandem
|
||||
;;
|
||||
|
|
@ -740,9 +847,8 @@ case $basic_machine in
|
|||
basic_machine=hppa1.1-oki
|
||||
os=-proelf
|
||||
;;
|
||||
or32 | or32-*)
|
||||
openrisc | openrisc-*)
|
||||
basic_machine=or32-unknown
|
||||
os=-coff
|
||||
;;
|
||||
os400)
|
||||
basic_machine=powerpc-ibm
|
||||
|
|
@ -764,6 +870,14 @@ case $basic_machine in
|
|||
basic_machine=i860-intel
|
||||
os=-osf
|
||||
;;
|
||||
parisc)
|
||||
basic_machine=hppa-unknown
|
||||
os=-linux
|
||||
;;
|
||||
parisc-*)
|
||||
basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
os=-linux
|
||||
;;
|
||||
pbd)
|
||||
basic_machine=sparc-tti
|
||||
;;
|
||||
|
|
@ -773,6 +887,12 @@ case $basic_machine in
|
|||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pc98)
|
||||
basic_machine=i386-pc
|
||||
;;
|
||||
pc98-*)
|
||||
basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
|
|
@ -829,6 +949,10 @@ case $basic_machine in
|
|||
basic_machine=i586-unknown
|
||||
os=-pw32
|
||||
;;
|
||||
rdos)
|
||||
basic_machine=i386-pc
|
||||
os=-rdos
|
||||
;;
|
||||
rom68k)
|
||||
basic_machine=m68k-rom68k
|
||||
os=-coff
|
||||
|
|
@ -855,6 +979,10 @@ case $basic_machine in
|
|||
sb1el)
|
||||
basic_machine=mipsisa64sb1el-unknown
|
||||
;;
|
||||
sde)
|
||||
basic_machine=mipsisa32-sde
|
||||
os=-elf
|
||||
;;
|
||||
sei)
|
||||
basic_machine=mips-sei
|
||||
os=-seiux
|
||||
|
|
@ -866,6 +994,9 @@ case $basic_machine in
|
|||
basic_machine=sh-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
sh5el)
|
||||
basic_machine=sh5le-unknown
|
||||
;;
|
||||
sh64)
|
||||
basic_machine=sh64-unknown
|
||||
;;
|
||||
|
|
@ -955,6 +1086,10 @@ case $basic_machine in
|
|||
basic_machine=tic6x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tile*)
|
||||
basic_machine=tile-unknown
|
||||
os=-linux-gnu
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
|
|
@ -1015,6 +1150,10 @@ case $basic_machine in
|
|||
basic_machine=hppa1.1-winbond
|
||||
os=-proelf
|
||||
;;
|
||||
xbox)
|
||||
basic_machine=i686-pc
|
||||
os=-mingw32
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
|
|
@ -1026,6 +1165,10 @@ case $basic_machine in
|
|||
basic_machine=z8k-unknown
|
||||
os=-sim
|
||||
;;
|
||||
z80-*-coff)
|
||||
basic_machine=z80-unknown
|
||||
os=-sim
|
||||
;;
|
||||
none)
|
||||
basic_machine=none-none
|
||||
os=-none
|
||||
|
|
@ -1045,6 +1188,9 @@ case $basic_machine in
|
|||
romp)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
mmix)
|
||||
basic_machine=mmix-knuth
|
||||
;;
|
||||
rs6000)
|
||||
basic_machine=rs6000-ibm
|
||||
;;
|
||||
|
|
@ -1061,13 +1207,10 @@ case $basic_machine in
|
|||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||
basic_machine=sh-unknown
|
||||
;;
|
||||
sh64)
|
||||
basic_machine=sh64-unknown
|
||||
;;
|
||||
sparc | sparcv9 | sparcv9b)
|
||||
sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
|
|
@ -1114,6 +1257,9 @@ case $os in
|
|||
# First match some system type aliases
|
||||
# that might get confused with valid system types.
|
||||
# -solaris* is a basic system type, with this one exception.
|
||||
-auroraux)
|
||||
os=-auroraux
|
||||
;;
|
||||
-solaris1 | -solaris1.*)
|
||||
os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
||||
;;
|
||||
|
|
@ -1134,25 +1280,30 @@ case $os in
|
|||
# Each alternative MUST END IN A *, to match a version number.
|
||||
# -sysv* is not here because it comes later, after sysvr4.
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
|
||||
| -sym* | -kopensolaris* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* \
|
||||
| -aos* | -aros* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
| -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* \
|
||||
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
|
||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -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*)
|
||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
||||
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-qnx*)
|
||||
|
|
@ -1170,7 +1321,7 @@ case $os in
|
|||
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||
;;
|
||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
|
||||
| -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
|
||||
;;
|
||||
-mac*)
|
||||
|
|
@ -1215,6 +1366,9 @@ case $os in
|
|||
-atheos*)
|
||||
os=-atheos
|
||||
;;
|
||||
-syllable*)
|
||||
os=-syllable
|
||||
;;
|
||||
-386bsd)
|
||||
os=-bsd
|
||||
;;
|
||||
|
|
@ -1276,6 +1430,14 @@ case $os in
|
|||
-kaos*)
|
||||
os=-kaos
|
||||
;;
|
||||
-zvmoe)
|
||||
os=-zvmoe
|
||||
;;
|
||||
-dicos*)
|
||||
os=-dicos
|
||||
;;
|
||||
-nacl*)
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
|
|
@ -1298,6 +1460,12 @@ else
|
|||
# system, and we'll never get to this point.
|
||||
|
||||
case $basic_machine in
|
||||
score-*)
|
||||
os=-elf
|
||||
;;
|
||||
spu-*)
|
||||
os=-elf
|
||||
;;
|
||||
*-acorn)
|
||||
os=-riscix1.2
|
||||
;;
|
||||
|
|
@ -1307,9 +1475,9 @@ case $basic_machine in
|
|||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
c4x-* | tic4x-*)
|
||||
os=-coff
|
||||
;;
|
||||
c4x-* | tic4x-*)
|
||||
os=-coff
|
||||
;;
|
||||
# This must come before the *-dec entry.
|
||||
pdp10-*)
|
||||
os=-tops20
|
||||
|
|
@ -1335,6 +1503,9 @@ case $basic_machine in
|
|||
m68*-cisco)
|
||||
os=-aout
|
||||
;;
|
||||
mep-*)
|
||||
os=-elf
|
||||
;;
|
||||
mips*-cisco)
|
||||
os=-elf
|
||||
;;
|
||||
|
|
@ -1353,9 +1524,15 @@ case $basic_machine in
|
|||
*-be)
|
||||
os=-beos
|
||||
;;
|
||||
*-haiku)
|
||||
os=-haiku
|
||||
;;
|
||||
*-ibm)
|
||||
os=-aix
|
||||
;;
|
||||
*-knuth)
|
||||
os=-mmixware
|
||||
;;
|
||||
*-wec)
|
||||
os=-proelf
|
||||
;;
|
||||
|
|
@ -1458,7 +1635,7 @@ case $basic_machine in
|
|||
-sunos*)
|
||||
vendor=sun
|
||||
;;
|
||||
-aix*)
|
||||
-cnk*|-aix*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-beos*)
|
||||
|
|
@ -1521,7 +1698,7 @@ case $basic_machine in
|
|||
esac
|
||||
|
||||
echo $basic_machine$os
|
||||
exit 0
|
||||
exit
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
|
|
|
|||
519
configure.in
519
configure.in
|
|
@ -1,4 +1,4 @@
|
|||
dnl @(#) $Header: /tcpdump/master/libpcap/configure.in,v 1.138.2.22 2008-10-24 07:30:18 guy Exp $ (LBL)
|
||||
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.
|
||||
|
|
@ -6,20 +6,86 @@ dnl
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl
|
||||
|
||||
AC_REVISION($Revision: 1.138.2.22 $)
|
||||
#
|
||||
# See
|
||||
#
|
||||
# http://ftp.gnu.org/gnu/config/README
|
||||
#
|
||||
# for the URLs to use to fetch new versions of config.guess and
|
||||
# config.sub.
|
||||
#
|
||||
|
||||
AC_REVISION($Revision: 1.168 $)
|
||||
AC_PREREQ(2.50)
|
||||
AC_INIT(pcap.c)
|
||||
|
||||
AC_CANONICAL_SYSTEM
|
||||
|
||||
AC_LBL_C_INIT(V_CCOPT, V_INCLS, V_LIBS)
|
||||
AC_LBL_C_INIT_BEFORE_CC(V_CCOPT, V_INCLS)
|
||||
AC_PROG_CC
|
||||
AC_LBL_C_INIT(V_CCOPT, V_INCLS)
|
||||
AC_LBL_SHLIBS_INIT
|
||||
AC_LBL_C_INLINE
|
||||
AC_C___ATTRIBUTE__
|
||||
|
||||
AC_LBL_CHECK_TYPE(u_int8_t, u_char)
|
||||
AC_LBL_CHECK_TYPE(u_int16_t, u_short)
|
||||
AC_LBL_CHECK_TYPE(u_int32_t, u_int)
|
||||
AC_LBL_CHECK_TYPE(u_int64_t, unsigned long long)
|
||||
AC_CHECK_HEADERS(sys/bitypes.h)
|
||||
|
||||
AC_CHECK_TYPE([int8_t], ,
|
||||
[AC_DEFINE([int8_t], [signed char],
|
||||
[Define to `signed char' if int8_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([u_int8_t], ,
|
||||
[AC_DEFINE([u_int8_t], [unsigned char],
|
||||
[Define to `unsigned char' if u_int8_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([int16_t], ,
|
||||
[AC_DEFINE([int16_t], [short],
|
||||
[Define to `short' if int16_t not defined.])]
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([u_int16_t], ,
|
||||
[AC_DEFINE([u_int16_t], [unsigned short],
|
||||
[Define to `unsigned short' if u_int16_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([int32_t], ,
|
||||
[AC_DEFINE([int32_t], [int],
|
||||
[Define to `int' if int32_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([u_int32_t], ,
|
||||
[AC_DEFINE([u_int32_t], [unsigned int],
|
||||
[Define to `unsigned int' if u_int32_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([int64_t], ,
|
||||
[AC_DEFINE([int64_t], [long long],
|
||||
[Define to `long long' if int64_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
AC_CHECK_TYPE([u_int64_t], ,
|
||||
[AC_DEFINE([u_int64_t], [unsigned long long],
|
||||
[Define to `unsigned long long' if u_int64_t not defined.])],
|
||||
[AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif])
|
||||
|
||||
#
|
||||
# Try to arrange for large file support.
|
||||
|
|
@ -28,10 +94,13 @@ AC_SYS_LARGEFILE
|
|||
AC_FUNC_FSEEKO
|
||||
|
||||
dnl
|
||||
dnl libpcap doesn't itself use <sys/ioccom.h>; however, the test program
|
||||
dnl in "AC_LBL_FIXINCLUDES" in "aclocal.m4" uses it, so we have to
|
||||
dnl test for it and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
|
||||
dnl "AC_LBL_FIXINCLUDES" won't work on some platforms such as Solaris.
|
||||
dnl Even if <net/bpf.h> were, on all OSes that support BPF, fixed to
|
||||
dnl include <sys/ioccom.h>, and we were to drop support for older
|
||||
dnl releases without that fix, so that pcap-bpf.c doesn't need to
|
||||
dnl include <sys/ioccom.h>, the test program in "AC_LBL_FIXINCLUDES"
|
||||
dnl in "aclocal.m4" uses it, so we would still have to test for it
|
||||
dnl and set "HAVE_SYS_IOCCOM_H" if we have it, otherwise
|
||||
dnl "AC_LBL_FIXINCLUDES" wouldn't work on some platforms such as Solaris.
|
||||
dnl
|
||||
AC_CHECK_HEADERS(sys/ioccom.h sys/sockio.h limits.h paths.h)
|
||||
AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
|
||||
|
|
@ -185,7 +254,8 @@ fi
|
|||
|
||||
dnl to pacify those who hate protochain insn
|
||||
AC_MSG_CHECKING(if --disable-protochain option is specified)
|
||||
AC_ARG_ENABLE(protochain, [ --disable-protochain disable \"protochain\" insn])
|
||||
AC_ARG_ENABLE(protochain,
|
||||
AC_HELP_STRING([--disable-protochain],[disable \"protochain\" insn]))
|
||||
case "x$enable_protochain" in
|
||||
xyes) enable_protochain=enabled ;;
|
||||
xno) enable_protochain=disabled ;;
|
||||
|
|
@ -201,12 +271,15 @@ AC_MSG_RESULT(${enable_protochain})
|
|||
# SITA support is mutually exclusive with native capture support;
|
||||
# "--with-sita" selects SITA support.
|
||||
#
|
||||
AC_ARG_WITH(sita, [ --with-sita include SITA support],
|
||||
AC_ARG_WITH(sita,
|
||||
AC_HELP_STRING([--with-sita],[include SITA support]),
|
||||
[
|
||||
AC_DEFINE(SITA,1,[include ACN support])
|
||||
AC_MSG_NOTICE(Enabling SITA ACN support)
|
||||
V_PCAP=sita
|
||||
V_FINDALLDEVS=sita
|
||||
if test ! "x$withval" = "xno" ; then
|
||||
AC_DEFINE(SITA,1,[include ACN support])
|
||||
AC_MSG_NOTICE(Enabling SITA ACN support)
|
||||
V_PCAP=sita
|
||||
V_FINDALLDEVS=sita
|
||||
fi
|
||||
],
|
||||
[
|
||||
dnl
|
||||
|
|
@ -220,11 +293,12 @@ dnl
|
|||
if test -z "$with_pcap" && test "$cross_compiling" = yes; then
|
||||
AC_MSG_ERROR(pcap type not determined when cross-compiling; use --with-pcap=...)
|
||||
fi
|
||||
AC_ARG_WITH(pcap, [ --with-pcap=TYPE use packet capture TYPE])
|
||||
AC_ARG_WITH(pcap,
|
||||
AC_HELP_STRING([--with-pcap=TYPE],[use packet capture TYPE]))
|
||||
AC_MSG_CHECKING(packet capture type)
|
||||
if test ! -z "$with_pcap" ; then
|
||||
V_PCAP="$withval"
|
||||
elif test -r /dev/bpf ; then
|
||||
elif test -r /dev/bpf -o -h /dev/bpf ; then
|
||||
#
|
||||
# Cloning BPF device.
|
||||
#
|
||||
|
|
@ -251,10 +325,10 @@ elif test -r /usr/include/odmi.h ; then
|
|||
# We check for odmi.h instead.
|
||||
#
|
||||
V_PCAP=bpf
|
||||
elif test -r /usr/include/sys/dlpi.h ; then
|
||||
V_PCAP=dlpi
|
||||
elif test -c /dev/bpf0 ; then # check again in case not readable
|
||||
V_PCAP=bpf
|
||||
elif test -r /usr/include/sys/dlpi.h ; then
|
||||
V_PCAP=dlpi
|
||||
elif test -c /dev/enet ; then # check again in case not readable
|
||||
V_PCAP=enet
|
||||
elif test -c /dev/nit ; then # check again in case not readable
|
||||
|
|
@ -352,13 +426,34 @@ linux)
|
|||
if test $ac_cv_linux_vers -lt 2 ; then
|
||||
AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
|
||||
fi
|
||||
|
||||
#
|
||||
# Do we have the wireless extensions?
|
||||
#
|
||||
AC_CHECK_HEADERS(linux/wireless.h, [], [],
|
||||
[
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/types.h>
|
||||
])
|
||||
AC_CHECK_HEADERS()
|
||||
|
||||
#
|
||||
# Do we have libnl?
|
||||
#
|
||||
AC_ARG_WITH(libnl,
|
||||
AC_HELP_STRING([--without-libnl],[disable libnl support @<:@default=yes, on Linux, if present@:>@]),
|
||||
with_libnl=$withval,,)
|
||||
|
||||
if test x$with_libnl != xno ; then
|
||||
AC_CHECK_LIB(nl, nl_handle_alloc,
|
||||
LIBS="-lnl $LIBS"
|
||||
AC_DEFINE(HAVE_LIBNL,1,[if libnl exists]),
|
||||
if test x$with_libnl = xyes ; then
|
||||
AC_MSG_ERROR([libnl support requested but libnl not found])
|
||||
fi
|
||||
)
|
||||
fi
|
||||
|
||||
AC_LBL_TPACKET_STATS
|
||||
AC_LBL_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
|
||||
;;
|
||||
|
|
@ -382,6 +477,19 @@ bpf)
|
|||
[define if the system supports zerocopy BPF])
|
||||
],
|
||||
AC_MSG_RESULT(no))
|
||||
|
||||
#
|
||||
# Check whether we have struct BPF_TIMEVAL.
|
||||
#
|
||||
AC_CHECK_TYPES(struct BPF_TIMEVAL,,,
|
||||
[
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#ifdef HAVE_SYS_IOCCOM_H
|
||||
#include <sys/ioccom.h>
|
||||
#endif
|
||||
#include <net/bpf.h>
|
||||
])
|
||||
;;
|
||||
|
||||
dag)
|
||||
|
|
@ -392,6 +500,10 @@ septel)
|
|||
V_DEFS="$V_DEFS -DSEPTEL_ONLY"
|
||||
;;
|
||||
|
||||
snf)
|
||||
V_DEFS="$V_DEFS -DSNF_ONLY"
|
||||
;;
|
||||
|
||||
null)
|
||||
AC_MSG_WARN(cannot determine packet capture interface)
|
||||
AC_MSG_WARN((see the INSTALL doc for more info))
|
||||
|
|
@ -501,7 +613,8 @@ if test "x$have_socklen_t" = "xyes"; then
|
|||
fi
|
||||
AC_MSG_RESULT($have_socklen_t)
|
||||
|
||||
AC_ARG_ENABLE(ipv6, [ --enable-ipv6 build IPv6-capable version @<:@default=yes, if getaddrinfo available@:>@],
|
||||
AC_ARG_ENABLE(ipv6,
|
||||
AC_HELP_STRING([--enable-ipv6],[build IPv6-capable version @<:@default=yes, if getaddrinfo available@:>@]),
|
||||
[],
|
||||
[enable_ipv6=ifavailable])
|
||||
if test "$enable_ipv6" != "no"; then
|
||||
|
|
@ -517,32 +630,24 @@ if test "$enable_ipv6" != "no"; then
|
|||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether to build optimizer debugging code)
|
||||
AC_ARG_ENABLE(optimizer-dbg, [ --enable-optimizer-dbg build optimizer debugging code])
|
||||
AC_ARG_ENABLE(optimizer-dbg,
|
||||
AC_HELP_STRING([--enable-optimizer-dbg],[build optimizer debugging code]))
|
||||
if test "$enable_optimizer_dbg" = "yes"; then
|
||||
AC_DEFINE(BDEBUG,1,[Enable optimizer debugging])
|
||||
fi
|
||||
AC_MSG_RESULT(${enable_optimizer_dbg-no})
|
||||
|
||||
AC_MSG_CHECKING(whether to build parser debugging code)
|
||||
AC_ARG_ENABLE(yydebug, [ --enable-yydebug build parser debugging code])
|
||||
AC_ARG_ENABLE(yydebug,
|
||||
AC_HELP_STRING([--enable-yydebug],[build parser debugging code]))
|
||||
if test "$enable_yydebug" = "yes"; then
|
||||
AC_DEFINE(YYDEBUG,1,[Enable parser debugging])
|
||||
fi
|
||||
AC_MSG_RESULT(${enable_yydebug-no})
|
||||
|
||||
AC_MSG_CHECKING(whether we have /proc/net/dev)
|
||||
if test -r /proc/net/dev ; then
|
||||
ac_cv_lbl_proc_net_dev=yes
|
||||
else
|
||||
ac_cv_lbl_proc_net_dev=no
|
||||
fi
|
||||
if test $ac_cv_lbl_proc_net_dev = yes; then
|
||||
AC_DEFINE(HAVE_PROC_NET_DEV, 1, [define if you have a /proc/net/dev])
|
||||
fi
|
||||
AC_MSG_RESULT($ac_cv_lbl_proc_net_dev)
|
||||
|
||||
# Check for Endace DAG card support.
|
||||
AC_ARG_WITH([dag], [ --with-dag[[=DIR]] include Endace DAG support ("yes", "no" or DIR; default="yes" on BSD and Linux if present)],
|
||||
AC_ARG_WITH([dag],
|
||||
AC_HELP_STRING([--with-dag@<:@=DIR@:>@],[include Endace DAG support @<:@"yes", "no" or DIR; default="yes" on BSD and Linux if present@:>@]),
|
||||
[
|
||||
if test "$withval" = no
|
||||
then
|
||||
|
|
@ -564,14 +669,16 @@ AC_ARG_WITH([dag], [ --with-dag[[=DIR]] include Endace DAG support ("yes
|
|||
want_dag=ifpresent
|
||||
])
|
||||
|
||||
AC_ARG_WITH([dag-includes], [ --with-dag-includes=DIR Endace DAG include directory],
|
||||
AC_ARG_WITH([dag-includes],
|
||||
AC_HELP_STRING([--with-dag-includes=DIR],[Endace DAG include directory]),
|
||||
[
|
||||
# User wants DAG support and has specified a header directory, so use the provided value.
|
||||
want_dag=yes
|
||||
dag_include_dir=$withval
|
||||
],[])
|
||||
|
||||
AC_ARG_WITH([dag-libraries], [ --with-dag-libraries=DIR Endace DAG library directory],
|
||||
AC_ARG_WITH([dag-libraries],
|
||||
AC_HELP_STRING([--with-dag-libraries=DIR],[Endace DAG library directory]),
|
||||
[
|
||||
# User wants DAG support and has specified a library directory, so use the provided value.
|
||||
want_dag=yes
|
||||
|
|
@ -720,9 +827,39 @@ if test $ac_cv_lbl_dag_api = yes; then
|
|||
fi
|
||||
fi
|
||||
|
||||
if test $ac_cv_lbl_dag_api = yes; then
|
||||
# Under 2.5.x only we need to add dagutil.o.
|
||||
if test -r $dag_include_dir/dagutil.h; then
|
||||
AC_MSG_CHECKING([dagutil.o])
|
||||
dagutil_obj=no
|
||||
if test -r $dag_lib_dir/dagutil.o; then
|
||||
# Object file is ready and waiting.
|
||||
dagutil_obj=$dag_lib_dir/dagutil.o
|
||||
elif test -r $dag_lib_dir/libdag.a; then
|
||||
# Extract from libdag.a.
|
||||
ar x $dag_lib_dir/libdag.a dagutil.o 2>/dev/null
|
||||
if test -r ./dagutil.o; then
|
||||
dagutil_obj=./dagutil.o
|
||||
else
|
||||
ar x $dag_lib_dir/libdag.a libdag_la-dagutil.o 2>/dev/null
|
||||
if test -r ./libdag_la-dagutil.o; then
|
||||
dagutil_obj=./libdag_la-dagutil.o
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $dagutil_obj = no; then
|
||||
AC_MSG_RESULT([no (checked $dag_lib_dir $dag_lib_dir/libdag.a)])
|
||||
ac_cv_lbl_dag_api=no
|
||||
else
|
||||
AC_MSG_RESULT([yes ($dagutil_obj)])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $ac_cv_lbl_dag_api = yes; then
|
||||
V_INCLS="$V_INCLS -I$dag_include_dir"
|
||||
V_LIBS="$V_LIBS $dagapi_obj $dagopts_obj $dagreg_obj"
|
||||
ADDLARCHIVEOBJS="$ADDLARCHIVEOBJS $dagapi_obj $dagopts_obj $dagreg_obj $dagutil_obj"
|
||||
if test $V_PCAP != dag ; then
|
||||
SSRC="pcap-dag.c"
|
||||
fi
|
||||
|
|
@ -741,7 +878,7 @@ if test $ac_cv_lbl_dag_api = yes; then
|
|||
|
||||
if test "$dag_streams" = 1; then
|
||||
AC_DEFINE(HAVE_DAG_STREAMS_API, 1, [define if you have streams capable DAG API])
|
||||
DAGLIBS="-ldag"
|
||||
LIBS="$LIBS -ldag"
|
||||
fi
|
||||
|
||||
AC_DEFINE(HAVE_DAG_API, 1, [define if you have the DAG API])
|
||||
|
|
@ -765,7 +902,8 @@ else
|
|||
AC_MSG_RESULT(yes)
|
||||
fi
|
||||
|
||||
AC_ARG_WITH(septel, [ --with-septel[[=DIR]] include Septel support (located in directory DIR, if supplied). [default=yes, on Linux, if present]],
|
||||
AC_ARG_WITH(septel,
|
||||
AC_HELP_STRING([--with-septel@<:@=DIR@:>@],[include Septel support (located in directory DIR, if supplied). @<:@default=yes, on Linux, if present@:>@]),
|
||||
[
|
||||
if test "$withval" = no
|
||||
then
|
||||
|
|
@ -813,22 +951,19 @@ if test "$with_septel" != no; then
|
|||
|
||||
if test -z "$septel_root"; then
|
||||
septel_root=$srcdir/../septel
|
||||
|
||||
fi
|
||||
|
||||
septel_tools_dir="$septel_root"
|
||||
septel_include_dir="$septel_root/INC"
|
||||
DEF="-DHAVE_SEPTEL_API"
|
||||
|
||||
ac_cv_lbl_septel_api=no
|
||||
if test -r "$septel_include_dir/msg.h"; then
|
||||
V_INCLS="$V_INCLS -I$septel_include_dir"
|
||||
V_DEFS="$V_DEFS $DEF"
|
||||
V_LIBS="$V_LIBS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o "
|
||||
ADDLOBJS="$ADDLOBJS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o"
|
||||
ADDLARCHIVEOBJS="$ADDLARCHIVEOBJS $septel_tools_dir/asciibin.o $septel_tools_dir/bit2byte.o $septel_tools_dir/confirm.o $septel_tools_dir/fmtmsg.o $septel_tools_dir/gct_unix.o $septel_tools_dir/hqueue.o $septel_tools_dir/ident.o $septel_tools_dir/mem.o $septel_tools_dir/pack.o $septel_tools_dir/parse.o $septel_tools_dir/pool.o $septel_tools_dir/sdlsig.o $septel_tools_dir/strtonum.o $septel_tools_dir/timer.o $septel_tools_dir/trace.o"
|
||||
|
||||
if test "$V_PCAP" != septel ; then
|
||||
SSRC="pcap-septel.c"
|
||||
|
||||
fi
|
||||
ac_cv_lbl_septel_api=yes
|
||||
fi
|
||||
|
|
@ -847,6 +982,119 @@ if test "$V_PCAP" = septel -a "$ac_cv_lbl_septel_api" = no; then
|
|||
AC_MSG_ERROR(Specifying the capture type as 'septel' requires the Septel API to be present; use --with-septel=DIR)
|
||||
fi
|
||||
|
||||
# Check for Myricom SNF support.
|
||||
AC_ARG_WITH([snf],
|
||||
AC_HELP_STRING([--with-snf@<:@=DIR@:>@],[include Myricom SNF support @<:@"yes", "no" or DIR; default="yes" on BSD and Linux if present@:>@]),
|
||||
[
|
||||
if test "$withval" = no
|
||||
then
|
||||
# User explicitly doesn't want SNF
|
||||
want_snf=no
|
||||
elif test "$withval" = yes
|
||||
then
|
||||
# User wants SNF support but hasn't specific a directory.
|
||||
want_snf=yes
|
||||
else
|
||||
# User wants SNF support with a specified directory.
|
||||
want_snf=yes
|
||||
snf_root=$withval
|
||||
fi
|
||||
],[
|
||||
#
|
||||
# Use Sniffer API if present, otherwise don't
|
||||
#
|
||||
want_snf=ifpresent
|
||||
])
|
||||
|
||||
AC_ARG_WITH([snf-includes],
|
||||
AC_HELP_STRING([--with-snf-includes=DIR],[Myricom SNF include directory]),
|
||||
[
|
||||
# User wants SNF with specific header directory
|
||||
want_snf=yes
|
||||
snf_include_dir=$withval
|
||||
],[])
|
||||
|
||||
AC_ARG_WITH([snf-libraries],
|
||||
AC_HELP_STRING([--with-snf-libraries=DIR],[Myricom SNF library directory]),
|
||||
[
|
||||
# User wants SNF with specific lib directory
|
||||
want_snf=yes
|
||||
snf_lib_dir=$withval
|
||||
],[])
|
||||
|
||||
case "$V_PCAP" in
|
||||
bpf|linux|snf)
|
||||
#
|
||||
# We support the Sniffer API if we're on BSD, Linux, or if we're
|
||||
# building a Sniffer-only libpcap.
|
||||
#
|
||||
;;
|
||||
*)
|
||||
#
|
||||
# If the user explicitly requested Sniffer, tell them it's not
|
||||
# supported.
|
||||
#
|
||||
# If they expressed no preference, don't include it.
|
||||
#
|
||||
if test $want_snf = yes; then
|
||||
AC_MSG_ERROR(Myricom SNF support only available with 'bpf' 'linux' and 'snf' packet capture types)
|
||||
elif test $want_snf = yes; then
|
||||
want_snf=no
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
ac_cv_lbl_snf_api=no
|
||||
if test "$with_snf" != no; then
|
||||
|
||||
AC_MSG_CHECKING(whether we have Myricom Sniffer API)
|
||||
|
||||
if test -z "$snf_root"; then
|
||||
snf_root=/opt/snf
|
||||
fi
|
||||
|
||||
if test -z "$snf_include_dir"; then
|
||||
snf_include_dir="$snf_root/include"
|
||||
fi
|
||||
|
||||
if test -z "$snf_lib_dir"; then
|
||||
snf_lib_dir="$snf_root/lib"
|
||||
fi
|
||||
|
||||
if test -f "$snf_include_dir/snf.h"; then
|
||||
ac_cv_lbl_snf_api=yes
|
||||
fi
|
||||
AC_MSG_RESULT([$ac_cv_lbl_snf_api ($snf_root)])
|
||||
|
||||
if test $ac_cv_lbl_snf_api = no; then
|
||||
if test "$want_snf" = yes; then
|
||||
AC_MSG_ERROR(SNF API headers not found under $snf_include_dir; use --without-snf)
|
||||
fi
|
||||
else
|
||||
saved_ldflags=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS -L$snf_lib_dir"
|
||||
AC_CHECK_LIB([snf], [snf_init], [ac_cv_lbl_snf_api="yes"], [ac_cv_lbl_snf_api="no"])
|
||||
LDFLAGS="$saved_ldflags"
|
||||
|
||||
if test $ac_cv_lbl_snf_api = no; then
|
||||
if test "$want_snf" = yes; then
|
||||
AC_MSG_ERROR(SNF API cannot correctly be linked check config.log; use --without-snf)
|
||||
fi
|
||||
else
|
||||
V_INCLS="$V_INCLS -I$snf_include_dir"
|
||||
LIBS="$LIBS -lsnf"
|
||||
LDFLAGS="$LDFLAGS -L$snf_lib_dir"
|
||||
if test "$V_PCAP" != snf ; then
|
||||
SSRC="pcap-snf.c"
|
||||
fi
|
||||
AC_DEFINE(HAVE_SNF_API, 1, [define if you have Myricom SNF API])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
AC_LBL_LEX_AND_YACC(V_LEX, V_YACC, pcap_)
|
||||
if test "$V_LEX" = lex ; then
|
||||
|
|
@ -867,11 +1115,11 @@ if test "$V_LEX" = lex ; then
|
|||
fi
|
||||
|
||||
#
|
||||
# Assume a.out/ELF convention for shared library names (".so"), and
|
||||
# V7/BSD convention for man pages (file formats in section 5,
|
||||
# miscellaneous info in section 7).
|
||||
# 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).
|
||||
# Individual cases can override this.
|
||||
#
|
||||
DYEXT="so"
|
||||
DYEXT="none"
|
||||
MAN_FILE_FORMATS=5
|
||||
MAN_MISC_INFO=7
|
||||
case "$host_os" in
|
||||
|
|
@ -880,9 +1128,42 @@ aix*)
|
|||
dnl Workaround to enable certain features
|
||||
AC_DEFINE(_SUN,1,[define on AIX to get certain functions])
|
||||
|
||||
# We need "-lodm" and "-lcfg", as libpcap requires them on
|
||||
# AIX.
|
||||
DEPLIBS="-lodm -lcfg"
|
||||
#
|
||||
# AIX makes it fun to build shared and static libraries,
|
||||
# because they're *both* ".a" archive libraries. We
|
||||
# build the static library for the benefit of the traditional
|
||||
# scheme of building libpcap and tcpdump in subdirectories of
|
||||
# the same directory, with tcpdump statically linked with the
|
||||
# libpcap in question, but we also build a shared library as
|
||||
# "libpcap.shareda" and install *it*, rather than the static
|
||||
# library, as "libpcap.a".
|
||||
#
|
||||
DYEXT="shareda"
|
||||
|
||||
case "$V_PCAP" in
|
||||
|
||||
dlpi)
|
||||
#
|
||||
# If we're using DLPI, applications will need to
|
||||
# use /lib/pse.exp if present, as we use the
|
||||
# STREAMS routines.
|
||||
#
|
||||
pseexe="/lib/pse.exp"
|
||||
AC_MSG_CHECKING(for $pseexe)
|
||||
if test -f $pseexe ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
LIBS="-I:$pseexe"
|
||||
fi
|
||||
;;
|
||||
|
||||
bpf)
|
||||
#
|
||||
# If we're using BPF, we need "-lodm" and "-lcfg", as
|
||||
# we use them to load the BPF module.
|
||||
#
|
||||
LIBS="-lodm -lcfg"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
darwin*)
|
||||
|
|
@ -926,6 +1207,17 @@ hpux*)
|
|||
dnl for 32-bit PA-RISC, but should be left as "so" for
|
||||
dnl 64-bit PA-RISC or, I suspect, IA-64.
|
||||
AC_DEFINE(HAVE_HPUX10_20_OR_LATER,1,[on HP-UX 10.20 or later])
|
||||
if test "`uname -m`" = "ia64"; then
|
||||
DYEXT="so"
|
||||
else
|
||||
DYEXT="sl"
|
||||
fi
|
||||
|
||||
#
|
||||
# "-b" builds a shared library; "+h" sets the soname.
|
||||
#
|
||||
SHLIB_OPT="-b"
|
||||
SONAME_OPT="+h"
|
||||
|
||||
#
|
||||
# Use System V conventions for man pages.
|
||||
|
|
@ -942,11 +1234,21 @@ irix*)
|
|||
MAN_MISC_INFO=5
|
||||
;;
|
||||
|
||||
linux*)
|
||||
V_CCOPT="$V_CCOPT -fPIC"
|
||||
linux*|freebsd*|netbsd*|openbsd*|dragonfly*)
|
||||
DYEXT="so"
|
||||
|
||||
#
|
||||
# Compiler assumed to be GCC; run-time linker may require a -R
|
||||
# flag.
|
||||
#
|
||||
if test "$libdir" != "/usr/lib"; then
|
||||
V_RFLAGS=-Wl,-R$libdir
|
||||
fi
|
||||
;;
|
||||
|
||||
osf*)
|
||||
DYEXT="so"
|
||||
|
||||
#
|
||||
# Use System V conventions for man pages.
|
||||
#
|
||||
|
|
@ -971,6 +1273,7 @@ sinix*)
|
|||
solaris*)
|
||||
AC_DEFINE(HAVE_SOLARIS,1,[On solaris])
|
||||
|
||||
DYEXT="so"
|
||||
#
|
||||
# Use System V conventions for man pages.
|
||||
#
|
||||
|
|
@ -1002,16 +1305,19 @@ ln -s ${srcdir}/bpf/net net
|
|||
|
||||
AC_SUBST(V_CCOPT)
|
||||
AC_SUBST(V_DEFS)
|
||||
AC_SUBST(V_FINDALLDEVS)
|
||||
AC_SUBST(V_INCLS)
|
||||
AC_SUBST(V_LIBS)
|
||||
AC_SUBST(V_LEX)
|
||||
AC_SUBST(V_PCAP)
|
||||
AC_SUBST(V_FINDALLDEVS)
|
||||
AC_SUBST(V_SHLIB_CMD)
|
||||
AC_SUBST(V_SHLIB_OPT)
|
||||
AC_SUBST(V_SONAME_OPT)
|
||||
AC_SUBST(V_RPATH_OPT)
|
||||
AC_SUBST(V_YACC)
|
||||
AC_SUBST(ADDLOBJS)
|
||||
AC_SUBST(ADDLARCHIVEOBJS)
|
||||
AC_SUBST(SSRC)
|
||||
AC_SUBST(DYEXT)
|
||||
AC_SUBST(DAGLIBS)
|
||||
AC_SUBST(DEPLIBS)
|
||||
AC_SUBST(MAN_FILE_FORMATS)
|
||||
AC_SUBST(MAN_MISC_INFO)
|
||||
|
||||
|
|
@ -1028,6 +1334,31 @@ linux*)
|
|||
fi
|
||||
AC_DEFINE_UNQUOTED(LINUX_USB_MON_DEV, "/dev/$ac_usb_dev_name", [path for device for USB sniffing])
|
||||
AC_MSG_NOTICE(Device for USB sniffing is /dev/$ac_usb_dev_name)
|
||||
AC_CHECK_HEADERS(linux/usbdevice_fs.h)
|
||||
if test "$ac_cv_header_linux_usbdevice_fs_h" = yes; then
|
||||
#
|
||||
# OK, does it define bRequestType? Older versions of the kernel
|
||||
# define fields with names like "requesttype, "request", and
|
||||
# "value", rather than "bRequestType", "bRequest", and
|
||||
# "wValue".
|
||||
#
|
||||
AC_MSG_CHECKING(if usbdevfs_ctrltransfer struct has bRequestType member)
|
||||
AC_CACHE_VAL(ac_cv_usbdevfs_ctrltransfer_has_bRequestType,
|
||||
AC_TRY_COMPILE([
|
||||
AC_INCLUDES_DEFAULT
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif
|
||||
# include <linux/usbdevice_fs.h>],
|
||||
[u_int i = sizeof(((struct usbdevfs_ctrltransfer *)0)->bRequestType)],
|
||||
ac_cv_usbdevfs_ctrltransfer_has_bRequestType=yes,
|
||||
ac_cv_usbdevfs_ctrltransfer_has_bRequestType=no))
|
||||
AC_MSG_RESULT($ac_cv_usbdevfs_ctrltransfer_has_bRequestType)
|
||||
if test $ac_cv_usbdevfs_ctrltransfer_has_bRequestType = yes ; then
|
||||
AC_DEFINE(HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE,1,
|
||||
[if struct usbdevfs_ctrltransfer has bRequestType])
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT(no)
|
||||
|
|
@ -1036,24 +1367,54 @@ esac
|
|||
AC_SUBST(PCAP_SUPPORT_USB)
|
||||
AC_SUBST(USB_SRC)
|
||||
|
||||
dnl check for bluetooth sniffing support
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
AC_CHECK_HEADER(bluetooth/bluetooth.h,
|
||||
[
|
||||
AC_DEFINE(PCAP_SUPPORT_BT, 1, [target host supports Bluetooth sniffing])
|
||||
BT_SRC=pcap-bt-linux.c
|
||||
AC_MSG_NOTICE(Bluetooth sniffing is supported)
|
||||
],
|
||||
AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
|
||||
)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_NOTICE(no Bluetooth sniffing support)
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(PCAP_SUPPORT_BT)
|
||||
AC_SUBST(BT_SRC)
|
||||
AC_ARG_ENABLE([bluetooth],
|
||||
[AC_HELP_STRING([--enable-bluetooth],[enable Bluetooth support @<:@default=yes, if support available@:>@])],
|
||||
,enable_bluetooth=yes)
|
||||
|
||||
if test "x$enable_bluetooth" != "xno" ; then
|
||||
dnl check for Bluetooth sniffing support
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
AC_CHECK_HEADER(bluetooth/bluetooth.h,
|
||||
[
|
||||
AC_DEFINE(PCAP_SUPPORT_BT, 1, [target host supports Bluetooth sniffing])
|
||||
BT_SRC=pcap-bt-linux.c
|
||||
AC_MSG_NOTICE(Bluetooth sniffing is supported)
|
||||
],
|
||||
AC_MSG_NOTICE(Bluetooth sniffing is not supported; install bluez-lib devel to enable it)
|
||||
)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_NOTICE(no Bluetooth sniffing support implemented for $host_os)
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(PCAP_SUPPORT_BT)
|
||||
AC_SUBST(BT_SRC)
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE([can],
|
||||
[AC_HELP_STRING([--enable-can],[enable CAN support @<:@default=yes, if support available@:>@])],
|
||||
,enable_can=yes)
|
||||
|
||||
if test "x$enable_can" != "xno" ; then
|
||||
dnl check for CAN sniffing support
|
||||
case "$host_os" in
|
||||
linux*)
|
||||
AC_CHECK_HEADER(linux/can.h,
|
||||
[ 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),
|
||||
[#include <sys/socket.h>]
|
||||
)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_NOTICE(no CAN sniffing support implemented for $host_os)
|
||||
;;
|
||||
esac
|
||||
AC_SUBST(PCAP_SUPPORT_CAN)
|
||||
AC_SUBST(CAN_SRC)
|
||||
fi
|
||||
|
||||
AC_PROG_INSTALL
|
||||
|
||||
|
|
|
|||
11
dlpisubs.c
11
dlpisubs.c
|
|
@ -12,13 +12,17 @@
|
|||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/dlpisubs.c,v 1.1.2.2 2008-04-04 19:39:05 guy Exp $ (LBL)";
|
||||
"@(#) $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"
|
||||
#endif
|
||||
|
||||
#ifndef DL_IPATM
|
||||
#define DL_IPATM 0x12 /* ATM Classical IP interface */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_BUFMOD_H
|
||||
/*
|
||||
* Size of a bufmod chunk to pass upstream; that appears to be the
|
||||
|
|
@ -41,6 +45,7 @@ static const char rcsid[] _U_ =
|
|||
* what the value used to be - there's no particular reason why it
|
||||
* should be tied to MAXDLBUF, but we'll leave it as this for now.
|
||||
*/
|
||||
#define MAXDLBUF 8192
|
||||
#define PKTBUFSIZE (MAXDLBUF * sizeof(bpf_u_int32))
|
||||
|
||||
#endif
|
||||
|
|
@ -64,7 +69,9 @@ static const char rcsid[] _U_ =
|
|||
#include "pcap-int.h"
|
||||
#include "dlpisubs.h"
|
||||
|
||||
#ifdef HAVE_SYS_BUFMOD_H
|
||||
static void pcap_stream_err(const char *, int, char *);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Get the packet statistics.
|
||||
|
|
@ -339,6 +346,7 @@ strioctl(int fd, int cmd, int len, char *dp)
|
|||
return (str.ic_len);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYS_BUFMOD_H
|
||||
/*
|
||||
* Write stream error message to errbuf.
|
||||
*/
|
||||
|
|
@ -347,3 +355,4 @@ pcap_stream_err(const char *func, int err, char *errbuf)
|
|||
{
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE, "%s: %s", func, pcap_strerror(err));
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/dlpisubs.h,v 1.1.2.2 2008-04-04 19:39:05 guy Exp $
|
||||
* @(#) $Header: /tcpdump/master/libpcap/dlpisubs.h,v 1.2 2008-04-04 19:37:45 guy Exp $
|
||||
*/
|
||||
|
||||
#ifndef dlpisubs_h
|
||||
|
|
|
|||
14
etherent.c
14
etherent.c
|
|
@ -21,14 +21,26 @@
|
|||
|
||||
#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)";
|
||||
"@(#) $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
|
||||
|
||||
#ifdef WIN32
|
||||
#include <pcap-stdinc.h>
|
||||
#else /* WIN32 */
|
||||
#if HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#elif HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <memory.h>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/ethertype.h,v 1.14 2005-09-05 09:06:58 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#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)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-getad.c,v 1.12 2007-09-14 00:44:55 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -62,9 +62,12 @@ static const char rcsid[] _U_ =
|
|||
|
||||
#ifdef AF_PACKET
|
||||
# ifdef __Lynx__
|
||||
# include <netpacket/if_packet.h> /* LynxOS */
|
||||
/* LynxOS */
|
||||
# include <netpacket/if_packet.h>
|
||||
# else
|
||||
# include <linux/if_packet.h> /* Linux */
|
||||
/* Linux */
|
||||
# include <linux/types.h>
|
||||
# include <linux/if_packet.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
|
|
|||
146
fad-gifc.c
146
fad-gifc.c
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-gifc.c,v 1.11.2.1 2008-08-06 07:35:01 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-gifc.c,v 1.12 2008-08-06 07:34:09 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -122,136 +122,6 @@ struct rtentry; /* declarations in <net/if.h> */
|
|||
*/
|
||||
#define MAX_SA_LEN 255
|
||||
|
||||
#ifdef HAVE_PROC_NET_DEV
|
||||
/*
|
||||
* Get from "/proc/net/dev" all interfaces listed there; if they're
|
||||
* already in the list of interfaces we have, that won't add another
|
||||
* instance, but if they're not, that'll add them.
|
||||
*
|
||||
* We don't bother getting any addresses for them; it appears you can't
|
||||
* use SIOCGIFADDR on Linux to get IPv6 addresses for interfaces, and,
|
||||
* although some other types of addresses can be fetched with SIOCGIFADDR,
|
||||
* we don't bother with them for now.
|
||||
*
|
||||
* We also don't fail if we couldn't open "/proc/net/dev"; we just leave
|
||||
* the list of interfaces as is.
|
||||
*/
|
||||
static int
|
||||
scan_proc_net_dev(pcap_if_t **devlistp, int fd, char *errbuf)
|
||||
{
|
||||
FILE *proc_net_f;
|
||||
char linebuf[512];
|
||||
int linenum;
|
||||
unsigned char *p;
|
||||
char name[512]; /* XXX - pick a size */
|
||||
char *q, *saveq;
|
||||
struct ifreq ifrflags;
|
||||
int ret = 0;
|
||||
|
||||
proc_net_f = fopen("/proc/net/dev", "r");
|
||||
if (proc_net_f == NULL)
|
||||
return (0);
|
||||
|
||||
for (linenum = 1;
|
||||
fgets(linebuf, sizeof linebuf, proc_net_f) != NULL; linenum++) {
|
||||
/*
|
||||
* Skip the first two lines - they're headers.
|
||||
*/
|
||||
if (linenum <= 2)
|
||||
continue;
|
||||
|
||||
p = &linebuf[0];
|
||||
|
||||
/*
|
||||
* Skip leading white space.
|
||||
*/
|
||||
while (*p != '\0' && isspace(*p))
|
||||
p++;
|
||||
if (*p == '\0' || *p == '\n')
|
||||
continue; /* blank line */
|
||||
|
||||
/*
|
||||
* Get the interface name.
|
||||
*/
|
||||
q = &name[0];
|
||||
while (*p != '\0' && !isspace(*p)) {
|
||||
if (*p == ':') {
|
||||
/*
|
||||
* This could be the separator between a
|
||||
* name and an alias number, or it could be
|
||||
* the separator between a name with no
|
||||
* alias number and the next field.
|
||||
*
|
||||
* If there's a colon after digits, it
|
||||
* separates the name and the alias number,
|
||||
* otherwise it separates the name and the
|
||||
* next field.
|
||||
*/
|
||||
saveq = q;
|
||||
while (isdigit(*p))
|
||||
*q++ = *p++;
|
||||
if (*p != ':') {
|
||||
/*
|
||||
* That was the next field,
|
||||
* not the alias number.
|
||||
*/
|
||||
q = saveq;
|
||||
}
|
||||
break;
|
||||
} else
|
||||
*q++ = *p++;
|
||||
}
|
||||
*q = '\0';
|
||||
|
||||
/*
|
||||
* Get the flags for this interface, and skip it if
|
||||
* it's not up.
|
||||
*/
|
||||
strncpy(ifrflags.ifr_name, name, sizeof(ifrflags.ifr_name));
|
||||
if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifrflags) < 0) {
|
||||
if (errno == ENXIO)
|
||||
continue;
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"SIOCGIFFLAGS: %.*s: %s",
|
||||
(int)sizeof(ifrflags.ifr_name),
|
||||
ifrflags.ifr_name,
|
||||
pcap_strerror(errno));
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
if (!(ifrflags.ifr_flags & IFF_UP))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Add an entry for this interface, with no addresses.
|
||||
*/
|
||||
if (pcap_add_if(devlistp, name, ifrflags.ifr_flags, NULL,
|
||||
errbuf) == -1) {
|
||||
/*
|
||||
* Failure.
|
||||
*/
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ret != -1) {
|
||||
/*
|
||||
* Well, we didn't fail for any other reason; did we
|
||||
* fail due to an error reading the file?
|
||||
*/
|
||||
if (ferror(proc_net_f)) {
|
||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"Error reading /proc/net/dev: %s",
|
||||
pcap_strerror(errno));
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
|
||||
(void)fclose(proc_net_f);
|
||||
return (ret);
|
||||
}
|
||||
#endif /* HAVE_PROC_NET_DEV */
|
||||
|
||||
/*
|
||||
* Get a list of all interfaces that are up and that we can open.
|
||||
* Returns -1 on error, 0 otherwise.
|
||||
|
|
@ -537,20 +407,6 @@ pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
|
|||
}
|
||||
}
|
||||
free(buf);
|
||||
|
||||
#ifdef HAVE_PROC_NET_DEV
|
||||
if (ret != -1) {
|
||||
/*
|
||||
* We haven't had any errors yet; now read "/proc/net/dev",
|
||||
* and add to the list of interfaces all interfaces listed
|
||||
* there that we don't already have, because, on Linux,
|
||||
* SIOCGIFCONF reports only interfaces with IPv4 addresses,
|
||||
* so you need to read "/proc/net/dev" to get the names of
|
||||
* the rest of the interfaces.
|
||||
*/
|
||||
ret = scan_proc_net_dev(&devlist, fd, errbuf);
|
||||
}
|
||||
#endif
|
||||
(void)close(fd);
|
||||
|
||||
if (ret != -1) {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-glifc.c,v 1.6.2.1 2008/01/30 09:36:09 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-glifc.c,v 1.7 2008-01-30 09:35:48 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#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)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-null.c,v 1.2 2003-11-15 23:23:58 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#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)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/fad-win32.c,v 1.15 2007-09-25 20:34:36 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
|
|||
20
filtertest.c
20
filtertest.c
|
|
@ -24,7 +24,7 @@ static const char copyright[] _U_ =
|
|||
"@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/filtertest.c,v 1.2 2005/08/08 17:50:13 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/filtertest.c,v 1.2 2005-08-08 17:50:13 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -39,6 +39,7 @@ static const char rcsid[] _U_ =
|
|||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
|
|
@ -165,6 +166,7 @@ main(int argc, char **argv)
|
|||
int Oflag;
|
||||
long snaplen;
|
||||
int dlt;
|
||||
bpf_u_int32 netmask = PCAP_NETMASK_UNKNOWN;
|
||||
char *cmdbuf;
|
||||
pcap_t *pd;
|
||||
struct bpf_program fcode;
|
||||
|
|
@ -184,7 +186,7 @@ main(int argc, char **argv)
|
|||
program_name = argv[0];
|
||||
|
||||
opterr = 0;
|
||||
while ((op = getopt(argc, argv, "dF:Os:")) != -1) {
|
||||
while ((op = getopt(argc, argv, "dF:m:Os:")) != -1) {
|
||||
switch (op) {
|
||||
|
||||
case 'd':
|
||||
|
|
@ -199,6 +201,16 @@ main(int argc, char **argv)
|
|||
Oflag = 0;
|
||||
break;
|
||||
|
||||
case 'm': {
|
||||
in_addr_t addr;
|
||||
|
||||
addr = inet_addr(optarg);
|
||||
if (addr == INADDR_NONE)
|
||||
error("invalid netmask %s", optarg);
|
||||
netmask = addr;
|
||||
break;
|
||||
}
|
||||
|
||||
case 's': {
|
||||
char *end;
|
||||
|
||||
|
|
@ -235,7 +247,7 @@ main(int argc, char **argv)
|
|||
if (pd == NULL)
|
||||
error("Can't open fake pcap_t");
|
||||
|
||||
if (pcap_compile(pd, &fcode, cmdbuf, Oflag, 0) < 0)
|
||||
if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0)
|
||||
error("%s", pcap_geterr(pd));
|
||||
bpf_dump(&fcode, dflag);
|
||||
pcap_close(pd);
|
||||
|
|
@ -248,7 +260,7 @@ usage(void)
|
|||
(void)fprintf(stderr, "%s, with %s\n", program_name,
|
||||
pcap_lib_version());
|
||||
(void)fprintf(stderr,
|
||||
"Usage: %s [-dO] [ -F file ] [ -s snaplen ] dlt [ expression ]\n",
|
||||
"Usage: %s [-dO] [ -F file ] [ -m netmask] [ -s snaplen ] dlt [ expression ]\n",
|
||||
program_name);
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
|||
207
gencode.c
207
gencode.c
|
|
@ -21,7 +21,7 @@
|
|||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.290.2.16 2008-09-22 20:16:01 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.309 2008-12-23 20:13:29 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -31,6 +31,14 @@ static const char rcsid[] _U_ =
|
|||
#ifdef WIN32
|
||||
#include <pcap-stdinc.h>
|
||||
#else /* WIN32 */
|
||||
#if HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#elif HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#endif /* WIN32 */
|
||||
|
|
@ -49,6 +57,7 @@ static const char rcsid[] _U_ =
|
|||
#endif
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
|
|
@ -73,6 +82,7 @@ static const char rcsid[] _U_ =
|
|||
#include "sunatmpos.h"
|
||||
#include "ppp.h"
|
||||
#include "pcap/sll.h"
|
||||
#include "pcap/ipnet.h"
|
||||
#include "arcnet.h"
|
||||
#ifdef HAVE_NET_PFVAR_H
|
||||
#include <sys/socket.h>
|
||||
|
|
@ -155,6 +165,17 @@ enum e_offrel {
|
|||
OR_TRAN_IPV6 /* relative to the transport-layer header, with IPv6 network layer */
|
||||
};
|
||||
|
||||
#ifdef INET6
|
||||
/*
|
||||
* As errors are handled by a longjmp, anything allocated must be freed
|
||||
* in the longjmp handler, so it must be reachable from that handler.
|
||||
* One thing that's allocated is the result of pcap_nametoaddrinfo();
|
||||
* it must be freed with freeaddrinfo(). This variable points to any
|
||||
* addrinfo structure that would need to be freed.
|
||||
*/
|
||||
static struct addrinfo *ai;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* We divy out chunks of memory rather than call malloc each time so
|
||||
* we don't have to worry about leaking memory. It's probably
|
||||
|
|
@ -200,6 +221,7 @@ static struct block *gen_uncond(int);
|
|||
static inline struct block *gen_true(void);
|
||||
static inline struct block *gen_false(void);
|
||||
static struct block *gen_ether_linktype(int);
|
||||
static struct block *gen_ipnet_linktype(int);
|
||||
static struct block *gen_linux_sll_linktype(int);
|
||||
static struct slist *gen_load_prism_llprefixlen(void);
|
||||
static struct slist *gen_load_avs_llprefixlen(void);
|
||||
|
|
@ -365,10 +387,34 @@ syntax()
|
|||
static bpf_u_int32 netmask;
|
||||
static int snaplen;
|
||||
int no_optimize;
|
||||
#ifdef WIN32
|
||||
static int
|
||||
pcap_compile_unsafe(pcap_t *p, struct bpf_program *program,
|
||||
const char *buf, int optimize, bpf_u_int32 mask);
|
||||
|
||||
int
|
||||
pcap_compile(pcap_t *p, struct bpf_program *program,
|
||||
const char *buf, int optimize, bpf_u_int32 mask)
|
||||
{
|
||||
int result;
|
||||
|
||||
EnterCriticalSection(&g_PcapCompileCriticalSection);
|
||||
|
||||
result = pcap_compile_unsafe(p, program, buf, optimize, mask);
|
||||
|
||||
LeaveCriticalSection(&g_PcapCompileCriticalSection);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
pcap_compile_unsafe(pcap_t *p, struct bpf_program *program,
|
||||
const char *buf, int optimize, bpf_u_int32 mask)
|
||||
#else /* WIN32 */
|
||||
int
|
||||
pcap_compile(pcap_t *p, struct bpf_program *program,
|
||||
const char *buf, int optimize, bpf_u_int32 mask)
|
||||
#endif /* WIN32 */
|
||||
{
|
||||
extern int n_errors;
|
||||
const char * volatile xbuf = buf;
|
||||
|
|
@ -380,6 +426,12 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
|
|||
bpf_pcap = p;
|
||||
init_regs();
|
||||
if (setjmp(top_ctx)) {
|
||||
#ifdef INET6
|
||||
if (ai != NULL) {
|
||||
freeaddrinfo(ai);
|
||||
ai = NULL;
|
||||
}
|
||||
#endif
|
||||
lex_cleanup();
|
||||
freechunks();
|
||||
return (-1);
|
||||
|
|
@ -1112,6 +1164,8 @@ init_linktype(p)
|
|||
return;
|
||||
|
||||
case DLT_RAW:
|
||||
case DLT_IPV4:
|
||||
case DLT_IPV6:
|
||||
off_linktype = -1;
|
||||
off_macpl = 0;
|
||||
off_nl = 0;
|
||||
|
|
@ -1497,6 +1551,43 @@ init_linktype(p)
|
|||
off_nl = -1;
|
||||
off_nl_nosnap = -1;
|
||||
return;
|
||||
|
||||
case DLT_MPLS:
|
||||
/*
|
||||
* Currently, only raw "link[N:M]" filtering is supported.
|
||||
*/
|
||||
off_linktype = -1;
|
||||
off_macpl = -1;
|
||||
off_nl = -1;
|
||||
off_nl_nosnap = -1;
|
||||
return;
|
||||
|
||||
case DLT_USB_LINUX_MMAPPED:
|
||||
/*
|
||||
* Currently, only raw "link[N:M]" filtering is supported.
|
||||
*/
|
||||
off_linktype = -1;
|
||||
off_macpl = -1;
|
||||
off_nl = -1;
|
||||
off_nl_nosnap = -1;
|
||||
return;
|
||||
|
||||
case DLT_CAN_SOCKETCAN:
|
||||
/*
|
||||
* Currently, only raw "link[N:M]" filtering is supported.
|
||||
*/
|
||||
off_linktype = -1;
|
||||
off_macpl = -1;
|
||||
off_nl = -1;
|
||||
off_nl_nosnap = -1;
|
||||
return;
|
||||
|
||||
case DLT_IPNET:
|
||||
off_linktype = 1;
|
||||
off_macpl = 24; /* ipnet header length */
|
||||
off_nl = 0;
|
||||
off_nl_nosnap = -1;
|
||||
return;
|
||||
}
|
||||
bpf_error("unknown data link type %d", linktype);
|
||||
/* NOTREACHED */
|
||||
|
|
@ -1930,6 +2021,33 @@ gen_ether_linktype(proto)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* "proto" is an Ethernet type value and for IPNET, if it is not IPv4
|
||||
* or IPv6 then we have an error.
|
||||
*/
|
||||
static struct block *
|
||||
gen_ipnet_linktype(proto)
|
||||
register int proto;
|
||||
{
|
||||
switch (proto) {
|
||||
|
||||
case ETHERTYPE_IP:
|
||||
return gen_cmp(OR_LINK, off_linktype, BPF_B,
|
||||
(bpf_int32)IPH_AF_INET);
|
||||
/* NOTREACHED */
|
||||
|
||||
case ETHERTYPE_IPV6:
|
||||
return gen_cmp(OR_LINK, off_linktype, BPF_B,
|
||||
(bpf_int32)IPH_AF_INET6);
|
||||
/* NOTREACHED */
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return gen_false();
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate code to match a particular packet type.
|
||||
*
|
||||
|
|
@ -3071,6 +3189,32 @@ gen_linktype(proto)
|
|||
/*NOTREACHED*/
|
||||
break;
|
||||
|
||||
case DLT_IPV4:
|
||||
/*
|
||||
* Raw IPv4, so no type field.
|
||||
*/
|
||||
if (proto == ETHERTYPE_IP)
|
||||
return gen_true(); /* always true */
|
||||
|
||||
/* Checking for something other than IPv4; always false */
|
||||
return gen_false();
|
||||
/*NOTREACHED*/
|
||||
break;
|
||||
|
||||
case DLT_IPV6:
|
||||
/*
|
||||
* Raw IPv6, so no type field.
|
||||
*/
|
||||
#ifdef INET6
|
||||
if (proto == ETHERTYPE_IPV6)
|
||||
return gen_true(); /* always true */
|
||||
#endif
|
||||
|
||||
/* Checking for something other than IPv6; always false */
|
||||
return gen_false();
|
||||
/*NOTREACHED*/
|
||||
break;
|
||||
|
||||
case DLT_PPP:
|
||||
case DLT_PPP_PPPD:
|
||||
case DLT_PPP_SERIAL:
|
||||
|
|
@ -3327,6 +3471,9 @@ gen_linktype(proto)
|
|||
*/
|
||||
return gen_mcmp(OR_LINK, 0, BPF_W, 0x4d474300, 0xffffff00); /* compare the magic number */
|
||||
|
||||
case DLT_IPNET:
|
||||
return gen_ipnet_linktype(proto);
|
||||
|
||||
case DLT_LINUX_IRDA:
|
||||
bpf_error("IrDA link-layer type filtering not implemented");
|
||||
|
||||
|
|
@ -3350,6 +3497,7 @@ gen_linktype(proto)
|
|||
|
||||
case DLT_USB:
|
||||
case DLT_USB_LINUX:
|
||||
case DLT_USB_LINUX_MMAPPED:
|
||||
bpf_error("USB link-layer type filtering not implemented");
|
||||
|
||||
case DLT_BLUETOOTH_HCI_H4:
|
||||
|
|
@ -3357,7 +3505,8 @@ gen_linktype(proto)
|
|||
bpf_error("Bluetooth link-layer type filtering not implemented");
|
||||
|
||||
case DLT_CAN20B:
|
||||
bpf_error("CAN20B link-layer type filtering not implemented");
|
||||
case DLT_CAN_SOCKETCAN:
|
||||
bpf_error("CAN link-layer type filtering not implemented");
|
||||
|
||||
case DLT_IEEE802_15_4:
|
||||
case DLT_IEEE802_15_4_LINUX:
|
||||
|
|
@ -4514,29 +4663,30 @@ gen_gateway(eaddr, alist, proto, dir)
|
|||
b0 = gen_wlanhostop(eaddr, Q_OR);
|
||||
break;
|
||||
case DLT_SUNATM:
|
||||
if (is_lane) {
|
||||
/*
|
||||
* Check that the packet doesn't begin with an
|
||||
* LE Control marker. (We've already generated
|
||||
* a test for LANE.)
|
||||
*/
|
||||
b1 = gen_cmp(OR_LINK, SUNATM_PKT_BEGIN_POS,
|
||||
BPF_H, 0xFF00);
|
||||
gen_not(b1);
|
||||
if (!is_lane)
|
||||
bpf_error(
|
||||
"'gateway' supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel");
|
||||
/*
|
||||
* Check that the packet doesn't begin with an
|
||||
* LE Control marker. (We've already generated
|
||||
* a test for LANE.)
|
||||
*/
|
||||
b1 = gen_cmp(OR_LINK, SUNATM_PKT_BEGIN_POS,
|
||||
BPF_H, 0xFF00);
|
||||
gen_not(b1);
|
||||
|
||||
/*
|
||||
* Now check the MAC address.
|
||||
*/
|
||||
b0 = gen_ehostop(eaddr, Q_OR);
|
||||
gen_and(b1, b0);
|
||||
}
|
||||
/*
|
||||
* Now check the MAC address.
|
||||
*/
|
||||
b0 = gen_ehostop(eaddr, Q_OR);
|
||||
gen_and(b1, b0);
|
||||
break;
|
||||
case DLT_IP_OVER_FC:
|
||||
b0 = gen_ipfchostop(eaddr, Q_OR);
|
||||
break;
|
||||
default:
|
||||
bpf_error(
|
||||
"'gateway' supported only on ethernet/FDDI/token ring/802.11/Fibre Channel");
|
||||
"'gateway' supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel");
|
||||
}
|
||||
b1 = gen_host(**alist++, 0xffffffff, proto, Q_OR, Q_HOST);
|
||||
while (*alist) {
|
||||
|
|
@ -5966,6 +6116,7 @@ gen_scode(name, q)
|
|||
res0 = res = pcap_nametoaddrinfo(name);
|
||||
if (res == NULL)
|
||||
bpf_error("unknown host '%s'", name);
|
||||
ai = res;
|
||||
b = tmp = NULL;
|
||||
tproto = tproto6 = proto;
|
||||
if (off_linktype == -1 && tproto == Q_DEFAULT) {
|
||||
|
|
@ -5999,6 +6150,7 @@ gen_scode(name, q)
|
|||
gen_or(b, tmp);
|
||||
b = tmp;
|
||||
}
|
||||
ai = NULL;
|
||||
freeaddrinfo(res0);
|
||||
if (b == NULL) {
|
||||
bpf_error("unknown host '%s'%s", name,
|
||||
|
|
@ -6311,6 +6463,7 @@ gen_mcode6(s1, s2, masklen, q)
|
|||
res = pcap_nametoaddrinfo(s1);
|
||||
if (!res)
|
||||
bpf_error("invalid ip6 address %s", s1);
|
||||
ai = res;
|
||||
if (res->ai_next)
|
||||
bpf_error("%s resolved to multiple address", s1);
|
||||
addr = &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr;
|
||||
|
|
@ -6341,6 +6494,7 @@ gen_mcode6(s1, s2, masklen, q)
|
|||
|
||||
case Q_NET:
|
||||
b = gen_host6(addr, &mask, q.proto, q.dir, q.addr);
|
||||
ai = NULL;
|
||||
freeaddrinfo(res);
|
||||
return b;
|
||||
|
||||
|
|
@ -7003,6 +7157,13 @@ gen_broadcast(proto)
|
|||
break;
|
||||
|
||||
case Q_IP:
|
||||
/*
|
||||
* We treat a netmask of PCAP_NETMASK_UNKNOWN (0xffffffff)
|
||||
* as an indication that we don't know the netmask, and fail
|
||||
* in that case.
|
||||
*/
|
||||
if (netmask == PCAP_NETMASK_UNKNOWN)
|
||||
bpf_error("netmask not known, so 'ip broadcast' not supported");
|
||||
b0 = gen_linktype(ETHERTYPE_IP);
|
||||
hostmask = ~netmask;
|
||||
b1 = gen_mcmp(OR_NET, 16, BPF_W, (bpf_int32)0, hostmask);
|
||||
|
|
@ -7250,6 +7411,16 @@ gen_inbound(dir)
|
|||
dir);
|
||||
break;
|
||||
|
||||
case DLT_IPNET:
|
||||
if (dir) {
|
||||
/* match outgoing packets */
|
||||
b0 = gen_cmp(OR_LINK, 2, BPF_H, IPNET_OUTBOUND);
|
||||
} else {
|
||||
/* match incoming packets */
|
||||
b0 = gen_cmp(OR_LINK, 2, BPF_H, IPNET_INBOUND);
|
||||
}
|
||||
break;
|
||||
|
||||
case DLT_LINUX_SLL:
|
||||
if (dir) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.70.2.1 2007/11/18 02:04:55 guy Exp $ (LBL)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.71 2007-11-18 02:03:52 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.99.2.2 2007/11/18 02:04:55 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.101 2007-11-18 02:03:52 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -45,6 +45,7 @@ struct rtentry;
|
|||
#endif
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include <stdio.h>
|
||||
|
|
|
|||
99
inet.c
99
inet.c
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.75.2.4 2008-04-20 18:19:24 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/inet.c,v 1.79 2008-04-20 18:19:02 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -366,26 +366,38 @@ add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
|||
* a Cisco 340 or 350, rather than an old Aironet card, it should use
|
||||
* that in the description.
|
||||
*
|
||||
* Do NetBSD, DragonflyBSD, or OpenBSD support this as well? OpenBSD
|
||||
* lets you get a description, but it's not generated by the OS, it's
|
||||
* set with another ioctl that ifconfig supports; we use that to get
|
||||
* the description in OpenBSD.
|
||||
* Do NetBSD, DragonflyBSD, or OpenBSD support this as well? FreeBSD
|
||||
* and OpenBSD let you get a description, but it's not generated by the OS,
|
||||
* it's set with another ioctl that ifconfig supports; we use that to get
|
||||
* a description in FreeBSD and OpenBSD, but if there is no such
|
||||
* description available, it still might be nice to get some description
|
||||
* string based on the device type or something such as that.
|
||||
*
|
||||
* In OS X, the System Configuration framework can apparently return
|
||||
* names in 10.4 and later; it also appears that freedesktop.org's HAL
|
||||
* offers an "info.product" string, but the HAL specification says
|
||||
* it "should not be used in any UI" and "subsystem/capability
|
||||
* specific properties" should be used instead. Using that would
|
||||
* require that libpcap applications be linked with the frameworks/
|
||||
* libraries in question, which would be a bit of a pain unless we
|
||||
* offer, for example, a pkg-config:
|
||||
* names in 10.4 and later.
|
||||
*
|
||||
* http://pkg-config.freedesktop.org/wiki/
|
||||
* It also appears that freedesktop.org's HAL offers an "info.product"
|
||||
* string, but the HAL specification says it "should not be used in any
|
||||
* UI" and "subsystem/capability specific properties" should be used
|
||||
* instead and, in any case, I think HAL is being deprecated in
|
||||
* favor of other stuff such as DeviceKit. DeviceKit doesn't appear
|
||||
* to have any obvious product information for devices, but maybe
|
||||
* I haven't looked hard enough.
|
||||
*
|
||||
* script, so applications can just use that script to find out what
|
||||
* libraries you need to link with when linking with libpcap.
|
||||
* pkg-config is GPLed; I don't know whether that would prevent its
|
||||
* use with a BSD-licensed library such as libpcap.
|
||||
* Using the System Configuration framework, or HAL, or DeviceKit, or
|
||||
* whatever, would require that libpcap applications be linked with
|
||||
* the frameworks/libraries in question. That shouldn't be a problem
|
||||
* for programs linking with the shared version of libpcap (unless
|
||||
* you're running on AIX - which I think is the only UN*X that doesn't
|
||||
* support linking a shared library with other libraries on which it
|
||||
* depends, and having an executable linked only with the first shared
|
||||
* library automatically pick up the other libraries when started -
|
||||
* and using HAL or whatever). Programs linked with the static
|
||||
* version of libpcap would have to use pcap-config with the --static
|
||||
* flag in order to get the right linker flags in order to pick up
|
||||
* the additional libraries/frameworks; those programs need that anyway
|
||||
* for libpcap 1.1 and beyond on Linux, as, by default, it requires
|
||||
* -lnl.
|
||||
*
|
||||
* Do any other UN*Xes, or desktop environments support getting a
|
||||
* description?
|
||||
|
|
@ -402,10 +414,14 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
|||
char *description = NULL;
|
||||
pcap_addr_t *curaddr, *prevaddr, *nextaddr;
|
||||
#ifdef SIOCGIFDESCR
|
||||
struct ifreq ifrdesc;
|
||||
char ifdescr[IFDESCRSIZE];
|
||||
int s;
|
||||
#endif
|
||||
struct ifreq ifrdesc;
|
||||
#ifndef IFDESCRSIZE
|
||||
size_t descrlen = 64;
|
||||
#else
|
||||
size_t descrlen = IFDESCRSIZE;
|
||||
#endif /* IFDESCRSIZE */
|
||||
#endif /* SIOCGIFDESCR */
|
||||
|
||||
#ifdef SIOCGIFDESCR
|
||||
/*
|
||||
|
|
@ -413,23 +429,45 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags,
|
|||
*/
|
||||
memset(&ifrdesc, 0, sizeof ifrdesc);
|
||||
strlcpy(ifrdesc.ifr_name, name, sizeof ifrdesc.ifr_name);
|
||||
ifrdesc.ifr_data = (caddr_t)&ifdescr;
|
||||
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (s >= 0) {
|
||||
if (ioctl(s, SIOCGIFDESCR, &ifrdesc) == 0 &&
|
||||
strlen(ifrdesc.ifr_data) != 0)
|
||||
description = ifrdesc.ifr_data;
|
||||
for (;;) {
|
||||
free(description);
|
||||
if ((description = malloc(descrlen)) != NULL) {
|
||||
#ifdef __FreeBSD__
|
||||
ifrdesc.ifr_buffer.buffer = description;
|
||||
ifrdesc.ifr_buffer.length = descrlen;
|
||||
#else /* __FreeBSD__ */
|
||||
ifrdesc.ifr_data = (caddr_t)description;
|
||||
#endif /* __FreeBSD__ */
|
||||
if (ioctl(s, SIOCGIFDESCR, &ifrdesc) == 0)
|
||||
break;
|
||||
#ifdef __FreeBSD__
|
||||
else if (errno == ENAMETOOLONG)
|
||||
descrlen = ifrdesc.ifr_buffer.length;
|
||||
#endif /* __FreeBSD__ */
|
||||
else
|
||||
break;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
close(s);
|
||||
if (description != NULL && strlen(description) == 0) {
|
||||
free(description);
|
||||
description = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* SIOCGIFDESCR */
|
||||
|
||||
if (add_or_find_if(&curdev, alldevs, name, flags, description,
|
||||
errbuf) == -1) {
|
||||
free(description);
|
||||
/*
|
||||
* Error - give up.
|
||||
*/
|
||||
return (-1);
|
||||
}
|
||||
free(description);
|
||||
if (curdev == NULL) {
|
||||
/*
|
||||
* Device wasn't added because it can't be opened.
|
||||
|
|
@ -669,7 +707,10 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
|||
|| strstr(device, "bluetooth") != NULL
|
||||
#endif
|
||||
#ifdef PCAP_SUPPORT_USB
|
||||
|| strstr(device, "usb") != NULL
|
||||
|| strstr(device, "usbmon") != NULL
|
||||
#endif
|
||||
#ifdef HAVE_SNF_API
|
||||
|| strstr(device, "snf") != NULL
|
||||
#endif
|
||||
) {
|
||||
*netp = *maskp = 0;
|
||||
|
|
@ -702,6 +743,12 @@ pcap_lookupnet(device, netp, maskp, errbuf)
|
|||
}
|
||||
sin4 = (struct sockaddr_in *)&ifr.ifr_addr;
|
||||
*netp = sin4->sin_addr.s_addr;
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
#ifdef linux
|
||||
/* XXX Work around Linux kernel bug */
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
#endif
|
||||
(void)strncpy(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));
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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 $
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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 $
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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)
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/lbl/os-osf5.h,v 1.2 2002-08-02 03:24:15 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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)
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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.1.1 1999/10/07 23:46:41 mcr Exp $ (LBL)
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
* 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.1.1 1999/10/07 23:46:41 mcr Exp $ (LBL)
|
||||
* @(#) $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 */
|
||||
|
|
|
|||
2
llc.h
2
llc.h
|
|
@ -18,7 +18,7 @@
|
|||
* 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)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/llc.h,v 1.2 2001-01-28 09:44:50 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: snprintf.c,v 1.1 2004/04/05 22:43:51 guy Exp $ */
|
||||
/* $Id: snprintf.c,v 1.1 2004-04-05 22:43:51 guy Exp $ */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
#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 $";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/missing/snprintf.c,v 1.1 2004-04-05 22:43:51 guy Exp $";
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
|
|
|
|||
43
msdos/bin2c.c
Normal file
43
msdos/bin2c.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <time.h>
|
||||
|
||||
static void Abort (char *fmt,...)
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, fmt);
|
||||
vfprintf (stderr, fmt, args);
|
||||
va_end (args);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
FILE *inFile;
|
||||
FILE *outFile = stdout;
|
||||
time_t now = time (NULL);
|
||||
int ch, i;
|
||||
|
||||
if (argc != 2)
|
||||
Abort ("Usage: %s bin-file [> result]", argv[0]);
|
||||
|
||||
if ((inFile = fopen(argv[1],"rb")) == NULL)
|
||||
Abort ("Cannot open %s\n", argv[1]);
|
||||
|
||||
fprintf (outFile,
|
||||
"/* data statements for file %s at %.24s */\n"
|
||||
"/* Generated by BIN2C, G.Vanem 1995 */\n",
|
||||
argv[1], ctime(&now));
|
||||
|
||||
i = 0;
|
||||
while ((ch = fgetc(inFile)) != EOF)
|
||||
{
|
||||
if (i++ % 12 == 0)
|
||||
fputs ("\n ", outFile);
|
||||
fprintf (outFile, "0x%02X,", ch);
|
||||
}
|
||||
fputc ('\n', outFile);
|
||||
fclose (inFile);
|
||||
return (0);
|
||||
}
|
||||
80
msdos/common.dj
Normal file
80
msdos/common.dj
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
#
|
||||
# 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
|
||||
|
||||
default: check_gcclib all
|
||||
|
||||
GCCLIB = /djgpp/lib/gcc-lib/djgpp/3.31
|
||||
MAKEFILE = Makefile.dj
|
||||
|
||||
#
|
||||
# DLX 2.91+ lib. Change path to suite.
|
||||
# Not used anymore. Uses DXE3 now.
|
||||
#
|
||||
# DLX_LIB = $(DJDIR)/contrib/dlx.291/libdlx.a
|
||||
# DLX_LINK = $(DJDIR)/bin/dlxgen.exe
|
||||
|
||||
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
||||
|
||||
|
||||
ifeq ($(wildcard $(GCCLIB)/libgcc.a),)
|
||||
check_gcclib:
|
||||
@echo libgcc.a not found. Set \"$(GCCLIB)\" to \"/djgpp/lib/gcc-lib/djgpp/3.X\"
|
||||
endif
|
||||
|
||||
|
||||
#
|
||||
# Include 32-bit driver support
|
||||
#
|
||||
USE_32BIT_DRIVERS = 0
|
||||
|
||||
#
|
||||
# Use loadable driver modules instead of statically linking
|
||||
# all drivers.
|
||||
#
|
||||
USE_32BIT_MODULES = 0
|
||||
|
||||
#
|
||||
# Put interrupt sensitive code/data in locked sections
|
||||
# Do `make clean' in all affected directories after changing this.
|
||||
#
|
||||
USE_SECTION_LOCKING = 0
|
||||
|
||||
#
|
||||
# Set to 1 to use exception handler lib (only for me)
|
||||
#
|
||||
USE_EXCEPT = 0
|
||||
|
||||
CC = gcc.exe
|
||||
LD = ld.exe
|
||||
ASM = nasm.exe -fbin -dDEBUG
|
||||
YACC = bison.exe
|
||||
LEX = flex.exe
|
||||
|
||||
CFLAGS = -g -gcoff -O2 -Wall -I. -I$(WATT32_ROOT)/inc
|
||||
|
||||
ifeq ($(USE_EXCEPT),1)
|
||||
CFLAGS += -DUSE_EXCEPT
|
||||
EXC_LIB = d:/prog/mw/except/lib/libexc.a
|
||||
endif
|
||||
|
||||
ifeq ($(USE_SECTION_LOCKING),1)
|
||||
CFLAGS += -DUSE_SECTION_LOCKING
|
||||
endif
|
||||
|
||||
ifeq ($(USE_32BIT_DRIVERS),1)
|
||||
CFLAGS += -DUSE_32BIT_DRIVERS
|
||||
endif
|
||||
|
||||
%.o: %.c
|
||||
$(CC) -c $(CFLAGS) $<
|
||||
@echo
|
||||
|
||||
%.o: %.s
|
||||
$(CC) -c $(CFLAGS) -x assembler-with-cpp -o $@ $<
|
||||
@echo
|
||||
|
||||
184
msdos/makefile
Normal file
184
msdos/makefile
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
#
|
||||
# Makefile for dos-libpcap. NB. This makefile requires a Borland
|
||||
# compatible make tool.
|
||||
#
|
||||
# Targets:
|
||||
# Borland C 4.0+ (DOS large model)
|
||||
# Metaware HighC 3.3+ (PharLap 386|DosX)
|
||||
#
|
||||
|
||||
.AUTODEPEND
|
||||
.SWAP
|
||||
|
||||
!if "$(WATT_ROOT)" == ""
|
||||
!error Environment variable "WATT_ROOT" not set.
|
||||
!endif
|
||||
|
||||
WATT_INC = $(WATT_ROOT)\inc
|
||||
|
||||
DEFS = -DMSDOS -DDEBUG -DNDIS_DEBUG -D_U_= -Dinline= \
|
||||
-DHAVE_STRERROR -DHAVE_LIMITS_H
|
||||
|
||||
ASM = tasm.exe -t -l -mx -m2 -DDEBUG
|
||||
|
||||
SOURCE = grammar.c scanner.c bpf_filt.c bpf_imag.c bpf_dump.c \
|
||||
etherent.c gencode.c nametoad.c pcap-dos.c optimize.c \
|
||||
savefile.c pcap.c inet.c msdos\ndis2.c msdos\pktdrvr.c \
|
||||
missing\snprintf.c
|
||||
|
||||
BORLAND_OBJ = $(SOURCE:.c=.obj) msdos\pkt_rx0.obj msdos\ndis_0.obj
|
||||
|
||||
HIGHC_OBJ = $(SOURCE:.c=.o32) msdos\pkt_rx0.o32
|
||||
|
||||
all:
|
||||
@echo Usage: make pcap_bc.lib or pcap_hc.lib
|
||||
|
||||
|
||||
pcap_bc.lib: bcc.arg $(BORLAND_OBJ) pcap_bc
|
||||
|
||||
|
||||
pcap_hc.lib: hc386.arg $(HIGHC_OBJ)
|
||||
386lib $< @&&|
|
||||
-nowarn -nobackup -twocase -replace $(HIGHC_OBJ)
|
||||
|
|
||||
|
||||
pcap_bc: $(BORLAND_OBJ)
|
||||
@tlib pcap_bc.lib /C @&&|
|
||||
-+$(**:.obj=-+)
|
||||
|
|
||||
|
||||
.c.obj:
|
||||
bcc.exe @bcc.arg -o$*.obj $*.c
|
||||
|
||||
.c.o32:
|
||||
hc386.exe @hc386.arg -o $*.o32 $*.c
|
||||
|
||||
.asm.obj:
|
||||
$(ASM) $*.asm, $*.obj
|
||||
|
||||
.asm.o32:
|
||||
$(ASM) -DDOSX=1 $*.asm, $*.o32
|
||||
|
||||
scanner.c: scanner.l
|
||||
flex -Ppcap_ -7 -oscanner.c scanner.l
|
||||
|
||||
grammar.c tokdefs.h: grammar.y
|
||||
bison --name-prefix=pcap_ --yacc --defines grammar.y
|
||||
- @del grammar.c
|
||||
- @del tokdefs.h
|
||||
ren y_tab.c grammar.c
|
||||
ren y_tab.h tokdefs.h
|
||||
|
||||
bcc.arg: msdos\Makefile
|
||||
@copy &&|
|
||||
$(DEFS) -ml -c -v -3 -O2 -po -RT- -w-
|
||||
-I$(WATT_INC) -I. -I.\msdos\pm_drvr -H=$(TEMP)\bcc.sym
|
||||
| $<
|
||||
|
||||
hc386.arg: msdos\Makefile
|
||||
@copy &&|
|
||||
# -DUSE_32BIT_DRIVERS
|
||||
$(DEFS) -DDOSX=1 -w3 -c -g -O5
|
||||
-I$(WATT_INC) -I. -I.\msdos\pm_drvr
|
||||
-Hsuffix=.o32
|
||||
-Hnocopyr
|
||||
-Hpragma=Offwarn(491,553,572)
|
||||
-Hon=Recognize_library # make memcpy/strlen etc. inline
|
||||
-Hoff=Behaved # turn off some optimiser warnings
|
||||
| $<
|
||||
|
||||
clean:
|
||||
@del *.obj
|
||||
@del *.o32
|
||||
@del *.lst
|
||||
@del *.map
|
||||
@del bcc.arg
|
||||
@del hc386.arg
|
||||
@del grammar.c
|
||||
@del tokdefs.h
|
||||
@del scanner.c
|
||||
@echo Cleaned
|
||||
|
||||
#
|
||||
# dependencies
|
||||
#
|
||||
pkt_rx0.obj: msdos\pkt_rx0.asm
|
||||
|
||||
bpf_filt.obj: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
||||
|
||||
bpf_imag.obj: bpf_imag.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
bpf_dump.obj: bpf_dump.c pcap.h pcap-bpf.h
|
||||
|
||||
etherent.obj: etherent.c pcap-int.h pcap.h pcap-bpf.h pcap-namedb.h
|
||||
|
||||
optimize.obj: optimize.c pcap-int.h pcap.h pcap-bpf.h gencode.h
|
||||
|
||||
savefile.obj: savefile.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
pcap.obj: pcap.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
inet.obj: inet.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
grammar.obj: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pf.h pcap-namedb.h
|
||||
|
||||
scanner.obj: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pcap-namedb.h tokdefs.h
|
||||
|
||||
gencode.obj: gencode.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h \
|
||||
ethertype.h nlpid.h llc.h gencode.h atmuni31.h sunatmpos.h ppp.h sll.h \
|
||||
arcnet.h pf.h pcap-namedb.h
|
||||
|
||||
nametoad.obj: nametoad.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pcap-namedb.h ethertype.h
|
||||
|
||||
pcap-dos.obj: pcap-dos.c pcap.h pcap-bpf.h pcap-dos.h pcap-int.h \
|
||||
msdos\pktdrvr.h
|
||||
|
||||
pktdrvr.obj: msdos\pktdrvr.c gnuc.h pcap-dos.h pcap-int.h \
|
||||
pcap.h pcap-bpf.h msdos\pktdrvr.h msdos\pkt_stub.inc
|
||||
|
||||
ndis2.obj: msdos\ndis2.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h \
|
||||
msdos\ndis2.h
|
||||
|
||||
pkt_rx0.o32: msdos\pkt_rx0.asm
|
||||
|
||||
bpf_filt.o32: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
||||
|
||||
bpf_imag.o32: bpf_imag.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
bpf_dump.o32: bpf_dump.c pcap.h pcap-bpf.h
|
||||
|
||||
etherent.o32: etherent.c pcap-int.h pcap.h pcap-bpf.h pcap-namedb.h
|
||||
|
||||
optimize.o32: optimize.c pcap-int.h pcap.h pcap-bpf.h gencode.h
|
||||
|
||||
savefile.o32: savefile.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
pcap.o32: pcap.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
inet.o32: inet.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
grammar.o32: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pf.h pcap-namedb.h
|
||||
|
||||
scanner.o32: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pcap-namedb.h tokdefs.h
|
||||
|
||||
gencode.o32: gencode.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h \
|
||||
ethertype.h nlpid.h llc.h gencode.h atmuni31.h sunatmpos.h ppp.h sll.h \
|
||||
arcnet.h pf.h pcap-namedb.h
|
||||
|
||||
nametoad.o32: nametoad.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pcap-namedb.h ethertype.h
|
||||
|
||||
pcap-dos.o32: pcap-dos.c pcap.h pcap-bpf.h pcap-dos.h pcap-int.h \
|
||||
msdos\pktdrvr.h
|
||||
|
||||
pktdrvr.o32: msdos\pktdrvr.c gnuc.h pcap-dos.h pcap-int.h \
|
||||
pcap.h pcap-bpf.h msdos\pktdrvr.h msdos\pkt_stub.inc
|
||||
|
||||
ndis2.o32: msdos\ndis2.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h \
|
||||
msdos\ndis2.h
|
||||
|
||||
152
msdos/makefile.dj
Normal file
152
msdos/makefile.dj
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
#
|
||||
# GNU Makefile for DOS-libpcap. djgpp version.
|
||||
#
|
||||
# Use this makefile from the libpcap root directory.
|
||||
# E.g. like this:
|
||||
#
|
||||
# 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
|
||||
|
||||
PREREQUISITES = scanner.c grammar.c tokdefs.h version.h msdos/pkt_stub.inc
|
||||
|
||||
include msdos/common.dj
|
||||
|
||||
DRIVER_DIR = ./msdos/pm_drvr
|
||||
|
||||
CFLAGS += -DDEBUG -DNDIS_DEBUG -DHAVE_LIMITS_H -DHAVE_STRERROR \
|
||||
-D_U_='__attribute__((unused))' -DHAVE_VERSION_H
|
||||
|
||||
# CFLAGS += -Dyylval=pcap_lval -DBDEBUG -DNDEBUG
|
||||
|
||||
SOURCES = grammar.c scanner.c bpf_filt.c bpf_imag.c bpf_dump.c \
|
||||
etherent.c gencode.c nametoad.c pcap-dos.c optimize.c \
|
||||
savefile.c pcap.c inet.c msdos\pktdrvr.c msdos/ndis2.c \
|
||||
missing/snprintf.c
|
||||
|
||||
OBJECTS = $(notdir $(SOURCES:.c=.o))
|
||||
TEMPBIN = tmp.bin
|
||||
|
||||
ifeq ($(USE_32BIT_DRIVERS),1)
|
||||
PM_OBJECTS = $(addprefix $(DRIVER_DIR)/, \
|
||||
printk.o pci.o pci-scan.o bios32.o dma.o irq.o intwrap.o \
|
||||
lock.o kmalloc.o quirks.o timer.o net_init.o)
|
||||
#
|
||||
# Static link of drivers
|
||||
#
|
||||
ifeq ($(USE_32BIT_MODULES),0)
|
||||
PM_OBJECTS += $(addprefix $(DRIVER_DIR)/, \
|
||||
accton.o 8390.o 3c503.o 3c509.o 3c59x.o 3c515.o \
|
||||
3c575_cb.o 3c90x.o ne.o wd.o cs89x0.o rtl8139.o)
|
||||
endif
|
||||
endif
|
||||
|
||||
all: libpcap.a
|
||||
|
||||
ifeq ($(USE_32BIT_DRIVERS),1)
|
||||
$(PM_OBJECTS):
|
||||
$(MAKE) -f Makefile.dj -C $(DRIVER_DIR) $(notdir $@)
|
||||
endif
|
||||
|
||||
libpcap.a: version.h $(OBJECTS) $(PM_OBJECTS)
|
||||
rm -f $@
|
||||
ar rs $@ $^
|
||||
|
||||
msdos/pkt_stub.inc: msdos/bin2c.exe msdos/pkt_rx1.S
|
||||
$(ASM) -o $(TEMPBIN) -lmsdos/pkt_rx1.lst msdos/pkt_rx1.S
|
||||
./msdos/bin2c $(TEMPBIN) > $@
|
||||
rm -f $(TEMPBIN)
|
||||
|
||||
grammar.c tokdefs.h: grammar.y
|
||||
rm -f grammar.c tokdefs.h
|
||||
$(YACC) --name-prefix=pcap_ --yacc --defines grammar.y
|
||||
mv -f y_tab.c grammar.c
|
||||
mv -f y_tab.h tokdefs.h
|
||||
|
||||
version.h: ./VERSION
|
||||
@echo '/* Generated from VERSION. Do not edit */' > $@
|
||||
sed -e 's/.*/static char pcap_version_string[] = "libpcap (&)";/' ./VERSION >> $@
|
||||
|
||||
scanner.c: scanner.l
|
||||
$(LEX) -Ppcap_ -7 -t $^ > $@
|
||||
@echo
|
||||
|
||||
msdos/bin2c.exe: msdos/bin2c.c
|
||||
$(CC) $*.c -o $*.exe
|
||||
|
||||
clean:
|
||||
$(MAKE) -f Makefile.dj -C $(DRIVER_DIR) clean
|
||||
$(MAKE) -f Makefile.dj -C libcpcap clean
|
||||
rm -f $(OBJECTS) msdos/pkt_rx1.lst Makefile.bak $(PREREQUISITES)
|
||||
|
||||
vclean: clean
|
||||
rm -f libpcap.a msdos/bin2c.exe
|
||||
|
||||
#
|
||||
# Generated dependencies; Due to some hacks in gcc 2.95 and djgpp 2.03
|
||||
# we must prevent "$(DJDIR)/bin/../include/sys/version.h" from beeing
|
||||
# included in dependency output (or else this makefile cannot be used on
|
||||
# another machine). We therefore use a special 'specs' file during
|
||||
# pre-processing.
|
||||
#
|
||||
MM_SPECS = specs.tmp
|
||||
MAKEFILE = msdos/Makefile.dj
|
||||
|
||||
depend: $(PREREQUISITES)
|
||||
@echo Generating dependencies..
|
||||
@cp $(MAKEFILE) Makefile.bak
|
||||
@echo "*cpp: %(cpp_cpu) %{posix:-D_POSIX_SOURCE} -remap" > $(MM_SPECS)
|
||||
sed -e "/^# DO NOT DELETE THIS LINE/,$$d" < Makefile.bak > $(MAKEFILE)
|
||||
echo "# DO NOT DELETE THIS LINE" >> $(MAKEFILE)
|
||||
$(CC) -MM -specs=$(MM_SPECS) $(CFLAGS) $(SOURCES) >> $(MAKEFILE)
|
||||
rm -f $(MM_SPECS)
|
||||
|
||||
#
|
||||
# Manually generated dependencies
|
||||
#
|
||||
msdos/pktdrvr.c: msdos/pkt_stub.inc
|
||||
scanner.c: scanner.l
|
||||
grammar.c tokdefs.h: grammar.y
|
||||
grammar.h: grammar.y
|
||||
scanner.l: pcap-int.h pcap-namedb.h gencode.h grammar.h gnuc.h
|
||||
grammar.y: pcap-int.h gencode.h pcap-namedb.h gnuc.h
|
||||
|
||||
#
|
||||
# Automatically generated dependencies
|
||||
#
|
||||
# DO NOT DELETE THIS LINE
|
||||
grammar.o: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h pf.h \
|
||||
pcap-namedb.h
|
||||
scanner.o: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h pcap-namedb.h \
|
||||
tokdefs.h
|
||||
bpf_filt.o: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
||||
bpf_imag.o: bpf_imag.c pcap-int.h pcap.h pcap-bpf.h
|
||||
bpf_dump.o: bpf_dump.c pcap.h pcap-bpf.h
|
||||
etherent.o: etherent.c pcap-int.h pcap.h pcap-bpf.h pcap-namedb.h
|
||||
gencode.o: gencode.c pcap-dos.h msdos/pm_drvr/lock.h pcap-int.h pcap.h \
|
||||
pcap-bpf.h ethertype.h nlpid.h llc.h gencode.h atmuni31.h sunatmpos.h \
|
||||
ppp.h sll.h arcnet.h pf.h pcap-namedb.h
|
||||
nametoad.o: nametoad.c pcap-int.h pcap.h pcap-bpf.h gencode.h \
|
||||
pcap-namedb.h ethertype.h
|
||||
pcap-dos.o: pcap-dos.c msdos/pm_drvr/pmdrvr.h msdos/pm_drvr/iface.h \
|
||||
msdos/pm_drvr/lock.h msdos/pm_drvr/ioport.h pcap-dos.h pcap-int.h \
|
||||
pcap.h pcap-bpf.h msdos/pm_drvr/kmalloc.h msdos/pm_drvr/bitops.h \
|
||||
msdos/pm_drvr/timer.h msdos/pm_drvr/dma.h msdos/pm_drvr/irq.h \
|
||||
msdos/pm_drvr/printk.h msdos/pm_drvr/pci.h msdos/pm_drvr/bios32.h \
|
||||
msdos/pm_drvr/module.h msdos/pm_drvr/3c501.h msdos/pm_drvr/3c503.h \
|
||||
msdos/pm_drvr/3c509.h msdos/pm_drvr/3c59x.h msdos/pm_drvr/3c515.h \
|
||||
msdos/pm_drvr/3c90x.h msdos/pm_drvr/3c575_cb.h msdos/pm_drvr/ne.h \
|
||||
msdos/pm_drvr/wd.h msdos/pm_drvr/accton.h msdos/pm_drvr/cs89x0.h \
|
||||
msdos/pm_drvr/rtl8139.h msdos/pm_drvr/ne2k-pci.h msdos/pktdrvr.h
|
||||
optimize.o: optimize.c pcap-int.h pcap.h pcap-bpf.h gencode.h
|
||||
savefile.o: savefile.c pcap-int.h pcap.h pcap-bpf.h
|
||||
pcap.o: pcap.c pcap-dos.h msdos/pm_drvr/lock.h pcap-int.h pcap.h \
|
||||
pcap-bpf.h
|
||||
inet.o: inet.c pcap-int.h pcap.h pcap-bpf.h
|
||||
pktdrvr.o: msdos/pktdrvr.c gnuc.h pcap-dos.h msdos/pm_drvr/lock.h \
|
||||
pcap-int.h pcap.h pcap-bpf.h msdos/pktdrvr.h msdos/pkt_stub.inc
|
||||
ndis2.o: msdos/ndis2.c pcap-dos.h msdos/pm_drvr/lock.h pcap-int.h pcap.h \
|
||||
pcap-bpf.h msdos/ndis2.h
|
||||
snprintf.o: missing/snprintf.c pcap-int.h pcap.h pcap-bpf.h
|
||||
131
msdos/makefile.wc
Normal file
131
msdos/makefile.wc
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
#
|
||||
# Watcom Makefile for dos-libpcap.
|
||||
#
|
||||
# Specify MODEL = `3r' or `3s'
|
||||
# Specify TARGET = `pharlap' or `dos4g'
|
||||
#
|
||||
# Use this makefile from the libpcap root directory.
|
||||
# E.g. like this:
|
||||
#
|
||||
# c:\net\pcap> wmake -f msdos\makefile.wc
|
||||
#
|
||||
|
||||
MODEL = 3s
|
||||
TARGET = dos4g
|
||||
|
||||
OBJDIR = msdos\$(TARGET).w$(MODEL)
|
||||
LIB = $(OBJDIR)\pcap.lib
|
||||
|
||||
.EXTENSIONS: .l .y
|
||||
|
||||
DEFS = -dDEBUG -dNDIS_DEBUG -d_U_= -dHAVE_LIMITS_H -dHAVE_STRERROR &
|
||||
-dHAVE_SNPRINTF -dHAVE_VSNPRINTF
|
||||
|
||||
CC = wcc386.exe
|
||||
ASM = wasm.exe -$(MODEL) $(DEFS) -dDOSX -dDOS4GW -zq -bt=dos -fr=nul -d3 -s
|
||||
|
||||
OBJS = $(OBJDIR)\grammar.obj $(OBJDIR)\scanner.obj $(OBJDIR)\pcap.obj &
|
||||
$(OBJDIR)\bpf_filt.obj $(OBJDIR)\bpf_imag.obj $(OBJDIR)\bpf_dump.obj &
|
||||
$(OBJDIR)\etherent.obj $(OBJDIR)\gencode.obj $(OBJDIR)\nametoad.obj &
|
||||
$(OBJDIR)\pcap-dos.obj $(OBJDIR)\pktdrvr.obj $(OBJDIR)\optimize.obj &
|
||||
$(OBJDIR)\savefile.obj $(OBJDIR)\inet.obj $(OBJDIR)\ndis2.obj
|
||||
|
||||
CFLAGS = $(DEFS) $(YYDEFS) -I. -I$(%watt_root)\inc -I.\msdos\pm_drvr &
|
||||
-$(MODEL) -mf -zff -zgf -zq -bt=dos -fr=nul -w6 -fpi &
|
||||
-oilrtf -zm
|
||||
|
||||
TEMPBIN = tmp.bin
|
||||
|
||||
all: $(OBJDIR) $(OBJDIR)\pcap.lib
|
||||
|
||||
$(OBJDIR):
|
||||
- mkdir $(OBJDIR)
|
||||
|
||||
$(OBJDIR)\pcap.lib: $(OBJS) wlib.arg
|
||||
wlib -q -b -c $(OBJDIR)\pcap.lib @wlib.arg
|
||||
|
||||
wlib.arg: msdos\makefile.wc
|
||||
%create $^@
|
||||
for %f in ($(OBJS)) do %append $^@ +- %f
|
||||
|
||||
$(OBJDIR)\pktdrvr.obj: msdos\pkt_stub.inc msdos\pktdrvr.c gnuc.h &
|
||||
pcap-dos.h pcap-int.h pcap.h msdos\pktdrvr.h
|
||||
*$(CC) $(CFLAGS) msdos\pktdrvr.c -fo=$@
|
||||
|
||||
$(OBJDIR)\ndis2.obj: msdos\ndis2.c
|
||||
*$(CC) $(CFLAGS) msdos\ndis2.c -fo=$@
|
||||
|
||||
.ERASE
|
||||
.c{$(OBJDIR)}.obj:
|
||||
*$(CC) $(CFLAGS) $[@ -fo=$@
|
||||
|
||||
grammar.c tokdefs.h: grammar.y
|
||||
bison --name-prefix=pcap_ --yacc --defines $[@
|
||||
- @del grammar.c
|
||||
- @del tokdefs.h
|
||||
ren y_tab.c grammar.c
|
||||
ren y_tab.h tokdefs.h
|
||||
|
||||
scanner.c: scanner.l
|
||||
flex -Ppcap_ -7 -o$@ $[@
|
||||
|
||||
msdos\pkt_stub.inc: bin2c.exe msdos\pkt_rx1.S
|
||||
nasm -fbin -dDEBUG -o $(TEMPBIN) -lmsdos\pkt_rx1.lst msdos\pkt_rx1.S
|
||||
bin2c.exe $(TEMPBIN) > $@
|
||||
@del $(TEMPBIN)
|
||||
|
||||
bin2c.exe: msdos\bin2c.c
|
||||
wcl $[@
|
||||
|
||||
clean realclean vclean: .SYMBOLIC
|
||||
for %f in (dos4g.w3r dos4g.w3s pharlap.w3r pharlap.w3s) do &
|
||||
@del %f\*.obj
|
||||
@del grammar.c
|
||||
@del tokdefs.h
|
||||
@del scanner.c
|
||||
@del bin2c.exe
|
||||
@del bin2c.obj
|
||||
@del msdos\pkt_stub.inc
|
||||
@echo Cleaned
|
||||
|
||||
#
|
||||
# dependencies
|
||||
#
|
||||
$(OBJDIR)\bpf_filt.obj: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
||||
|
||||
$(OBJDIR)\bpf_imag.obj: bpf_imag.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
$(OBJDIR)\bpf_dump.obj: bpf_dump.c pcap.h pcap-bpf.h
|
||||
|
||||
$(OBJDIR)\etherent.obj: etherent.c pcap-int.h pcap.h pcap-bpf.h pcap-nam.h
|
||||
|
||||
$(OBJDIR)\optimize.obj: optimize.c pcap-int.h pcap.h pcap-bpf.h gencode.h
|
||||
|
||||
$(OBJDIR)\savefile.obj: savefile.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
$(OBJDIR)\pcap.obj: pcap.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
$(OBJDIR)\inet.obj: inet.c pcap-int.h pcap.h pcap-bpf.h
|
||||
|
||||
$(OBJDIR)\grammar.obj: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
||||
pf.h pcap-nam.h
|
||||
|
||||
$(OBJDIR)\scanner.obj: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
||||
pcap-nam.h tokdefs.h
|
||||
|
||||
$(OBJDIR)\gencode.obj: gencode.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h &
|
||||
ethertyp.h nlpid.h llc.h gencode.h atmuni31.h sunatmpo.h ppp.h sll.h &
|
||||
arcnet.h pf.h pcap-nam.h
|
||||
|
||||
$(OBJDIR)\nametoad.obj: nametoad.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
||||
pcap-nam.h ethertyp.h
|
||||
|
||||
$(OBJDIR)\pcap-dos.obj: pcap-dos.c pcap.h pcap-bpf.h pcap-dos.h pcap-int.h &
|
||||
msdos\pktdrvr.h
|
||||
|
||||
$(OBJDIR)\pktdrvr.obj: msdos\pktdrvr.c gnuc.h pcap-dos.h pcap-int.h &
|
||||
pcap.h pcap-bpf.h msdos\pktdrvr.h msdos\pkt_stub.inc
|
||||
|
||||
$(OBJDIR)\ndis2.obj: msdos\ndis2.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h &
|
||||
msdos\ndis2.h
|
||||
|
||||
860
msdos/ndis2.c
Normal file
860
msdos/ndis2.c
Normal file
|
|
@ -0,0 +1,860 @@
|
|||
/*
|
||||
* Copyright (c) 1993,1994
|
||||
* Texas A&M University. 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Texas A&M University
|
||||
* and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY 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 UNIVERSITY 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.
|
||||
*
|
||||
* Developers:
|
||||
* David K. Hess, Douglas Lee Schales, David R. Safford
|
||||
*
|
||||
* Heavily modified for Metaware HighC + GNU C 2.8+
|
||||
* Gisle Vanem 1998
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <dos.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "pcap-dos.h"
|
||||
#include "pcap-int.h"
|
||||
#include "msdos/ndis2.h"
|
||||
|
||||
#if defined(USE_NDIS2)
|
||||
|
||||
/*
|
||||
* Packet buffer handling
|
||||
*/
|
||||
extern int FreePktBuf (PktBuf *buf);
|
||||
extern int EnquePktBuf (PktBuf *buf);
|
||||
extern PktBuf* AllocPktBuf (void);
|
||||
|
||||
/*
|
||||
* Various defines
|
||||
*/
|
||||
#define MAX_NUM_DEBUG_STRINGS 90
|
||||
#define DEBUG_STRING_LENGTH 80
|
||||
#define STACK_POOL_SIZE 6
|
||||
#define STACK_SIZE 256
|
||||
|
||||
#define MEDIA_FDDI 1
|
||||
#define MEDIA_ETHERNET 2
|
||||
#define MEDIA_TOKEN 3
|
||||
|
||||
static int startDebug = 0;
|
||||
static int stopDebug = 0;
|
||||
|
||||
static DWORD droppedPackets = 0L;
|
||||
static WORD frameSize = 0;
|
||||
static WORD headerSize = 0;
|
||||
static int mediaType = 0;
|
||||
static char *lastErr = NULL;
|
||||
|
||||
static BYTE debugStrings [MAX_NUM_DEBUG_STRINGS][DEBUG_STRING_LENGTH];
|
||||
static BYTE *freeStacks [STACK_POOL_SIZE];
|
||||
static int freeStackPtr = STACK_POOL_SIZE - 1;
|
||||
|
||||
static ProtMan protManEntry = NULL;
|
||||
static WORD protManDS = 0;
|
||||
static volatile int xmitPending;
|
||||
|
||||
static struct _PktBuf *txBufPending;
|
||||
static struct _CardHandle *handle;
|
||||
static struct _CommonChars common;
|
||||
static struct _ProtocolChars protChars;
|
||||
static struct _ProtDispatch lowerTable;
|
||||
|
||||
static struct _FailingModules failingModules;
|
||||
static struct _BindingsList bindings;
|
||||
|
||||
static struct {
|
||||
WORD err_num;
|
||||
char *err_text;
|
||||
} ndis_errlist[] = {
|
||||
|
||||
{ ERR_SUCCESS,
|
||||
"The function completed successfully.\n" },
|
||||
|
||||
{ ERR_WAIT_FOR_RELEASE,
|
||||
"The ReceiveChain completed successfully but the protocol has\n"
|
||||
"retained control of the buffer.\n" },
|
||||
|
||||
{ ERR_REQUEST_QUEUED,
|
||||
"The current request has been queued.\n" },
|
||||
|
||||
{ ERR_FRAME_NOT_RECOGNIZED,
|
||||
"Frame not recognized.\n" },
|
||||
|
||||
{ ERR_FRAME_REJECTED,
|
||||
"Frame was discarded.\n" },
|
||||
|
||||
{ ERR_FORWARD_FRAME,
|
||||
"Protocol wishes to forward frame to another protocol.\n" },
|
||||
|
||||
{ ERR_OUT_OF_RESOURCE,
|
||||
"Out of resource.\n" },
|
||||
|
||||
{ ERR_INVALID_PARAMETER,
|
||||
"Invalid parameter.\n" },
|
||||
|
||||
{ ERR_INVALID_FUNCTION,
|
||||
"Invalid function.\n" },
|
||||
|
||||
{ ERR_NOT_SUPPORTED,
|
||||
"Not supported.\n" },
|
||||
|
||||
{ ERR_HARDWARE_ERROR,
|
||||
"Hardware error.\n" },
|
||||
|
||||
{ ERR_TRANSMIT_ERROR,
|
||||
"The packet was not transmitted due to an error.\n" },
|
||||
|
||||
{ ERR_NO_SUCH_DESTINATION,
|
||||
"Token ring packet was not recognized when transmitted.\n" },
|
||||
|
||||
{ ERR_BUFFER_TOO_SMALL,
|
||||
"Provided buffer was too small.\n" },
|
||||
|
||||
{ ERR_ALREADY_STARTED,
|
||||
"Network drivers already started.\n" },
|
||||
|
||||
{ ERR_INCOMPLETE_BINDING,
|
||||
"Protocol driver could not complete its bindings.\n" },
|
||||
|
||||
{ ERR_DRIVER_NOT_INITIALIZED,
|
||||
"MAC did not initialize properly.\n" },
|
||||
|
||||
{ ERR_HARDWARE_NOT_FOUND,
|
||||
"Hardware not found.\n" },
|
||||
|
||||
{ ERR_HARDWARE_FAILURE,
|
||||
"Hardware failure.\n" },
|
||||
|
||||
{ ERR_CONFIGURATION_FAILURE,
|
||||
"Configuration failure.\n" },
|
||||
|
||||
{ ERR_INTERRUPT_CONFLICT,
|
||||
"Interrupt conflict.\n" },
|
||||
|
||||
{ ERR_INCOMPATIBLE_MAC,
|
||||
"The MAC is not compatible with the protocol.\n" },
|
||||
|
||||
{ ERR_INITIALIZATION_FAILED,
|
||||
"Initialization failed.\n" },
|
||||
|
||||
{ ERR_NO_BINDING,
|
||||
"Binding did not occur.\n" },
|
||||
|
||||
{ ERR_NETWORK_MAY_NOT_BE_CONNECTED,
|
||||
"The network may not be connected to the adapter.\n" },
|
||||
|
||||
{ ERR_INCOMPATIBLE_OS_VERSION,
|
||||
"The version of the operating system is incompatible with the protocol.\n" },
|
||||
|
||||
{ ERR_ALREADY_REGISTERED,
|
||||
"The protocol is already registered.\n" },
|
||||
|
||||
{ ERR_PATH_NOT_FOUND,
|
||||
"PROTMAN.EXE could not be found.\n" },
|
||||
|
||||
{ ERR_INSUFFICIENT_MEMORY,
|
||||
"Insufficient memory.\n" },
|
||||
|
||||
{ ERR_INFO_NOT_FOUND,
|
||||
"Protocol Mananger info structure is lost or corrupted.\n" },
|
||||
|
||||
{ ERR_GENERAL_FAILURE,
|
||||
"General failure.\n" }
|
||||
};
|
||||
|
||||
/*
|
||||
* Some handy macros
|
||||
*/
|
||||
#define PERROR(str) printf("%s (%d): %s\n", __FILE__,__LINE__,str)
|
||||
#define DEBUG_RING() (debugStrings[stopDebug+1 == MAX_NUM_DEBUG_STRINGS ? \
|
||||
stopDebug = 0 : ++stopDebug])
|
||||
|
||||
/*
|
||||
* needs rewrite for DOSX
|
||||
*/
|
||||
#define MAC_DISPATCH(hnd) ((struct _MacUpperDispatch*)(hnd)->common->upperDispatchTable)
|
||||
#define MAC_STATUS(hnd) ((struct _MacStatusTable*) (hnd)->common->serviceStatus)
|
||||
#define MAC_CHAR(hnd) ((struct _MacChars*) (hnd)->common->serviceChars)
|
||||
|
||||
#ifdef NDIS_DEBUG
|
||||
#define DEBUG0(str) printf (str)
|
||||
#define DEBUG1(fmt,a) printf (fmt,a)
|
||||
#define DEBUG2(fmt,a,b) printf (fmt,a,b)
|
||||
#define TRACE0(str) sprintf (DEBUG_RING(),str)
|
||||
#define TRACE1(fmt,a) sprintf (DEBUG_RING(),fmt,a)
|
||||
#else
|
||||
#define DEBUG0(str) ((void)0)
|
||||
#define DEBUG1(fmt,a) ((void)0)
|
||||
#define DEBUG2(fmt,a,b) ((void)0)
|
||||
#define TRACE0(str) ((void)0)
|
||||
#define TRACE1(fmt,a) ((void)0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This routine is called from both threads
|
||||
*/
|
||||
void NdisFreeStack (BYTE *aStack)
|
||||
{
|
||||
GUARD();
|
||||
|
||||
if (freeStackPtr == STACK_POOL_SIZE - 1)
|
||||
PERROR ("tried to free too many stacks");
|
||||
|
||||
freeStacks[++freeStackPtr] = aStack;
|
||||
|
||||
if (freeStackPtr == 0)
|
||||
TRACE0 ("freeStackPtr went positive\n");
|
||||
|
||||
UNGUARD();
|
||||
}
|
||||
|
||||
/*
|
||||
* This routine is called from callbacks to allocate local data
|
||||
*/
|
||||
BYTE *NdisAllocStack (void)
|
||||
{
|
||||
BYTE *stack;
|
||||
|
||||
GUARD();
|
||||
|
||||
if (freeStackPtr < 0)
|
||||
{
|
||||
/* Ran out of stack buffers. Return NULL which will start
|
||||
* dropping packets
|
||||
*/
|
||||
TRACE0 ("freeStackPtr went negative\n");
|
||||
stack = 0;
|
||||
}
|
||||
else
|
||||
stack = freeStacks[freeStackPtr--];
|
||||
|
||||
UNGUARD();
|
||||
return (stack);
|
||||
}
|
||||
|
||||
CALLBACK (NdisSystemRequest (DWORD param1, DWORD param2, WORD param3,
|
||||
WORD opcode, WORD targetDS))
|
||||
{
|
||||
static int bindEntry = 0;
|
||||
struct _CommonChars *macCommon;
|
||||
volatile WORD result;
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
case REQ_INITIATE_BIND:
|
||||
macCommon = (struct _CommonChars*) param2;
|
||||
if (macCommon == NULL)
|
||||
{
|
||||
printf ("There is an NDIS misconfiguration.\n");
|
||||
result = ERR_GENERAL_FAILURE;
|
||||
break;
|
||||
}
|
||||
DEBUG2 ("module name %s\n"
|
||||
"module type %s\n",
|
||||
macCommon->moduleName,
|
||||
((MacChars*) macCommon->serviceChars)->macName);
|
||||
|
||||
/* Binding to the MAC */
|
||||
result = macCommon->systemRequest ((DWORD)&common, (DWORD)&macCommon,
|
||||
0, REQ_BIND,
|
||||
macCommon->moduleDS);
|
||||
|
||||
if (!strcmp(bindings.moduleName[bindEntry], handle->moduleName))
|
||||
handle->common = macCommon;
|
||||
else PERROR ("unknown module");
|
||||
++bindEntry;
|
||||
break;
|
||||
|
||||
case REQ_INITIATE_UNBIND:
|
||||
macCommon = (struct _CommonChars*) param2;
|
||||
result = macCommon->systemRequest ((DWORD)&common, 0,
|
||||
0, REQ_UNBIND,
|
||||
macCommon->moduleDS);
|
||||
break;
|
||||
|
||||
default:
|
||||
result = ERR_GENERAL_FAILURE;
|
||||
break;
|
||||
}
|
||||
ARGSUSED (param1);
|
||||
ARGSUSED (param3);
|
||||
ARGSUSED (targetDS);
|
||||
return (result);
|
||||
}
|
||||
|
||||
CALLBACK (NdisRequestConfirm (WORD protId, WORD macId, WORD reqHandle,
|
||||
WORD status, WORD request, WORD protDS))
|
||||
{
|
||||
ARGSUSED (protId); ARGSUSED (macId);
|
||||
ARGSUSED (reqHandle); ARGSUSED (status);
|
||||
ARGSUSED (request); ARGSUSED (protDS);
|
||||
return (ERR_SUCCESS);
|
||||
}
|
||||
|
||||
CALLBACK (NdisTransmitConfirm (WORD protId, WORD macId, WORD reqHandle,
|
||||
WORD status, WORD protDS))
|
||||
{
|
||||
xmitPending--;
|
||||
FreePktBuf (txBufPending); /* Add passed ECB back to the free list */
|
||||
|
||||
ARGSUSED (reqHandle);
|
||||
ARGSUSED (status);
|
||||
ARGSUSED (protDS);
|
||||
return (ERR_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The primary function for receiving packets
|
||||
*/
|
||||
CALLBACK (NdisReceiveLookahead (WORD macId, WORD frameSize,
|
||||
WORD bytesAvail, BYTE *buffer,
|
||||
BYTE *indicate, WORD protDS))
|
||||
{
|
||||
int result;
|
||||
PktBuf *pktBuf;
|
||||
WORD bytesCopied;
|
||||
struct _TDBufDescr tDBufDescr;
|
||||
|
||||
#if 0
|
||||
TRACE1 ("lookahead length = %d, ", bytesAvail);
|
||||
TRACE1 ("ecb = %08lX, ", *ecb);
|
||||
TRACE1 ("count = %08lX\n", count);
|
||||
TRACE1 ("offset = %08lX, ", offset);
|
||||
TRACE1 ("timesAllowed = %d, ", timesAllowed);
|
||||
TRACE1 ("packet size = %d\n", look->dataLookAheadLen);
|
||||
#endif
|
||||
|
||||
/* Allocate a buffer for the packet
|
||||
*/
|
||||
if ((pktBuf = AllocPktBuf()) == NULL)
|
||||
{
|
||||
droppedPackets++;
|
||||
return (ERR_FRAME_REJECTED);
|
||||
}
|
||||
|
||||
/*
|
||||
* Now kludge things. Note we will have to undo this later. This will
|
||||
* make the packet contiguous after the MLID has done the requested copy.
|
||||
*/
|
||||
|
||||
tDBufDescr.tDDataCount = 1;
|
||||
tDBufDescr.tDBufDescrRec[0].tDPtrType = NDIS_PTR_PHYSICAL;
|
||||
tDBufDescr.tDBufDescrRec[0].tDDataPtr = pktBuf->buffer;
|
||||
tDBufDescr.tDBufDescrRec[0].tDDataLen = pktBuf->length;
|
||||
tDBufDescr.tDBufDescrRec[0].dummy = 0;
|
||||
|
||||
result = MAC_DISPATCH(handle)->transferData (&bytesCopied, 0, &tDBufDescr,
|
||||
handle->common->moduleDS);
|
||||
pktBuf->packetLength = bytesCopied;
|
||||
|
||||
if (result == ERR_SUCCESS)
|
||||
EnquePktBuf(pktBuf);
|
||||
else FreePktBuf (pktBuf);
|
||||
|
||||
ARGSUSED (frameSize);
|
||||
ARGSUSED (bytesAvail);
|
||||
ARGSUSED (indicate);
|
||||
ARGSUSED (protDS);
|
||||
|
||||
return (ERR_SUCCESS);
|
||||
}
|
||||
|
||||
CALLBACK (NdisIndicationComplete (WORD macId, WORD protDS))
|
||||
{
|
||||
ARGSUSED (macId);
|
||||
ARGSUSED (protDS);
|
||||
|
||||
/* We don't give a hoot about these. Just return
|
||||
*/
|
||||
return (ERR_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the OTHER way we may receive packets
|
||||
*/
|
||||
CALLBACK (NdisReceiveChain (WORD macId, WORD frameSize, WORD reqHandle,
|
||||
struct _RxBufDescr *rxBufDescr,
|
||||
BYTE *indicate, WORD protDS))
|
||||
{
|
||||
struct _PktBuf *pktBuf;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* For now we copy the entire packet over to a PktBuf structure. This may be
|
||||
* a performance hit but this routine probably isn't called very much, and
|
||||
* it is a lot of work to do it otherwise. Also if it is a filter protocol
|
||||
* packet we could end up sucking up MAC buffes.
|
||||
*/
|
||||
|
||||
if ((pktBuf = AllocPktBuf()) == NULL)
|
||||
{
|
||||
droppedPackets++;
|
||||
return (ERR_FRAME_REJECTED);
|
||||
}
|
||||
pktBuf->packetLength = 0;
|
||||
|
||||
/* Copy the packet to the buffer
|
||||
*/
|
||||
for (i = 0; i < rxBufDescr->rxDataCount; ++i)
|
||||
{
|
||||
struct _RxBufDescrRec *rxDescr = &rxBufDescr->rxBufDescrRec[i];
|
||||
|
||||
memcpy (pktBuf->buffer + pktBuf->packetLength,
|
||||
rxDescr->rxDataPtr, rxDescr->rxDataLen);
|
||||
pktBuf->packetLength += rxDescr->rxDataLen;
|
||||
}
|
||||
|
||||
EnquePktBuf (pktBuf);
|
||||
|
||||
ARGSUSED (frameSize);
|
||||
ARGSUSED (reqHandle);
|
||||
ARGSUSED (indicate);
|
||||
ARGSUSED (protDS);
|
||||
|
||||
/* This frees up the buffer for the MAC to use
|
||||
*/
|
||||
return (ERR_SUCCESS);
|
||||
}
|
||||
|
||||
CALLBACK (NdisStatusProc (WORD macId, WORD param1, BYTE *indicate,
|
||||
WORD opcode, WORD protDS))
|
||||
{
|
||||
switch (opcode)
|
||||
{
|
||||
case STATUS_RING_STATUS:
|
||||
break;
|
||||
case STATUS_ADAPTER_CHECK:
|
||||
break;
|
||||
case STATUS_START_RESET:
|
||||
break;
|
||||
case STATUS_INTERRUPT:
|
||||
break;
|
||||
case STATUS_END_RESET:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
ARGSUSED (macId);
|
||||
ARGSUSED (param1);
|
||||
ARGSUSED (indicate);
|
||||
ARGSUSED (opcode);
|
||||
ARGSUSED (protDS);
|
||||
|
||||
/* We don't need to do anything about this stuff yet
|
||||
*/
|
||||
return (ERR_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* Tell the NDIS driver to start the delivery of the packet
|
||||
*/
|
||||
int NdisSendPacket (struct _PktBuf *pktBuf, int macId)
|
||||
{
|
||||
struct _TxBufDescr txBufDescr;
|
||||
int result;
|
||||
|
||||
xmitPending++;
|
||||
txBufPending = pktBuf; /* we only have 1 pending Tx at a time */
|
||||
|
||||
txBufDescr.txImmedLen = 0;
|
||||
txBufDescr.txImmedPtr = NULL;
|
||||
txBufDescr.txDataCount = 1;
|
||||
txBufDescr.txBufDescrRec[0].txPtrType = NDIS_PTR_PHYSICAL;
|
||||
txBufDescr.txBufDescrRec[0].dummy = 0;
|
||||
txBufDescr.txBufDescrRec[0].txDataLen = pktBuf->packetLength;
|
||||
txBufDescr.txBufDescrRec[0].txDataPtr = pktBuf->buffer;
|
||||
|
||||
result = MAC_DISPATCH(handle)->transmitChain (common.moduleId,
|
||||
pktBuf->handle,
|
||||
&txBufDescr,
|
||||
handle->common->moduleDS);
|
||||
switch (result)
|
||||
{
|
||||
case ERR_OUT_OF_RESOURCE:
|
||||
/* Note that this should not happen but if it does there is not
|
||||
* much we can do about it
|
||||
*/
|
||||
printf ("ERROR: transmit queue overflowed\n");
|
||||
return (0);
|
||||
|
||||
case ERR_SUCCESS:
|
||||
/* Everything was hunky dory and synchronous. Free up the
|
||||
* packet buffer
|
||||
*/
|
||||
xmitPending--;
|
||||
FreePktBuf (pktBuf);
|
||||
return (1);
|
||||
|
||||
case ERR_REQUEST_QUEUED:
|
||||
/* Everything was hunky dory and asynchronous. Do nothing
|
||||
*/
|
||||
return (1);
|
||||
|
||||
default:
|
||||
printf ("Tx fail, code = %04X\n", result);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int ndis_nerr = sizeof(ndis_errlist) / sizeof(ndis_errlist[0]);
|
||||
|
||||
static char *Ndis_strerror (WORD errorCode)
|
||||
{
|
||||
static char buf[30];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ndis_nerr; i++)
|
||||
if (errorCode == ndis_errlist[i].err_num)
|
||||
return (ndis_errlist[i].err_text);
|
||||
|
||||
sprintf (buf,"unknown error %d",errorCode);
|
||||
return (buf);
|
||||
}
|
||||
|
||||
|
||||
char *NdisLastError (void)
|
||||
{
|
||||
char *errStr = lastErr;
|
||||
lastErr = NULL;
|
||||
return (errStr);
|
||||
}
|
||||
|
||||
int NdisOpen (void)
|
||||
{
|
||||
struct _ReqBlock reqBlock;
|
||||
int result;
|
||||
int ndisFd = open (NDIS_PATH, O_RDONLY);
|
||||
|
||||
if (ndisFd < 0)
|
||||
{
|
||||
printf ("Could not open NDIS Protocol Manager device.\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
memset (&reqBlock, 0, sizeof(ReqBlock));
|
||||
|
||||
reqBlock.opcode = PM_GET_PROTOCOL_MANAGER_LINKAGE;
|
||||
|
||||
result = NdisGetLinkage (ndisFd, (char*)&reqBlock, sizeof(ReqBlock));
|
||||
if (result != 0)
|
||||
{
|
||||
printf ("Could not get Protocol Manager linkage.\n");
|
||||
close (ndisFd);
|
||||
return (0);
|
||||
}
|
||||
|
||||
close (ndisFd);
|
||||
protManEntry = (ProtMan) reqBlock.pointer1;
|
||||
protManDS = reqBlock.word1;
|
||||
|
||||
DEBUG2 ("Entry Point = %04X:%04X\n", FP_SEG(protManEntry),FP_OFF(protManEntry));
|
||||
DEBUG1 ("ProtMan DS = %04X\n", protManDS);
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
int NdisRegisterAndBind (int promis)
|
||||
{
|
||||
struct _ReqBlock reqBlock;
|
||||
WORD result;
|
||||
|
||||
memset (&common,0,sizeof(common));
|
||||
|
||||
common.tableSize = sizeof (common);
|
||||
|
||||
common.majorNdisVersion = 2;
|
||||
common.minorNdisVersion = 0;
|
||||
common.majorModuleVersion = 2;
|
||||
common.minorModuleVersion = 0;
|
||||
|
||||
/* Indicates binding from below and dynamically loaded
|
||||
*/
|
||||
common.moduleFlags = 0x00000006L;
|
||||
|
||||
strcpy (common.moduleName, "PCAP");
|
||||
|
||||
common.protocolLevelUpper = 0xFF;
|
||||
common.protocolLevelLower = 1;
|
||||
common.interfaceLower = 1;
|
||||
#ifdef __DJGPP__
|
||||
common.moduleDS = _dos_ds; /* the callback data segment */
|
||||
#else
|
||||
common.moduleDS = _DS;
|
||||
#endif
|
||||
|
||||
common.systemRequest = (SystemRequest) systemRequestGlue;
|
||||
common.serviceChars = (BYTE*) &protChars;
|
||||
common.serviceStatus = NULL;
|
||||
common.upperDispatchTable = NULL;
|
||||
common.lowerDispatchTable = (BYTE*) &lowerTable;
|
||||
|
||||
protChars.length = sizeof (protChars);
|
||||
protChars.name[0] = 0;
|
||||
protChars.type = 0;
|
||||
|
||||
lowerTable.backPointer = &common;
|
||||
lowerTable.requestConfirm = requestConfirmGlue;
|
||||
lowerTable.transmitConfirm = transmitConfirmGlue;
|
||||
lowerTable.receiveLookahead = receiveLookaheadGlue;
|
||||
lowerTable.indicationComplete = indicationCompleteGlue;
|
||||
lowerTable.receiveChain = receiveChainGlue;
|
||||
lowerTable.status = statusGlue;
|
||||
lowerTable.flags = 3;
|
||||
if (promis)
|
||||
lowerTable.flags |= 4; /* promiscous mode (receive everything) */
|
||||
|
||||
bindings.numBindings = 1;
|
||||
strcpy (bindings.moduleName[0], handle->moduleName);
|
||||
|
||||
/* Register ourselves with NDIS
|
||||
*/
|
||||
reqBlock.opcode = PM_REGISTER_MODULE;
|
||||
reqBlock.pointer1 = (BYTE FAR*) &common;
|
||||
reqBlock.pointer2 = (BYTE FAR*) &bindings;
|
||||
|
||||
result = (*protManEntry) (&reqBlock, protManDS);
|
||||
if (result)
|
||||
{
|
||||
printf ("Protman registering failed: %s\n", Ndis_strerror(result));
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Start the binding process
|
||||
*/
|
||||
reqBlock.opcode = PM_BIND_AND_START;
|
||||
reqBlock.pointer1 = (BYTE FAR*) &failingModules;
|
||||
|
||||
result = (*protManEntry) (&reqBlock, protManDS);
|
||||
if (result)
|
||||
{
|
||||
printf ("Start binding failed: %s\n", Ndis_strerror(result));
|
||||
return (0);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int CheckMacFeatures (CardHandle *card)
|
||||
{
|
||||
DWORD serviceFlags;
|
||||
BYTE _far *mediaString;
|
||||
BYTE _far *mac_addr;
|
||||
|
||||
DEBUG2 ("checking card features\n"
|
||||
"common table address = %08lX, macId = %d\n",
|
||||
card->common, card->common->moduleId);
|
||||
|
||||
serviceFlags = MAC_CHAR (handle)->serviceFlags;
|
||||
|
||||
if ((serviceFlags & SF_PROMISCUOUS) == 0)
|
||||
{
|
||||
printf ("The MAC %s does not support promiscuous mode.\n",
|
||||
card->moduleName);
|
||||
return (0);
|
||||
}
|
||||
|
||||
mediaString = MAC_CHAR (handle)->macName;
|
||||
|
||||
DEBUG1 ("media type = %s\n",mediaString);
|
||||
|
||||
/* Get the media type. And set the header size
|
||||
*/
|
||||
if (!strncmp(mediaString,"802.3",5) ||
|
||||
!strncmp(mediaString,"DIX",3) ||
|
||||
!strncmp(mediaString,"DIX+802.3",9))
|
||||
headerSize = sizeof (EthernetIIHeader);
|
||||
|
||||
else if (!strncmp(mediaString,"FDDI",4))
|
||||
headerSize = sizeof (FddiHeader) +
|
||||
sizeof (Ieee802Dot2SnapHeader);
|
||||
else
|
||||
{
|
||||
printf ("Unsupported MAC type: `%s'\n", mediaString);
|
||||
return (0);
|
||||
}
|
||||
|
||||
frameSize = MAC_CHAR (handle)->maxFrameSize;
|
||||
mac_addr = MAC_CHAR (handle)->currentAddress;
|
||||
|
||||
printf ("Hardware address: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
||||
mac_addr[0], mac_addr[1], mac_addr[2],
|
||||
mac_addr[3], mac_addr[4], mac_addr[5]);
|
||||
return (1);
|
||||
}
|
||||
|
||||
static int NdisStartMac (CardHandle *card)
|
||||
{
|
||||
WORD result;
|
||||
|
||||
/* Set the lookahead length
|
||||
*/
|
||||
result = MAC_DISPATCH(handle)->request (common.moduleId, 0,
|
||||
headerSize, 0,
|
||||
REQ_SET_LOOKAHEAD,
|
||||
card->common->moduleDS);
|
||||
|
||||
/* We assume that if we got INVALID PARAMETER then either this
|
||||
* is not supported or will work anyway. NE2000 does this.
|
||||
*/
|
||||
if (result != ERR_SUCCESS && result != ERR_INVALID_PARAMETER)
|
||||
{
|
||||
DEBUG1 ("Set lookahead failed: %s\n", Ndis_strerror(result));
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Set the packet filter. Note that for some medias and drivers we
|
||||
* must specify all three flags or the card(s) will not operate correctly.
|
||||
*/
|
||||
result = MAC_DISPATCH(handle)->request (common.moduleId, 0,
|
||||
/* all packets */ FILTER_PROMISCUOUS |
|
||||
/* packets to us */ FILTER_DIRECTED |
|
||||
/* broadcasts */ FILTER_BROADCAST,
|
||||
0, REQ_SET_PACKET_FILTER,
|
||||
card->common->moduleDS);
|
||||
if (result != ERR_SUCCESS)
|
||||
{
|
||||
DEBUG1 ("Set packet filter failed: %s\n", Ndis_strerror(result));
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* If OPEN/CLOSE supported then open the adapter
|
||||
*/
|
||||
if (MAC_CHAR(handle)->serviceFlags & SF_OPEN_CLOSE)
|
||||
{
|
||||
result = MAC_DISPATCH(handle)->request (common.moduleId, 0, 0, NULL,
|
||||
REQ_OPEN_ADAPTER,
|
||||
card->common->moduleDS);
|
||||
if (result != ERR_SUCCESS)
|
||||
{
|
||||
DEBUG1 ("Opening the MAC failed: %s\n", Ndis_strerror(result));
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
void NdisShutdown (void)
|
||||
{
|
||||
struct _ReqBlock reqBlock;
|
||||
int result, i;
|
||||
|
||||
if (!handle)
|
||||
return;
|
||||
|
||||
/* If the adapters support open and are open then close them
|
||||
*/
|
||||
if ((MAC_CHAR(handle)->serviceFlags & SF_OPEN_CLOSE) &&
|
||||
(MAC_STATUS(handle)->macStatus & MAC_OPEN))
|
||||
{
|
||||
result = MAC_DISPATCH(handle)->request (common.moduleId, 0, 0, 0,
|
||||
REQ_CLOSE_ADAPTER,
|
||||
handle->common->moduleDS);
|
||||
if (result != ERR_SUCCESS)
|
||||
{
|
||||
printf ("Closing the MAC failed: %s\n", Ndis_strerror(result));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tell the Protocol Manager to unbind and stop
|
||||
*/
|
||||
reqBlock.opcode = PM_UNBIND_AND_STOP;
|
||||
reqBlock.pointer1 = (BYTE FAR*) &failingModules;
|
||||
reqBlock.pointer2 = NULL;
|
||||
|
||||
result = (*protManEntry) (&reqBlock, protManDS);
|
||||
if (result)
|
||||
printf ("Unbind failed: %s\n", Ndis_strerror(result));
|
||||
|
||||
for (i = 0; i < STACK_POOL_SIZE; ++i)
|
||||
free (freeStacks[i] - STACK_SIZE);
|
||||
|
||||
handle = NULL;
|
||||
}
|
||||
|
||||
int NdisInit (int promis)
|
||||
{
|
||||
int i, result;
|
||||
|
||||
/* Allocate the real mode stacks used for NDIS callbacks
|
||||
*/
|
||||
for (i = 0; i < STACK_POOL_SIZE; ++i)
|
||||
{
|
||||
freeStacks[i] = malloc (STACK_SIZE);
|
||||
if (!freeStacks[i])
|
||||
return (0);
|
||||
freeStacks[i] += STACK_SIZE;
|
||||
}
|
||||
|
||||
if (!NdisOpen())
|
||||
return (0);
|
||||
|
||||
if (!NdisRegisterAndBind(promis))
|
||||
return (0);
|
||||
|
||||
DEBUG1 ("My module id: %d\n", common.moduleId);
|
||||
DEBUG1 ("Handle id; %d\n", handle->common->moduleId);
|
||||
DEBUG1 ("MAC card: %-16s - ", handle->moduleName);
|
||||
|
||||
atexit (NdisShutdown);
|
||||
|
||||
if (!CheckMacFeatures(&handle))
|
||||
return (0);
|
||||
|
||||
switch (mediaType)
|
||||
{
|
||||
case MEDIA_FDDI:
|
||||
DEBUG0 ("Media type: FDDI");
|
||||
break;
|
||||
case MEDIA_ETHERNET:
|
||||
DEBUG0 ("Media type: ETHERNET");
|
||||
break;
|
||||
default:
|
||||
DEBUG0 ("Unsupported media.\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
DEBUG1 (" - Frame size: %d\n", frameSize);
|
||||
|
||||
if (!NdisStartMac(&handle))
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
#endif /* USE_NDIS2 */
|
||||
|
||||
559
msdos/ndis2.h
Normal file
559
msdos/ndis2.h
Normal file
|
|
@ -0,0 +1,559 @@
|
|||
/*
|
||||
* Copyright (c) 1993,1994
|
||||
* Texas A&M University. 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Texas A&M University
|
||||
* and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY 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 UNIVERSITY 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.
|
||||
*
|
||||
* Developers:
|
||||
* David K. Hess, Douglas Lee Schales, David R. Safford
|
||||
*
|
||||
* Heavily modified for Metaware HighC + GNU C 2.8+
|
||||
* Gisle Vanem 1998
|
||||
*/
|
||||
|
||||
#ifndef __PCAP_NDIS_H
|
||||
#define __PCAP_NDIS_H
|
||||
|
||||
#if defined (__HIGHC__)
|
||||
#define pascal _CC(_CALLEE_POPS_STACK & ~_REVERSE_PARMS) /* calling convention */
|
||||
#define CALLBACK(foo) pascal WORD foo
|
||||
#define PAS_PTR(x,arg) typedef FAR WORD pascal (*x) arg
|
||||
#define GUARD() _inline (0x9C,0xFA) /* pushfd, cli */
|
||||
#define UNGUARD() _inline (0x9D) /* popfd */
|
||||
#define FAR _far
|
||||
|
||||
#elif defined(__GNUC__)
|
||||
#define CALLBACK(foo) WORD foo __attribute__((stdcall))
|
||||
#define PAS_PTR(x,arg) typedef WORD (*x) arg __attribute__((stdcall))
|
||||
#define GUARD() __asm__ __volatile__ ("pushfd; cli")
|
||||
#define UNGUARD() __asm__ __volatile__ ("popfd")
|
||||
#define FAR
|
||||
|
||||
#elif defined (__TURBOC__)
|
||||
#define CALLBACK(foo) WORD pascal foo
|
||||
#define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg
|
||||
#define GUARD() _asm { pushf; cli }
|
||||
#define UNGUARD() _asm { popf }
|
||||
#define FAR _far
|
||||
|
||||
#elif defined (__WATCOMC__)
|
||||
#define CALLBACK(foo) WORD pascal foo
|
||||
#define PAS_PTR(x,arg) typedef WORD pascal (_far *x) arg
|
||||
#define GUARD() _disable()
|
||||
#define UNGUARD() _enable()
|
||||
#define FAR _far
|
||||
|
||||
#else
|
||||
#error Unsupported compiler
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Forwards
|
||||
*/
|
||||
struct _ReqBlock;
|
||||
struct _TxBufDescr;
|
||||
struct _TDBufDescr;
|
||||
|
||||
/*
|
||||
* Protocol Manager API
|
||||
*/
|
||||
PAS_PTR (ProtMan, (struct _ReqBlock FAR*, WORD));
|
||||
|
||||
/*
|
||||
* System request
|
||||
*/
|
||||
PAS_PTR (SystemRequest, (DWORD, DWORD, WORD, WORD, WORD));
|
||||
|
||||
/*
|
||||
* MAC API
|
||||
*/
|
||||
PAS_PTR (TransmitChain, (WORD, WORD, struct _TxBufDescr FAR*, WORD));
|
||||
PAS_PTR (TransferData, (WORD*,WORD, struct _TDBufDescr FAR*, WORD));
|
||||
PAS_PTR (Request, (WORD, WORD, WORD, DWORD, WORD, WORD));
|
||||
PAS_PTR (ReceiveRelease,(WORD, WORD));
|
||||
PAS_PTR (IndicationOn, (WORD));
|
||||
PAS_PTR (IndicationOff, (WORD));
|
||||
|
||||
|
||||
typedef enum {
|
||||
HARDWARE_NOT_INSTALLED = 0,
|
||||
HARDWARE_FAILED_DIAG = 1,
|
||||
HARDWARE_FAILED_CONFIG = 2,
|
||||
HARDWARE_HARD_FAULT = 3,
|
||||
HARDWARE_SOFT_FAULT = 4,
|
||||
HARDWARE_OK = 7,
|
||||
HARDWARE_MASK = 0x0007,
|
||||
MAC_BOUND = 0x0008,
|
||||
MAC_OPEN = 0x0010,
|
||||
DIAG_IN_PROGRESS = 0x0020
|
||||
} NdisMacStatus;
|
||||
|
||||
typedef enum {
|
||||
STATUS_RING_STATUS = 1,
|
||||
STATUS_ADAPTER_CHECK = 2,
|
||||
STATUS_START_RESET = 3,
|
||||
STATUS_INTERRUPT = 4,
|
||||
STATUS_END_RESET = 5
|
||||
} NdisStatus;
|
||||
|
||||
typedef enum {
|
||||
FILTER_DIRECTED = 1,
|
||||
FILTER_BROADCAST = 2,
|
||||
FILTER_PROMISCUOUS = 4,
|
||||
FILTER_SOURCE_ROUTE = 8
|
||||
} NdisPacketFilter;
|
||||
|
||||
typedef enum {
|
||||
REQ_INITIATE_DIAGNOSTICS = 1,
|
||||
REQ_READ_ERROR_LOG = 2,
|
||||
REQ_SET_STATION_ADDRESS = 3,
|
||||
REQ_OPEN_ADAPTER = 4,
|
||||
REQ_CLOSE_ADAPTER = 5,
|
||||
REQ_RESET_MAC = 6,
|
||||
REQ_SET_PACKET_FILTER = 7,
|
||||
REQ_ADD_MULTICAST_ADDRESS = 8,
|
||||
REQ_DELETE_MULTICAST_ADDRESS = 9,
|
||||
REQ_UPDATE_STATISTICS = 10,
|
||||
REQ_CLEAR_STATISTICS = 11,
|
||||
REQ_INTERRUPT_REQUEST = 12,
|
||||
REQ_SET_FUNCTIONAL_ADDRESS = 13,
|
||||
REQ_SET_LOOKAHEAD = 14
|
||||
} NdisGeneralRequest;
|
||||
|
||||
typedef enum {
|
||||
SF_BROADCAST = 0x00000001L,
|
||||
SF_MULTICAST = 0x00000002L,
|
||||
SF_FUNCTIONAL = 0x00000004L,
|
||||
SF_PROMISCUOUS = 0x00000008L,
|
||||
SF_SOFT_ADDRESS = 0x00000010L,
|
||||
SF_STATS_CURRENT = 0x00000020L,
|
||||
SF_INITIATE_DIAGS = 0x00000040L,
|
||||
SF_LOOPBACK = 0x00000080L,
|
||||
SF_RECEIVE_CHAIN = 0x00000100L,
|
||||
SF_SOURCE_ROUTING = 0x00000200L,
|
||||
SF_RESET_MAC = 0x00000400L,
|
||||
SF_OPEN_CLOSE = 0x00000800L,
|
||||
SF_INTERRUPT_REQUEST = 0x00001000L,
|
||||
SF_SOURCE_ROUTING_BRIDGE = 0x00002000L,
|
||||
SF_VIRTUAL_ADDRESSES = 0x00004000L
|
||||
} NdisMacServiceFlags;
|
||||
|
||||
typedef enum {
|
||||
REQ_INITIATE_BIND = 1,
|
||||
REQ_BIND = 2,
|
||||
REQ_INITIATE_PREBIND = 3,
|
||||
REQ_INITIATE_UNBIND = 4,
|
||||
REQ_UNBIND = 5
|
||||
} NdisSysRequest;
|
||||
|
||||
typedef enum {
|
||||
PM_GET_PROTOCOL_MANAGER_INFO = 1,
|
||||
PM_REGISTER_MODULE = 2,
|
||||
PM_BIND_AND_START = 3,
|
||||
PM_GET_PROTOCOL_MANAGER_LINKAGE = 4,
|
||||
PM_GET_PROTOCOL_INI_PATH = 5,
|
||||
PM_REGISTER_PROTOCOL_MANAGER_INFO = 6,
|
||||
PM_INIT_AND_REGISTER = 7,
|
||||
PM_UNBIND_AND_STOP = 8,
|
||||
PM_BIND_STATUS = 9,
|
||||
PM_REGISTER_STATUS = 10
|
||||
} NdisProtManager;
|
||||
|
||||
|
||||
typedef enum {
|
||||
ERR_SUCCESS = 0x00,
|
||||
ERR_WAIT_FOR_RELEASE = 0x01,
|
||||
ERR_REQUEST_QUEUED = 0x02,
|
||||
ERR_FRAME_NOT_RECOGNIZED = 0x03,
|
||||
ERR_FRAME_REJECTED = 0x04,
|
||||
ERR_FORWARD_FRAME = 0x05,
|
||||
ERR_OUT_OF_RESOURCE = 0x06,
|
||||
ERR_INVALID_PARAMETER = 0x07,
|
||||
ERR_INVALID_FUNCTION = 0x08,
|
||||
ERR_NOT_SUPPORTED = 0x09,
|
||||
ERR_HARDWARE_ERROR = 0x0A,
|
||||
ERR_TRANSMIT_ERROR = 0x0B,
|
||||
ERR_NO_SUCH_DESTINATION = 0x0C,
|
||||
ERR_BUFFER_TOO_SMALL = 0x0D,
|
||||
ERR_ALREADY_STARTED = 0x20,
|
||||
ERR_INCOMPLETE_BINDING = 0x21,
|
||||
ERR_DRIVER_NOT_INITIALIZED = 0x22,
|
||||
ERR_HARDWARE_NOT_FOUND = 0x23,
|
||||
ERR_HARDWARE_FAILURE = 0x24,
|
||||
ERR_CONFIGURATION_FAILURE = 0x25,
|
||||
ERR_INTERRUPT_CONFLICT = 0x26,
|
||||
ERR_INCOMPATIBLE_MAC = 0x27,
|
||||
ERR_INITIALIZATION_FAILED = 0x28,
|
||||
ERR_NO_BINDING = 0x29,
|
||||
ERR_NETWORK_MAY_NOT_BE_CONNECTED = 0x2A,
|
||||
ERR_INCOMPATIBLE_OS_VERSION = 0x2B,
|
||||
ERR_ALREADY_REGISTERED = 0x2C,
|
||||
ERR_PATH_NOT_FOUND = 0x2D,
|
||||
ERR_INSUFFICIENT_MEMORY = 0x2E,
|
||||
ERR_INFO_NOT_FOUND = 0x2F,
|
||||
ERR_GENERAL_FAILURE = 0xFF
|
||||
} NdisError;
|
||||
|
||||
#define NDIS_PARAM_INTEGER 0
|
||||
#define NDIS_PARAM_STRING 1
|
||||
|
||||
#define NDIS_TX_BUF_LENGTH 8
|
||||
#define NDIS_TD_BUF_LENGTH 1
|
||||
#define NDIS_RX_BUF_LENGTH 8
|
||||
|
||||
#define NDIS_PTR_PHYSICAL 0
|
||||
#define NDIS_PTR_VIRTUAL 2
|
||||
|
||||
#define NDIS_PATH "PROTMAN$"
|
||||
|
||||
|
||||
typedef struct _CommonChars {
|
||||
WORD tableSize;
|
||||
BYTE majorNdisVersion; /* 2 - Latest version */
|
||||
BYTE minorNdisVersion; /* 0 */
|
||||
WORD reserved1;
|
||||
BYTE majorModuleVersion;
|
||||
BYTE minorModuleVersion;
|
||||
DWORD moduleFlags;
|
||||
/* 0 - Binding at upper boundary supported
|
||||
* 1 - Binding at lower boundary supported
|
||||
* 2 - Dynamically bound.
|
||||
* 3-31 - Reserved, must be zero.
|
||||
*/
|
||||
BYTE moduleName[16];
|
||||
BYTE protocolLevelUpper;
|
||||
/* 1 - MAC
|
||||
* 2 - Data Link
|
||||
* 3 - Network
|
||||
* 4 - Transport
|
||||
* 5 - Session
|
||||
* -1 - Not specified
|
||||
*/
|
||||
BYTE interfaceUpper;
|
||||
BYTE protocolLevelLower;
|
||||
/* 0 - Physical
|
||||
* 1 - MAC
|
||||
* 2 - Data Link
|
||||
* 3 - Network
|
||||
* 4 - Transport
|
||||
* 5 - Session
|
||||
* -1 - Not specified
|
||||
*/
|
||||
BYTE interfaceLower;
|
||||
WORD moduleId;
|
||||
WORD moduleDS;
|
||||
SystemRequest systemRequest;
|
||||
BYTE *serviceChars;
|
||||
BYTE *serviceStatus;
|
||||
BYTE *upperDispatchTable;
|
||||
BYTE *lowerDispatchTable;
|
||||
BYTE *reserved2; /* Must be NULL */
|
||||
BYTE *reserved3; /* Must be NULL */
|
||||
} CommonChars;
|
||||
|
||||
|
||||
typedef struct _MulticastList {
|
||||
WORD maxMulticastAddresses;
|
||||
WORD numberMulticastAddresses;
|
||||
BYTE multicastAddress[16][16];
|
||||
} MulticastList;
|
||||
|
||||
|
||||
typedef struct _MacChars {
|
||||
WORD tableSize;
|
||||
BYTE macName[16];
|
||||
WORD addressLength;
|
||||
BYTE permanentAddress[16];
|
||||
BYTE currentAddress[16];
|
||||
DWORD currentFunctionalAddress;
|
||||
MulticastList *multicastList;
|
||||
DWORD linkSpeed;
|
||||
DWORD serviceFlags;
|
||||
WORD maxFrameSize;
|
||||
DWORD txBufferSize;
|
||||
WORD txBufferAllocSize;
|
||||
DWORD rxBufferSize;
|
||||
WORD rxBufferAllocSize;
|
||||
BYTE ieeeVendor[3];
|
||||
BYTE vendorAdapter;
|
||||
BYTE *vendorAdapterDescription;
|
||||
WORD interruptLevel;
|
||||
WORD txQueueDepth;
|
||||
WORD maxDataBlocks;
|
||||
} MacChars;
|
||||
|
||||
|
||||
typedef struct _ProtocolChars {
|
||||
WORD length;
|
||||
BYTE name[16];
|
||||
WORD type;
|
||||
} ProtocolChars;
|
||||
|
||||
|
||||
typedef struct _MacUpperDispatch {
|
||||
CommonChars *backPointer;
|
||||
Request request;
|
||||
TransmitChain transmitChain;
|
||||
TransferData transferData;
|
||||
ReceiveRelease receiveRelease;
|
||||
IndicationOn indicationOn;
|
||||
IndicationOff indicationOff;
|
||||
} MacUpperDispatch;
|
||||
|
||||
|
||||
typedef struct _MacStatusTable {
|
||||
WORD tableSize;
|
||||
DWORD lastDiag;
|
||||
DWORD macStatus;
|
||||
WORD packetFilter;
|
||||
BYTE *mediaSpecificStats;
|
||||
DWORD lastClear;
|
||||
DWORD totalFramesRx;
|
||||
DWORD totalFramesCrc;
|
||||
DWORD totalBytesRx;
|
||||
DWORD totalDiscardBufSpaceRx;
|
||||
DWORD totalMulticastRx;
|
||||
DWORD totalBroadcastRx;
|
||||
DWORD obsolete1[5];
|
||||
DWORD totalDiscardHwErrorRx;
|
||||
DWORD totalFramesTx;
|
||||
DWORD totalBytesTx;
|
||||
DWORD totalMulticastTx;
|
||||
DWORD totalBroadcastTx;
|
||||
DWORD obsolete2[2];
|
||||
DWORD totalDiscardTimeoutTx;
|
||||
DWORD totalDiscardHwErrorTx;
|
||||
} MacStatusTable;
|
||||
|
||||
|
||||
typedef struct _ProtDispatch {
|
||||
CommonChars *backPointer;
|
||||
DWORD flags;
|
||||
/* 0 - handles non-LLC frames
|
||||
* 1 - handles specific-LSAP LLC frames
|
||||
* 2 - handles specific-LSAP LLC frames
|
||||
* 3-31 - reserved must be 0
|
||||
*/
|
||||
void (*requestConfirm) (void);
|
||||
void (*transmitConfirm) (void);
|
||||
void (*receiveLookahead) (void);
|
||||
void (*indicationComplete) (void);
|
||||
void (*receiveChain) (void);
|
||||
void (*status) (void);
|
||||
} ProtDispatch;
|
||||
|
||||
|
||||
typedef struct _ReqBlock {
|
||||
WORD opcode;
|
||||
WORD status;
|
||||
BYTE FAR *pointer1;
|
||||
BYTE FAR *pointer2;
|
||||
WORD word1;
|
||||
} ReqBlock;
|
||||
|
||||
|
||||
typedef struct _TxBufDescrRec {
|
||||
BYTE txPtrType;
|
||||
BYTE dummy;
|
||||
WORD txDataLen;
|
||||
BYTE *txDataPtr;
|
||||
} TxBufDescrRec;
|
||||
|
||||
|
||||
typedef struct _TxBufDescr {
|
||||
WORD txImmedLen;
|
||||
BYTE *txImmedPtr;
|
||||
WORD txDataCount;
|
||||
TxBufDescrRec txBufDescrRec[NDIS_TX_BUF_LENGTH];
|
||||
} TxBufDescr;
|
||||
|
||||
|
||||
typedef struct _TDBufDescrRec {
|
||||
BYTE tDPtrType;
|
||||
BYTE dummy;
|
||||
WORD tDDataLen;
|
||||
BYTE *tDDataPtr;
|
||||
} TDBufDescrRec;
|
||||
|
||||
|
||||
typedef struct _TDBufDescr {
|
||||
WORD tDDataCount;
|
||||
TDBufDescrRec tDBufDescrRec[NDIS_TD_BUF_LENGTH];
|
||||
} TDBufDescr;
|
||||
|
||||
|
||||
typedef struct _RxBufDescrRec {
|
||||
WORD rxDataLen;
|
||||
BYTE *rxDataPtr;
|
||||
} RxBufDescrRec;
|
||||
|
||||
|
||||
typedef struct _RxBufDescr {
|
||||
WORD rxDataCount;
|
||||
RxBufDescrRec rxBufDescrRec[NDIS_RX_BUF_LENGTH];
|
||||
} RxBufDescr;
|
||||
|
||||
|
||||
typedef struct _PktBuf {
|
||||
struct _PktBuf *nextLink;
|
||||
struct _PktBuf *prevLink;
|
||||
int handle;
|
||||
int length;
|
||||
int packetLength;
|
||||
DWORD sequence;
|
||||
BYTE *buffer;
|
||||
} PktBuf;
|
||||
|
||||
|
||||
typedef struct _CardHandle {
|
||||
BYTE moduleName[16];
|
||||
CommonChars *common;
|
||||
} CardHandle;
|
||||
|
||||
|
||||
typedef struct _BindingsList {
|
||||
WORD numBindings;
|
||||
BYTE moduleName[2][16];
|
||||
} BindingsList;
|
||||
|
||||
|
||||
typedef struct _FailingModules {
|
||||
BYTE upperModuleName[16];
|
||||
BYTE lowerModuleName[16];
|
||||
} FailingModules;
|
||||
|
||||
|
||||
typedef union _HardwareAddress {
|
||||
BYTE bytes[6];
|
||||
WORD words[3];
|
||||
struct {
|
||||
BYTE bytes[6];
|
||||
} addr;
|
||||
} HardwareAddress;
|
||||
|
||||
|
||||
typedef struct _FddiHeader {
|
||||
BYTE frameControl;
|
||||
HardwareAddress etherDestHost;
|
||||
HardwareAddress etherSrcHost;
|
||||
} FddiHeader;
|
||||
|
||||
|
||||
typedef struct _EthernetIIHeader {
|
||||
HardwareAddress etherDestHost;
|
||||
HardwareAddress etherSrcHost;
|
||||
WORD etherType;
|
||||
} EthernetIIHeader;
|
||||
|
||||
|
||||
typedef struct _Ieee802Dot5Header {
|
||||
HardwareAddress etherDestHost;
|
||||
HardwareAddress etherSrcHost;
|
||||
BYTE routeInfo[30];
|
||||
} Ieee802Dot5Header;
|
||||
|
||||
|
||||
typedef struct _Ieee802Dot2SnapHeader {
|
||||
BYTE dsap; /* 0xAA */
|
||||
BYTE ssap; /* 0xAA */
|
||||
BYTE control; /* 3 */
|
||||
BYTE protocolId[5];
|
||||
} Ieee802Dot2SnapHeader;
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
extern char *NdisLastError (void);
|
||||
extern int NdisOpen (void);
|
||||
extern int NdisInit (int promis);
|
||||
extern int NdisRegisterAndBind (int promis);
|
||||
extern void NdisShutdown (void);
|
||||
extern void NdisCheckMacFeatures (struct _CardHandle *card);
|
||||
extern int NdisSendPacket (struct _PktBuf *pktBuf, int macId);
|
||||
|
||||
/*
|
||||
* Assembly "glue" functions
|
||||
*/
|
||||
extern int systemRequestGlue();
|
||||
extern int requestConfirmGlue();
|
||||
extern int transmitConfirmGlue();
|
||||
extern int receiveLookaheadGlue();
|
||||
extern int indicationCompleteGlue();
|
||||
extern int receiveChainGlue();
|
||||
extern int statusGlue();
|
||||
|
||||
/*
|
||||
* IOCTL function
|
||||
*/
|
||||
#ifdef __SMALL__
|
||||
extern int _far NdisGetLinkage (int handle, char *data, int size);
|
||||
#else
|
||||
extern int NdisGetLinkage (int handle, char *data, int size);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NDIS callback handlers
|
||||
*/
|
||||
CALLBACK (NdisSystemRequest (DWORD,DWORD, WORD, WORD, WORD));
|
||||
CALLBACK (NdisRequestConfirm ( WORD, WORD, WORD, WORD, WORD,WORD));
|
||||
CALLBACK (NdisTransmitConfirm ( WORD, WORD, WORD, WORD, WORD));
|
||||
CALLBACK (NdisReceiveLookahead ( WORD, WORD, WORD, BYTE*, BYTE*, WORD));
|
||||
CALLBACK (NdisReceiveChain ( WORD, WORD, WORD, struct _RxBufDescr*, BYTE*, WORD));
|
||||
CALLBACK (NdisStatusProc ( WORD, WORD, BYTE*, WORD,WORD));
|
||||
CALLBACK (NdisIndicationComplete( WORD, WORD));
|
||||
|
||||
BYTE *NdisAllocStack (void);
|
||||
void NdisFreeStack (BYTE*);
|
||||
|
||||
#ifdef __HIGHC__
|
||||
#define RENAME_ASM_SYM(x) pragma Alias(x,"@" #x "") /* prepend `@' */
|
||||
#define RENAME_C_SYM(x) pragma Alias(x,"_" #x "") /* prepend `_' */
|
||||
|
||||
RENAME_ASM_SYM (systemRequestGlue);
|
||||
RENAME_ASM_SYM (requestConfirmGlue);
|
||||
RENAME_ASM_SYM (transmitConfirmGlue);
|
||||
RENAME_ASM_SYM (receiveLookaheadGlue);
|
||||
RENAME_ASM_SYM (indicationCompleteGlue);
|
||||
RENAME_ASM_SYM (receiveChainGlue);
|
||||
RENAME_ASM_SYM (statusGlue);
|
||||
RENAME_ASM_SYM (NdisGetLinkage);
|
||||
RENAME_C_SYM (NdisSystemRequest);
|
||||
RENAME_C_SYM (NdisRequestConfirm);
|
||||
RENAME_C_SYM (NdisTransmitConfirm);
|
||||
RENAME_C_SYM (NdisReceiveLookahead);
|
||||
RENAME_C_SYM (NdisIndicationComplete);
|
||||
RENAME_C_SYM (NdisReceiveChain);
|
||||
RENAME_C_SYM (NdisStatusProc);
|
||||
RENAME_C_SYM (NdisAllocStack);
|
||||
RENAME_C_SYM (NdisFreeStack);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
188
msdos/ndis_0.asm
Normal file
188
msdos/ndis_0.asm
Normal file
|
|
@ -0,0 +1,188 @@
|
|||
PAGE 60,132
|
||||
NAME NDIS_0
|
||||
|
||||
ifdef DOSX
|
||||
.386
|
||||
_TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||
_TEXT ENDS
|
||||
_DATA SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||
_DATA ENDS
|
||||
_TEXT32 SEGMENT PUBLIC BYTE USE32 'CODE'
|
||||
_TEXT32 ENDS
|
||||
CB_DSEG EQU <CS> ; DOSX is tiny-model
|
||||
D_SEG EQU <_TEXT SEGMENT>
|
||||
D_END EQU <_TEXT ENDS>
|
||||
ASSUME CS:_TEXT,DS:_TEXT
|
||||
|
||||
PUSHREGS equ <pushad>
|
||||
POPREGS equ <popad>
|
||||
|
||||
PUBPROC macro name
|
||||
align 4
|
||||
public @&name
|
||||
@&name label near
|
||||
endm
|
||||
else
|
||||
.286
|
||||
_TEXT SEGMENT PUBLIC DWORD 'CODE'
|
||||
_TEXT ENDS
|
||||
_DATA SEGMENT PUBLIC DWORD 'DATA'
|
||||
_DATA ENDS
|
||||
CB_DSEG EQU <SEG _DATA> ; 16bit is small/large model
|
||||
D_SEG EQU <_DATA SEGMENT>
|
||||
D_END EQU <_DATA ENDS>
|
||||
ASSUME CS:_TEXT,DS:_DATA
|
||||
|
||||
PUSHREGS equ <pusha>
|
||||
POPREGS equ <popa>
|
||||
|
||||
PUBPROC macro name
|
||||
public _&name
|
||||
_&name label far
|
||||
endm
|
||||
endif
|
||||
|
||||
;-------------------------------------------
|
||||
|
||||
D_SEG
|
||||
|
||||
D_END
|
||||
|
||||
|
||||
_TEXT SEGMENT
|
||||
|
||||
EXTRN _NdisSystemRequest : near
|
||||
EXTRN _NdisRequestConfirm : near
|
||||
EXTRN _NdisTransmitConfirm : near
|
||||
EXTRN _NdisReceiveLookahead : near
|
||||
EXTRN _NdisIndicationComplete : near
|
||||
EXTRN _NdisReceiveChain : near
|
||||
EXTRN _NdisStatusProc : near
|
||||
EXTRN _NdisAllocStack : near
|
||||
EXTRN _NdisFreeStack : near
|
||||
|
||||
;
|
||||
; *ALL* interrupt threads come through this macro.
|
||||
;
|
||||
CALLBACK macro callbackProc, argsSize
|
||||
|
||||
pushf
|
||||
PUSHREGS ;; Save the registers
|
||||
|
||||
push es
|
||||
push ds
|
||||
mov ax,CB_DSEG ;; Load DS
|
||||
mov ds,ax
|
||||
call _NdisAllocStack ;; Get and install a stack.
|
||||
|
||||
mov bx,ss ;; Save off the old stack in other regs
|
||||
mov cx,sp
|
||||
mov ss,dx ;; Install the new one
|
||||
mov sp,ax
|
||||
push bx ;; Save the old one on to the new stack
|
||||
push cx
|
||||
sub sp,&argsSize ;; Allocate space for arguments on the stack
|
||||
|
||||
mov ax,ss ;; Set up the destination for the move
|
||||
mov es,ax
|
||||
mov di,sp
|
||||
mov ds,bx ;; Set up the source for the move.
|
||||
mov si,cx
|
||||
add si,4+6+32
|
||||
|
||||
mov cx,&argsSize ;; Move the arguments to the stack.
|
||||
shr cx,1
|
||||
cld
|
||||
rep movsw
|
||||
|
||||
mov ax,CB_DSEG ;; Set my data segment again.
|
||||
mov ds,ax
|
||||
|
||||
call &callbackProc ;; Call the real callback.
|
||||
pop di ;; Pop off the old stack
|
||||
pop si
|
||||
mov bx,ss ;; Save off the current allocated stack.
|
||||
mov cx,sp
|
||||
mov ss,si ;; Restore the old stack
|
||||
mov sp,di
|
||||
push ax ;; Save the return code
|
||||
push bx ;; Free the stack. Push the pointer to it
|
||||
push cx
|
||||
call _NdisFreeStack
|
||||
add sp,4
|
||||
pop ax ;; Get the return code back
|
||||
add di,32 ;; Get a pointer to ax on the stack
|
||||
mov word ptr ss:[di],ax
|
||||
pop ds
|
||||
pop es
|
||||
|
||||
POPREGS
|
||||
popf
|
||||
endm
|
||||
|
||||
;
|
||||
; Define all of the callbacks for the NDIS procs.
|
||||
;
|
||||
|
||||
PUBPROC systemRequestGlue
|
||||
CALLBACK _NdisSystemRequest,14
|
||||
RETF
|
||||
|
||||
PUBPROC requestConfirmGlue
|
||||
CALLBACK _NdisRequestConfirm,12
|
||||
RETF
|
||||
|
||||
PUBPROC transmitConfirmGlue
|
||||
CALLBACK _NdisTransmitConfirm,10
|
||||
RETF
|
||||
|
||||
PUBPROC receiveLookaheadGlue
|
||||
CALLBACK _NdisReceiveLookahead,16
|
||||
RETF
|
||||
|
||||
PUBPROC indicationCompleteGlue
|
||||
CALLBACK _NdisIndicationComplete,4
|
||||
RETF
|
||||
|
||||
PUBPROC receiveChainGlue
|
||||
CALLBACK _NdisReceiveChain,16
|
||||
RETF
|
||||
|
||||
PUBPROC statusGlue
|
||||
CALLBACK _NdisStatusProc,12
|
||||
RETF
|
||||
|
||||
;
|
||||
; int FAR NdisGetLinkage (int handle, char *data, int size);
|
||||
;
|
||||
|
||||
ifdef DOSX
|
||||
PUBPROC NdisGetLinkage
|
||||
push ebx
|
||||
mov ebx, [esp+8] ; device handle
|
||||
mov eax, 4402h ; IOCTRL read function
|
||||
mov edx, [esp+12] ; DS:EDX -> result data
|
||||
mov ecx, [esp+16] ; ECX = length
|
||||
int 21h
|
||||
pop ebx
|
||||
jc @fail
|
||||
xor eax, eax
|
||||
@fail: ret
|
||||
|
||||
else
|
||||
PUBPROC NdisGetLinkage
|
||||
enter 0, 0
|
||||
mov bx, [bp+6]
|
||||
mov ax, 4402h
|
||||
mov dx, [bp+8]
|
||||
mov cx, [bp+12]
|
||||
int 21h
|
||||
jc @fail
|
||||
xor ax, ax
|
||||
@fail: leave
|
||||
retf
|
||||
endif
|
||||
|
||||
ENDS
|
||||
|
||||
END
|
||||
197
msdos/pkt_rx0.asm
Normal file
197
msdos/pkt_rx0.asm
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
PAGE 60,132
|
||||
NAME PKT_RX
|
||||
|
||||
ifdef ??version ; using TASM
|
||||
masm
|
||||
jumps
|
||||
endif
|
||||
|
||||
PUBLIC _pktDrop, _pktRxBuf, _pktTxBuf, _pktTemp
|
||||
PUBLIC _rxOutOfs, _rxInOfs, _PktReceiver, _pktRxEnd
|
||||
|
||||
;
|
||||
; these sizes MUST be equal to the sizes in PKTDRVR.H
|
||||
;
|
||||
|
||||
RX_BUF_SIZE = 1500 ; max message size on Ethernet
|
||||
TX_BUF_SIZE = 1500
|
||||
|
||||
ifdef DOSX
|
||||
.386
|
||||
NUM_RX_BUF = 32 ; # of RX element buffers
|
||||
_TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||
_TEXT ENDS
|
||||
_DATA SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||
_DATA ENDS
|
||||
D_SEG EQU <_TEXT SEGMENT>
|
||||
D_END EQU <_TEXT ENDS>
|
||||
ASSUME CS:_TEXT,DS:_TEXT
|
||||
else
|
||||
.286
|
||||
NUM_RX_BUF = 10
|
||||
_TEXT SEGMENT PUBLIC DWORD 'CODE'
|
||||
_TEXT ENDS
|
||||
_DATA SEGMENT PUBLIC DWORD 'DATA'
|
||||
_DATA ENDS
|
||||
D_SEG EQU <_DATA SEGMENT>
|
||||
D_END EQU <_DATA ENDS>
|
||||
ASSUME CS:_TEXT,DS:_DATA
|
||||
endif
|
||||
|
||||
;-------------------------------------------
|
||||
|
||||
D_SEG
|
||||
|
||||
RX_ELEMENT STRUC
|
||||
firstCount dw 0 ; # of bytes on 1st call
|
||||
secondCount dw 0 ; # of bytes on 2nd call
|
||||
handle dw 0 ; handle for upcall
|
||||
destinAdr db 6 dup (0) ; packet destination address
|
||||
sourceAdr db 6 dup (0) ; packet source address
|
||||
protocol dw 0 ; packet protocol number
|
||||
rxBuffer db RX_BUF_SIZE dup (0) ; RX buffer
|
||||
ENDS
|
||||
align 4
|
||||
_rxOutOfs dw offset _pktRxBuf ; ring buffer offsets
|
||||
_rxInOfs dw offset _pktRxBuf ; into _pktRxBuf
|
||||
_pktDrop dw 0,0 ; packet drop counter
|
||||
_pktTemp db 20 dup (0) ; temp work area
|
||||
_pktTxBuf db (TX_BUF_SIZE+14) dup (0) ; TX buffer
|
||||
_pktRxBuf RX_ELEMENT NUM_RX_BUF dup (<>) ; RX structures
|
||||
LAST_OFS = offset $
|
||||
|
||||
screenSeg dw 0B800h
|
||||
newInOffset dw 0
|
||||
|
||||
fanChars db '-\|/'
|
||||
fanIndex dw 0
|
||||
|
||||
D_END
|
||||
|
||||
_TEXT SEGMENT
|
||||
|
||||
|
||||
SHOW_RX MACRO
|
||||
push es
|
||||
push bx
|
||||
mov bx, screenSeg
|
||||
mov es, bx ;; r-mode segment of colour screen
|
||||
mov di, 158 ;; upper right corner - 1
|
||||
mov bx, fanIndex
|
||||
mov al, fanChars[bx] ;; get write char
|
||||
mov ah, 15 ;; and white colour
|
||||
stosw ;; write to screen at ES:EDI
|
||||
inc fanIndex ;; update next index
|
||||
and fanIndex, 3
|
||||
pop bx
|
||||
pop es
|
||||
ENDM
|
||||
|
||||
;------------------------------------------------------------------------
|
||||
;
|
||||
; This macro return ES:DI to tail of Rx queue
|
||||
|
||||
ENQUEUE MACRO
|
||||
LOCAL @noWrap
|
||||
mov ax, _rxInOfs ;; DI = current in-offset
|
||||
add ax, SIZE RX_ELEMENT ;; point to next _pktRxBuf buffer
|
||||
cmp ax, LAST_OFS ;; pointing past last ?
|
||||
jb @noWrap ;; no - jump
|
||||
lea ax, _pktRxBuf ;; yes, point to 1st buffer
|
||||
align 4
|
||||
@noWrap: cmp ax, _rxOutOfs ;; in-ofs = out-ofs ?
|
||||
je @dump ;; yes, queue is full
|
||||
mov di, _rxInOfs ;; ES:DI -> buffer at queue input
|
||||
mov newInOffset, ax ;; remember new input offset
|
||||
|
||||
;; NOTE. rxInOfs is updated after the packet has been copied
|
||||
;; to ES:DI (= DS:SI on 2nd call) by the packet driver
|
||||
|
||||
ENDM
|
||||
|
||||
;------------------------------------------------------------------------
|
||||
;
|
||||
; This routine gets called by the packet driver twice:
|
||||
; 1st time (AX=0) it requests an address where to put the packet
|
||||
;
|
||||
; 2nd time (AX=1) the packet has been copied to this location (DS:SI)
|
||||
; BX has client handle (stored in RX_ELEMENT.handle).
|
||||
; CX has # of bytes in packet on both call. They should be equal.
|
||||
;
|
||||
; A test for equality is done by putting CX in _pktRxBuf [n].firstCount
|
||||
; and _pktRxBuf[n].secondCount, and CL on first call in
|
||||
; _pktRxBuf[n].rxBuffer[CX]. These values are checked in "PktReceive"
|
||||
; (PKTDRVR.C)
|
||||
;
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
_PktReceiver:
|
||||
pushf
|
||||
cli ; no distraction wanted !
|
||||
push ds
|
||||
push bx
|
||||
ifdef DOSX
|
||||
mov bx, cs
|
||||
else
|
||||
mov bx, SEG _DATA
|
||||
endif
|
||||
mov ds, bx
|
||||
mov es, bx ; ES = DS = CS or seg _DATA
|
||||
pop bx ; restore handle
|
||||
|
||||
cmp ax, 0 ; first call? (AX=0)
|
||||
jne @post ; AX=1: second call, do post process
|
||||
|
||||
ifdef DEBUG
|
||||
SHOW_RX ; show that a packet is received
|
||||
endif
|
||||
cmp cx, RX_BUF_SIZE+14 ; size OK ?
|
||||
ja @skip ; no, packet to large for us
|
||||
|
||||
ENQUEUE ; ES:DI -> _pktRxBuf[n]
|
||||
|
||||
mov [di].firstCount, cx ; remember the first count.
|
||||
mov [di].handle, bx ; remember the handle.
|
||||
add di, 6 ; ES:DI -> _pktRxBuf[n].destinAdr
|
||||
pop ds
|
||||
popf
|
||||
retf ; far return to driver with ES:DI
|
||||
|
||||
align 4
|
||||
@dump: inc _pktDrop[0] ; discard the packet on 1st call
|
||||
adc _pktDrop[2], 0 ; increment packets lost
|
||||
|
||||
@skip: xor di, di ; return ES:DI = NIL pointer
|
||||
xor ax, ax
|
||||
mov es, ax
|
||||
pop ds
|
||||
popf
|
||||
retf
|
||||
|
||||
align 4
|
||||
@post: or si, si ; DS:SI->_pktRxBuf[n][n].destinAdr
|
||||
jz @discard ; make sure we don't use NULL-pointer
|
||||
|
||||
sub si, 6 ; DS:SI -> _pktRxBuf[n].destinAdr
|
||||
;
|
||||
; push si
|
||||
; push [si].firstCount
|
||||
; call bpf_filter_match ; run the filter here some day?
|
||||
; add sp, 4
|
||||
; cmp ax, 0
|
||||
; je @discard
|
||||
|
||||
mov [si].secondCount, cx
|
||||
mov ax, newInOffset
|
||||
mov _rxInOfs, ax ; update _pktRxBuf input offset
|
||||
|
||||
align 4
|
||||
@discard:pop ds
|
||||
popf
|
||||
retf
|
||||
|
||||
_pktRxEnd db 0 ; marker for end of r-mode code/data
|
||||
|
||||
_TEXT ENDS
|
||||
|
||||
END
|
||||
155
msdos/pkt_rx1.s
Normal file
155
msdos/pkt_rx1.s
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
;
|
||||
; This file requires NASM 0.97+ to assemble
|
||||
;
|
||||
; Currently used only for djgpp + DOS4GW targets
|
||||
;
|
||||
; these sizes MUST be equal to the sizes in PKTDRVR.H
|
||||
;
|
||||
%define ETH_MTU 1500 ; max data size on Ethernet
|
||||
%define ETH_MIN 60 ; min/max total frame size
|
||||
%define ETH_MAX (ETH_MTU+2*6+2)
|
||||
%define NUM_RX_BUF 32 ; # of RX element buffers
|
||||
%define RX_SIZE (ETH_MAX+6) ; sizeof(RX_ELEMENT) = 1514+6
|
||||
%idefine offset
|
||||
|
||||
struc RX_ELEMENT
|
||||
.firstCount resw 1 ; # of bytes on 1st call
|
||||
.secondCount resw 1 ; # of bytes on 2nd call
|
||||
.handle resw 1 ; handle for upcall
|
||||
; .timeStamp resw 4 ; 64-bit RDTSC value
|
||||
.destinAdr resb 6 ; packet destination address
|
||||
.sourceAdr resb 6 ; packet source address
|
||||
.protocol resw 1 ; packet protocol number
|
||||
.rxBuffer resb ETH_MTU ; RX buffer
|
||||
endstruc
|
||||
|
||||
;-------------------------------------------
|
||||
|
||||
[org 0] ; assemble to .bin file
|
||||
|
||||
_rxOutOfs dw offset _pktRxBuf ; ring buffer offsets
|
||||
_rxInOfs dw offset _pktRxBuf ; into _pktRxBuf
|
||||
_pktDrop dw 0,0 ; packet drop counter
|
||||
_pktTemp resb 20 ; temp work area
|
||||
_pktTxBuf resb (ETH_MAX) ; TX buffer
|
||||
_pktRxBuf resb (RX_SIZE*NUM_RX_BUF) ; RX structures
|
||||
LAST_OFS equ $
|
||||
|
||||
screenSeg dw 0B800h
|
||||
newInOffset dw 0
|
||||
|
||||
fanChars db '-\|/'
|
||||
fanIndex dw 0
|
||||
|
||||
%macro SHOW_RX 0
|
||||
push es
|
||||
push bx
|
||||
mov bx, [screenSeg]
|
||||
mov es, bx ;; r-mode segment of colour screen
|
||||
mov di, 158 ;; upper right corner - 1
|
||||
mov bx, [fanIndex]
|
||||
mov al, [fanChars+bx] ;; get write char
|
||||
mov ah, 15 ;; and white colour
|
||||
cld ;; Needed?
|
||||
stosw ;; write to screen at ES:EDI
|
||||
inc word [fanIndex] ;; update next index
|
||||
and word [fanIndex], 3
|
||||
pop bx
|
||||
pop es
|
||||
%endmacro
|
||||
|
||||
;PutTimeStamp
|
||||
; rdtsc
|
||||
; mov [si].timeStamp, eax
|
||||
; mov [si+4].timeStamp, edx
|
||||
; ret
|
||||
|
||||
|
||||
;------------------------------------------------------------------------
|
||||
;
|
||||
; This routine gets called by the packet driver twice:
|
||||
; 1st time (AX=0) it requests an address where to put the packet
|
||||
;
|
||||
; 2nd time (AX=1) the packet has been copied to this location (DS:SI)
|
||||
; BX has client handle (stored in RX_ELEMENT.handle).
|
||||
; CX has # of bytes in packet on both call. They should be equal.
|
||||
; A test for equality is done by putting CX in _pktRxBuf [n].firstCount
|
||||
; and _pktRxBuf[n].secondCount, and CL on first call in
|
||||
; _pktRxBuf[n].rxBuffer[CX]. These values are checked in "PktReceive"
|
||||
; (PKTDRVR.C)
|
||||
;
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
_PktReceiver:
|
||||
pushf
|
||||
cli ; no distraction wanted !
|
||||
push ds
|
||||
push bx
|
||||
mov bx, cs
|
||||
mov ds, bx
|
||||
mov es, bx ; ES = DS = CS or seg _DATA
|
||||
pop bx ; restore handle
|
||||
|
||||
cmp ax, 0 ; first call? (AX=0)
|
||||
jne @post ; AX=1: second call, do post process
|
||||
|
||||
%ifdef DEBUG
|
||||
SHOW_RX ; show that a packet is received
|
||||
%endif
|
||||
|
||||
cmp cx, ETH_MAX ; size OK ?
|
||||
ja @skip ; no, too big
|
||||
|
||||
mov ax, [_rxInOfs]
|
||||
add ax, RX_SIZE
|
||||
cmp ax, LAST_OFS
|
||||
jb @noWrap
|
||||
mov ax, offset _pktRxBuf
|
||||
@noWrap:
|
||||
cmp ax, [_rxOutOfs]
|
||||
je @dump
|
||||
mov di, [_rxInOfs] ; ES:DI -> _pktRxBuf[n]
|
||||
mov [newInOffset], ax
|
||||
|
||||
mov [di], cx ; remember firstCount.
|
||||
mov [di+4], bx ; remember handle.
|
||||
add di, 6 ; ES:DI -> _pktRxBuf[n].destinAdr
|
||||
pop ds
|
||||
popf
|
||||
retf ; far return to driver with ES:DI
|
||||
|
||||
@dump: add word [_pktDrop+0], 1 ; discard the packet on 1st call
|
||||
adc word [_pktDrop+2], 0 ; increment packets lost
|
||||
|
||||
@skip: xor di, di ; return ES:DI = NIL pointer
|
||||
xor ax, ax
|
||||
mov es, ax
|
||||
pop ds
|
||||
popf
|
||||
retf
|
||||
|
||||
@post: or si, si ; DS:SI->_pktRxBuf[n][n].destinAdr
|
||||
jz @discard ; make sure we don't use NULL-pointer
|
||||
|
||||
;
|
||||
; push si
|
||||
; call bpf_filter_match ; run the filter here some day
|
||||
; pop si
|
||||
; cmp ax, 0
|
||||
; je @discard
|
||||
|
||||
mov [si-6+2], cx ; store _pktRxBuf[n].secondCount
|
||||
mov ax, [newInOffset]
|
||||
mov [_rxInOfs], ax ; update _pktRxBuf input offset
|
||||
|
||||
; call PutTimeStamp
|
||||
|
||||
@discard:
|
||||
pop ds
|
||||
popf
|
||||
retf
|
||||
|
||||
_pktRxEnd db 0 ; marker for end of r-mode code/data
|
||||
|
||||
END
|
||||
|
||||
1436
msdos/pktdrvr.c
Normal file
1436
msdos/pktdrvr.c
Normal file
File diff suppressed because it is too large
Load diff
153
msdos/pktdrvr.h
Normal file
153
msdos/pktdrvr.h
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
#ifndef __PKTDRVR_H
|
||||
#define __PKTDRVR_H
|
||||
|
||||
#define PUBLIC
|
||||
#define LOCAL static
|
||||
|
||||
#define RX_BUF_SIZE ETH_MTU /* buffer size variables. NB !! */
|
||||
#define TX_BUF_SIZE ETH_MTU /* must be same as in pkt_rx*.* */
|
||||
|
||||
#ifdef __HIGHC__
|
||||
#pragma Off(Align_members)
|
||||
#else
|
||||
#pragma pack(1)
|
||||
#endif
|
||||
|
||||
typedef enum { /* Packet-driver classes */
|
||||
PD_ETHER = 1,
|
||||
PD_PRONET10 = 2,
|
||||
PD_IEEE8025 = 3,
|
||||
PD_OMNINET = 4,
|
||||
PD_APPLETALK = 5,
|
||||
PD_SLIP = 6,
|
||||
PD_STARTLAN = 7,
|
||||
PD_ARCNET = 8,
|
||||
PD_AX25 = 9,
|
||||
PD_KISS = 10,
|
||||
PD_IEEE8023_2 = 11,
|
||||
PD_FDDI8022 = 12,
|
||||
PD_X25 = 13,
|
||||
PD_LANstar = 14,
|
||||
PD_PPP = 18
|
||||
} PKT_CLASS;
|
||||
|
||||
typedef enum { /* Packet-driver receive modes */
|
||||
PDRX_OFF = 1, /* turn off receiver */
|
||||
PDRX_DIRECT, /* receive only to this interface */
|
||||
PDRX_BROADCAST, /* DIRECT + broadcast packets */
|
||||
PDRX_MULTICAST1, /* BROADCAST + limited multicast */
|
||||
PDRX_MULTICAST2, /* BROADCAST + all multicast */
|
||||
PDRX_ALL_PACKETS, /* receive all packets on network */
|
||||
} PKT_RX_MODE;
|
||||
|
||||
typedef struct {
|
||||
char type[8];
|
||||
char len;
|
||||
} PKT_FRAME;
|
||||
|
||||
|
||||
typedef struct {
|
||||
BYTE class; /* = 1 for DEC/Interl/Xerox Ethernet */
|
||||
BYTE number; /* = 0 for single LAN adapter */
|
||||
WORD type; /* = 13 for 3C523 */
|
||||
BYTE funcs; /* Basic/Extended/HiPerf functions */
|
||||
WORD intr; /* user interrupt vector number */
|
||||
WORD handle; /* Handle associated with session */
|
||||
BYTE name [15]; /* Name of adapter interface,ie.3C523*/
|
||||
BOOL quiet; /* (don't) print errors to stdout */
|
||||
const char *error; /* address of error string */
|
||||
BYTE majVer; /* Major driver implementation ver. */
|
||||
BYTE minVer; /* Minor driver implementation ver. */
|
||||
BYTE dummyLen; /* length of following data */
|
||||
WORD MAClength; /* HiPerformance data, N/A */
|
||||
WORD MTU; /* HiPerformance data, N/A */
|
||||
WORD multicast; /* HiPerformance data, N/A */
|
||||
WORD rcvrBuffers; /* valid for */
|
||||
WORD UMTbufs; /* High Performance drivers only */
|
||||
WORD postEOIintr; /* Usage ?? */
|
||||
} PKT_INFO;
|
||||
|
||||
#define PKT_PARAM_SIZE 14 /* members majVer - postEOIintr */
|
||||
|
||||
|
||||
typedef struct {
|
||||
DWORD inPackets; /* # of packets received */
|
||||
DWORD outPackets; /* # of packets transmitted */
|
||||
DWORD inBytes; /* # of bytes received */
|
||||
DWORD outBytes; /* # of bytes transmitted */
|
||||
DWORD inErrors; /* # of reception errors */
|
||||
DWORD outErrors; /* # of transmission errors */
|
||||
DWORD lost; /* # of packets lost (RX) */
|
||||
} PKT_STAT;
|
||||
|
||||
|
||||
typedef struct {
|
||||
ETHER destin;
|
||||
ETHER source;
|
||||
WORD proto;
|
||||
BYTE data [TX_BUF_SIZE];
|
||||
} TX_ELEMENT;
|
||||
|
||||
typedef struct {
|
||||
WORD firstCount; /* # of bytes on 1st */
|
||||
WORD secondCount; /* and 2nd upcall */
|
||||
WORD handle; /* instance that upcalled */
|
||||
ETHER destin; /* E-net destination address */
|
||||
ETHER source; /* E-net source address */
|
||||
WORD proto; /* protocol number */
|
||||
BYTE data [RX_BUF_SIZE];
|
||||
} RX_ELEMENT;
|
||||
|
||||
|
||||
#ifdef __HIGHC__
|
||||
#pragma pop(Align_members)
|
||||
#else
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Prototypes for publics
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern PKT_STAT pktStat; /* statistics for packets */
|
||||
extern PKT_INFO pktInfo; /* packet-driver information */
|
||||
|
||||
extern PKT_RX_MODE receiveMode;
|
||||
extern ETHER myAddress, ethBroadcast;
|
||||
|
||||
extern BOOL PktInitDriver (PKT_RX_MODE mode);
|
||||
extern BOOL PktExitDriver (void);
|
||||
|
||||
extern const char *PktGetErrorStr (int errNum);
|
||||
extern const char *PktGetClassName (WORD class);
|
||||
extern const char *PktRXmodeStr (PKT_RX_MODE mode);
|
||||
extern BOOL PktSearchDriver (void);
|
||||
extern int PktReceive (BYTE *buf, int max);
|
||||
extern BOOL PktTransmit (const void *eth, int len);
|
||||
extern DWORD PktRxDropped (void);
|
||||
extern BOOL PktReleaseHandle (WORD handle);
|
||||
extern BOOL PktTerminHandle (WORD handle);
|
||||
extern BOOL PktResetInterface (WORD handle);
|
||||
extern BOOL PktSetReceiverMode(PKT_RX_MODE mode);
|
||||
extern BOOL PktGetReceiverMode(PKT_RX_MODE *mode);
|
||||
extern BOOL PktGetStatistics (WORD handle);
|
||||
extern BOOL PktSessStatistics (WORD handle);
|
||||
extern BOOL PktResetStatistics(WORD handle);
|
||||
extern BOOL PktGetAddress (ETHER *addr);
|
||||
extern BOOL PktSetAddress (const ETHER *addr);
|
||||
extern BOOL PktGetDriverInfo (void);
|
||||
extern BOOL PktGetDriverParam (void);
|
||||
extern void PktQueueBusy (BOOL busy);
|
||||
extern WORD PktBuffersUsed (void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __PKTDRVR_H */
|
||||
|
||||
162
msdos/readme.dos
Normal file
162
msdos/readme.dos
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
@(#) $Header: /tcpdump/master/libpcap/msdos/readme.dos,v 1.3 2004-12-19 19:47:01 guy Exp $ (LBL)
|
||||
|
||||
libpcap for DOS
|
||||
---------------
|
||||
|
||||
This file contains some notes on building and using libpcap for MS-DOS.
|
||||
Look in `README' and `pcap.man' for usage and details. These targets are
|
||||
supported:
|
||||
|
||||
- Borland C 4.0+ small or large model.
|
||||
- Metaware HighC 3.1+ with PharLap DOS-extender
|
||||
- GNU C 2.7+ with djgpp 2.01+ DOS extender
|
||||
- Watcom C 11.x with DOS4GW extender
|
||||
|
||||
Note: the files in the libpcap.zip contains short trucated filenames.
|
||||
So for djgpp to work with these, disable the use of long file names by
|
||||
setting "LFN=n" in the environment.
|
||||
|
||||
Files specific to DOS are pcap-dos.[ch] and the assembly and C files in
|
||||
the MSDOS sub-directory. Remember to built lipcap libraries from the top
|
||||
install directory. And not from the MSDOS sub-directory.
|
||||
|
||||
Note for djgpp users:
|
||||
If you got the libpcap from the official site www.tcpdump, then that
|
||||
distribution does NOT contain any sources for building 32-bit drivers.
|
||||
Instead get the full version at
|
||||
http://www.bgnett.no/~giva/pcap/libpcap.zip
|
||||
|
||||
and set "USE_32BIT_DRIVERS = 1" in msdos\common.dj.
|
||||
|
||||
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
DOS-libpcap currently only works reliably with a real-mode Ethernet packet-
|
||||
driver. This driver must be installed prior to using any program (e.g.
|
||||
tcpdump) compiled with libpcap. Work is underway to implement protected-
|
||||
mode drivers for 32-bit targets (djgpp only). The 3Com 3c509 driver is
|
||||
working almost perfectly. Due to lack of LAN-cards, I've not had the
|
||||
opportunity to test other drivers. These 32-bit drivers are modified
|
||||
Linux drivers.
|
||||
|
||||
|
||||
Required packages
|
||||
-----------------
|
||||
|
||||
The following packages and tools must be present for all targets.
|
||||
|
||||
1. Watt-32 tcp/ip library. This library is *not* used to send or
|
||||
receive network data. It's mostly used to access the 'hosts'
|
||||
file and other <netdb.h> features. Get 'watt32s*.zip' at:
|
||||
|
||||
http://www.bgnett.no/~giva/
|
||||
|
||||
2. Exception handler and disassember library (libexc.a) is needed if
|
||||
"USE_EXCEPT = 1" in common.dj. Available at:
|
||||
|
||||
http://www.bgnett.no/~giva/misc/exc_dx07.zip
|
||||
|
||||
3. Flex & Bison is used to generate parser for the filter handler
|
||||
pcap_compile:
|
||||
|
||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/flx254b.zip
|
||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsn128b.zip
|
||||
|
||||
4. NASM assembler v 0.98 or later is required when building djgpp and
|
||||
Watcom targets:
|
||||
|
||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/nasm098p.zip
|
||||
|
||||
5. sed (Stream Editor) is required for doing `make depend'.
|
||||
It's available at
|
||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/sed*.zip
|
||||
|
||||
A touch tool to update the time-stamp of a file. E.g.
|
||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/grep*.zip
|
||||
|
||||
6. For djgpp rm.exe and cp.exe are required. These should already be
|
||||
part of your djgpp installation. Also required (experimental at the
|
||||
time) for djgpp is DLX 2.91 or later. This tool is for the generation
|
||||
of dynamically loadable modules.
|
||||
|
||||
|
||||
Compiling libpcap
|
||||
-----------------
|
||||
|
||||
Follow these steps in building libpcap:
|
||||
|
||||
1. Make sure you've installed Watt-32 properly (see it's `INSTALL' file).
|
||||
During that installation a environment variable `WATT_ROOT' is set.
|
||||
This variable is used for building libpcap also (`WATT_INC' is
|
||||
deducted from `WATT_ROOT'). djgpp users should also define environment
|
||||
variables `C_INCLUDE_PATH' and `LIBRARY_PATH' to point to the include
|
||||
directory and library directory respectively. E.g. put this in your
|
||||
AUTOEXEC.BAT:
|
||||
set C_INCLUDE_PATH=c:/net/watt/inc
|
||||
set LIBRARY_PATH=c:/net/watt/lib
|
||||
|
||||
2. Revise the msdos/common.dj file for your djgpp/gcc installation;
|
||||
- change the value of `GCCLIB' to match location of libgcc.a.
|
||||
- set `USE_32BIT_DRIVERS = 1' to build 32-bit driver objects.
|
||||
|
||||
|
||||
3. Build pcap by using appropriate makefile. For djgpp, use:
|
||||
`make -f msdos/makefile.dj' (i.e. GNU `make')
|
||||
|
||||
For a Watcom target say:
|
||||
`wmake -f msdos\makefile.wc'
|
||||
|
||||
For a Borland target say:
|
||||
`maker -f msdos\Makefile pcap_bc.lib' (Borland's `maker.exe')
|
||||
|
||||
And for a HighC/Pharlap target say:
|
||||
`maker -f msdos\Makefile pcap_hc.lib' (Borland's `maker.exe')
|
||||
|
||||
You might like to change some `CFLAGS' -- only `DEBUG' define currently
|
||||
have any effect. It shows a rotating "fan" in upper right corner of
|
||||
screen. Remove `DEBUG' if you don't like it. You could add
|
||||
`-fomit-frame-pointer' to `CFLAGS' to speed up the generated code.
|
||||
But note, this makes debugging and crash-traceback difficult. Only
|
||||
add it if you're fully confident your application is 100% stable.
|
||||
|
||||
Note: Code in `USE_NDIS2' does not work at the moment.
|
||||
|
||||
4. The resulting libraries are put in current directory. There's no
|
||||
test-program for `libpcap'. Linking the library with `tcpdump' is
|
||||
the ultimate test anyway.
|
||||
|
||||
|
||||
|
||||
Extensions to libpcap
|
||||
---------------------
|
||||
|
||||
I've included some extra functions to DOS-libpcap:
|
||||
|
||||
`pcap_config_hook (const char *name, const char *value)'
|
||||
|
||||
Allows an application to set values of internal libpcap variables.
|
||||
`name' is typically a left-side keyword with an associated `value'
|
||||
that is called from application's configure process (see tcpdump's
|
||||
config.c file). libpcap keeps a set of tables that are searched for
|
||||
a name/value match. Currently only used to set debug-levels and
|
||||
parameters for the 32-bit network drivers.
|
||||
|
||||
`pcap_set_wait (pcap_t *, void (*)(void), int)' :
|
||||
|
||||
Only effective when reading offline traffic from dump-files.
|
||||
Function `pcap_offline_read()' will wait (and optionally yield)
|
||||
before printing next packet. This will simulate the pace the packets
|
||||
where actually recorded.
|
||||
|
||||
|
||||
|
||||
Happy sniffing !
|
||||
|
||||
|
||||
Gisle Vanem <giva@bgnett.no>
|
||||
<gvanem@broadpark.no>
|
||||
|
||||
October 1999, 2004
|
||||
|
||||
14
nametoaddr.c
14
nametoaddr.c
|
|
@ -24,13 +24,18 @@
|
|||
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/nametoaddr.c,v 1.82.2.1 2008/02/06 10:21:47 guy Exp $ (LBL)";
|
||||
"@(#) $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
|
||||
|
||||
#ifdef DECNETLIB
|
||||
#include <sys/types.h>
|
||||
#include <netdnet/dnetdb.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#include <pcap-stdinc.h>
|
||||
|
||||
|
|
@ -44,13 +49,6 @@ static const char rcsid[] _U_ =
|
|||
#include <netinet/in.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
/*
|
||||
* XXX - why was this included even on UNIX?
|
||||
*/
|
||||
#ifdef __MINGW32__
|
||||
#include "IP6_misc.h"
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
#ifdef HAVE_ETHER_HOSTTON
|
||||
/*
|
||||
|
|
|
|||
666
net/bpf_filter.c
666
net/bpf_filter.c
|
|
@ -1,666 +0,0 @@
|
|||
/*-
|
||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from the Stanford/CMU enet packet filter,
|
||||
* (net/enet.c) distributed as part of 4.3BSD, and code contributed
|
||||
* to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
|
||||
* Berkeley Laboratory.
|
||||
*
|
||||
* 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. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)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.45.2.1 2008/01/02 04:22:16 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
#include <pcap-stdinc.h>
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#define SOLARIS (defined(sun) && (defined(__SVR4) || defined(__svr4__)))
|
||||
#if defined(__hpux) || SOLARIS
|
||||
# include <sys/sysmacros.h>
|
||||
# include <sys/stream.h>
|
||||
# define mbuf msgb
|
||||
# define m_next b_cont
|
||||
# define MLEN(m) ((m)->b_wptr - (m)->b_rptr)
|
||||
# define mtod(m,t) ((t)(m)->b_rptr)
|
||||
#else
|
||||
# define MLEN(m) ((m)->m_len)
|
||||
#endif
|
||||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include <pcap/bpf.h>
|
||||
|
||||
#if !defined(KERNEL) && !defined(_KERNEL)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#define int32 bpf_int32
|
||||
#define u_int32 bpf_u_int32
|
||||
|
||||
#ifndef LBL_ALIGN
|
||||
/*
|
||||
* XXX - IA-64? If not, this probably won't work on Win64 IA-64
|
||||
* systems, unless LBL_ALIGN is defined elsewhere for them.
|
||||
* XXX - SuperH? If not, this probably won't work on WinCE SuperH
|
||||
* systems, unless LBL_ALIGN is defined elsewhere for them.
|
||||
*/
|
||||
#if defined(sparc) || defined(__sparc__) || defined(mips) || \
|
||||
defined(ibm032) || defined(__alpha) || defined(__hpux) || \
|
||||
defined(__arm__)
|
||||
#define LBL_ALIGN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef LBL_ALIGN
|
||||
#ifndef WIN32
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
#define EXTRACT_SHORT(p) ((u_short)ntohs(*(u_short *)p))
|
||||
#define EXTRACT_LONG(p) (ntohl(*(u_int32 *)p))
|
||||
#else
|
||||
#define EXTRACT_SHORT(p)\
|
||||
((u_short)\
|
||||
((u_short)*((u_char *)p+0)<<8|\
|
||||
(u_short)*((u_char *)p+1)<<0))
|
||||
#define EXTRACT_LONG(p)\
|
||||
((u_int32)*((u_char *)p+0)<<24|\
|
||||
(u_int32)*((u_char *)p+1)<<16|\
|
||||
(u_int32)*((u_char *)p+2)<<8|\
|
||||
(u_int32)*((u_char *)p+3)<<0)
|
||||
#endif
|
||||
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
# if !defined(__hpux) && !SOLARIS
|
||||
#include <sys/mbuf.h>
|
||||
# endif
|
||||
#define MINDEX(len, _m, _k) \
|
||||
{ \
|
||||
len = MLEN(m); \
|
||||
while ((_k) >= len) { \
|
||||
(_k) -= len; \
|
||||
(_m) = (_m)->m_next; \
|
||||
if ((_m) == 0) \
|
||||
return 0; \
|
||||
len = MLEN(m); \
|
||||
} \
|
||||
}
|
||||
|
||||
static int
|
||||
m_xword(m, k, err)
|
||||
register struct mbuf *m;
|
||||
register int k, *err;
|
||||
{
|
||||
register int len;
|
||||
register u_char *cp, *np;
|
||||
register struct mbuf *m0;
|
||||
|
||||
MINDEX(len, m, k);
|
||||
cp = mtod(m, u_char *) + k;
|
||||
if (len - k >= 4) {
|
||||
*err = 0;
|
||||
return EXTRACT_LONG(cp);
|
||||
}
|
||||
m0 = m->m_next;
|
||||
if (m0 == 0 || MLEN(m0) + len - k < 4)
|
||||
goto bad;
|
||||
*err = 0;
|
||||
np = mtod(m0, u_char *);
|
||||
switch (len - k) {
|
||||
|
||||
case 1:
|
||||
return (cp[0] << 24) | (np[0] << 16) | (np[1] << 8) | np[2];
|
||||
|
||||
case 2:
|
||||
return (cp[0] << 24) | (cp[1] << 16) | (np[0] << 8) | np[1];
|
||||
|
||||
default:
|
||||
return (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | np[0];
|
||||
}
|
||||
bad:
|
||||
*err = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
m_xhalf(m, k, err)
|
||||
register struct mbuf *m;
|
||||
register int k, *err;
|
||||
{
|
||||
register int len;
|
||||
register u_char *cp;
|
||||
register struct mbuf *m0;
|
||||
|
||||
MINDEX(len, m, k);
|
||||
cp = mtod(m, u_char *) + k;
|
||||
if (len - k >= 2) {
|
||||
*err = 0;
|
||||
return EXTRACT_SHORT(cp);
|
||||
}
|
||||
m0 = m->m_next;
|
||||
if (m0 == 0)
|
||||
goto bad;
|
||||
*err = 0;
|
||||
return (cp[0] << 8) | mtod(m0, u_char *)[0];
|
||||
bad:
|
||||
*err = 1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 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
|
||||
* 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)
|
||||
register const struct bpf_insn *pc;
|
||||
register const u_char *p;
|
||||
u_int wirelen;
|
||||
register u_int buflen;
|
||||
{
|
||||
register u_int32 A, X;
|
||||
register int k;
|
||||
int32 mem[BPF_MEMWORDS];
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
struct mbuf *m, *n;
|
||||
int merr, len;
|
||||
|
||||
if (buflen == 0) {
|
||||
m = (struct mbuf *)p;
|
||||
p = mtod(m, u_char *);
|
||||
buflen = MLEN(m);
|
||||
} else
|
||||
m = NULL;
|
||||
#endif
|
||||
|
||||
if (pc == 0)
|
||||
/*
|
||||
* No filter means accept all.
|
||||
*/
|
||||
return (u_int)-1;
|
||||
A = 0;
|
||||
X = 0;
|
||||
--pc;
|
||||
while (1) {
|
||||
++pc;
|
||||
switch (pc->code) {
|
||||
|
||||
default:
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
return 0;
|
||||
#else
|
||||
abort();
|
||||
#endif
|
||||
case BPF_RET|BPF_K:
|
||||
return (u_int)pc->k;
|
||||
|
||||
case BPF_RET|BPF_A:
|
||||
return (u_int)A;
|
||||
|
||||
case BPF_LD|BPF_W|BPF_ABS:
|
||||
k = pc->k;
|
||||
if (k + sizeof(int32) > buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
A = m_xword(m, k, &merr);
|
||||
if (merr != 0)
|
||||
return 0;
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
A = EXTRACT_LONG(&p[k]);
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_H|BPF_ABS:
|
||||
k = pc->k;
|
||||
if (k + sizeof(short) > buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
A = m_xhalf(m, k, &merr);
|
||||
if (merr != 0)
|
||||
return 0;
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
A = EXTRACT_SHORT(&p[k]);
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_B|BPF_ABS:
|
||||
k = pc->k;
|
||||
if (k >= buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
n = m;
|
||||
MINDEX(len, n, k);
|
||||
A = mtod(n, u_char *)[k];
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
A = p[k];
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_W|BPF_LEN:
|
||||
A = wirelen;
|
||||
continue;
|
||||
|
||||
case BPF_LDX|BPF_W|BPF_LEN:
|
||||
X = wirelen;
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_W|BPF_IND:
|
||||
k = X + pc->k;
|
||||
if (k + sizeof(int32) > buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
A = m_xword(m, k, &merr);
|
||||
if (merr != 0)
|
||||
return 0;
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
A = EXTRACT_LONG(&p[k]);
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_H|BPF_IND:
|
||||
k = X + pc->k;
|
||||
if (k + sizeof(short) > buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
A = m_xhalf(m, k, &merr);
|
||||
if (merr != 0)
|
||||
return 0;
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
A = EXTRACT_SHORT(&p[k]);
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_B|BPF_IND:
|
||||
k = X + pc->k;
|
||||
if (k >= buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
n = m;
|
||||
MINDEX(len, n, k);
|
||||
A = mtod(n, u_char *)[k];
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
A = p[k];
|
||||
continue;
|
||||
|
||||
case BPF_LDX|BPF_MSH|BPF_B:
|
||||
k = pc->k;
|
||||
if (k >= buflen) {
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (m == NULL)
|
||||
return 0;
|
||||
n = m;
|
||||
MINDEX(len, n, k);
|
||||
X = (mtod(n, char *)[k] & 0xf) << 2;
|
||||
continue;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
X = (p[pc->k] & 0xf) << 2;
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_IMM:
|
||||
A = pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_LDX|BPF_IMM:
|
||||
X = pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_LD|BPF_MEM:
|
||||
A = mem[pc->k];
|
||||
continue;
|
||||
|
||||
case BPF_LDX|BPF_MEM:
|
||||
X = mem[pc->k];
|
||||
continue;
|
||||
|
||||
case BPF_ST:
|
||||
mem[pc->k] = A;
|
||||
continue;
|
||||
|
||||
case BPF_STX:
|
||||
mem[pc->k] = X;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JA:
|
||||
pc += pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JGT|BPF_K:
|
||||
pc += (A > pc->k) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JGE|BPF_K:
|
||||
pc += (A >= pc->k) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JEQ|BPF_K:
|
||||
pc += (A == pc->k) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JSET|BPF_K:
|
||||
pc += (A & pc->k) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JGT|BPF_X:
|
||||
pc += (A > X) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JGE|BPF_X:
|
||||
pc += (A >= X) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JEQ|BPF_X:
|
||||
pc += (A == X) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_JMP|BPF_JSET|BPF_X:
|
||||
pc += (A & X) ? pc->jt : pc->jf;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_ADD|BPF_X:
|
||||
A += X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_SUB|BPF_X:
|
||||
A -= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_MUL|BPF_X:
|
||||
A *= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_DIV|BPF_X:
|
||||
if (X == 0)
|
||||
return 0;
|
||||
A /= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_AND|BPF_X:
|
||||
A &= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_OR|BPF_X:
|
||||
A |= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_LSH|BPF_X:
|
||||
A <<= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_RSH|BPF_X:
|
||||
A >>= X;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_ADD|BPF_K:
|
||||
A += pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_SUB|BPF_K:
|
||||
A -= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_MUL|BPF_K:
|
||||
A *= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_DIV|BPF_K:
|
||||
A /= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_AND|BPF_K:
|
||||
A &= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_OR|BPF_K:
|
||||
A |= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_LSH|BPF_K:
|
||||
A <<= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_RSH|BPF_K:
|
||||
A >>= pc->k;
|
||||
continue;
|
||||
|
||||
case BPF_ALU|BPF_NEG:
|
||||
A = -A;
|
||||
continue;
|
||||
|
||||
case BPF_MISC|BPF_TAX:
|
||||
X = A;
|
||||
continue;
|
||||
|
||||
case BPF_MISC|BPF_TXA:
|
||||
A = X;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return true if the 'fcode' is a valid filter program.
|
||||
* The constraints are that each jump be forward and to a valid
|
||||
* code, that memory accesses are within valid ranges (to the
|
||||
* extent that this can be checked statically; loads of packet
|
||||
* data have to be, and are, also checked at run time), and that
|
||||
* the code terminates with either an accept or reject.
|
||||
*
|
||||
* The kernel needs to be able to verify an application's filter code.
|
||||
* Otherwise, a bogus program could easily crash the system.
|
||||
*/
|
||||
int
|
||||
bpf_validate(f, len)
|
||||
const struct bpf_insn *f;
|
||||
int len;
|
||||
{
|
||||
u_int i, from;
|
||||
const struct bpf_insn *p;
|
||||
|
||||
if (len < 1)
|
||||
return 0;
|
||||
/*
|
||||
* There's no maximum program length in userland.
|
||||
*/
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (len > BPF_MAXINSNS)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
for (i = 0; i < len; ++i) {
|
||||
p = &f[i];
|
||||
switch (BPF_CLASS(p->code)) {
|
||||
/*
|
||||
* Check that memory operations use valid addresses.
|
||||
*/
|
||||
case BPF_LD:
|
||||
case BPF_LDX:
|
||||
switch (BPF_MODE(p->code)) {
|
||||
case BPF_IMM:
|
||||
break;
|
||||
case BPF_ABS:
|
||||
case BPF_IND:
|
||||
case BPF_MSH:
|
||||
/*
|
||||
* There's no maximum packet data size
|
||||
* in userland. The runtime packet length
|
||||
* check suffices.
|
||||
*/
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
/*
|
||||
* More strict check with actual packet length
|
||||
* is done runtime.
|
||||
*/
|
||||
if (p->k >= bpf_maxbufsize)
|
||||
return 0;
|
||||
#endif
|
||||
break;
|
||||
case BPF_MEM:
|
||||
if (p->k >= BPF_MEMWORDS)
|
||||
return 0;
|
||||
break;
|
||||
case BPF_LEN:
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case BPF_ST:
|
||||
case BPF_STX:
|
||||
if (p->k >= BPF_MEMWORDS)
|
||||
return 0;
|
||||
break;
|
||||
case BPF_ALU:
|
||||
switch (BPF_OP(p->code)) {
|
||||
case BPF_ADD:
|
||||
case BPF_SUB:
|
||||
case BPF_MUL:
|
||||
case BPF_OR:
|
||||
case BPF_AND:
|
||||
case BPF_LSH:
|
||||
case BPF_RSH:
|
||||
case BPF_NEG:
|
||||
break;
|
||||
case BPF_DIV:
|
||||
/*
|
||||
* Check for constant division by 0.
|
||||
*/
|
||||
if (BPF_RVAL(p->code) == BPF_K && p->k == 0)
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case BPF_JMP:
|
||||
/*
|
||||
* Check that jumps are within the code block,
|
||||
* and that unconditional branches don't go
|
||||
* backwards as a result of an overflow.
|
||||
* Unconditional branches have a 32-bit offset,
|
||||
* so they could overflow; we check to make
|
||||
* sure they don't. Conditional branches have
|
||||
* an 8-bit offset, and the from address is <=
|
||||
* BPF_MAXINSNS, and we assume that BPF_MAXINSNS
|
||||
* is sufficiently small that adding 255 to it
|
||||
* won't overflow.
|
||||
*
|
||||
* We know that len is <= BPF_MAXINSNS, and we
|
||||
* assume that BPF_MAXINSNS is < the maximum size
|
||||
* of a u_int, so that i + 1 doesn't overflow.
|
||||
*
|
||||
* For userland, we don't know that the from
|
||||
* or len are <= BPF_MAXINSNS, but we know that
|
||||
* from <= len, and, except on a 64-bit system,
|
||||
* it's unlikely that len, if it truly reflects
|
||||
* the size of the program we've been handed,
|
||||
* will be anywhere near the maximum size of
|
||||
* a u_int. We also don't check for backward
|
||||
* branches, as we currently support them in
|
||||
* userland for the protochain operation.
|
||||
*/
|
||||
from = i + 1;
|
||||
switch (BPF_OP(p->code)) {
|
||||
case BPF_JA:
|
||||
#if defined(KERNEL) || defined(_KERNEL)
|
||||
if (from + p->k < from || from + p->k >= len)
|
||||
#else
|
||||
if (from + p->k >= len)
|
||||
#endif
|
||||
return 0;
|
||||
break;
|
||||
case BPF_JEQ:
|
||||
case BPF_JGT:
|
||||
case BPF_JGE:
|
||||
case BPF_JSET:
|
||||
if (from + p->jt >= len || from + p->jf >= len)
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case BPF_RET:
|
||||
break;
|
||||
case BPF_MISC:
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return BPF_CLASS(f[len - 1].code) == BPF_RET;
|
||||
}
|
||||
2
nlpid.h
2
nlpid.h
|
|
@ -15,7 +15,7 @@
|
|||
* 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)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/nlpid.h,v 1.2 2002-12-06 00:01:34 hannes Exp $ (Juniper)
|
||||
*/
|
||||
|
||||
/* Types missing from some systems */
|
||||
|
|
|
|||
216
opentest.c
Normal file
216
opentest.c
Normal file
|
|
@ -0,0 +1,216 @@
|
|||
/*
|
||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that: (1) source code distributions
|
||||
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||
* distributions including binary code include the above copyright notice and
|
||||
* this paragraph in its entirety in the documentation or other materials
|
||||
* provided with the distribution, and (3) all advertising materials mentioning
|
||||
* features or use of this software display the following acknowledgement:
|
||||
* ``This product includes software developed by the University of California,
|
||||
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||
* the University nor the names of its contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior
|
||||
* written permission.
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif
|
||||
|
||||
#include <pcap.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define MAXIMUM_SNAPLEN 65535
|
||||
|
||||
static char *program_name;
|
||||
|
||||
/* Forwards */
|
||||
static void usage(void) __attribute__((noreturn));
|
||||
static void error(const char *, ...);
|
||||
static void warning(const char *, ...);
|
||||
|
||||
extern int optind;
|
||||
extern int opterr;
|
||||
extern char *optarg;
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
register int op;
|
||||
register char *cp, *device;
|
||||
int dorfmon, dopromisc, snaplen, useactivate, bufsize;
|
||||
char ebuf[PCAP_ERRBUF_SIZE];
|
||||
pcap_t *pd;
|
||||
int status = 0;
|
||||
|
||||
device = NULL;
|
||||
dorfmon = 0;
|
||||
dopromisc = 0;
|
||||
snaplen = MAXIMUM_SNAPLEN;
|
||||
bufsize = 0;
|
||||
useactivate = 0;
|
||||
if ((cp = strrchr(argv[0], '/')) != NULL)
|
||||
program_name = cp + 1;
|
||||
else
|
||||
program_name = argv[0];
|
||||
|
||||
opterr = 0;
|
||||
while ((op = getopt(argc, argv, "i:Ips:aB:")) != -1) {
|
||||
switch (op) {
|
||||
|
||||
case 'i':
|
||||
device = optarg;
|
||||
break;
|
||||
|
||||
case 'I':
|
||||
dorfmon = 1;
|
||||
useactivate = 1; /* required for rfmon */
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
dopromisc = 1;
|
||||
break;
|
||||
|
||||
case 's': {
|
||||
char *end;
|
||||
|
||||
snaplen = strtol(optarg, &end, 0);
|
||||
if (optarg == end || *end != '\0'
|
||||
|| snaplen < 0 || snaplen > MAXIMUM_SNAPLEN)
|
||||
error("invalid snaplen %s", optarg);
|
||||
else if (snaplen == 0)
|
||||
snaplen = MAXIMUM_SNAPLEN;
|
||||
break;
|
||||
}
|
||||
|
||||
case 'B':
|
||||
bufsize = atoi(optarg)*1024;
|
||||
if (bufsize <= 0)
|
||||
error("invalid packet buffer size %s", optarg);
|
||||
useactivate = 1; /* required for bufsize */
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
useactivate = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
usage();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
}
|
||||
|
||||
if (useactivate) {
|
||||
pd = pcap_create(device, ebuf);
|
||||
if (pd == NULL)
|
||||
error("%s", ebuf);
|
||||
status = pcap_set_snaplen(pd, snaplen);
|
||||
if (status != 0)
|
||||
error("%s: pcap_set_snaplen failed: %s",
|
||||
device, pcap_statustostr(status));
|
||||
if (dopromisc) {
|
||||
status = pcap_set_promisc(pd, 1);
|
||||
if (status != 0)
|
||||
error("%s: pcap_set_promisc failed: %s",
|
||||
device, pcap_statustostr(status));
|
||||
}
|
||||
if (dorfmon) {
|
||||
status = pcap_set_rfmon(pd, 1);
|
||||
if (status != 0)
|
||||
error("%s: pcap_set_rfmon failed: %s",
|
||||
device, pcap_statustostr(status));
|
||||
}
|
||||
status = pcap_set_timeout(pd, 1000);
|
||||
if (status != 0)
|
||||
error("%s: pcap_set_timeout failed: %s",
|
||||
device, pcap_statustostr(status));
|
||||
if (bufsize != 0) {
|
||||
status = pcap_set_buffer_size(pd, bufsize);
|
||||
if (status != 0)
|
||||
error("%s: pcap_set_buffer_size failed: %s",
|
||||
device, pcap_statustostr(status));
|
||||
}
|
||||
status = pcap_activate(pd);
|
||||
if (status < 0) {
|
||||
/*
|
||||
* pcap_activate() failed.
|
||||
*/
|
||||
error("%s: %s\n(%s)", device,
|
||||
pcap_statustostr(status), pcap_geterr(pd));
|
||||
} else if (status > 0) {
|
||||
/*
|
||||
* pcap_activate() succeeded, but it's warning us
|
||||
* of a problem it had.
|
||||
*/
|
||||
warning("%s: %s\n(%s)", device,
|
||||
pcap_statustostr(status), pcap_geterr(pd));
|
||||
}
|
||||
} else {
|
||||
*ebuf = '\0';
|
||||
pd = pcap_open_live(device, 65535, 0, 1000, ebuf);
|
||||
if (pd == NULL)
|
||||
error("%s", ebuf);
|
||||
else if (*ebuf)
|
||||
warning("%s", ebuf);
|
||||
}
|
||||
pcap_close(pd);
|
||||
exit(status < 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
(void)fprintf(stderr,
|
||||
"Usage: %s [ -Ipa ] [ -i interface ] [ -s snaplen ] [ -B bufsize ]\n",
|
||||
program_name);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* VARARGS */
|
||||
static void
|
||||
error(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
(void)fprintf(stderr, "%s: ", program_name);
|
||||
va_start(ap, fmt);
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
if (*fmt) {
|
||||
fmt += strlen(fmt);
|
||||
if (fmt[-1] != '\n')
|
||||
(void)fputc('\n', stderr);
|
||||
}
|
||||
exit(1);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* VARARGS */
|
||||
static void
|
||||
warning(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
(void)fprintf(stderr, "%s: WARNING: ", program_name);
|
||||
va_start(ap, fmt);
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
if (*fmt) {
|
||||
fmt += strlen(fmt);
|
||||
if (fmt[-1] != '\n')
|
||||
(void)fputc('\n', stderr);
|
||||
}
|
||||
}
|
||||
16
optimize.c
16
optimize.c
|
|
@ -22,13 +22,27 @@
|
|||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/optimize.c,v 1.90.2.1 2008/01/02 04:22:16 guy Exp $ (LBL)";
|
||||
"@(#) $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"
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#include <pcap-stdinc.h>
|
||||
#else /* WIN32 */
|
||||
#if HAVE_INTTYPES_H
|
||||
#include <inttypes.h>
|
||||
#elif HAVE_STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_BITYPES_H
|
||||
#include <sys/bitypes.h>
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
#endif /* WIN32 */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <memory.h>
|
||||
|
|
|
|||
16
org.tcpdump.chmod_bpf.plist
Normal file
16
org.tcpdump.chmod_bpf.plist
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>Label</key>
|
||||
<string>org.tcpdump.chmod_bpf</string>
|
||||
<key>RunAtLoad</key>
|
||||
<true/>
|
||||
<key>Program</key>
|
||||
<string>/usr/local/bin/chmod_bpf</string>
|
||||
<key>ProgramArguments</key>
|
||||
<array>
|
||||
<string>/usr/local/bin/chmod_bpf</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
216
pcap-bpf.c
216
pcap-bpf.c
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] _U_ =
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-bpf.c,v 1.99.2.17 2008-09-16 18:43:02 guy Exp $ (LBL)";
|
||||
"@(#) $Header: /tcpdump/master/libpcap/pcap-bpf.c,v 1.116 2008-09-16 18:42:29 guy Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
|
@ -32,10 +32,24 @@ static const char rcsid[] _U_ =
|
|||
#include <sys/mman.h>
|
||||
#endif
|
||||
#include <sys/time.h>
|
||||
#include <sys/timeb.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/file.h>
|
||||
/*
|
||||
* <net/bpf.h> defines ioctls, but doesn't include <sys/ioccom.h>.
|
||||
*
|
||||
* We include <sys/ioctl.h> as it might be necessary to declare ioctl();
|
||||
* at least on *BSD and Mac OS X, it also defines various SIOC ioctls -
|
||||
* we could include <sys/sockio.h>, but if we're already including
|
||||
* <sys/ioctl.h>, which includes <sys/sockio.h> on those platforms,
|
||||
* there's not much point in doing so.
|
||||
*
|
||||
* If we have <sys/ioccom.h>, we include it as well, to handle systems
|
||||
* such as Solaris which don't arrange to include <sys/ioccom.h> if you
|
||||
* include <sys/ioctl.h>
|
||||
*/
|
||||
#include <sys/ioctl.h>
|
||||
#ifdef HAVE_SYS_IOCCOM_H
|
||||
#include <sys/ioccom.h>
|
||||
#endif
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#ifdef HAVE_ZEROCOPY_BPF
|
||||
|
|
@ -85,6 +99,8 @@ static const char rcsid[] _U_ =
|
|||
static int bpfloadedflag = 0;
|
||||
static int odmlockid = 0;
|
||||
|
||||
static int bpf_load(char *errbuf);
|
||||
|
||||
#else /* _AIX */
|
||||
|
||||
#include <net/bpf.h>
|
||||
|
|
@ -92,6 +108,7 @@ static int odmlockid = 0;
|
|||
#endif /* _AIX */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -109,6 +126,10 @@ static int odmlockid = 0;
|
|||
#include "pcap-dag.h"
|
||||
#endif /* HAVE_DAG_API */
|
||||
|
||||
#ifdef HAVE_SNF_API
|
||||
#include "pcap-snf.h"
|
||||
#endif /* HAVE_SNF_API */
|
||||
|
||||
#ifdef HAVE_OS_PROTO_H
|
||||
#include "os-proto.h"
|
||||
#endif
|
||||
|
|
@ -192,11 +213,26 @@ pcap_setnonblock_zbuf(pcap_t *p, int nonblock, char *errbuf)
|
|||
* (from pcap-linux.c).
|
||||
*/
|
||||
if (nonblock) {
|
||||
if (p->md.timeout > 0)
|
||||
if (p->md.timeout >= 0) {
|
||||
/*
|
||||
* Timeout is non-negative, so we're not already
|
||||
* in non-blocking mode; set it to the 2's
|
||||
* complement, to make it negative, as an
|
||||
* indication that we're in non-blocking mode.
|
||||
*/
|
||||
p->md.timeout = p->md.timeout * -1 - 1;
|
||||
} else
|
||||
if (p->md.timeout < 0)
|
||||
}
|
||||
} else {
|
||||
if (p->md.timeout < 0) {
|
||||
/*
|
||||
* Timeout is negative, so we're not already
|
||||
* in blocking mode; reverse the previous
|
||||
* operation, to make the timeout non-negative
|
||||
* again.
|
||||
*/
|
||||
p->md.timeout = (p->md.timeout + 1) * -1;
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
@ -385,6 +421,10 @@ pcap_create(const char *device, char *ebuf)
|
|||
if (strstr(device, "dag"))
|
||||
return (dag_create(device, ebuf));
|
||||
#endif /* HAVE_DAG_API */
|
||||
#ifdef HAVE_SNF_API
|
||||
if (strstr(device, "snf"))
|
||||
return (snf_create(device, ebuf));
|
||||
#endif /* HAVE_SNF_API */
|
||||
|
||||
p = pcap_create_common(device, ebuf);
|
||||
if (p == NULL)
|
||||
|
|
@ -506,11 +546,20 @@ get_dlt_list(int fd, int v, struct bpf_dltlist *bdlp, char *ebuf)
|
|||
* right thing to do, but I suspect it is - Ethernet <->
|
||||
* 802.11 bridges would probably badly mishandle frames
|
||||
* that don't have Ethernet headers).
|
||||
*
|
||||
* On Solaris with BPF, Ethernet devices also offer
|
||||
* DLT_IPNET, so we, if DLT_IPNET is defined, we don't
|
||||
* treat it as an indication that the device isn't an
|
||||
* Ethernet.
|
||||
*/
|
||||
if (v == DLT_EN10MB) {
|
||||
is_ethernet = 1;
|
||||
for (i = 0; i < bdlp->bfl_len; i++) {
|
||||
if (bdlp->bfl_list[i] != DLT_EN10MB) {
|
||||
if (bdlp->bfl_list[i] != DLT_EN10MB
|
||||
#ifdef DLT_IPNET
|
||||
&& bdlp->bfl_list[i] != DLT_IPNET
|
||||
#endif
|
||||
) {
|
||||
is_ethernet = 0;
|
||||
break;
|
||||
}
|
||||
|
|
@ -712,6 +761,7 @@ pcap_stats_bpf(pcap_t *p, struct pcap_stat *ps)
|
|||
|
||||
ps->ps_recv = s.bs_recv;
|
||||
ps->ps_drop = s.bs_drop;
|
||||
ps->ps_ifdrop = 0;
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
|
@ -801,7 +851,22 @@ pcap_read_bpf(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
|
|||
|
||||
case EWOULDBLOCK:
|
||||
return (0);
|
||||
#if defined(sun) && !defined(BSD)
|
||||
|
||||
case ENXIO:
|
||||
/*
|
||||
* The device on which we're capturing
|
||||
* went away.
|
||||
*
|
||||
* XXX - we should really return
|
||||
* PCAP_ERROR_IFACE_NOT_UP, but
|
||||
* pcap_dispatch() etc. aren't
|
||||
* defined to retur that.
|
||||
*/
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"The interface went down");
|
||||
return (PCAP_ERROR);
|
||||
|
||||
#if defined(sun) && !defined(BSD) && !defined(__svr4__) && !defined(__SVR4)
|
||||
/*
|
||||
* Due to a SunOS bug, after 2^31 bytes, the kernel
|
||||
* file offset overflows and read fails with EINVAL.
|
||||
|
|
@ -989,6 +1054,7 @@ bpf_odminit(char *errbuf)
|
|||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: odm_lock of /etc/objrepos/config_lock failed: %s",
|
||||
errstr);
|
||||
(void)odm_terminate();
|
||||
return (PCAP_ERROR);
|
||||
}
|
||||
|
||||
|
|
@ -1001,20 +1067,24 @@ bpf_odmcleanup(char *errbuf)
|
|||
char *errstr;
|
||||
|
||||
if (odm_unlock(odmlockid) == -1) {
|
||||
if (odm_err_msg(odmerrno, &errstr) == -1)
|
||||
errstr = "Unknown error";
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: odm_unlock failed: %s",
|
||||
errstr);
|
||||
if (errbuf != NULL) {
|
||||
if (odm_err_msg(odmerrno, &errstr) == -1)
|
||||
errstr = "Unknown error";
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: odm_unlock failed: %s",
|
||||
errstr);
|
||||
}
|
||||
return (PCAP_ERROR);
|
||||
}
|
||||
|
||||
if (odm_terminate() == -1) {
|
||||
if (odm_err_msg(odmerrno, &errstr) == -1)
|
||||
errstr = "Unknown error";
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: odm_terminate failed: %s",
|
||||
errstr);
|
||||
if (errbuf != NULL) {
|
||||
if (odm_err_msg(odmerrno, &errstr) == -1)
|
||||
errstr = "Unknown error";
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: odm_terminate failed: %s",
|
||||
errstr);
|
||||
}
|
||||
return (PCAP_ERROR);
|
||||
}
|
||||
|
||||
|
|
@ -1047,6 +1117,7 @@ bpf_load(char *errbuf)
|
|||
if (major == -1) {
|
||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: genmajor failed: %s", pcap_strerror(errno));
|
||||
(void)bpf_odmcleanup(NULL);
|
||||
return (PCAP_ERROR);
|
||||
}
|
||||
|
||||
|
|
@ -1057,6 +1128,7 @@ bpf_load(char *errbuf)
|
|||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||
"bpf_load: genminor failed: %s",
|
||||
pcap_strerror(errno));
|
||||
(void)bpf_odmcleanup(NULL);
|
||||
return (PCAP_ERROR);
|
||||
}
|
||||
}
|
||||
|
|
@ -1133,13 +1205,13 @@ pcap_cleanup_bpf(pcap_t *p)
|
|||
struct ifreq ifr;
|
||||
#endif
|
||||
|
||||
if (p->md.must_clear != 0) {
|
||||
if (p->md.must_do_on_close != 0) {
|
||||
/*
|
||||
* There's something we have to do when closing this
|
||||
* pcap_t.
|
||||
*/
|
||||
#ifdef HAVE_BSD_IEEE80211
|
||||
if (p->md.must_clear & MUST_CLEAR_RFMON) {
|
||||
if (p->md.must_do_on_close & MUST_CLEAR_RFMON) {
|
||||
/*
|
||||
* We put the interface into rfmon mode;
|
||||
* take it out of rfmon mode.
|
||||
|
|
@ -1194,7 +1266,7 @@ pcap_cleanup_bpf(pcap_t *p)
|
|||
* have to take the interface out of some mode.
|
||||
*/
|
||||
pcap_remove_from_pcaps_to_close(p);
|
||||
p->md.must_clear = 0;
|
||||
p->md.must_do_on_close = 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_ZEROCOPY_BPF
|
||||
|
|
@ -1251,7 +1323,9 @@ check_setif_failure(pcap_t *p, int error)
|
|||
* exist.
|
||||
*/
|
||||
err = PCAP_ERROR_NO_SUCH_DEVICE;
|
||||
strcpy(p->errbuf, "");
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"SIOCGIFFLAGS on %s failed: %s",
|
||||
ifr.ifr_name, pcap_strerror(errno));
|
||||
} else {
|
||||
/*
|
||||
* The underlying "enN" device
|
||||
|
|
@ -1273,7 +1347,9 @@ check_setif_failure(pcap_t *p, int error)
|
|||
* just report "no such device".
|
||||
*/
|
||||
err = PCAP_ERROR_NO_SUCH_DEVICE;
|
||||
strcpy(p->errbuf, "");
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"socket() failed: %s",
|
||||
pcap_strerror(errno));
|
||||
}
|
||||
return (err);
|
||||
}
|
||||
|
|
@ -1281,7 +1357,8 @@ check_setif_failure(pcap_t *p, int error)
|
|||
/*
|
||||
* No such device.
|
||||
*/
|
||||
strcpy(p->errbuf, "");
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCSETIF failed: %s",
|
||||
pcap_strerror(errno));
|
||||
return (PCAP_ERROR_NO_SUCH_DEVICE);
|
||||
} else if (errno == ENETDOWN) {
|
||||
/*
|
||||
|
|
@ -1303,6 +1380,13 @@ check_setif_failure(pcap_t *p, int error)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Default capture buffer size.
|
||||
* 32K isn't very much for modern machines with fast networks; we
|
||||
* pick .5M, as that's the maximum on at least some systems with BPF.
|
||||
*/
|
||||
#define DEFAULT_BUFSIZE 524288
|
||||
|
||||
static int
|
||||
pcap_activate_bpf(pcap_t *p)
|
||||
{
|
||||
|
|
@ -1413,7 +1497,10 @@ pcap_activate_bpf(pcap_t *p)
|
|||
* exist.
|
||||
*/
|
||||
status = PCAP_ERROR_NO_SUCH_DEVICE;
|
||||
strcpy(p->errbuf, "");
|
||||
snprintf(p->errbuf,
|
||||
PCAP_ERRBUF_SIZE,
|
||||
"SIOCGIFFLAGS failed: %s",
|
||||
pcap_strerror(errno));
|
||||
} else
|
||||
status = PCAP_ERROR_RFMON_NOTSUP;
|
||||
close(sockfd);
|
||||
|
|
@ -1424,7 +1511,10 @@ pcap_activate_bpf(pcap_t *p)
|
|||
* report "no such device".
|
||||
*/
|
||||
status = PCAP_ERROR_NO_SUCH_DEVICE;
|
||||
strcpy(p->errbuf, "");
|
||||
snprintf(p->errbuf,
|
||||
PCAP_ERRBUF_SIZE,
|
||||
"socket() failed: %s",
|
||||
pcap_strerror(errno));
|
||||
}
|
||||
goto bad;
|
||||
}
|
||||
|
|
@ -1491,8 +1581,8 @@ pcap_activate_bpf(pcap_t *p)
|
|||
v = p->opt.buffer_size;
|
||||
} else {
|
||||
if ((ioctl(fd, BIOCGBLEN, (caddr_t)&v) < 0) ||
|
||||
v < 32768)
|
||||
v = 32768;
|
||||
v < DEFAULT_BUFSIZE)
|
||||
v = DEFAULT_BUFSIZE;
|
||||
}
|
||||
#ifndef roundup
|
||||
#define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */
|
||||
|
|
@ -1558,14 +1648,15 @@ pcap_activate_bpf(pcap_t *p)
|
|||
/*
|
||||
* No buffer size was explicitly specified.
|
||||
*
|
||||
* Try finding a good size for the buffer; 32768 may
|
||||
* be too big, so keep cutting it in half until we
|
||||
* find a size that works, or run out of sizes to try.
|
||||
* Try finding a good size for the buffer;
|
||||
* DEFAULT_BUFSIZE may be too big, so keep
|
||||
* cutting it in half until we find a size
|
||||
* that works, or run out of sizes to try.
|
||||
* If the default is larger, don't make it smaller.
|
||||
*/
|
||||
if ((ioctl(fd, BIOCGBLEN, (caddr_t)&v) < 0) ||
|
||||
v < 32768)
|
||||
v = 32768;
|
||||
v < DEFAULT_BUFSIZE)
|
||||
v = DEFAULT_BUFSIZE;
|
||||
for ( ; v != 0; v >>= 1) {
|
||||
/*
|
||||
* Ignore the return value - this is because the
|
||||
|
|
@ -1859,16 +1950,45 @@ pcap_activate_bpf(pcap_t *p)
|
|||
* XXX - is this seconds/nanoseconds in AIX?
|
||||
* (Treating it as such doesn't fix the timeout
|
||||
* problem described below.)
|
||||
*
|
||||
* XXX - Mac OS X 10.6 mishandles BIOCSRTIMEOUT in
|
||||
* 64-bit userland - it takes, as an argument, a
|
||||
* "struct BPF_TIMEVAL", which has 32-bit tv_sec
|
||||
* and tv_usec, rather than a "struct timeval".
|
||||
*
|
||||
* If this platform defines "struct BPF_TIMEVAL",
|
||||
* we check whether the structure size in BIOCSRTIMEOUT
|
||||
* is that of a "struct timeval" and, if not, we use
|
||||
* a "struct BPF_TIMEVAL" rather than a "struct timeval".
|
||||
* (That way, if the bug is fixed in a future release,
|
||||
* we will still do the right thing.)
|
||||
*/
|
||||
struct timeval to;
|
||||
to.tv_sec = p->md.timeout / 1000;
|
||||
to.tv_usec = (p->md.timeout * 1000) % 1000000;
|
||||
if (ioctl(p->fd, BIOCSRTIMEOUT, (caddr_t)&to) < 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCSRTIMEOUT: %s",
|
||||
pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
#ifdef HAVE_STRUCT_BPF_TIMEVAL
|
||||
struct BPF_TIMEVAL bpf_to;
|
||||
|
||||
if (IOCPARM_LEN(BIOCSRTIMEOUT) != sizeof(struct timeval)) {
|
||||
bpf_to.tv_sec = p->md.timeout / 1000;
|
||||
bpf_to.tv_usec = (p->md.timeout * 1000) % 1000000;
|
||||
if (ioctl(p->fd, BIOCSRTIMEOUT, (caddr_t)&bpf_to) < 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"BIOCSRTIMEOUT: %s", pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
} else {
|
||||
#endif
|
||||
to.tv_sec = p->md.timeout / 1000;
|
||||
to.tv_usec = (p->md.timeout * 1000) % 1000000;
|
||||
if (ioctl(p->fd, BIOCSRTIMEOUT, (caddr_t)&to) < 0) {
|
||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
|
||||
"BIOCSRTIMEOUT: %s", pcap_strerror(errno));
|
||||
status = PCAP_ERROR;
|
||||
goto bad;
|
||||
}
|
||||
#ifdef HAVE_STRUCT_BPF_TIMEVAL
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef _AIX
|
||||
|
|
@ -2058,6 +2178,10 @@ pcap_platform_finddevs(pcap_if_t **alldevsp, char *errbuf)
|
|||
if (dag_platform_finddevs(alldevsp, errbuf) < 0)
|
||||
return (-1);
|
||||
#endif /* HAVE_DAG_API */
|
||||
#ifdef HAVE_SNF_API
|
||||
if (snf_platform_finddevs(alldevsp, errbuf) < 0)
|
||||
return (-1);
|
||||
#endif /* HAVE_SNF_API */
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -2192,7 +2316,7 @@ monitor_mode(pcap_t *p, int set)
|
|||
return (PCAP_ERROR);
|
||||
}
|
||||
|
||||
p->md.must_clear |= MUST_CLEAR_RFMON;
|
||||
p->md.must_do_on_close |= MUST_CLEAR_RFMON;
|
||||
|
||||
/*
|
||||
* Add this to the list of pcaps to close when we exit.
|
||||
|
|
@ -2277,7 +2401,8 @@ find_802_11(struct bpf_dltlist *bdlp)
|
|||
|
||||
#if defined(__APPLE__) && defined(BIOCGDLTLIST)
|
||||
/*
|
||||
* Remove DLT_EN10MB from the list of DLT_ values.
|
||||
* Remove DLT_EN10MB from the list of DLT_ values, as we're in monitor mode,
|
||||
* and DLT_EN10MB isn't supported in monitor mode.
|
||||
*/
|
||||
static void
|
||||
remove_en(pcap_t *p)
|
||||
|
|
@ -2318,10 +2443,9 @@ remove_en(pcap_t *p)
|
|||
}
|
||||
|
||||
/*
|
||||
* Remove DLT_EN10MB from the list of DLT_ values, and look for the
|
||||
* best 802.11 link-layer type in that list and return it.
|
||||
* Radiotap is better than anything else; 802.11 with any other radio
|
||||
* header is better than 802.11 with no radio header.
|
||||
* Remove 802.11 link-layer types from the list of DLT_ values, as
|
||||
* we're not in monitor mode, and those DLT_ values will switch us
|
||||
* to monitor mode.
|
||||
*/
|
||||
static void
|
||||
remove_802_11(pcap_t *p)
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
* 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)
|
||||
* @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.50 2007-04-01 21:43:55 guy Exp $ (LBL)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue