Vendor import of libpcap 1.8.1.
This commit is contained in:
parent
50224b10fa
commit
c8c6d70e30
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/libpcap/dist/; revision=313676 svn path=/vendor/libpcap/1.8.1/; revision=313677; tag=vendor/libpcap/1.8.1
83
CHANGES
83
CHANGES
@ -1,5 +1,80 @@
|
|||||||
|
Tuesday, Oct. 25, 2016 mcr@sandelman.ca
|
||||||
|
Summary for 1.8.1 libpcap release
|
||||||
|
Add a target in Makefile.in for Exuberant Ctags use: 'extags'.
|
||||||
|
Rename configure.in to configure.ac: autoconf 2.59
|
||||||
|
Clean up the name-to-DLT mapping table.
|
||||||
|
Add some newer DLT_ values: IPMI_HPM_2,ZWAVE_R1_R2,ZWAVE_R3,WATTSTOPPER_DLM,ISO_14443,RDS
|
||||||
|
Clarify what the return values are for both success and failure.
|
||||||
|
Many changes to build on windows
|
||||||
|
Check for the "break the loop" condition in the inner loop for TPACKET_V3.
|
||||||
|
Fix handling of packet count in the TPACKET_V3 inner loop: GitHub issue #493.
|
||||||
|
Filter out duplicate looped back CAN frames.
|
||||||
|
Fix the handling of loopback filters for IPv6 packets.
|
||||||
|
Add a link-layer header type for RDS (IEC 62106) groups.
|
||||||
|
Use different intermediate folders for x86 and x64 builds on Windows.
|
||||||
|
On Linux, handle all CAN captures with pcap-linux.c, in cooked mode.
|
||||||
|
Removes the need for the "host-endian" link-layer header type.
|
||||||
|
Compile with '-Wused-but-marked-unused' in devel mode if supported
|
||||||
|
Have separate DLTs for big-endian and host-endian SocketCAN headers.
|
||||||
|
Reflect version.h being renamed to pcap_version.h.
|
||||||
|
Require that version.h be generated: all build procedures we support generate version.h (autoconf, CMake, MSVC)!
|
||||||
|
Properly check for sock_recv() errors.
|
||||||
|
Re-impose some of Winsock's limitations on sock_recv().
|
||||||
|
Replace sprintf() with pcap_snprintf().
|
||||||
|
Fix signature of pcap_stats_ex_remote().
|
||||||
|
Initial cmake support for remote packet capture.
|
||||||
|
Have rpcap_remoteact_getsock() return a SOCKET and supply an "is active" flag.
|
||||||
|
Clean up {DAG, Septel, Myricom SNF}-only builds.
|
||||||
|
Do UTF-16-to-ASCII conversion into the right place.
|
||||||
|
pcap_create_interface() needs the interface name on Linux.
|
||||||
|
Clean up hardware time stamp support: the "any" device does not support any time stamp types.
|
||||||
|
Add support for capturing on FreeBSD usbusN interfaces.
|
||||||
|
Add a LINKTYPE/DLT_ value for FreeBSD USB.
|
||||||
|
Go back to using PCAP_API on Windows.
|
||||||
|
CMake support
|
||||||
|
Add TurboCap support from WinPcap.
|
||||||
|
Recognize 802.1ad nested VLAN tag in vlan filter.
|
||||||
|
|
||||||
|
Thursday Sep. 3, 2015 guy@alum.mit.edu
|
||||||
|
Summary for 1.7.5 libpcap release
|
||||||
|
Man page cleanups.
|
||||||
|
Add some allocation failure checks.
|
||||||
|
Fix a number of Linux/ucLinux configure/build issues.
|
||||||
|
Fix some memory leaks.
|
||||||
|
Recognize 802.1ad nested VLAN tag in vlan filter.
|
||||||
|
Fix building Bluetooth Linux Monitor support with BlueZ 5.1+
|
||||||
|
|
||||||
|
Saturday Jun. 27, 2015 mcr@sandelman.ca
|
||||||
|
Summary for 1.7.4 libpcap release
|
||||||
|
Include fix for GitHub issue #424 -- out of tree builds.
|
||||||
|
|
||||||
|
Friday Apr. 10, 2015 guy@alum.mit.edu
|
||||||
|
Summary for 1.7.3 libpcap release
|
||||||
|
Work around a Linux bonding driver bug.
|
||||||
|
|
||||||
|
Thursday Feb. 12, 2015 guy@alum.mit.edu/mcr@sandelman.ca
|
||||||
|
Summary for 1.7.2 libpcap release
|
||||||
|
Support for filtering Geneve encapsulated packets.
|
||||||
|
Generalize encapsulation handling, fixing some bugs.
|
||||||
|
Don't add null addresses to address lists.
|
||||||
|
Add pcap_dump_open_append() to open for appending.
|
||||||
|
Fix the swapping of isochronous descriptors in Linux USB.
|
||||||
|
Attempt to handle TPACKET_V1 with 32-bit userland and 64-bit kernel.
|
||||||
|
|
||||||
|
Wednesday Nov. 12, 2014 guy@alum.mit.edu/mcr@sandelman.ca
|
||||||
|
Summary for 1.7.0 libpcap release
|
||||||
|
Fix handling of zones for BPF on Solaris
|
||||||
|
new DLT for ZWAVE
|
||||||
|
clarifications for read timeouts.
|
||||||
|
Use BPF extensions in compiled filters, fixing VLAN filters
|
||||||
|
some fixes to compilation without stdint.h
|
||||||
|
EBUSY can now be returned by SNFv3 code.
|
||||||
|
Fix the range checks in BPF loads
|
||||||
|
Various DAG fixes.
|
||||||
|
Various Linux fixes.
|
||||||
|
|
||||||
Monday Aug. 12, 2014 guy@alum.mit.edu
|
Monday Aug. 12, 2014 guy@alum.mit.edu
|
||||||
Summary for 1.6.2 tcpdump release
|
Summary for 1.6.2 libpcap release
|
||||||
Don't crash on filters testing a non-existent link-layer type
|
Don't crash on filters testing a non-existent link-layer type
|
||||||
field.
|
field.
|
||||||
Fix sending in non-blocking mode on Linux with memory-mapped
|
Fix sending in non-blocking mode on Linux with memory-mapped
|
||||||
@ -8,12 +83,12 @@ Monday Aug. 12, 2014 guy@alum.mit.edu
|
|||||||
machines.
|
machines.
|
||||||
|
|
||||||
Saturday Jul. 19, 2014 mcr@sandelman.ca
|
Saturday Jul. 19, 2014 mcr@sandelman.ca
|
||||||
Summary for 1.6.1 tcpdump release
|
Summary for 1.6.1 libpcap release
|
||||||
some fixes for the any device
|
some fixes for the any device
|
||||||
changes for how --enable-XXX works
|
changes for how --enable-XXX (--enable-sniffing, --enable-can) works
|
||||||
|
|
||||||
Wednesday Jul. 2, 2014 mcr@sandelman.ca
|
Wednesday Jul. 2, 2014 mcr@sandelman.ca
|
||||||
Summary for 1.6.0 tcpdump release
|
Summary for 1.6.0 libpcap release
|
||||||
Don't support D-Bus sniffing on OS X
|
Don't support D-Bus sniffing on OS X
|
||||||
fixes for byte order issues with NFLOG captures
|
fixes for byte order issues with NFLOG captures
|
||||||
Handle using cooked mode for DLT_NETLINK in activate_new().
|
Handle using cooked mode for DLT_NETLINK in activate_new().
|
||||||
|
520
CMakeLists.txt
Normal file
520
CMakeLists.txt
Normal file
@ -0,0 +1,520 @@
|
|||||||
|
cmake_minimum_required( VERSION 2.8.8 )
|
||||||
|
|
||||||
|
project( pcap )
|
||||||
|
#
|
||||||
|
# Call the library "wpcap" on Windows, for backwards compatibility.
|
||||||
|
#
|
||||||
|
if( WIN32 )
|
||||||
|
set( LIBRARY_NAME wpcap )
|
||||||
|
else()
|
||||||
|
set( LIBRARY_NAME pcap )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
# Parameters
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
option (INET6 "Enable IPv6" ON)
|
||||||
|
if( MSVC )
|
||||||
|
option (USE_STATIC_RT "Use static Runtime" ON)
|
||||||
|
endif( MSVC )
|
||||||
|
option (BUILD_SHARED_LIBS "Build shared libraries" ON)
|
||||||
|
if( WIN32 )
|
||||||
|
set(PACKET_DLL_DIR "" CACHE PATH "Path to directory with include and lib subdirectories for packet.dll")
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
#
|
||||||
|
# XXX - this should be an option, defaulting to "yes" for Windows and to
|
||||||
|
# "no", for now, on UN*X.
|
||||||
|
#
|
||||||
|
if( WIN32 )
|
||||||
|
set( HAVE_REMOTE 1 )
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# Project settings
|
||||||
|
######################################
|
||||||
|
|
||||||
|
add_definitions( -DHAVE_CONFIG_H )
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${pcap_SOURCE_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
if( WIN32 )
|
||||||
|
if( NOT "${PACKET_DLL_DIR}" STREQUAL "" )
|
||||||
|
include_directories("${PACKET_DLL_DIR}/Include")
|
||||||
|
if( CMAKE_CL_64 )
|
||||||
|
link_directories("${PACKET_DLL_DIR}/Lib/x64")
|
||||||
|
else( CMAKE_CL_64 )
|
||||||
|
link_directories("${PACKET_DLL_DIR}/Lib")
|
||||||
|
endif( CMAKE_CL_64 )
|
||||||
|
endif()
|
||||||
|
include_directories(
|
||||||
|
../Common/
|
||||||
|
Win32/Include
|
||||||
|
)
|
||||||
|
endif( WIN32)
|
||||||
|
|
||||||
|
add_definitions( -DBUILDING_PCAP )
|
||||||
|
|
||||||
|
if( MSVC )
|
||||||
|
add_definitions( -D__STDC__ )
|
||||||
|
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
||||||
|
add_definitions( "-D_U_=" )
|
||||||
|
elseif( CMAKE_COMPILER_IS_GNUCXX )
|
||||||
|
add_definitions( "-D_U_=__attribute__((unused))" )
|
||||||
|
else(MSVC)
|
||||||
|
add_definitions( "-D_U_=" )
|
||||||
|
endif( MSVC )
|
||||||
|
|
||||||
|
if( MSVC )
|
||||||
|
if (USE_STATIC_RT)
|
||||||
|
MESSAGE( STATUS "Use STATIC runtime" )
|
||||||
|
set(NAME_RT MT)
|
||||||
|
set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
|
||||||
|
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
|
||||||
|
|
||||||
|
set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
|
||||||
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
|
||||||
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
|
||||||
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
|
||||||
|
else (USE_STATIC_RT)
|
||||||
|
MESSAGE( STATUS "Use DYNAMIC runtime" )
|
||||||
|
set(NAME_RT MD)
|
||||||
|
set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MD")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
|
||||||
|
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
|
||||||
|
|
||||||
|
set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MD")
|
||||||
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MD")
|
||||||
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD")
|
||||||
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd")
|
||||||
|
endif (USE_STATIC_RT)
|
||||||
|
endif( MSVC )
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
# Detect available platform features
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
include(CheckIncludeFile)
|
||||||
|
include(CheckFunctionExists)
|
||||||
|
include(CheckStructHasMember)
|
||||||
|
include(CheckTypeSize)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Header files.
|
||||||
|
#
|
||||||
|
check_include_file( inttypes.h HAVE_INTTYPES_H )
|
||||||
|
check_include_file( stdint.h HAVE_STDINT_H )
|
||||||
|
check_include_file( unistd.h HAVE_UNISTD_H )
|
||||||
|
if( NOT HAVE_UNISTD_H )
|
||||||
|
add_definitions( -DYY_NO_UNISTD_H )
|
||||||
|
endif( NOT HAVE_UNISTD_H )
|
||||||
|
check_include_file( bitypes.h HAVE_SYS_BITYPES_H )
|
||||||
|
check_include_file( limits.h HAVE_LIMITS_H )
|
||||||
|
|
||||||
|
#
|
||||||
|
# Functions.
|
||||||
|
#
|
||||||
|
check_function_exists( strerror HAVE_STRERROR )
|
||||||
|
check_function_exists( strlcpy HAVE_STRLCPY )
|
||||||
|
check_function_exists( snprintf HAVE_SNPRINTF )
|
||||||
|
check_function_exists( vsnprintf HAVE_VSNPRINTF )
|
||||||
|
check_function_exists( strtok_r HAVE_STRTOK_R )
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
#
|
||||||
|
# Check for Windows-only functions, such as packet.dll functions.
|
||||||
|
#
|
||||||
|
check_function_exists( PacketIsLoopbackAdapter HAVE_PACKET_IS_LOOPBACK_ADAPTER )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Data types.
|
||||||
|
#
|
||||||
|
# XXX - there's no check_struct() macro that's like check_struct_has_member()
|
||||||
|
# except that it only checks for the existence of the structure type,
|
||||||
|
# so we use check_struct_has_member() and look for ss_family.
|
||||||
|
#
|
||||||
|
check_struct_has_member("struct sockaddr_storage" ss_family sys/socket.h HAVE_SOCKADDR_STORAGE)
|
||||||
|
set(CMAKE_EXTRA_INCLUDE_FILES unistd.h sys/socket.h)
|
||||||
|
check_type_size("socklen_t" SOCKLEN_T)
|
||||||
|
set(CMAKE_EXTRA_INCLUDE_FILES unistd.h)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Structure fields.
|
||||||
|
#
|
||||||
|
check_struct_has_member("struct sockaddr" sa_len sys/socket.h HAVE_SOCKADDR_SA_LEN )
|
||||||
|
|
||||||
|
if( INET6 )
|
||||||
|
MESSAGE( STATUS "Use IPv6" )
|
||||||
|
endif( INET6 )
|
||||||
|
|
||||||
|
if( WIN32 )
|
||||||
|
add_definitions( -DHAVE_ADDRINFO )
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# External dependencies
|
||||||
|
######################################
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# Input files
|
||||||
|
######################################
|
||||||
|
|
||||||
|
set(PROJECT_SOURCE_LIST_C
|
||||||
|
bpf_dump.c
|
||||||
|
bpf_image.c
|
||||||
|
etherent.c
|
||||||
|
fad-helpers.c
|
||||||
|
gencode.c
|
||||||
|
inet.c
|
||||||
|
nametoaddr.c
|
||||||
|
optimize.c
|
||||||
|
pcap-common.c
|
||||||
|
pcap.c
|
||||||
|
savefile.c
|
||||||
|
sf-pcap-ng.c
|
||||||
|
sf-pcap.c
|
||||||
|
bpf/net/bpf_filter.c
|
||||||
|
)
|
||||||
|
|
||||||
|
if( WIN32 )
|
||||||
|
set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} missing/win_snprintf.c )
|
||||||
|
else()
|
||||||
|
if( NOT HAVE_SNPRINTF )
|
||||||
|
set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} missing/snprintf.c )
|
||||||
|
endif( NOT HAVE_SNPRINTF )
|
||||||
|
if( NOT HAVE_STRTOK_R )
|
||||||
|
set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} missing/strtok_r.c )
|
||||||
|
endif( NOT HAVE_STRTOK_R )
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
if( HAVE_REMOTE )
|
||||||
|
set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C}
|
||||||
|
pcap-new.c pcap-rpcap.c sockutils.c)
|
||||||
|
endif( HAVE_REMOTE )
|
||||||
|
|
||||||
|
#
|
||||||
|
# Determine the main pcap-XXX.c file to use.
|
||||||
|
#
|
||||||
|
if( WIN32 )
|
||||||
|
#
|
||||||
|
# WinPcap.
|
||||||
|
#
|
||||||
|
set( PCAP_TYPE win32 )
|
||||||
|
else()
|
||||||
|
#
|
||||||
|
# UN*X - figure out what type of packet capture mechanism we
|
||||||
|
# have.
|
||||||
|
#
|
||||||
|
if( EXISTS /dev/bpf )
|
||||||
|
#
|
||||||
|
# Cloning BPF device.
|
||||||
|
#
|
||||||
|
set( PCAP_TYPE bpf )
|
||||||
|
AC_DEFINE(HAVE_CLONING_BPF,1,[define if you have a cloning BPF device])
|
||||||
|
elseif( EXISTS /dev/bpf0 )
|
||||||
|
set( PCAP_TYPE bpf )
|
||||||
|
|
||||||
|
#
|
||||||
|
# XXX - many more BPF checks.
|
||||||
|
#
|
||||||
|
elseif( EXISTS /usr/include/net/pfilt.h )
|
||||||
|
#
|
||||||
|
# DEC OSF/1, Digital UNIX, Tru64 UNIX
|
||||||
|
#
|
||||||
|
set( PCAP_TYPE pf )
|
||||||
|
elseif( EXISTS /dev/enet )
|
||||||
|
set( PCAP_TYPE enet )
|
||||||
|
elseif( EXISTS /dev/nit )
|
||||||
|
set( PCAP_TYPE snit )
|
||||||
|
elseif( EXISTS /usr/include/sys/net/nit.h )
|
||||||
|
set( PCAP_TYPE nit )
|
||||||
|
elseif( EXISTS /usr/include/linux/socket.h )
|
||||||
|
set( PCAP_TYPE linux )
|
||||||
|
|
||||||
|
#
|
||||||
|
# Do we have the wireless extensions?
|
||||||
|
#
|
||||||
|
check_include_file( linux/wireless.h HAVE_LINUX_WIRELESS_H )
|
||||||
|
|
||||||
|
#
|
||||||
|
# XXX - many more Linux checks.
|
||||||
|
#
|
||||||
|
elseif( EXISTS /usr/include/net/raw.h )
|
||||||
|
set( PCAP_TYPE snoop )
|
||||||
|
elseif( EXISTS /usr/include/odmi.h )
|
||||||
|
#
|
||||||
|
# On AIX, the BPF devices might not yet be present - they're
|
||||||
|
# created the first time libpcap runs after booting.
|
||||||
|
# We check for odmi.h instead.
|
||||||
|
#
|
||||||
|
set( PCAP_TYPE bpf )
|
||||||
|
elseif( /usr/include/sys/dlpi.h )
|
||||||
|
set( PCAP_TYPE dlpi )
|
||||||
|
|
||||||
|
#
|
||||||
|
# XXX - many more DLPI checks.
|
||||||
|
#
|
||||||
|
else()
|
||||||
|
set( PCAP_TYPE null )
|
||||||
|
endif()
|
||||||
|
endif( WIN32 )
|
||||||
|
message(STATUS "Packet capture mechanism type: ${PCAP_TYPE}")
|
||||||
|
set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} pcap-${PCAP_TYPE}.c)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Now figure out how we get a list of interfaces and addresses,
|
||||||
|
# if we support capturing. Don't bother if we don't support
|
||||||
|
# capturing.
|
||||||
|
#
|
||||||
|
if( NOT WIN32 )
|
||||||
|
#
|
||||||
|
# UN*X - figure out what type of interface list mechanism we
|
||||||
|
# have.
|
||||||
|
#
|
||||||
|
if( ${PCAP_TYPE} STREQUAL "null" )
|
||||||
|
#
|
||||||
|
# We can't capture, so we can't open any capture
|
||||||
|
# devices, so we won't return any interfaces.
|
||||||
|
#
|
||||||
|
set( FINDALLDEVS_TYPE null )
|
||||||
|
else()
|
||||||
|
check_function_exists( getifaddrs HAVE_GETIFADDRS )
|
||||||
|
if( ${HAVE_GETIFADDRS} )
|
||||||
|
#
|
||||||
|
# We have "getifaddrs()"; make sure we have <ifaddrs.h>
|
||||||
|
# as well, just in case some platform is really weird.
|
||||||
|
#
|
||||||
|
check_include_file( ifaddrs.h HAVE_IFADDRS_H )
|
||||||
|
if( ${HAVE_IFADDRS_H} )
|
||||||
|
#
|
||||||
|
# We have the header, so we use "getifaddrs()" to
|
||||||
|
# get the list of interfaces.
|
||||||
|
#
|
||||||
|
set( FINDALLDEVS_TYPE getad )
|
||||||
|
else()
|
||||||
|
#
|
||||||
|
# We don't have the header - give up.
|
||||||
|
# XXX - we could also fall back on some other
|
||||||
|
# mechanism, but, for now, this'll catch this
|
||||||
|
# problem so that we can at least try to figure
|
||||||
|
# out something to do on systems with "getifaddrs()"
|
||||||
|
# but without "ifaddrs.h", if there is something
|
||||||
|
# we can do on those systems.
|
||||||
|
#
|
||||||
|
message(FATAL_ERROR "Your system has getifaddrs() but doesn't have a usable <ifaddrs.h>." )
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
#
|
||||||
|
# Well, we don't have "getifaddrs()", so we have to use
|
||||||
|
# some other mechanism; determine what that mechanism is.
|
||||||
|
#
|
||||||
|
# The first thing we use is the type of capture mechanism,
|
||||||
|
# which is somewhat of a proxy for the OS we're using.
|
||||||
|
#
|
||||||
|
if( ${PCAP_TYPE} STREQUAL "dlpi" OR ${PCAP_TYPE} STREQUAL "libdlpi" )
|
||||||
|
#
|
||||||
|
# This might be Solaris 8 or later, with
|
||||||
|
# SIOCGLIFCONF, or it might be some other OS
|
||||||
|
# or some older version of Solaris, with
|
||||||
|
# just SIOCGIFCONF.
|
||||||
|
#
|
||||||
|
try_compile( HAVE_SIOCGLIFCONF ${CMAKE_CURRENT_BINARY_DIR} "${pcap_SOURCE_DIR}/config/have_siocglifconf.c" )
|
||||||
|
message( STATUS "HAVE_SIOCGLIFCONF = ${HAVE_SIOCGLIFCONF}" )
|
||||||
|
if( HAVE_SIOCGLIFCONF )
|
||||||
|
set( FINDALLDEVS_TYPE glifc )
|
||||||
|
else()
|
||||||
|
set( FINDALLDEVS_TYPE gifc )
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
#
|
||||||
|
# Assume we just have SIOCGIFCONF.
|
||||||
|
# (XXX - on at least later Linux kernels, there's
|
||||||
|
# another mechanism, and we should be using that
|
||||||
|
# instead.)
|
||||||
|
#
|
||||||
|
set( FINDALLDEVS_TYPE gifc )
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
message(STATUS "Find-interfaces mechanism type: ${FINDALLDEVS_TYPE}")
|
||||||
|
set( PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} fad-${FINDALLDEVS_TYPE}.c )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(GLOB PROJECT_SOURCE_LIST_CORE_H
|
||||||
|
*.h
|
||||||
|
pcap/*.h
|
||||||
|
)
|
||||||
|
set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_CORE_H} )
|
||||||
|
|
||||||
|
if( WIN32 )
|
||||||
|
file(GLOB PROJECT_SOURCE_LIST_WIN32_H
|
||||||
|
Win32/Include/*.h
|
||||||
|
)
|
||||||
|
set( PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${PROJECT_SOURCE_LIST_WIN32_H} )
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
#
|
||||||
|
# {Flex} and YACC/Berkeley YACC/Bison.
|
||||||
|
# From a mail message to the CMake mailing list by Andy Cedilnik of
|
||||||
|
# Kitware.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Try to find Flex, a Windows version of Flex, or Lex.
|
||||||
|
#
|
||||||
|
find_program(LEX_EXECUTABLE NAMES flex win_flex lex)
|
||||||
|
if( ${LEX_EXECUTABLE} STREQUAL "LEX_EXECUTABLE-NOTFOUND" )
|
||||||
|
message(FATAL_ERROR "Neither flex nor win_flex nor lex was found." )
|
||||||
|
endif()
|
||||||
|
message(STATUS "Lexical analyzer generator: ${LEX_EXECUTABLE}")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/scanner.c ${CMAKE_CURRENT_BINARY_DIR}/scanner.h
|
||||||
|
SOURCE ${pcap_SOURCE_DIR}/scanner.l
|
||||||
|
COMMAND ${LEX_EXECUTABLE} -P pcap_ --header-file=scanner.h --nounput -o${CMAKE_CURRENT_BINARY_DIR}/scanner.c ${pcap_SOURCE_DIR}/scanner.l
|
||||||
|
DEPENDS ${pcap_SOURCE_DIR}/scanner.l
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Since scanner.c does not exist yet when cmake is run, mark
|
||||||
|
# it as generated.
|
||||||
|
#
|
||||||
|
# Since scanner.c includes grammar.h, mark that as a dependency.
|
||||||
|
#
|
||||||
|
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/scanner.c PROPERTIES
|
||||||
|
GENERATED TRUE
|
||||||
|
OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/scanner.h
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add scanner.c to the list of sources.
|
||||||
|
#
|
||||||
|
#set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${CMAKE_CURRENT_BINARY_DIR}/scanner.c)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Try to find YACC or Bison.
|
||||||
|
#
|
||||||
|
find_program(YACC_EXECUTABLE NAMES bison win_bison byacc yacc)
|
||||||
|
if( ${YACC_EXECUTABLE} STREQUAL "YACC_EXECUTABLE-NOTFOUND" )
|
||||||
|
message(FATAL_ERROR "Neither bison nor win_bison nor byacc nor yacc was found." )
|
||||||
|
endif()
|
||||||
|
message(STATUS "Parser generator: ${YACC_EXECUTABLE}")
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create custom command for the scanner.
|
||||||
|
# Find out whether it's Bison or notby looking at the last component
|
||||||
|
# of the path (without a .exe extension, if this is Windows).
|
||||||
|
#
|
||||||
|
get_filename_component(YACC_NAME ${YACC_EXECUTABLE} NAME_WE)
|
||||||
|
if( "${YACC_NAME}" STREQUAL "bison" OR "${YACC_NAME}" STREQUAL "win_bison" )
|
||||||
|
set( YACC_COMPATIBILITY_FLAG "-y" )
|
||||||
|
endif()
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/grammar.c ${CMAKE_CURRENT_BINARY_DIR}/grammar.h
|
||||||
|
SOURCE ${pcap_SOURCE_DIR}/grammar.y
|
||||||
|
COMMAND ${YACC_EXECUTABLE} ${YACC_COMPATIBILITY_FLAG} -p pcap_ -o ${CMAKE_CURRENT_BINARY_DIR}/grammar.c -d ${pcap_SOURCE_DIR}/grammar.y
|
||||||
|
DEPENDS ${pcap_SOURCE_DIR}/grammar.y
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Since grammar.c does not exists yet when cmake is run, mark
|
||||||
|
# it as generated.
|
||||||
|
#
|
||||||
|
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/grammar.c PROPERTIES
|
||||||
|
GENERATED TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add grammar.c to the list of sources.
|
||||||
|
#
|
||||||
|
#set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${CMAKE_CURRENT_BINARY_DIR}/grammar.c)
|
||||||
|
|
||||||
|
if( WIN32 )
|
||||||
|
#
|
||||||
|
# CMake does not love Windows.
|
||||||
|
#
|
||||||
|
file(TO_NATIVE_PATH "${pcap_SOURCE_DIR}/GenVersion.bat" GenVersion_path)
|
||||||
|
file(TO_NATIVE_PATH "${pcap_SOURCE_DIR}/VERSION" VERSION_path)
|
||||||
|
file(TO_NATIVE_PATH "${pcap_SOURCE_DIR}/pcap_version.h.in" version_h_in_path)
|
||||||
|
file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}/pcap_version.h" version_h_path)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pcap_version.h
|
||||||
|
SOURCE ${pcap_SOURCE_DIR}/VERSION ${pcap_SOURCE_DIR}/pcap_version.h.in
|
||||||
|
COMMAND ${GenVersion_path} ${VERSION_path} ${version_h_in_path} ${version_h_path}
|
||||||
|
DEPENDS ${pcap_SOURCE_DIR}/VERSION ${pcap_SOURCE_DIR}/pcap_version.h.in
|
||||||
|
)
|
||||||
|
else( WIN32 )
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.c
|
||||||
|
SOURCE ${pcap_SOURCE_DIR}/VERSION
|
||||||
|
COMMAND ${pcap_SOURCE_DIR}/gen_version_c.sh ${pcap_SOURCE_DIR}/VERSION ${CMAKE_CURRENT_BINARY_DIR}/version.c
|
||||||
|
DEPENDS ${pcap_SOURCE_DIR}/VERSION
|
||||||
|
)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pcap_version.h
|
||||||
|
SOURCE ${pcap_SOURCE_DIR}/VERSION
|
||||||
|
COMMAND ${pcap_SOURCE_DIR}/gen_version_header.sh ${pcap_SOURCE_DIR}/VERSION ${pcap_SOURCE_DIR}/pcap_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/pcap_version.h
|
||||||
|
DEPENDS ${pcap_SOURCE_DIR}/VERSION
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Since version.c does not exists yet when cmake is run, mark
|
||||||
|
# it as generated.
|
||||||
|
#
|
||||||
|
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/version.c PROPERTIES
|
||||||
|
GENERATED TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add version.c to the list of sources.
|
||||||
|
#
|
||||||
|
set(PROJECT_SOURCE_LIST_C ${PROJECT_SOURCE_LIST_C} ${CMAKE_CURRENT_BINARY_DIR}/version.c)
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
#
|
||||||
|
# Since pcap_version.h does not exists yet when cmake is run, mark
|
||||||
|
# it as generated.
|
||||||
|
#
|
||||||
|
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/pcap_version.h PROPERTIES
|
||||||
|
GENERATED TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Add pcap_version.h to the list of headers.
|
||||||
|
#
|
||||||
|
set(PROJECT_SOURCE_LIST_H ${PROJECT_SOURCE_LIST_H} ${CMAKE_CURRENT_BINARY_DIR}/pcap_version.h)
|
||||||
|
|
||||||
|
source_group("Source Files" FILES ${PROJECT_SOURCE_LIST_C})
|
||||||
|
source_group("Header Files" FILES ${PROJECT_SOURCE_LIST_H})
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# Register targets
|
||||||
|
######################################
|
||||||
|
|
||||||
|
add_library(${LIBRARY_NAME}
|
||||||
|
${PROJECT_SOURCE_LIST_C}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/grammar.c
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/scanner.c
|
||||||
|
${PROJECT_SOURCE_LIST_H}
|
||||||
|
)
|
||||||
|
|
||||||
|
if( WIN32 )
|
||||||
|
target_link_libraries ( ${LIBRARY_NAME}
|
||||||
|
packet
|
||||||
|
ws2_32
|
||||||
|
)
|
||||||
|
endif( WIN32 )
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# Write out the config.h file
|
||||||
|
######################################
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmakeconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
7
CREDITS
7
CREDITS
@ -2,11 +2,12 @@ This file lists people who have contributed to libpcap:
|
|||||||
|
|
||||||
The current maintainers:
|
The current maintainers:
|
||||||
Bill Fenner <fenner at research dot att dot com>
|
Bill Fenner <fenner at research dot att dot com>
|
||||||
Denis Ovsienko <infrastation at yandex dot ru>
|
Denis Ovsienko <denis at ovsienko dot info>
|
||||||
Fulvio Risso <risso at polito dot it>
|
Fulvio Risso <risso at polito dot it>
|
||||||
Guy Harris <guy at alum dot mit dot edu>
|
Guy Harris <guy at alum dot mit dot edu>
|
||||||
Hannes Gredler <hannes at juniper dot net>
|
Hannes Gredler <hannes at juniper dot net>
|
||||||
Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
|
Michael Richardson <mcr at sandelman dot ottawa dot on dot ca>
|
||||||
|
Francois-Xavier Le Bail <fx dot lebail at yahoo dot com>
|
||||||
|
|
||||||
Additional people who have contributed patches:
|
Additional people who have contributed patches:
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ Additional people who have contributed patches:
|
|||||||
David Young <dyoung at ojctech dot com>
|
David Young <dyoung at ojctech dot com>
|
||||||
Dean Gaudet <dean at arctic dot org>
|
Dean Gaudet <dean at arctic dot org>
|
||||||
dhruv <rsrivat at sourceforge dot net>
|
dhruv <rsrivat at sourceforge dot net>
|
||||||
Don Ebright <Don dot Ebright at compuware dot com>
|
Don Ebright <Don dot Ebright at compuware dot com>
|
||||||
Dug Song <dugsong at monkey dot org>
|
Dug Song <dugsong at monkey dot org>
|
||||||
Dustin Spicuzza <dustin at virtualroadside dot com>
|
Dustin Spicuzza <dustin at virtualroadside dot com>
|
||||||
dzejarczech <dzejarczech at sourceforge dot net>
|
dzejarczech <dzejarczech at sourceforge dot net>
|
||||||
@ -83,6 +84,7 @@ Additional people who have contributed patches:
|
|||||||
Jefferson Ogata <jogata at nodc dot noaa dot gov>
|
Jefferson Ogata <jogata at nodc dot noaa dot gov>
|
||||||
Jesper Dangaard Brouer <hawk at comx dot dk>
|
Jesper Dangaard Brouer <hawk at comx dot dk>
|
||||||
Jesper Peterson <jesper at endace dot com>
|
Jesper Peterson <jesper at endace dot com>
|
||||||
|
Jesse Gross <jesse at nicira dot com>
|
||||||
Jiri Slaby <jirislaby at gmail dot com>
|
Jiri Slaby <jirislaby at gmail dot com>
|
||||||
Joerg Mayer <jmayer at loplof dot de>
|
Joerg Mayer <jmayer at loplof dot de>
|
||||||
John Bankier <jbankier at rainfinity dot com>
|
John Bankier <jbankier at rainfinity dot com>
|
||||||
@ -105,6 +107,7 @@ Additional people who have contributed patches:
|
|||||||
Mansour Behabadi <mansour at oxplot dot com>
|
Mansour Behabadi <mansour at oxplot dot com>
|
||||||
Marcus Felipe Pereira <marcus at task dot com dot br>
|
Marcus Felipe Pereira <marcus at task dot com dot br>
|
||||||
Mark C. Brown <mbrown at hp dot com>
|
Mark C. Brown <mbrown at hp dot com>
|
||||||
|
Mark Johnston <markjdb at gmail dot com>
|
||||||
Mark Pizzolato <List-tcpdump-workers at subscriptions dot pizzolato dot net>
|
Mark Pizzolato <List-tcpdump-workers at subscriptions dot pizzolato dot net>
|
||||||
Markus Mayer <markus_mayer at sourceforge dot net>
|
Markus Mayer <markus_mayer at sourceforge dot net>
|
||||||
Martin Husemann <martin at netbsd dot org>
|
Martin Husemann <martin at netbsd dot org>
|
||||||
|
23
GenVersion.bat
Normal file
23
GenVersion.bat
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
REM
|
||||||
|
REM Automatically generate pcap_version.h based on pcap_version.h.in
|
||||||
|
REM for Windows
|
||||||
|
REM The version string comes from VERSION
|
||||||
|
REM @echo off
|
||||||
|
REM
|
||||||
|
|
||||||
|
setlocal enableextensions disabledelayedexpansion
|
||||||
|
|
||||||
|
set "search=%%%%LIBPCAP_VERSION%%%%"
|
||||||
|
set /p replace=<%1
|
||||||
|
|
||||||
|
if exist %3 del %3 2>nul
|
||||||
|
|
||||||
|
for /f "delims=" %%i in ('type %2' ) do (
|
||||||
|
set "line=%%i"
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
set "line=!line:%search%=%replace%!"
|
||||||
|
>>%3 echo(!line!
|
||||||
|
endlocal
|
||||||
|
)
|
||||||
|
|
||||||
|
echo pcap_version.h generated
|
68
INSTALL.txt
68
INSTALL.txt
@ -16,7 +16,7 @@ does support packet capture but libpcap does not support that
|
|||||||
particular type. (If you have HP-UX, see below.) If your system uses a
|
particular type. (If you have HP-UX, see below.) If your system uses a
|
||||||
packet capture not supported by libpcap, please send us patches; don't
|
packet capture not supported by libpcap, please send us patches; don't
|
||||||
forget to include an autoconf fragment suitable for use in
|
forget to include an autoconf fragment suitable for use in
|
||||||
configure.in.
|
configure.ac.
|
||||||
|
|
||||||
It is possible to override the default packet capture type, although
|
It is possible to override the default packet capture type, although
|
||||||
the circumstance where this works are limited. For example if you have
|
the circumstance where this works are limited. For example if you have
|
||||||
@ -31,40 +31,22 @@ You will need an ANSI C compiler to build libpcap. The configure script
|
|||||||
will abort if your compiler is not ANSI compliant. If this happens, use
|
will abort if your compiler is not ANSI compliant. If this happens, use
|
||||||
the generally available GNU C compiler (GCC).
|
the generally available GNU C compiler (GCC).
|
||||||
|
|
||||||
If you use flex, you must use version 2.4.6 or higher. The configure
|
You will need either Flex 2.5.31 or later, or a version of Lex
|
||||||
script automatically detects the version of flex and will not use it
|
compatible with it (if any exist), to build libpcap. The configure
|
||||||
unless it is new enough. You can use "flex -V" to see what version you
|
script will abort if there isn't any such program. If you have an older
|
||||||
have (unless it's really old). The current version of flex is available
|
version of Flex, or don't have a compatible version of Lex, the current
|
||||||
at flex.sourceforge.net and often comes packaged by means of the OS.
|
version of flex is available at flex.sourceforge.net.
|
||||||
As of this writing, the current version is 2.5.37.
|
|
||||||
|
|
||||||
If you use bison, you must use flex (and visa versa). The configure
|
You will need either Bison, Berkeley YACC, or a version of YACC
|
||||||
script automatically falls back to lex and yacc if both flex and bison
|
compatible with them (if any exist), to build libpcap. The configure
|
||||||
are not found.
|
script will abort if there isn't any such program. If you don't have
|
||||||
|
any such program, the current version of Bison can be found at
|
||||||
|
http://ftp.gnu.org/gnu/bison/ and the current version of Berkeley YACC
|
||||||
|
can be found at http://invisible-island.net/byacc/.
|
||||||
|
|
||||||
Sometimes the stock C compiler does not interact well with flex and
|
Sometimes the stock C compiler does not interact well with Flex and
|
||||||
bison. The list of problems includes undefined references for alloca.
|
Bison. The list of problems includes undefined references for alloca.
|
||||||
You can get around this by installing gcc or manually disabling flex
|
You can get around this by installing GCC.
|
||||||
and bison with:
|
|
||||||
|
|
||||||
./configure --without-flex --without-bison
|
|
||||||
|
|
||||||
If your system only has AT&T lex, this is okay unless your libpcap
|
|
||||||
program uses other lex/yacc generated code. (Although it's possible to
|
|
||||||
map the yy* identifiers with a script, we use flex and bison so we
|
|
||||||
don't feel this is necessary.)
|
|
||||||
|
|
||||||
Some systems support the Berkeley Packet Filter natively; for example
|
|
||||||
out of the box OSF and BSD/OS have bpf. If your system does not support
|
|
||||||
bpf, you will need to pick up:
|
|
||||||
|
|
||||||
ftp://ftp.ee.lbl.gov/bpf-*.tar.Z
|
|
||||||
|
|
||||||
Note well: you MUST have kernel source for your operating system in
|
|
||||||
order to install bpf. An exception is SunOS 4; the bpf distribution
|
|
||||||
includes replacement kernel objects for some of the standard SunOS 4
|
|
||||||
network device drivers. See the bpf INSTALL document for more
|
|
||||||
information.
|
|
||||||
|
|
||||||
If you use Solaris, there is a bug with bufmod(7) that is fixed in
|
If you use Solaris, there is a bug with bufmod(7) that is fixed in
|
||||||
Solaris 2.3.2 (aka SunOS 5.3.2). Setting a snapshot length with the
|
Solaris 2.3.2 (aka SunOS 5.3.2). Setting a snapshot length with the
|
||||||
@ -178,14 +160,14 @@ packet timestamps aren't very good. This appears to be due to haphazard
|
|||||||
handling of the timestamp in the kernel.
|
handling of the timestamp in the kernel.
|
||||||
|
|
||||||
Note well: there is rumoured to be a version of tcpdump floating around
|
Note well: there is rumoured to be a version of tcpdump floating around
|
||||||
called 3.0.3 that includes libpcap and is supposed to support Linux.
|
called 3.0.3 that includes libpcap and is supposed to support Linux.
|
||||||
You should be advised that neither the Network Research Group at LBNL
|
You should be advised that neither the Network Research Group at LBNL
|
||||||
nor the Tcpdump Group ever generated a release with this version number.
|
nor the Tcpdump Group ever generated a release with this version number.
|
||||||
The LBNL Network Research Group notes with interest that a standard
|
The LBNL Network Research Group notes with interest that a standard
|
||||||
cracker trick to get people to install trojans is to distribute bogus
|
cracker trick to get people to install trojans is to distribute bogus
|
||||||
packages that have a version number higher than the current release.
|
packages that have a version number higher than the current release.
|
||||||
They also noted with annoyance that 90% of the Linux related bug reports
|
They also noted with annoyance that 90% of the Linux related bug reports
|
||||||
they got are due to changes made to unofficial versions of their page.
|
they got are due to changes made to unofficial versions of their page.
|
||||||
If you are having trouble but aren't using a version that came from
|
If you are having trouble but aren't using a version that came from
|
||||||
tcpdump.org, please try that before submitting a bug report!
|
tcpdump.org, please try that before submitting a bug report!
|
||||||
|
|
||||||
@ -239,11 +221,11 @@ the libpcap 0.6.2 source release, so this release of libpcap might also
|
|||||||
build without changes on UnixWare 7.
|
build without changes on UnixWare 7.
|
||||||
|
|
||||||
If linking tcpdump fails with "Undefined: _alloca" when using bison on
|
If linking tcpdump fails with "Undefined: _alloca" when using bison on
|
||||||
a Sun4, your version of bison is broken. In any case version 1.16 or
|
a Sun4, your version of Bison is broken. In any case version 1.16 or
|
||||||
higher is recommended (1.14 is known to cause problems 1.16 is known to
|
higher is recommended (1.14 is known to cause problems 1.16 is known to
|
||||||
work). Either pick up a current version from:
|
work). Either pick up a current version from:
|
||||||
|
|
||||||
ftp://ftp.gnu.org/pub/gnu/bison
|
http://ftp.gnu.org/gnu/bison/
|
||||||
|
|
||||||
or hack around it by inserting the lines:
|
or hack around it by inserting the lines:
|
||||||
|
|
||||||
@ -289,6 +271,7 @@ FILES
|
|||||||
CHANGES - description of differences between releases
|
CHANGES - description of differences between releases
|
||||||
ChmodBPF/* - Mac OS X startup item to set ownership and permissions
|
ChmodBPF/* - Mac OS X startup item to set ownership and permissions
|
||||||
on /dev/bpf*
|
on /dev/bpf*
|
||||||
|
CMakeLists.txt - CMake file
|
||||||
CREDITS - people that have helped libpcap along
|
CREDITS - people that have helped libpcap along
|
||||||
INSTALL.txt - this file
|
INSTALL.txt - this file
|
||||||
LICENSE - the license under which tcpdump is distributed
|
LICENSE - the license under which tcpdump is distributed
|
||||||
@ -317,7 +300,7 @@ config.guess - autoconf support
|
|||||||
config.h.in - autoconf input
|
config.h.in - autoconf input
|
||||||
config.sub - autoconf support
|
config.sub - autoconf support
|
||||||
configure - configure script (run this first)
|
configure - configure script (run this first)
|
||||||
configure.in - configure script source
|
configure.ac - configure script source
|
||||||
dlpisubs.c - DLPI-related functions for pcap-dlpi.c and pcap-libdlpi.c
|
dlpisubs.c - DLPI-related functions for pcap-dlpi.c and pcap-libdlpi.c
|
||||||
dlpisubs.h - DLPI-related function declarations
|
dlpisubs.h - DLPI-related function declarations
|
||||||
etherent.c - /etc/ethers support routines
|
etherent.c - /etc/ethers support routines
|
||||||
@ -325,9 +308,6 @@ ethertype.h - Ethernet protocol types and names definitions
|
|||||||
fad-getad.c - pcap_findalldevs() for systems with getifaddrs()
|
fad-getad.c - pcap_findalldevs() for systems with getifaddrs()
|
||||||
fad-gifc.c - pcap_findalldevs() for systems with only SIOCGIFLIST
|
fad-gifc.c - pcap_findalldevs() for systems with only SIOCGIFLIST
|
||||||
fad-glifc.c - pcap_findalldevs() for systems with SIOCGLIFCONF
|
fad-glifc.c - pcap_findalldevs() for systems with SIOCGLIFCONF
|
||||||
fad-null.c - pcap_findalldevs() for systems without capture support
|
|
||||||
fad-sita.c - pcap_findalldevs() for systems with SITA support
|
|
||||||
fad-win32.c - pcap_findalldevs() for WinPcap
|
|
||||||
filtertest.c - test program for BPF compiler
|
filtertest.c - test program for BPF compiler
|
||||||
findalldevstest.c - test program for pcap_findalldevs()
|
findalldevstest.c - test program for pcap_findalldevs()
|
||||||
gencode.c - BPF code generation routines
|
gencode.c - BPF code generation routines
|
||||||
@ -345,7 +325,6 @@ nametoaddr.c - hostname to address routines
|
|||||||
nlpid.h - OSI network layer protocol identifier definitions
|
nlpid.h - OSI network layer protocol identifier definitions
|
||||||
net - symlink to bpf/net
|
net - symlink to bpf/net
|
||||||
optimize.c - BPF optimization routines
|
optimize.c - BPF optimization routines
|
||||||
packaging - packaging information for building libpcap RPMs
|
|
||||||
pcap/bluetooth.h - public definition of DLT_BLUETOOTH_HCI_H4_WITH_PHDR header
|
pcap/bluetooth.h - public definition of DLT_BLUETOOTH_HCI_H4_WITH_PHDR header
|
||||||
pcap/bpf.h - BPF definitions
|
pcap/bpf.h - BPF definitions
|
||||||
pcap/namedb.h - public libpcap name database definitions
|
pcap/namedb.h - public libpcap name database definitions
|
||||||
@ -389,7 +368,6 @@ pcap_*.3pcap - manual entries for library functions
|
|||||||
pcap-filter.4 - manual entry for filter syntax
|
pcap-filter.4 - manual entry for filter syntax
|
||||||
pcap-linktype.4 - manual entry for link-layer header types
|
pcap-linktype.4 - manual entry for link-layer header types
|
||||||
ppp.h - Point to Point Protocol definitions
|
ppp.h - Point to Point Protocol definitions
|
||||||
runlex.sh - wrapper for Lex/Flex
|
|
||||||
savefile.c - offline support
|
savefile.c - offline support
|
||||||
scanner.l - filter string scanner
|
scanner.l - filter string scanner
|
||||||
sunatmpos.h - definitions for SunATM capturing
|
sunatmpos.h - definitions for SunATM capturing
|
||||||
|
6
LICENSE
6
LICENSE
@ -1,9 +1,9 @@
|
|||||||
License: BSD
|
License: BSD
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions
|
modification, are permitted provided that the following conditions
|
||||||
are met:
|
are met:
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
1. Redistributions of source code must retain the above copyright
|
||||||
notice, this list of conditions and the following disclaimer.
|
notice, this list of conditions and the following disclaimer.
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
@ -13,7 +13,7 @@ are met:
|
|||||||
3. The names of the authors may not be used to endorse or promote
|
3. The names of the authors may not be used to endorse or promote
|
||||||
products derived from this software without specific prior
|
products derived from this software without specific prior
|
||||||
written permission.
|
written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||||
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
# Auto-regenerate configure script or Makefile when things change.
|
# Auto-regenerate configure script or Makefile when things change.
|
||||||
# From autoconf.info . Works best with GNU Make.
|
# From autoconf.info . Works best with GNU Make.
|
||||||
#
|
#
|
||||||
${srcdir}/configure: configure.in aclocal.m4
|
${srcdir}/configure: configure.ac aclocal.m4
|
||||||
cd ${srcdir} && autoconf
|
cd ${srcdir} && autoconf
|
||||||
|
|
||||||
# autoheader might not change config.h.in, so touch a stamp file.
|
# autoheader might not change config.h.in, so touch a stamp file.
|
||||||
${srcdir}/config.h.in: ${srcdir}/stamp-h.in
|
${srcdir}/config.h.in: ${srcdir}/stamp-h.in
|
||||||
${srcdir}/stamp-h.in: configure.in aclocal.m4
|
${srcdir}/stamp-h.in: configure.ac aclocal.m4
|
||||||
cd ${srcdir} && autoheader
|
cd ${srcdir} && autoheader
|
||||||
echo timestamp > ${srcdir}/stamp-h.in
|
echo timestamp > ${srcdir}/stamp-h.in
|
||||||
|
|
||||||
|
182
Makefile.in
182
Makefile.in
@ -49,12 +49,13 @@ LN_S = @LN_S@
|
|||||||
MKDEP = @MKDEP@
|
MKDEP = @MKDEP@
|
||||||
CCOPT = @V_CCOPT@
|
CCOPT = @V_CCOPT@
|
||||||
INCLS = -I. @V_INCLS@
|
INCLS = -I. @V_INCLS@
|
||||||
DEFS = @DEFS@ @V_DEFS@
|
DEFS = -DBUILDING_PCAP @DEFS@ @V_DEFS@
|
||||||
ADDLOBJS = @ADDLOBJS@
|
ADDLOBJS = @ADDLOBJS@
|
||||||
ADDLARCHIVEOBJS = @ADDLARCHIVEOBJS@
|
ADDLARCHIVEOBJS = @ADDLARCHIVEOBJS@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
CFLAGS = @CFLAGS@
|
CROSSFLAGS=
|
||||||
LDFLAGS = @LDFLAGS@
|
CFLAGS = @CFLAGS@ ${CROSSFLAGS}
|
||||||
|
LDFLAGS = @LDFLAGS@ ${CROSSFLAGS}
|
||||||
DYEXT = @DYEXT@
|
DYEXT = @DYEXT@
|
||||||
V_RPATH_OPT = @V_RPATH_OPT@
|
V_RPATH_OPT = @V_RPATH_OPT@
|
||||||
DEPENDENCY_CFLAG = @DEPENDENCY_CFLAG@
|
DEPENDENCY_CFLAG = @DEPENDENCY_CFLAG@
|
||||||
@ -68,13 +69,8 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
|
|
||||||
#
|
LEX = @LEX@
|
||||||
# Flex and bison allow you to specify the prefixes of the global symbols
|
YACC = @YACC@
|
||||||
# used by the generated parser. This allows programs to use lex/yacc
|
|
||||||
# and link against libpcap. If you don't have flex or bison, get them.
|
|
||||||
#
|
|
||||||
LEX = @V_LEX@
|
|
||||||
YACC = @V_YACC@
|
|
||||||
|
|
||||||
# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
|
# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
|
||||||
# Also, gcc does not remove the .o before forking 'as', which can be a
|
# Also, gcc does not remove the .o before forking 'as', which can be a
|
||||||
@ -83,11 +79,11 @@ YACC = @V_YACC@
|
|||||||
@rm -f $@
|
@rm -f $@
|
||||||
$(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
|
$(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
|
||||||
|
|
||||||
PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @BT_MONITOR_SRC@ @CAN_SRC@ @NETFILTER_SRC@ @CANUSB_SRC@ @DBUS_SRC@
|
PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @BT_MONITOR_SRC@ @NETFILTER_SRC@ @DBUS_SRC@
|
||||||
FSRC = fad-@V_FINDALLDEVS@.c
|
FSRC = @V_FINDALLDEVS@
|
||||||
SSRC = @SSRC@
|
SSRC = @SSRC@
|
||||||
CSRC = pcap.c inet.c gencode.c optimize.c nametoaddr.c etherent.c \
|
CSRC = pcap.c inet.c fad-helpers.c gencode.c optimize.c nametoaddr.c \
|
||||||
savefile.c sf-pcap.c sf-pcap-ng.c pcap-common.c \
|
etherent.c savefile.c sf-pcap.c sf-pcap-ng.c pcap-common.c \
|
||||||
bpf_image.c bpf_dump.c
|
bpf_image.c bpf_dump.c
|
||||||
GENSRC = scanner.c grammar.c bpf_filter.c version.c
|
GENSRC = scanner.c grammar.c bpf_filter.c version.c
|
||||||
LIBOBJS = @LIBOBJS@
|
LIBOBJS = @LIBOBJS@
|
||||||
@ -103,6 +99,9 @@ PUBHDR = \
|
|||||||
pcap-namedb.h \
|
pcap-namedb.h \
|
||||||
pcap/bpf.h \
|
pcap/bpf.h \
|
||||||
pcap/bluetooth.h \
|
pcap/bluetooth.h \
|
||||||
|
pcap/can_socketcan.h \
|
||||||
|
pcap/dlt.h \
|
||||||
|
pcap/export-defs.h \
|
||||||
pcap/ipnet.h \
|
pcap/ipnet.h \
|
||||||
pcap/namedb.h \
|
pcap/namedb.h \
|
||||||
pcap/nflog.h \
|
pcap/nflog.h \
|
||||||
@ -115,37 +114,43 @@ HDR = $(PUBHDR) \
|
|||||||
arcnet.h \
|
arcnet.h \
|
||||||
atmuni31.h \
|
atmuni31.h \
|
||||||
ethertype.h \
|
ethertype.h \
|
||||||
|
extract.h \
|
||||||
gencode.h \
|
gencode.h \
|
||||||
ieee80211.h \
|
ieee80211.h \
|
||||||
llc.h \
|
llc.h \
|
||||||
|
nametoaddr.h \
|
||||||
nlpid.h \
|
nlpid.h \
|
||||||
pcap-common.h \
|
pcap-common.h \
|
||||||
pcap-int.h \
|
pcap-int.h \
|
||||||
pcap-stdinc.h \
|
pcap-stdinc.h \
|
||||||
|
portability.h \
|
||||||
ppp.h \
|
ppp.h \
|
||||||
sf-pcap.h \
|
sf-pcap.h \
|
||||||
sf-pcap-ng.h \
|
sf-pcap-ng.h \
|
||||||
sunatmpos.h
|
sunatmpos.h
|
||||||
|
|
||||||
TESTS = \
|
TESTS = \
|
||||||
|
@VALGRINDTEST@ \
|
||||||
capturetest \
|
capturetest \
|
||||||
|
can_set_rfmon_test \
|
||||||
filtertest \
|
filtertest \
|
||||||
findalldevstest \
|
findalldevstest \
|
||||||
opentest \
|
opentest \
|
||||||
selpolltest \
|
reactivatetest \
|
||||||
valgrindtest
|
selpolltest
|
||||||
|
|
||||||
TESTS_SRC = \
|
TESTS_SRC = \
|
||||||
|
tests/valgrindtest.c \
|
||||||
tests/capturetest.c \
|
tests/capturetest.c \
|
||||||
|
tests/can_set_rfmon_test.c \
|
||||||
tests/filtertest.c \
|
tests/filtertest.c \
|
||||||
tests/findalldevstest.c \
|
tests/findalldevstest.c \
|
||||||
tests/opentest.c \
|
tests/opentest.c \
|
||||||
tests/reactivatetest.c \
|
tests/reactivatetest.c \
|
||||||
tests/selpolltest.c \
|
tests/selpolltest.c
|
||||||
tests/valgrindtest.c
|
|
||||||
|
|
||||||
GENHDR = \
|
GENHDR = \
|
||||||
scanner.h tokdefs.h version.h
|
scanner.h grammar.h pcap_version.h
|
||||||
|
|
||||||
TAGFILES = \
|
TAGFILES = \
|
||||||
$(SRC) $(HDR)
|
$(SRC) $(HDR)
|
||||||
@ -231,6 +236,8 @@ EXTRA_DIST = \
|
|||||||
ChmodBPF/ChmodBPF \
|
ChmodBPF/ChmodBPF \
|
||||||
ChmodBPF/StartupParameters.plist \
|
ChmodBPF/StartupParameters.plist \
|
||||||
CREDITS \
|
CREDITS \
|
||||||
|
CMakeLists.txt \
|
||||||
|
GenVersion.bat \
|
||||||
INSTALL.txt \
|
INSTALL.txt \
|
||||||
LICENSE \
|
LICENSE \
|
||||||
Makefile.in \
|
Makefile.in \
|
||||||
@ -253,29 +260,37 @@ EXTRA_DIST = \
|
|||||||
aclocal.m4 \
|
aclocal.m4 \
|
||||||
bpf/net/bpf_filter.c \
|
bpf/net/bpf_filter.c \
|
||||||
chmod_bpf \
|
chmod_bpf \
|
||||||
|
cmakeconfig.h.in \
|
||||||
|
cmake/preconfigure.cmake \
|
||||||
|
config/have_siocglifconf.c \
|
||||||
config.guess \
|
config.guess \
|
||||||
config.h.in \
|
config.h.in \
|
||||||
config.sub \
|
config.sub \
|
||||||
configure \
|
configure \
|
||||||
configure.in \
|
configure.ac \
|
||||||
dlpisubs.c \
|
dlpisubs.c \
|
||||||
dlpisubs.h \
|
dlpisubs.h \
|
||||||
fad-getad.c \
|
fad-getad.c \
|
||||||
fad-gifc.c \
|
fad-gifc.c \
|
||||||
fad-glifc.c \
|
fad-glifc.c \
|
||||||
fad-null.c \
|
fad-helpers.c \
|
||||||
fad-sita.c \
|
gen_version_c.sh \
|
||||||
fad-win32.c \
|
gen_version_header.sh \
|
||||||
grammar.y \
|
grammar.y \
|
||||||
install-sh \
|
install-sh \
|
||||||
lbl/os-aix4.h \
|
lbl/os-aix4.h \
|
||||||
|
lbl/os-aix7.h \
|
||||||
lbl/os-hpux11.h \
|
lbl/os-hpux11.h \
|
||||||
lbl/os-osf4.h \
|
lbl/os-osf4.h \
|
||||||
lbl/os-osf5.h \
|
lbl/os-osf5.h \
|
||||||
lbl/os-solaris2.h \
|
lbl/os-solaris2.h \
|
||||||
lbl/os-sunos4.h \
|
lbl/os-sunos4.h \
|
||||||
lbl/os-ultrix4.h \
|
lbl/os-ultrix4.h \
|
||||||
|
missing/getopt.c \
|
||||||
|
missing/getopt.h \
|
||||||
missing/snprintf.c \
|
missing/snprintf.c \
|
||||||
|
missing/strtok_r.c \
|
||||||
|
missing/win_snprintf.c \
|
||||||
mkdep \
|
mkdep \
|
||||||
msdos/bin2c.c \
|
msdos/bin2c.c \
|
||||||
msdos/common.dj \
|
msdos/common.dj \
|
||||||
@ -291,16 +306,11 @@ EXTRA_DIST = \
|
|||||||
msdos/pktdrvr.h \
|
msdos/pktdrvr.h \
|
||||||
msdos/readme.dos \
|
msdos/readme.dos \
|
||||||
org.tcpdump.chmod_bpf.plist \
|
org.tcpdump.chmod_bpf.plist \
|
||||||
packaging/pcap.spec.in \
|
|
||||||
pcap-bpf.c \
|
pcap-bpf.c \
|
||||||
pcap-bt-linux.c \
|
pcap-bt-linux.c \
|
||||||
pcap-bt-linux.h \
|
pcap-bt-linux.h \
|
||||||
pcap-bt-monitor-linux.c \
|
pcap-bt-monitor-linux.c \
|
||||||
pcap-bt-monitor-linux.h \
|
pcap-bt-monitor-linux.h \
|
||||||
pcap-can-linux.c \
|
|
||||||
pcap-can-linux.h \
|
|
||||||
pcap-canusb-linux.c \
|
|
||||||
pcap-canusb-linux.h \
|
|
||||||
pcap-config.in \
|
pcap-config.in \
|
||||||
pcap-dag.c \
|
pcap-dag.c \
|
||||||
pcap-dag.h \
|
pcap-dag.h \
|
||||||
@ -314,11 +324,14 @@ EXTRA_DIST = \
|
|||||||
pcap-libdlpi.c \
|
pcap-libdlpi.c \
|
||||||
pcap-linux.c \
|
pcap-linux.c \
|
||||||
pcap-namedb.h \
|
pcap-namedb.h \
|
||||||
|
pcap-new.c \
|
||||||
pcap-netfilter-linux.c \
|
pcap-netfilter-linux.c \
|
||||||
pcap-netfilter-linux.h \
|
pcap-netfilter-linux.h \
|
||||||
pcap-nit.c \
|
pcap-nit.c \
|
||||||
pcap-null.c \
|
pcap-null.c \
|
||||||
pcap-pf.c \
|
pcap-pf.c \
|
||||||
|
pcap-rpcap.c \
|
||||||
|
pcap-rpcap.h \
|
||||||
pcap-septel.c \
|
pcap-septel.c \
|
||||||
pcap-septel.h \
|
pcap-septel.h \
|
||||||
pcap-sita.h \
|
pcap-sita.h \
|
||||||
@ -328,34 +341,22 @@ EXTRA_DIST = \
|
|||||||
pcap-snf.h \
|
pcap-snf.h \
|
||||||
pcap-snit.c \
|
pcap-snit.c \
|
||||||
pcap-snoop.c \
|
pcap-snoop.c \
|
||||||
|
pcap-tc.c \
|
||||||
|
pcap-tc.h \
|
||||||
pcap-usb-linux.c \
|
pcap-usb-linux.c \
|
||||||
pcap-usb-linux.h \
|
pcap-usb-linux.h \
|
||||||
pcap-win32.c \
|
pcap-win32.c \
|
||||||
runlex.sh \
|
remote-ext.h \
|
||||||
|
sockutils.c \
|
||||||
|
sockutils.h \
|
||||||
scanner.l \
|
scanner.l \
|
||||||
|
tests/CMakeLists.txt \
|
||||||
|
pcap_version.h.in \
|
||||||
Win32/Include/Gnuc.h \
|
Win32/Include/Gnuc.h \
|
||||||
Win32/Include/addrinfo.h \
|
|
||||||
Win32/Include/bittypes.h \
|
|
||||||
Win32/Include/cdecl_ext.h \
|
|
||||||
Win32/Include/inetprivate.h \
|
|
||||||
Win32/Include/ip6_misc.h \
|
|
||||||
Win32/Include/sockstorage.h \
|
|
||||||
Win32/Include/arpa/nameser.h \
|
|
||||||
Win32/Include/net/if.h \
|
Win32/Include/net/if.h \
|
||||||
Win32/Include/net/netdb.h \
|
Win32/Prj/wpcap.sln \
|
||||||
Win32/Include/net/paths.h \
|
Win32/Prj/wpcap.vcxproj \
|
||||||
Win32/Prj/libpcap.dsp \
|
Win32/Prj/wpcap.vcxproj.filters
|
||||||
Win32/Prj/libpcap.dsw \
|
|
||||||
Win32/Src/ffs.c \
|
|
||||||
Win32/Src/gai_strerror.c \
|
|
||||||
Win32/Src/getaddrinfo.c \
|
|
||||||
Win32/Src/getnetbynm.c \
|
|
||||||
Win32/Src/getnetent.c \
|
|
||||||
Win32/Src/getopt.c \
|
|
||||||
Win32/Src/getservent.c \
|
|
||||||
Win32/Src/inet_aton.c \
|
|
||||||
Win32/Src/inet_net.c \
|
|
||||||
Win32/Src/inet_pton.c
|
|
||||||
|
|
||||||
all: libpcap.a shared pcap-config
|
all: libpcap.a shared pcap-config
|
||||||
|
|
||||||
@ -443,24 +444,33 @@ libpcap.shareda: $(OBJ)
|
|||||||
libpcap.none:
|
libpcap.none:
|
||||||
|
|
||||||
scanner.c: $(srcdir)/scanner.l
|
scanner.c: $(srcdir)/scanner.l
|
||||||
@rm -f $@
|
$(LEX) -P pcap_ --header-file=scanner.h --nounput -o scanner.c $<
|
||||||
$(srcdir)/runlex.sh $(LEX) -o$@ $<
|
scanner.h: scanner.c
|
||||||
|
## Recover from the removal of $@
|
||||||
|
@if test -f $@; then :; else \
|
||||||
|
rm -f scanner.c; \
|
||||||
|
$(MAKE) $(MAKEFLAGS) scanner.c; \
|
||||||
|
fi
|
||||||
|
|
||||||
scanner.o: scanner.c tokdefs.h
|
scanner.o: scanner.c grammar.h
|
||||||
$(CC) $(FULL_CFLAGS) -c scanner.c
|
$(CC) $(FULL_CFLAGS) -c scanner.c
|
||||||
|
|
||||||
pcap.o: version.h
|
pcap.o: pcap_version.h
|
||||||
|
|
||||||
tokdefs.h: grammar.c
|
|
||||||
grammar.c: $(srcdir)/grammar.y
|
grammar.c: $(srcdir)/grammar.y
|
||||||
@rm -f grammar.c tokdefs.h
|
$(YACC) -p pcap_ -o grammar.c -d $<
|
||||||
$(YACC) -d $<
|
grammar.h: grammar.c
|
||||||
mv y.tab.c grammar.c
|
## Recover from the removal of $@
|
||||||
mv y.tab.h tokdefs.h
|
@if test -f $@; then :; else \
|
||||||
|
rm -f grammar.c; \
|
||||||
|
$(MAKE) $(MAKEFLAGS) grammar.c; \
|
||||||
|
fi
|
||||||
|
|
||||||
grammar.o: grammar.c
|
grammar.o: grammar.c
|
||||||
@rm -f $@
|
$(CC) $(FULL_CFLAGS) -c grammar.c
|
||||||
$(CC) $(FULL_CFLAGS) -Dyylval=pcap_lval -c grammar.c
|
|
||||||
|
gencode.o: $(srcdir)/gencode.c grammar.h scanner.h
|
||||||
|
$(CC) $(FULL_CFLAGS) -c $(srcdir)/gencode.c
|
||||||
|
|
||||||
version.o: version.c
|
version.o: version.c
|
||||||
$(CC) $(FULL_CFLAGS) -c version.c
|
$(CC) $(FULL_CFLAGS) -c version.c
|
||||||
@ -468,32 +478,21 @@ version.o: version.c
|
|||||||
snprintf.o: $(srcdir)/missing/snprintf.c
|
snprintf.o: $(srcdir)/missing/snprintf.c
|
||||||
$(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
|
$(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/snprintf.c
|
||||||
|
|
||||||
version.c: $(srcdir)/VERSION
|
strtok_r.o: $(srcdir)/missing/strtok_r.c
|
||||||
@rm -f $@
|
$(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strtok_r.c
|
||||||
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[] = "&";/' > $@
|
|
||||||
|
|
||||||
#
|
version.c: $(srcdir)/VERSION $(srcdir)/gen_version_c.sh
|
||||||
# NOTE: this really is supposed to be static; importing a string
|
#
|
||||||
# from a shared library does not work very well on many
|
# Older programs import this if they want to show the
|
||||||
# versions of UNIX (Solaris, Linux, and the BSDs, for example),
|
# libpcap version number, rather than calling
|
||||||
# so we make the version string static and return it from
|
# pcap_lib_version(), so we need to export it.
|
||||||
# a function, which does work.
|
#
|
||||||
#
|
|
||||||
version.h: $(srcdir)/VERSION
|
|
||||||
@rm -f $@
|
@rm -f $@
|
||||||
if grep GIT ${srcdir}/VERSION >/dev/null; then \
|
$(srcdir)/gen_version_c.sh $(srcdir)/VERSION $@
|
||||||
read ver <${srcdir}/VERSION; \
|
|
||||||
echo $$ver | tr -d '\012'; \
|
pcap_version.h: $(srcdir)/VERSION $(srcdir)/pcap_version.h.in $(srcdir)/gen_version_header.sh
|
||||||
date +_%Y_%m_%d; \
|
@rm -f $@
|
||||||
else \
|
$(srcdir)/gen_version_header.sh $(srcdir)/VERSION $(srcdir)/pcap_version.h.in $@
|
||||||
cat ${srcdir}/VERSION; \
|
|
||||||
fi | sed -e 's/.*/static const char pcap_version_string[] = "libpcap version &";/' > $@
|
|
||||||
|
|
||||||
bpf_filter.c: $(srcdir)/bpf/net/bpf_filter.c
|
bpf_filter.c: $(srcdir)/bpf/net/bpf_filter.c
|
||||||
rm -f bpf_filter.c
|
rm -f bpf_filter.c
|
||||||
@ -530,6 +529,9 @@ tests: $(TESTS)
|
|||||||
capturetest: tests/capturetest.c libpcap.a
|
capturetest: tests/capturetest.c libpcap.a
|
||||||
$(CC) $(FULL_CFLAGS) -I. -L. -o capturetest $(srcdir)/tests/capturetest.c libpcap.a $(LIBS)
|
$(CC) $(FULL_CFLAGS) -I. -L. -o capturetest $(srcdir)/tests/capturetest.c libpcap.a $(LIBS)
|
||||||
|
|
||||||
|
can_set_rfmon_test: tests/can_set_rfmon_test.c libpcap.a
|
||||||
|
$(CC) $(FULL_CFLAGS) -I. -L. -o can_set_rfmon_test $(srcdir)/tests/can_set_rfmon_test.c libpcap.a $(LIBS)
|
||||||
|
|
||||||
filtertest: tests/filtertest.c libpcap.a
|
filtertest: tests/filtertest.c libpcap.a
|
||||||
$(CC) $(FULL_CFLAGS) -I. -L. -o filtertest $(srcdir)/tests/filtertest.c libpcap.a $(LIBS)
|
$(CC) $(FULL_CFLAGS) -I. -L. -o filtertest $(srcdir)/tests/filtertest.c libpcap.a $(LIBS)
|
||||||
|
|
||||||
@ -539,6 +541,9 @@ findalldevstest: tests/findalldevstest.c libpcap.a
|
|||||||
opentest: tests/opentest.c libpcap.a
|
opentest: tests/opentest.c libpcap.a
|
||||||
$(CC) $(FULL_CFLAGS) -I. -L. -o opentest $(srcdir)/tests/opentest.c libpcap.a $(LIBS)
|
$(CC) $(FULL_CFLAGS) -I. -L. -o opentest $(srcdir)/tests/opentest.c libpcap.a $(LIBS)
|
||||||
|
|
||||||
|
reactivatetest: tests/reactivatetest.c libpcap.a
|
||||||
|
$(CC) $(FULL_CFLAGS) -I. -L. -o reactivatetest $(srcdir)/tests/reactivatetest.c libpcap.a $(LIBS)
|
||||||
|
|
||||||
selpolltest: tests/selpolltest.c libpcap.a
|
selpolltest: tests/selpolltest.c libpcap.a
|
||||||
$(CC) $(FULL_CFLAGS) -I. -L. -o selpolltest $(srcdir)/tests/selpolltest.c libpcap.a $(LIBS)
|
$(CC) $(FULL_CFLAGS) -I. -L. -o selpolltest $(srcdir)/tests/selpolltest.c libpcap.a $(LIBS)
|
||||||
|
|
||||||
@ -728,13 +733,12 @@ distclean: clean
|
|||||||
rm -f $(MAN3PCAP_EXPAND:.in=) $(MANFILE:.in=) $(MANMISC:.in=)
|
rm -f $(MAN3PCAP_EXPAND:.in=) $(MANFILE:.in=) $(MANMISC:.in=)
|
||||||
rm -rf autom4te.cache
|
rm -rf autom4te.cache
|
||||||
|
|
||||||
|
extags: $(TAGFILES)
|
||||||
|
ctags $(TAGFILES)
|
||||||
|
|
||||||
tags: $(TAGFILES)
|
tags: $(TAGFILES)
|
||||||
ctags -wtd $(TAGFILES)
|
ctags -wtd $(TAGFILES)
|
||||||
|
|
||||||
packaging/pcap.spec: packaging/pcap.spec.in VERSION
|
|
||||||
RPMVERSION=`cat VERSION | sed s/-.*//g`; \
|
|
||||||
sed -e s/@VERSION@/$$RPMVERSION/ -e s/@NAME@/libpcap-`cat VERSION`/ $< > $@
|
|
||||||
|
|
||||||
releasetar:
|
releasetar:
|
||||||
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
|
@cwd=`pwd` ; dir=`basename $$cwd` ; name=$(PROG)-`cat VERSION` ; \
|
||||||
mkdir $$name; \
|
mkdir $$name; \
|
||||||
|
10
README
10
README
@ -76,15 +76,15 @@ information on configuring that option.
|
|||||||
|
|
||||||
Note to Linux distributions and *BSD systems that include libpcap:
|
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
|
There's now a rule to make a shared library, which should work on Linux
|
||||||
and *BSD, among other platforms.
|
and *BSD, among other platforms.
|
||||||
|
|
||||||
It sets the soname of the library to "libpcap.so.1"; this is what it
|
It sets the soname of the library to "libpcap.so.1"; this is what it
|
||||||
should be, *NOT* libpcap.so.1.x or libpcap.so.1.x.y or something such as
|
should be, *NOT* libpcap.so.1.x or libpcap.so.1.x.y or something such as
|
||||||
that.
|
that.
|
||||||
|
|
||||||
We've been maintaining binary compatibility between libpcap releases for
|
We've been maintaining binary compatibility between libpcap releases for
|
||||||
quite a while; there's no reason to tie a binary linked with libpcap to
|
quite a while; there's no reason to tie a binary linked with libpcap to
|
||||||
a particular release of libpcap.
|
a particular release of libpcap.
|
||||||
|
|
||||||
Problems, bugs, questions, desirable enhancements, etc. should be sent
|
Problems, bugs, questions, desirable enhancements, etc. should be sent
|
||||||
|
42
README.Win32
42
README.Win32
@ -1,9 +1,9 @@
|
|||||||
Under Win32, libpcap is integrated in the WinPcap packet capture system.
|
Under Win32, libpcap is integrated in the WinPcap packet capture system.
|
||||||
WinPcap provides a framework that allows libpcap to capture the packets
|
WinPcap provides a framework that allows libpcap to capture the packets
|
||||||
under Windows 95, Windows 98, Windows ME, Windows NT 4, Windows 2000
|
under Windows 95, Windows 98, Windows ME, Windows NT 4, Windows 2000
|
||||||
and Windows XP.
|
and Windows XP.
|
||||||
WinPcap binaries and source code can be found at http://winpcap.polito.it:
|
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
|
they include also a developer's pack with all the necessary to compile
|
||||||
libpcap-based applications under Windows.
|
libpcap-based applications under Windows.
|
||||||
|
|
||||||
How to compile libpcap with Visual Studio
|
How to compile libpcap with Visual Studio
|
||||||
@ -12,35 +12,35 @@ How to compile libpcap with Visual Studio
|
|||||||
In order to compile libpcap you will need:
|
In order to compile libpcap you will need:
|
||||||
|
|
||||||
- version 6 (or higher) of Microsoft Visual Studio
|
- version 6 (or higher) of Microsoft Visual Studio
|
||||||
- The November 2001 (or later) edition of Microsoft Platform
|
- The November 2001 (or later) edition of Microsoft Platform
|
||||||
Software Development Kit (SDK), that contains some necessary includes
|
Software Development Kit (SDK), that contains some necessary includes
|
||||||
for IPv6 support. You can download it from http://www.microsoft.com/sdk
|
for IPv6 support. You can download it from http://www.microsoft.com/sdk
|
||||||
- the latest WinPcap sources from http://winpcap.polito.it/install
|
- the latest WinPcap sources from http://winpcap.polito.it/install
|
||||||
|
|
||||||
The WinPcap source code already contains a recent (usually the latest
|
The WinPcap source code already contains a recent (usually the latest
|
||||||
stable) version of libpcap. If you need to compile a different one,
|
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
|
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
|
winpcap\wpcap\libpcap folder of the WinPcap distribution. If you want to
|
||||||
compile a libpcap source retrieved from the tcpdump.org Git, you will
|
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)
|
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
|
or with the cygnus makefile, since The Visual Studio project is not able
|
||||||
to build them.
|
to build them.
|
||||||
|
|
||||||
Open the project file winpcap\wpcap\prj\wpcap.dsw with Visual Studio and
|
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,
|
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
|
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
|
winpcap\wpcap\prj\release or winpcap\wpcap\prj\debug depending on the type
|
||||||
of binary that is being created.
|
of binary that is being created.
|
||||||
|
|
||||||
How to compile libpcap with Cygnus
|
How to compile libpcap with Cygnus
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
To build wpcap.dll, cd to the directory WPCAP/PRJ of the WinPcap source code
|
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
|
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
|
applications, will be generated in winpcap\wpcap\lib\. wpcap.dll will be
|
||||||
generated in winpcap\wpcap\prj.
|
generated in winpcap\wpcap\prj.
|
||||||
|
|
||||||
Remember, you CANNOT use the MSVC-generated .lib files with gcc, use
|
Remember, you CANNOT use the MSVC-generated .lib files with gcc, use
|
||||||
libwpcap.a instead.
|
libwpcap.a instead.
|
||||||
|
|
||||||
"make install" installs wpcap.dll in the Windows system folder.
|
"make install" installs wpcap.dll in the Windows system folder.
|
||||||
|
@ -76,8 +76,8 @@ If you use DLPI:
|
|||||||
Then you need to type:
|
Then you need to type:
|
||||||
|
|
||||||
strload -f /etc/dlpi.conf
|
strload -f /etc/dlpi.conf
|
||||||
|
|
||||||
Check again with strload -q -d dlpi that the dlpi driver is loaded.
|
Check again with strload -q -d dlpi that the dlpi driver is loaded.
|
||||||
|
|
||||||
Alternatively, you can uncomment the lines for DLPI in
|
Alternatively, you can uncomment the lines for DLPI in
|
||||||
/etc/pse.conf and reboot the machine; this way DLPI will always
|
/etc/pse.conf and reboot the machine; this way DLPI will always
|
||||||
|
40
README.hpux
40
README.hpux
@ -5,14 +5,14 @@ HP-UX and cannot upgrade, please continue reading.
|
|||||||
HP-UX patches to fix packet capture problems
|
HP-UX patches to fix packet capture problems
|
||||||
|
|
||||||
Note that packet-capture programs such as tcpdump may, on HP-UX, not be
|
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.
|
able to see packets sent from the machine on which they're running.
|
||||||
Some articles on groups.google.com discussing this are:
|
Some articles on groups.google.com discussing this are:
|
||||||
|
|
||||||
http://groups.google.com/groups?selm=82ld3v%2480i%241%40mamenchi.zrz.TU-Berlin.DE
|
http://groups.google.com/groups?selm=82ld3v%2480i%241%40mamenchi.zrz.TU-Berlin.DE
|
||||||
|
|
||||||
which says:
|
which says:
|
||||||
|
|
||||||
Newsgroups: comp.sys.hp.hpux
|
Newsgroups: comp.sys.hp.hpux
|
||||||
Subject: Re: Did someone made tcpdump working on 10.20 ?
|
Subject: Re: Did someone made tcpdump working on 10.20 ?
|
||||||
Date: 12/08/1999
|
Date: 12/08/1999
|
||||||
From: Lutz Jaenicke <jaenicke@emserv1.ee.TU-Berlin.DE>
|
From: Lutz Jaenicke <jaenicke@emserv1.ee.TU-Berlin.DE>
|
||||||
@ -27,14 +27,14 @@ which says:
|
|||||||
>must me "patched" (poked) in order to see outbound data in promiscuous mode.
|
>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
|
>Many things to do .... So the question is : did someone has already this
|
||||||
>"ready to use" PHNE_**** patch ?
|
>"ready to use" PHNE_**** patch ?
|
||||||
|
|
||||||
Two things:
|
Two things:
|
||||||
1. You do need a late "LAN products cumulative patch" (e.g. PHNE_18173
|
1. You do need a late "LAN products cumulative patch" (e.g. PHNE_18173
|
||||||
for s700/10.20).
|
for s700/10.20).
|
||||||
2. You must use
|
2. You must use
|
||||||
echo 'lanc_outbound_promisc_flag/W1' | /usr/bin/adb -w /stand/vmunix /dev/kmem
|
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
|
You can insert this e.g. into /sbin/init.d/lan
|
||||||
|
|
||||||
Best regards,
|
Best regards,
|
||||||
Lutz
|
Lutz
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ and
|
|||||||
|
|
||||||
which says:
|
which says:
|
||||||
|
|
||||||
Newsgroups: comp.sys.hp.hpux
|
Newsgroups: comp.sys.hp.hpux
|
||||||
Subject: Re: tcpdump only shows incoming packets
|
Subject: Re: tcpdump only shows incoming packets
|
||||||
Date: 02/15/2000
|
Date: 02/15/2000
|
||||||
From: Rick Jones <foo@bar.baz.invalid>
|
From: Rick Jones <foo@bar.baz.invalid>
|
||||||
@ -56,12 +56,12 @@ which says:
|
|||||||
> outgoing. I have tried tcpflow-0.12 which also uses libpcap and 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
|
> same thing happens. Could someone please give me a hint on how to
|
||||||
> get this right?
|
> get this right?
|
||||||
|
|
||||||
Search/Read the archives ?-)
|
Search/Read the archives ?-)
|
||||||
|
|
||||||
What you are seeing is expected, un-patched, behaviour for an HP-UX
|
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
|
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.
|
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
|
At that point, a miracle happens and you should start seeing outbound
|
||||||
traffic.
|
traffic.
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ which says:
|
|||||||
From: Harald Skotnes <harald@cc.uit.no>
|
From: Harald Skotnes <harald@cc.uit.no>
|
||||||
|
|
||||||
Rick Jones wrote:
|
Rick Jones wrote:
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
> What you are seeing is expected, un-patched, behaviour for an HP-UX
|
> What you are seeing is expected, un-patched, behaviour for an HP-UX
|
||||||
@ -87,7 +87,7 @@ which says:
|
|||||||
> patches, and then the latest driver patch for the interface(s) in
|
> patches, and then the latest driver patch for the interface(s) in
|
||||||
> use. At that point, a miracle happens and you should start seeing
|
> use. At that point, a miracle happens and you should start seeing
|
||||||
> outbound traffic.
|
> outbound traffic.
|
||||||
|
|
||||||
Thanks a lot. I have this problem on several machines running HPUX
|
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
|
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,
|
know what to think. Anyway I have now installed PHNE_19766,
|
||||||
@ -101,7 +101,7 @@ And another message to tcpdump-workers@tcpdump.org, from Rick Jones:
|
|||||||
|
|
||||||
Date: Mon, 29 Apr 2002 15:59:55 -0700
|
Date: Mon, 29 Apr 2002 15:59:55 -0700
|
||||||
From: Rick Jones
|
From: Rick Jones
|
||||||
To: tcpdump-workers@tcpdump.org
|
To: tcpdump-workers@tcpdump.org
|
||||||
Subject: Re: [tcpdump-workers] I Can't Capture the Outbound Traffic
|
Subject: Re: [tcpdump-workers] I Can't Capture the Outbound Traffic
|
||||||
|
|
||||||
...
|
...
|
||||||
@ -130,21 +130,21 @@ captures on HP-UX 9.x:
|
|||||||
|
|
||||||
Dave Barr (barr@cis.ohio-state.edu) wrote:
|
Dave Barr (barr@cis.ohio-state.edu) wrote:
|
||||||
: Has anyone ported tcpdump (or something similar) to HP/UX 9.x?
|
: 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
|
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
|
the (then optional) STREAMS product. This would bring DLPI, which is
|
||||||
what one uses to access interfaces in promiscuous mode.
|
what one uses to access interfaces in promiscuous mode.
|
||||||
|
|
||||||
I'm not sure that HP even sells the 9.X STREAMS product any longer,
|
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
|
since HP-UX 9.X is off the pricelist (well, maybe 9.10 for the old 68K
|
||||||
devices).
|
devices).
|
||||||
|
|
||||||
Your best bet is to be up on 10.20 or better if that is at all
|
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.
|
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
|
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
|
that functionality on 9.X, but it might happen at some point for 10.20
|
||||||
and 11.X.
|
and 11.X.
|
||||||
|
|
||||||
rick jones
|
rick jones
|
||||||
|
|
||||||
(as per other messages cited here, the ability to see the system's own
|
(as per other messages cited here, the ability to see the system's own
|
||||||
@ -178,12 +178,12 @@ An additional note, from Jost Martin, for HP-UX 10.20:
|
|||||||
(thanks to hildeb@www.stahl.bau.tu-bs.de (Ralf Hildebrandt) who
|
(thanks to hildeb@www.stahl.bau.tu-bs.de (Ralf Hildebrandt) who
|
||||||
posted the security-part some time ago)
|
posted the security-part some time ago)
|
||||||
|
|
||||||
<<hack_ip_stack>>
|
<<hack_ip_stack>>
|
||||||
|
|
||||||
(Don't switch IP-forwarding off, if you need it !)
|
(Don't switch IP-forwarding off, if you need it !)
|
||||||
Install the hack as /sbin/init.d/hacl_ip_stack (adjust
|
Install the hack as /sbin/init.d/hacl_ip_stack (adjust
|
||||||
permissions !) and make a sequencing-symlink
|
permissions !) and make a sequencing-symlink
|
||||||
/sbin/rc2.d/S350hack_ip_stack pointing to this script.
|
/sbin/rc2.d/S350hack_ip_stack pointing to this script.
|
||||||
Now all this is done on every reboot.
|
Now all this is done on every reboot.
|
||||||
|
|
||||||
According to Rick Jones, the global promiscuous switch also has to be
|
According to Rick Jones, the global promiscuous switch also has to be
|
||||||
|
@ -19,13 +19,13 @@ the 2.0[.x] kernel:
|
|||||||
The Packet protocol is used by applications which communicate
|
The Packet protocol is used by applications which communicate
|
||||||
directly with network devices without an intermediate network
|
directly with network devices without an intermediate network
|
||||||
protocol implemented in the kernel, e.g. tcpdump. If you want them
|
protocol implemented in the kernel, e.g. tcpdump. If you want them
|
||||||
to work, choose Y.
|
to work, choose Y.
|
||||||
|
|
||||||
This driver is also available as a module called af_packet.o ( =
|
This driver is also available as a module called af_packet.o ( =
|
||||||
code which can be inserted in and removed from the running kernel
|
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
|
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
|
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
|
kmod, you may also want to add "alias net-pf-17 af_packet" to
|
||||||
/etc/modules.conf.
|
/etc/modules.conf.
|
||||||
|
|
||||||
and the note for the 2.2[.x] kernel says:
|
and the note for the 2.2[.x] kernel says:
|
||||||
@ -47,7 +47,7 @@ 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
|
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
|
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
|
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.
|
copied to the program and libpcap doing the filtering in user mode.
|
||||||
|
|
||||||
Copying packets from the kernel to the program consumes a significant
|
Copying packets from the kernel to the program consumes a significant
|
||||||
amount of CPU, so filtering in the kernel can reduce the overhead of
|
amount of CPU, so filtering in the kernel can reduce the overhead of
|
||||||
|
@ -14,7 +14,7 @@ where DIR is the root of the Septel software distribution, for example
|
|||||||
/var/src/septel.
|
/var/src/septel.
|
||||||
|
|
||||||
By default (if you write only ./configure --with-septel) it takes
|
By default (if you write only ./configure --with-septel) it takes
|
||||||
./../septel as argument for DIR.
|
./../septel as argument for DIR.
|
||||||
|
|
||||||
If the Septel software is correctly detected 'configure' will
|
If the Septel software is correctly detected 'configure' will
|
||||||
report:
|
report:
|
||||||
|
@ -12,7 +12,7 @@ These additions/extensions have been made to PCAP to allow it to
|
|||||||
capture packets from a SITA ACN device (and potentially others).
|
capture packets from a SITA ACN device (and potentially others).
|
||||||
|
|
||||||
To enable its support you need to ensure that the distribution has
|
To enable its support you need to ensure that the distribution has
|
||||||
a correct configure.in file; that can be created if neccessay by
|
a correct configure.ac file; that can be created if neccessay by
|
||||||
using the normal autoconf procedure of:
|
using the normal autoconf procedure of:
|
||||||
|
|
||||||
aclocal
|
aclocal
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
The following instructions are applicable to Tru64 UNIX
|
The following instructions are applicable to Tru64 UNIX
|
||||||
(formerly Digital UNIX (formerly DEC OSF/1)) version 4.0, and
|
(formerly Digital UNIX (formerly DEC OSF/1)) version 4.0, and
|
||||||
probably to later versions as well; at least some options apply to
|
probably to later versions as well; at least some options apply to
|
||||||
Digital UNIX 3.2 - perhaps all do.
|
Digital UNIX 3.2 - perhaps all do.
|
||||||
|
10
TODO
10
TODO
@ -6,11 +6,11 @@ Important stuff (to be done before the next release)
|
|||||||
|
|
||||||
General
|
General
|
||||||
|
|
||||||
- configure should not be in Git. 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
|
autogen.sh script to run autoconf etc. after checkout. I think we
|
||||||
should stick to the standard.
|
should stick to the standard.
|
||||||
|
|
||||||
- The source files should be better documented. There is no official
|
- The source files should be better documented. There is no official
|
||||||
design guideline for what is done where. There should be a common coding
|
design guideline for what is done where. There should be a common coding
|
||||||
style (okay, you can guess that by looking at the code) and a guide for
|
style (okay, you can guess that by looking at the code) and a guide for
|
||||||
what needs to be documented.
|
what needs to be documented.
|
||||||
@ -18,7 +18,7 @@ General
|
|||||||
Less urgent items
|
Less urgent items
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
- Better documentation and cleanup of the interface. I am seeing a few
|
- Better documentation and cleanup of the interface. I am seeing a few
|
||||||
problems at the first glance which needs fixing:
|
problems at the first glance which needs fixing:
|
||||||
+ pcap_lookupnet makes little to no sense with protocols != IPv4
|
+ pcap_lookupnet makes little to no sense with protocols != IPv4
|
||||||
+ not very well suited for interactive programs (think ethereal). There
|
+ not very well suited for interactive programs (think ethereal). There
|
||||||
|
@ -1,13 +1,3 @@
|
|||||||
/* Define __P() macro, if necessary */
|
|
||||||
|
|
||||||
#ifndef __P
|
|
||||||
#if __STDC__
|
|
||||||
#define __P(protos) protos
|
|
||||||
#else
|
|
||||||
#define __P(protos) ()
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* inline foo */
|
/* inline foo */
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -16,29 +6,3 @@
|
|||||||
#define inline
|
#define inline
|
||||||
#endif
|
#endif
|
||||||
#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
|
|
||||||
|
@ -1,144 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#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
|
|
||||||
|
|
@ -1,349 +0,0 @@
|
|||||||
/*
|
|
||||||
* ++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_ */
|
|
@ -1,89 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 1999 WIDE Project.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the project nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#ifndef _BITTYPES_H
|
|
||||||
#define _BITTYPES_H
|
|
||||||
|
|
||||||
#ifndef HAVE_U_INT8_T
|
|
||||||
typedef unsigned char u_int8_t;
|
|
||||||
typedef signed char int8_t;
|
|
||||||
#endif /* HAVE_U_INT8_T */
|
|
||||||
|
|
||||||
#ifndef HAVE_U_INT16_T
|
|
||||||
typedef unsigned short u_int16_t;
|
|
||||||
typedef signed short int16_t;
|
|
||||||
#endif /* HAVE_U_INT16_T */
|
|
||||||
|
|
||||||
#ifndef HAVE_U_INT32_T
|
|
||||||
typedef unsigned int u_int32_t;
|
|
||||||
typedef signed int int32_t;
|
|
||||||
#endif /* HAVE_U_INT32_T */
|
|
||||||
|
|
||||||
#ifndef HAVE_U_INT64_T
|
|
||||||
#ifdef _MSC_EXTENSIONS
|
|
||||||
typedef unsigned _int64 u_int64_t;
|
|
||||||
typedef _int64 int64_t;
|
|
||||||
#else /* _MSC_EXTENSIONS */
|
|
||||||
typedef unsigned long long u_int64_t;
|
|
||||||
typedef long long int64_t;
|
|
||||||
#endif /* _MSC_EXTENSIONS */
|
|
||||||
#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 */
|
|
@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 1999 WIDE Project.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the project nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
#ifndef HAVE_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 */
|
|
@ -1,67 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
@ -1,161 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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__ */
|
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
#ifndef _NET_IF_H_
|
#ifndef _NET_IF_H_
|
||||||
#define _NET_IF_H_
|
#define _NET_IF_H_
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* <net/if.h> does not depend on <sys/time.h> on most other systems. This
|
* <net/if.h> does not depend on <sys/time.h> on most other systems. This
|
||||||
* helps userland compatability. (struct timeval ifi_lastchange)
|
* helps userland compatability. (struct timeval ifi_lastchange)
|
||||||
|
@ -1,164 +0,0 @@
|
|||||||
/*-
|
|
||||||
* 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_ */
|
|
@ -1,105 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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_ */
|
|
@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 1999 WIDE Project.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. Neither the name of the project nor the names of its contributors
|
|
||||||
* may be used to endorse or promote products derived from this software
|
|
||||||
* without specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
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 */
|
|
||||||
};
|
|
@ -1,168 +0,0 @@
|
|||||||
# 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 "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 "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
|
|
@ -1,29 +0,0 @@
|
|||||||
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>
|
|
||||||
{{{
|
|
||||||
}}}
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
28
Win32/Prj/wpcap.sln
Normal file
28
Win32/Prj/wpcap.sln
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2013
|
||||||
|
VisualStudioVersion = 12.0.40629.0
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wpcap", "wpcap.vcxproj", "{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}.Release|x64.Build.0 = Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
234
Win32/Prj/wpcap.vcxproj
Normal file
234
Win32/Prj/wpcap.vcxproj
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<SccProjectName />
|
||||||
|
<SccLocalPath />
|
||||||
|
<ProjectGuid>{8E92D840-6A36-452A-A13C-6E1BA5A2C5A9}</ProjectGuid>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.Cpp.UpgradeFromVC60.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<OutDir>.\Release\</OutDir>
|
||||||
|
<IntDir>.\Release\</IntDir>
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<IncludePath>../../../;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<IncludePath>../../../;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<OutDir>.\Debug\</OutDir>
|
||||||
|
<IntDir>.\Debug\</IntDir>
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<IncludePath>../../../;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<IncludePath>../../../;$(IncludePath)</IncludePath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<AdditionalIncludeDirectories>../../;../../lbl/;../../bpf/;../include/;../../../../common;../../../../dag/include;../../../../dag/drv/windows;../../../Win32-Extensions;./;Win32-Extensions;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>HAVE_VERSION_H;__STDC_VERSION__=199901L;HAVE_PACKET_IS_LOOPBACK_ADAPTER;NDEBUG;YY_NEVER_INTERACTIVE;_USRDLL;BUILDING_PCAP;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;HAVE_ADDRINFO;HAVE_REMOTE;WIN32;_U_=;YY_NO_UNISTD_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>ws2_32.lib;..\..\..\..\packetWin7\Dll\Project\Release No NetMon and AirPcap\Packet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>call ..\..\GenVersion.bat ..\..\VERSION ..\..\pcap_version.h.in ..\..\pcap_version.h
|
||||||
|
win_flex -Ppcap_ -7 --outfile=..\..\scanner.c --header-file=..\..\scanner.h ..\..\scanner.l
|
||||||
|
win_bison -ppcap_ --yacc --output=..\..\grammar.c --defines ..\..\grammar.y</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
||||||
|
<StringPooling>true</StringPooling>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<AdditionalIncludeDirectories>../../;../../lbl/;../../bpf/;../include/;../../../../common;../../../../dag/include;../../../../dag/drv/windows;../../../Win32-Extensions;./;Win32-Extensions;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>HAVE_VERSION_H;__STDC_VERSION__=199901L;HAVE_PACKET_IS_LOOPBACK_ADAPTER;NDEBUG;YY_NEVER_INTERACTIVE;_USRDLL;BUILDING_PCAP;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;HAVE_ADDRINFO;HAVE_REMOTE;WIN32;_U_=;YY_NO_UNISTD_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>ws2_32.lib;..\..\..\..\packetWin7\Dll\Project\x64\Release No NetMon and AirPcap\Packet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>call ..\..\GenVersion.bat ..\..\VERSION ..\..\pcap_version.h.in ..\..\pcap_version.h
|
||||||
|
win_flex -Ppcap_ -7 --outfile=..\..\scanner.c --header-file=..\..\scanner.h ..\..\scanner.l
|
||||||
|
win_bison -ppcap_ --yacc --output=..\..\grammar.c --defines ..\..\grammar.y</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
||||||
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<MinimalRebuild>true</MinimalRebuild>
|
||||||
|
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>../../;../../lbl/;../../bpf/;../include/;../../../../common;../../../../dag/include;../../../../dag/drv/windows;../../../Win32-Extensions;./;Win32-Extensions;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>HAVE_VERSION_H;__STDC_VERSION__=199901L;HAVE_PACKET_IS_LOOPBACK_ADAPTER;_DEBUG;YY_NEVER_INTERACTIVE;_USRDLL;BUILDING_PCAP;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;HAVE_ADDRINFO;HAVE_REMOTE;WIN32;_U_=;YY_NO_UNISTD_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>ws2_32.lib;..\..\..\..\packetWin7\Dll\Project\Release No NetMon and AirPcap\Packet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>call ..\..\GenVersion.bat ..\..\VERSION ..\..\pcap_version.h.in ..\..\pcap_version.h
|
||||||
|
win_flex -Ppcap_ -7 --outfile=..\..\scanner.c --header-file=..\..\scanner.h ..\..\scanner.l
|
||||||
|
win_bison -ppcap_ --yacc --output=..\..\grammar.c --defines ..\..\grammar.y</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
|
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
||||||
|
<FunctionLevelLinking>false</FunctionLevelLinking>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
|
<AdditionalIncludeDirectories>../../;../../lbl/;../../bpf/;../include/;../../../../common;../../../../dag/include;../../../../dag/drv/windows;../../../Win32-Extensions;./;Win32-Extensions;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>HAVE_VERSION_H;__STDC_VERSION__=199901L;HAVE_PACKET_IS_LOOPBACK_ADAPTER;_DEBUG;YY_NEVER_INTERACTIVE;_USRDLL;BUILDING_PCAP;HAVE_STRERROR;__STDC__;INET6;_WINDOWS;HAVE_ADDRINFO;HAVE_REMOTE;WIN32;_U_=;YY_NO_UNISTD_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
|
</ClCompile>
|
||||||
|
<ResourceCompile>
|
||||||
|
<Culture>0x0409</Culture>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ResourceCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>ws2_32.lib;..\..\..\..\packetWin7\Dll\Project\x64\Release No NetMon and AirPcap\Packet.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>call ..\..\GenVersion.bat ..\..\VERSION ..\..\pcap_version.h.in ..\..\pcap_version.h
|
||||||
|
win_flex -Ppcap_ -7 --outfile=..\..\scanner.c --header-file=..\..\scanner.h ..\..\scanner.l
|
||||||
|
win_bison -ppcap_ --yacc --output=..\..\grammar.c --defines ..\..\grammar.y</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\bpf\net\bpf_filter.c" />
|
||||||
|
<ClCompile Include="..\..\bpf_dump.c" />
|
||||||
|
<ClCompile Include="..\..\bpf_image.c" />
|
||||||
|
<ClCompile Include="..\..\etherent.c" />
|
||||||
|
<ClCompile Include="..\..\fad-helpers.c" />
|
||||||
|
<ClCompile Include="..\..\gencode.c" />
|
||||||
|
<ClCompile Include="..\..\grammar.c" />
|
||||||
|
<ClCompile Include="..\..\inet.c" />
|
||||||
|
<ClCompile Include="..\..\missing\win_snprintf.c" />
|
||||||
|
<ClCompile Include="..\..\nametoaddr.c" />
|
||||||
|
<ClCompile Include="..\..\optimize.c" />
|
||||||
|
<ClCompile Include="..\..\pcap-common.c" />
|
||||||
|
<ClCompile Include="..\..\pcap-new.c" />
|
||||||
|
<ClCompile Include="..\..\pcap-rpcap.c" />
|
||||||
|
<ClCompile Include="..\..\pcap-win32.c" />
|
||||||
|
<ClCompile Include="..\..\pcap.c" />
|
||||||
|
<ClCompile Include="..\..\savefile.c" />
|
||||||
|
<ClCompile Include="..\..\scanner.c" />
|
||||||
|
<ClCompile Include="..\..\sf-pcap-ng.c" />
|
||||||
|
<ClCompile Include="..\..\sf-pcap.c" />
|
||||||
|
<ClCompile Include="..\..\sockutils.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\pcap-common.h" />
|
||||||
|
<ClInclude Include="..\..\pcap-int.h" />
|
||||||
|
<ClInclude Include="..\..\pcap-rpcap.h" />
|
||||||
|
<ClInclude Include="..\..\pcap-stdinc.h" />
|
||||||
|
<ClInclude Include="..\..\pcap.h" />
|
||||||
|
<ClInclude Include="..\..\remote-ext.h" />
|
||||||
|
<ClInclude Include="..\..\sockutils.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\Win32-Extensions\version.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
107
Win32/Prj/wpcap.vcxproj.filters
Normal file
107
Win32/Prj/wpcap.vcxproj.filters
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\bpf_dump.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\bpf\net\bpf_filter.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\bpf_image.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\etherent.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\gencode.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\grammar.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\inet.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\nametoaddr.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\optimize.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\pcap.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\pcap-win32.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\savefile.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\scanner.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\sf-pcap.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\sf-pcap-ng.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\pcap-common.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\fad-helpers.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\missing\win_snprintf.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\pcap-new.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\pcap-rpcap.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\sockutils.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{c51dce5e-0da9-4e33-a235-d5c76c76485c}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{5ec9fd4b-10b5-4527-b249-56b53d844fb1}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{c90886f0-8973-436b-a7a1-b9e881544f9a}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\pcap-stdinc.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\pcap-common.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\pcap.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\pcap-int.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\pcap-rpcap.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\remote-ext.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\sockutils.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\Win32-Extensions\version.rc">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -1,83 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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 */
|
|
File diff suppressed because it is too large
Load Diff
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,119 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,125 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
118
aclocal.m4
vendored
118
aclocal.m4
vendored
@ -102,6 +102,13 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||||||
# -Werror forces warnings to be errors.
|
# -Werror forces warnings to be errors.
|
||||||
#
|
#
|
||||||
ac_lbl_cc_force_warning_errors=-Werror
|
ac_lbl_cc_force_warning_errors=-Werror
|
||||||
|
|
||||||
|
#
|
||||||
|
# Try to have the compiler default to hiding symbols,
|
||||||
|
# so that only symbols explicitly exported with
|
||||||
|
# PCAP_API will be visible outside (shared) libraries.
|
||||||
|
#
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -fvisibility=hidden)
|
||||||
else
|
else
|
||||||
$2="$$2 -I/usr/local/include"
|
$2="$$2 -I/usr/local/include"
|
||||||
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
||||||
@ -114,6 +121,13 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||||||
# of which use -Werror to force warnings to be errors.
|
# of which use -Werror to force warnings to be errors.
|
||||||
#
|
#
|
||||||
ac_lbl_cc_force_warning_errors=-Werror
|
ac_lbl_cc_force_warning_errors=-Werror
|
||||||
|
|
||||||
|
#
|
||||||
|
# Try to have the compiler default to hiding symbols,
|
||||||
|
# so that only symbols explicitly exported with
|
||||||
|
# PCAP_API will be visible outside (shared) libraries.
|
||||||
|
#
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -fvisibility=hidden)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
hpux*)
|
hpux*)
|
||||||
@ -188,6 +202,13 @@ AC_DEFUN(AC_LBL_C_INIT,
|
|||||||
# warnings to be treated as errors.
|
# warnings to be treated as errors.
|
||||||
#
|
#
|
||||||
ac_lbl_cc_force_warning_errors=-errwarn
|
ac_lbl_cc_force_warning_errors=-errwarn
|
||||||
|
|
||||||
|
#
|
||||||
|
# Try to have the compiler default to hiding symbols,
|
||||||
|
# so that only symbols explicitly exported with
|
||||||
|
# PCAP_API will be visible outside (shared) libraries.
|
||||||
|
#
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -xldscope=hidden)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
ultrix*)
|
ultrix*)
|
||||||
@ -231,7 +252,7 @@ AC_DEFUN(AC_LBL_CHECK_UNKNOWN_WARNING_OPTION_ERROR,
|
|||||||
# We're assuming this is clang, where
|
# We're assuming this is clang, where
|
||||||
# -Werror=unknown-warning-option is the appropriate
|
# -Werror=unknown-warning-option is the appropriate
|
||||||
# option to force the compiler to fail.
|
# option to force the compiler to fail.
|
||||||
#
|
#
|
||||||
ac_lbl_unknown_warning_option_error="-Werror=unknown-warning-option"
|
ac_lbl_unknown_warning_option_error="-Werror=unknown-warning-option"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -249,7 +270,18 @@ AC_DEFUN(AC_LBL_CHECK_COMPILER_OPT,
|
|||||||
[
|
[
|
||||||
AC_MSG_CHECKING([whether the compiler supports the $2 option])
|
AC_MSG_CHECKING([whether the compiler supports the $2 option])
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
CFLAGS="$CFLAGS $ac_lbl_unknown_warning_option_error $2"
|
if expr "x$2" : "x-W.*" >/dev/null
|
||||||
|
then
|
||||||
|
CFLAGS="$CFLAGS $ac_lbl_unknown_warning_option_error $2"
|
||||||
|
elif expr "x$2" : "x-f.*" >/dev/null
|
||||||
|
then
|
||||||
|
CFLAGS="$CFLAGS -Werror $2"
|
||||||
|
elif expr "x$2" : "x-m.*" >/dev/null
|
||||||
|
then
|
||||||
|
CFLAGS="$CFLAGS -Werror $2"
|
||||||
|
else
|
||||||
|
CFLAGS="$CFLAGS $2"
|
||||||
|
fi
|
||||||
AC_TRY_COMPILE(
|
AC_TRY_COMPILE(
|
||||||
[],
|
[],
|
||||||
[return 0],
|
[return 0],
|
||||||
@ -629,82 +661,6 @@ AC_DEFUN(AC_LBL_FIXINCLUDES,
|
|||||||
fi
|
fi
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check for flex, default to lex
|
|
||||||
dnl Require flex 2.4 or higher
|
|
||||||
dnl Check for bison, default to yacc
|
|
||||||
dnl Default to lex/yacc if both flex and bison are not available
|
|
||||||
dnl
|
|
||||||
dnl If we're using flex and bison, pass -P to flex and -p to bison
|
|
||||||
dnl to define a prefix string for the lexer and parser
|
|
||||||
dnl
|
|
||||||
dnl If we're not using flex and bison, don't pass those options
|
|
||||||
dnl (as they might not work - although if "lex" is a wrapper for
|
|
||||||
dnl Flex and "yacc" is a wrapper for Bison, they will work), and
|
|
||||||
dnl define NEED_YYPARSE_WRAPPER (we *CANNOT* use YYBISON to check
|
|
||||||
dnl whether the wrapper is needed, as some people apparently, for
|
|
||||||
dnl some unknown reason, choose to use --without-flex and
|
|
||||||
dnl --without-bison on systems that have Flex and Bison, which
|
|
||||||
dnl means that the "yacc" they end up using is a wrapper that
|
|
||||||
dnl runs "bison -y", and at least some versions of Bison define
|
|
||||||
dnl YYBISON even if run with "-y", so we end up not compiling
|
|
||||||
dnl the yyparse wrapper and end up with a libpcap that doesn't
|
|
||||||
dnl define pcap_parse())
|
|
||||||
dnl
|
|
||||||
dnl usage:
|
|
||||||
dnl
|
|
||||||
dnl AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
|
|
||||||
dnl
|
|
||||||
dnl results:
|
|
||||||
dnl
|
|
||||||
dnl $1 (lex set)
|
|
||||||
dnl $2 (yacc appended)
|
|
||||||
dnl $3 (optional flex and bison -P prefix)
|
|
||||||
dnl
|
|
||||||
AC_DEFUN(AC_LBL_LEX_AND_YACC,
|
|
||||||
[AC_ARG_WITH(flex, [ --without-flex don't use flex])
|
|
||||||
AC_ARG_WITH(bison, [ --without-bison don't use bison])
|
|
||||||
if test "$with_flex" = no ; then
|
|
||||||
$1=lex
|
|
||||||
else
|
|
||||||
AC_CHECK_PROGS($1, flex, lex)
|
|
||||||
fi
|
|
||||||
if test "$$1" = flex ; then
|
|
||||||
# The -V flag was added in 2.4
|
|
||||||
AC_MSG_CHECKING(for flex 2.4 or higher)
|
|
||||||
AC_CACHE_VAL(ac_cv_lbl_flex_v24,
|
|
||||||
if flex -V >/dev/null 2>&1; then
|
|
||||||
ac_cv_lbl_flex_v24=yes
|
|
||||||
else
|
|
||||||
ac_cv_lbl_flex_v24=no
|
|
||||||
fi)
|
|
||||||
AC_MSG_RESULT($ac_cv_lbl_flex_v24)
|
|
||||||
if test $ac_cv_lbl_flex_v24 = no ; then
|
|
||||||
s="2.4 or higher required"
|
|
||||||
AC_MSG_WARN(ignoring obsolete flex executable ($s))
|
|
||||||
$1=lex
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if test "$with_bison" = no ; then
|
|
||||||
$2=yacc
|
|
||||||
else
|
|
||||||
AC_CHECK_PROGS($2, bison, yacc)
|
|
||||||
fi
|
|
||||||
if test "$$2" = bison ; then
|
|
||||||
$2="$$2 -y"
|
|
||||||
fi
|
|
||||||
if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
|
|
||||||
AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
|
|
||||||
$1=lex
|
|
||||||
$2=yacc
|
|
||||||
fi
|
|
||||||
if test "$$1" = flex -a -n "$3" ; then
|
|
||||||
$1="$$1 -P$3"
|
|
||||||
$2="$$2 -p $3"
|
|
||||||
else
|
|
||||||
AC_DEFINE(NEED_YYPARSE_WRAPPER,1,[if we need a pcap_parse wrapper around yyparse])
|
|
||||||
fi])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Checks to see if union wait is used with WEXITSTATUS()
|
dnl Checks to see if union wait is used with WEXITSTATUS()
|
||||||
dnl
|
dnl
|
||||||
@ -970,8 +926,12 @@ AC_DEFUN(AC_LBL_DEVEL,
|
|||||||
if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then
|
if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then
|
||||||
AC_LBL_CHECK_UNKNOWN_WARNING_OPTION_ERROR()
|
AC_LBL_CHECK_UNKNOWN_WARNING_OPTION_ERROR()
|
||||||
AC_LBL_CHECK_COMPILER_OPT($1, -Wall)
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wall)
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wsign-compare)
|
||||||
AC_LBL_CHECK_COMPILER_OPT($1, -Wmissing-prototypes)
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wmissing-prototypes)
|
||||||
AC_LBL_CHECK_COMPILER_OPT($1, -Wstrict-prototypes)
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wstrict-prototypes)
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wshadow)
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wdeclaration-after-statement)
|
||||||
|
AC_LBL_CHECK_COMPILER_OPT($1, -Wused-but-marked-unused)
|
||||||
fi
|
fi
|
||||||
AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT()
|
AC_LBL_CHECK_DEPENDENCY_GENERATION_OPT()
|
||||||
#
|
#
|
||||||
@ -1274,7 +1234,7 @@ dnl
|
|||||||
dnl AC_LBL_DL_PASSIVE_REQ_T
|
dnl AC_LBL_DL_PASSIVE_REQ_T
|
||||||
dnl
|
dnl
|
||||||
dnl results:
|
dnl results:
|
||||||
dnl
|
dnl
|
||||||
dnl HAVE_DLPI_PASSIVE (defined)
|
dnl HAVE_DLPI_PASSIVE (defined)
|
||||||
dnl
|
dnl
|
||||||
AC_DEFUN(AC_LBL_DL_PASSIVE_REQ_T,
|
AC_DEFUN(AC_LBL_DL_PASSIVE_REQ_T,
|
||||||
|
@ -42,11 +42,11 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
|
|
||||||
#include <pcap-stdinc.h>
|
#include <pcap-stdinc.h>
|
||||||
|
|
||||||
#else /* WIN32 */
|
#else /* _WIN32 */
|
||||||
|
|
||||||
#if HAVE_INTTYPES_H
|
#if HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
@ -73,7 +73,7 @@
|
|||||||
# define MLEN(m) ((m)->m_len)
|
# define MLEN(m) ((m)->m_len)
|
||||||
#endif /* defined(__hpux) || SOLARIS */
|
#endif /* defined(__hpux) || SOLARIS */
|
||||||
|
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include <pcap/bpf.h>
|
#include <pcap/bpf.h>
|
||||||
|
|
||||||
@ -99,7 +99,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LBL_ALIGN
|
#ifndef LBL_ALIGN
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -195,23 +195,41 @@ m_xhalf(m, k, err)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/if_packet.h>
|
||||||
|
#include <linux/filter.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum {
|
||||||
|
BPF_S_ANC_NONE,
|
||||||
|
BPF_S_ANC_VLAN_TAG,
|
||||||
|
BPF_S_ANC_VLAN_TAG_PRESENT,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Execute the filter program starting at pc on the packet p
|
* Execute the filter program starting at pc on the packet p
|
||||||
* wirelen is the length of the original packet
|
* wirelen is the length of the original packet
|
||||||
* buflen is the amount of data present
|
* buflen is the amount of data present
|
||||||
|
* aux_data is auxiliary data, currently used only when interpreting
|
||||||
|
* filters intended for the Linux kernel in cases where the kernel
|
||||||
|
* rejects the filter; it contains VLAN tag information
|
||||||
* For the kernel, p is assumed to be a pointer to an mbuf if buflen is 0,
|
* 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.
|
* in all other cases, p is a pointer to a buffer and buflen is its size.
|
||||||
|
*
|
||||||
|
* Thanks to Ani Sinha <ani@arista.com> for providing initial implementation
|
||||||
*/
|
*/
|
||||||
u_int
|
u_int
|
||||||
bpf_filter(pc, p, wirelen, buflen)
|
bpf_filter_with_aux_data(pc, p, wirelen, buflen, aux_data)
|
||||||
register const struct bpf_insn *pc;
|
register const struct bpf_insn *pc;
|
||||||
register const u_char *p;
|
register const u_char *p;
|
||||||
u_int wirelen;
|
u_int wirelen;
|
||||||
register u_int buflen;
|
register u_int buflen;
|
||||||
|
register const struct bpf_aux_data *aux_data;
|
||||||
{
|
{
|
||||||
register u_int32 A, X;
|
register u_int32 A, X;
|
||||||
register int k;
|
register bpf_u_int32 k;
|
||||||
int32 mem[BPF_MEMWORDS];
|
u_int32 mem[BPF_MEMWORDS];
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
struct mbuf *m, *n;
|
struct mbuf *m, *n;
|
||||||
int merr, len;
|
int merr, len;
|
||||||
@ -250,7 +268,7 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
|
|
||||||
case BPF_LD|BPF_W|BPF_ABS:
|
case BPF_LD|BPF_W|BPF_ABS:
|
||||||
k = pc->k;
|
k = pc->k;
|
||||||
if (k + sizeof(int32) > buflen) {
|
if (k > buflen || sizeof(int32_t) > buflen - k) {
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
@ -267,7 +285,7 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
|
|
||||||
case BPF_LD|BPF_H|BPF_ABS:
|
case BPF_LD|BPF_H|BPF_ABS:
|
||||||
k = pc->k;
|
k = pc->k;
|
||||||
if (k + sizeof(short) > buflen) {
|
if (k > buflen || sizeof(int16_t) > buflen - k) {
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
@ -283,22 +301,50 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
case BPF_LD|BPF_B|BPF_ABS:
|
case BPF_LD|BPF_B|BPF_ABS:
|
||||||
k = pc->k;
|
{
|
||||||
if (k >= buflen) {
|
#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT)
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
int code = BPF_S_ANC_NONE;
|
||||||
if (m == NULL)
|
#define ANCILLARY(CODE) case SKF_AD_OFF + SKF_AD_##CODE: \
|
||||||
return 0;
|
code = BPF_S_ANC_##CODE; \
|
||||||
n = m;
|
if (!aux_data) \
|
||||||
MINDEX(len, n, k);
|
return 0; \
|
||||||
A = mtod(n, u_char *)[k];
|
break;
|
||||||
continue;
|
|
||||||
#else
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
A = p[k];
|
|
||||||
continue;
|
|
||||||
|
|
||||||
|
switch (pc->k) {
|
||||||
|
ANCILLARY(VLAN_TAG);
|
||||||
|
ANCILLARY(VLAN_TAG_PRESENT);
|
||||||
|
default :
|
||||||
|
#endif
|
||||||
|
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];
|
||||||
|
#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT)
|
||||||
|
}
|
||||||
|
switch (code) {
|
||||||
|
case BPF_S_ANC_VLAN_TAG:
|
||||||
|
if (aux_data)
|
||||||
|
A = aux_data->vlan_tag;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_S_ANC_VLAN_TAG_PRESENT:
|
||||||
|
if (aux_data)
|
||||||
|
A = aux_data->vlan_tag_present;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
continue;
|
||||||
|
}
|
||||||
case BPF_LD|BPF_W|BPF_LEN:
|
case BPF_LD|BPF_W|BPF_LEN:
|
||||||
A = wirelen;
|
A = wirelen;
|
||||||
continue;
|
continue;
|
||||||
@ -309,7 +355,8 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
|
|
||||||
case BPF_LD|BPF_W|BPF_IND:
|
case BPF_LD|BPF_W|BPF_IND:
|
||||||
k = X + pc->k;
|
k = X + pc->k;
|
||||||
if (k + sizeof(int32) > buflen) {
|
if (pc->k > buflen || X > buflen - pc->k ||
|
||||||
|
sizeof(int32_t) > buflen - k) {
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
@ -326,7 +373,8 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
|
|
||||||
case BPF_LD|BPF_H|BPF_IND:
|
case BPF_LD|BPF_H|BPF_IND:
|
||||||
k = X + pc->k;
|
k = X + pc->k;
|
||||||
if (k + sizeof(short) > buflen) {
|
if (X > buflen || pc->k > buflen - X ||
|
||||||
|
sizeof(int16_t) > buflen - k) {
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
@ -343,7 +391,7 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
|
|
||||||
case BPF_LD|BPF_B|BPF_IND:
|
case BPF_LD|BPF_B|BPF_IND:
|
||||||
k = X + pc->k;
|
k = X + pc->k;
|
||||||
if (k >= buflen) {
|
if (pc->k >= buflen || X >= buflen - pc->k) {
|
||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
@ -531,7 +579,12 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
case BPF_ALU|BPF_NEG:
|
case BPF_ALU|BPF_NEG:
|
||||||
A = -A;
|
/*
|
||||||
|
* Most BPF arithmetic is unsigned, but negation
|
||||||
|
* can't be unsigned; throw some casts to
|
||||||
|
* specify what we're trying to do.
|
||||||
|
*/
|
||||||
|
A = (u_int32)(-(int32)A);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case BPF_MISC|BPF_TAX:
|
case BPF_MISC|BPF_TAX:
|
||||||
@ -545,6 +598,17 @@ bpf_filter(pc, p, wirelen, buflen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u_int
|
||||||
|
bpf_filter(pc, p, wirelen, buflen)
|
||||||
|
register const struct bpf_insn *pc;
|
||||||
|
register const u_char *p;
|
||||||
|
u_int wirelen;
|
||||||
|
register u_int buflen;
|
||||||
|
{
|
||||||
|
return bpf_filter_with_aux_data(pc, p, wirelen, buflen, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return true if the 'fcode' is a valid filter program.
|
* Return true if the 'fcode' is a valid filter program.
|
||||||
* The constraints are that each jump be forward and to a valid
|
* The constraints are that each jump be forward and to a valid
|
||||||
@ -574,7 +638,7 @@ bpf_validate(f, len)
|
|||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < len; ++i) {
|
for (i = 0; i < (u_int)len; ++i) {
|
||||||
p = &f[i];
|
p = &f[i];
|
||||||
switch (BPF_CLASS(p->code)) {
|
switch (BPF_CLASS(p->code)) {
|
||||||
/*
|
/*
|
||||||
@ -675,7 +739,7 @@ bpf_validate(f, len)
|
|||||||
#if defined(KERNEL) || defined(_KERNEL)
|
#if defined(KERNEL) || defined(_KERNEL)
|
||||||
if (from + p->k < from || from + p->k >= len)
|
if (from + p->k < from || from + p->k >= len)
|
||||||
#else
|
#else
|
||||||
if (from + p->k >= len)
|
if (from + p->k >= (u_int)len)
|
||||||
#endif
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
@ -683,7 +747,7 @@ bpf_validate(f, len)
|
|||||||
case BPF_JGT:
|
case BPF_JGT:
|
||||||
case BPF_JGE:
|
case BPF_JGE:
|
||||||
case BPF_JSET:
|
case BPF_JSET:
|
||||||
if (from + p->jt >= len || from + p->jf >= len)
|
if (from + p->jt >= (u_int)len || from + p->jf >= (u_int)len)
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -51,7 +51,10 @@ bpf_dump(const struct bpf_program *p, int option)
|
|||||||
for (i = 0; i < n; ++insn, ++i) {
|
for (i = 0; i < n; ++insn, ++i) {
|
||||||
#ifdef BDEBUG
|
#ifdef BDEBUG
|
||||||
extern int bids[];
|
extern int bids[];
|
||||||
printf(bids[i] > 0 ? "[%02d]" : " -- ", bids[i] - 1);
|
if (bids[i] > 0)
|
||||||
|
printf("[%02d]", bids[i] - 1);
|
||||||
|
else
|
||||||
|
printf(" -- ");
|
||||||
#endif
|
#endif
|
||||||
puts(bpf_image(insn, i));
|
puts(bpf_image(insn, i));
|
||||||
}
|
}
|
||||||
|
12
bpf_image.c
12
bpf_image.c
@ -23,9 +23,9 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <pcap-stdinc.h>
|
#include <pcap-stdinc.h>
|
||||||
#else /* WIN32 */
|
#else /* _WIN32 */
|
||||||
#if HAVE_INTTYPES_H
|
#if HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#elif HAVE_STDINT_H
|
#elif HAVE_STDINT_H
|
||||||
@ -35,7 +35,7 @@
|
|||||||
#include <sys/bitypes.h>
|
#include <sys/bitypes.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@ -306,13 +306,13 @@ bpf_image(p, n)
|
|||||||
fmt = "";
|
fmt = "";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
(void)snprintf(operand, sizeof operand, fmt, v);
|
(void)pcap_snprintf(operand, sizeof operand, fmt, v);
|
||||||
if (BPF_CLASS(p->code) == BPF_JMP && BPF_OP(p->code) != BPF_JA) {
|
if (BPF_CLASS(p->code) == BPF_JMP && BPF_OP(p->code) != BPF_JA) {
|
||||||
(void)snprintf(image, sizeof image,
|
(void)pcap_snprintf(image, sizeof image,
|
||||||
"(%03d) %-8s %-16s jt %d\tjf %d",
|
"(%03d) %-8s %-16s jt %d\tjf %d",
|
||||||
n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
|
n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(image, sizeof image,
|
(void)pcap_snprintf(image, sizeof image,
|
||||||
"(%03d) %-8s %s",
|
"(%03d) %-8s %s",
|
||||||
n, op, operand);
|
n, op, operand);
|
||||||
}
|
}
|
||||||
|
55
cmake/preconfigure.cmake
Normal file
55
cmake/preconfigure.cmake
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
if( NOT LIBPCAP_PRECONFIGURED )
|
||||||
|
set( LIBPCAP_PRECONFIGURED TRUE )
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
# Parameters
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
option (USE_STATIC_RT "Use static Runtime" ON)
|
||||||
|
|
||||||
|
######################################
|
||||||
|
# Project setings
|
||||||
|
######################################
|
||||||
|
|
||||||
|
add_definitions( -DBUILDING_PCAP )
|
||||||
|
|
||||||
|
if( MSVC )
|
||||||
|
add_definitions( -D__STDC__ )
|
||||||
|
add_definitions( -D_CRT_SECURE_NO_WARNINGS )
|
||||||
|
add_definitions( "-D_U_=" )
|
||||||
|
elseif( CMAKE_COMPILER_IS_GNUCXX )
|
||||||
|
add_definitions( "-D_U_=__attribute__((unused))" )
|
||||||
|
else(MSVC)
|
||||||
|
add_definitions( "-D_U_=" )
|
||||||
|
endif( MSVC )
|
||||||
|
|
||||||
|
if (USE_STATIC_RT)
|
||||||
|
MESSAGE( STATUS "Use STATIC runtime" )
|
||||||
|
|
||||||
|
if( MSVC )
|
||||||
|
set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
|
||||||
|
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
|
||||||
|
|
||||||
|
set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MT")
|
||||||
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MT")
|
||||||
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
|
||||||
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
|
||||||
|
endif( MSVC )
|
||||||
|
else (USE_STATIC_RT)
|
||||||
|
MESSAGE( STATUS "Use DYNAMIC runtime" )
|
||||||
|
|
||||||
|
if( MSVC )
|
||||||
|
set (CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MD")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MD")
|
||||||
|
set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
|
||||||
|
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd")
|
||||||
|
|
||||||
|
set (CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /MD")
|
||||||
|
set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /MD")
|
||||||
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD")
|
||||||
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd")
|
||||||
|
endif( MSVC )
|
||||||
|
endif (USE_STATIC_RT)
|
||||||
|
endif( NOT LIBPCAP_PRECONFIGURED )
|
345
cmakeconfig.h.in
Normal file
345
cmakeconfig.h.in
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
/* cmakeconfig.h.in */
|
||||||
|
|
||||||
|
/* Enable optimizer debugging */
|
||||||
|
#cmakedefine BDEBUG 1
|
||||||
|
|
||||||
|
/* define if you have a cloning BPF device */
|
||||||
|
#cmakedefine HAVE_CLONING_BPF 1
|
||||||
|
|
||||||
|
/* define if you have the DAG API */
|
||||||
|
#cmakedefine HAVE_DAG_API 1
|
||||||
|
|
||||||
|
/* define if you have dag_get_erf_types() */
|
||||||
|
#cmakedefine HAVE_DAG_GET_ERF_TYPES 1
|
||||||
|
|
||||||
|
/* define if you have dag_get_stream_erf_types() */
|
||||||
|
#cmakedefine HAVE_DAG_GET_STREAM_ERF_TYPES 1
|
||||||
|
|
||||||
|
/* define if you have streams capable DAG API */
|
||||||
|
#cmakedefine HAVE_DAG_STREAMS_API 1
|
||||||
|
|
||||||
|
/* define if you have vdag_set_device_info() */
|
||||||
|
#cmakedefine HAVE_DAG_VDAG 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the declaration of `ether_hostton', and to 0 if you
|
||||||
|
don't. */
|
||||||
|
#cmakedefine HAVE_DECL_ETHER_HOSTTON 1
|
||||||
|
|
||||||
|
/* define if you have a /dev/dlpi */
|
||||||
|
#cmakedefine HAVE_DEV_DLPI 1
|
||||||
|
|
||||||
|
/* if passive_req_t primitive exists */
|
||||||
|
#cmakedefine HAVE_DLPI_PASSIVE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `ether_hostton' function. */
|
||||||
|
#cmakedefine HAVE_ETHER_HOSTTON 1
|
||||||
|
|
||||||
|
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
||||||
|
#cmakedefine HAVE_FSEEKO 1
|
||||||
|
|
||||||
|
/* on HP-UX 10.20 or later */
|
||||||
|
#cmakedefine HAVE_HPUX10_20_OR_LATER 1
|
||||||
|
|
||||||
|
/* on HP-UX 9.x */
|
||||||
|
#cmakedefine HAVE_HPUX9 1
|
||||||
|
|
||||||
|
/* if ppa_info_t_dl_module_id exists */
|
||||||
|
#cmakedefine HAVE_HP_PPA_INFO_T_DL_MODULE_ID_1 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#cmakedefine HAVE_INTTYPES_H 1
|
||||||
|
|
||||||
|
/* if libdlpi exists */
|
||||||
|
#cmakedefine HAVE_LIBDLPI 1
|
||||||
|
|
||||||
|
/* if libnl exists */
|
||||||
|
#cmakedefine HAVE_LIBNL 1
|
||||||
|
|
||||||
|
/* if libnl exists and is version 2.x */
|
||||||
|
#cmakedefine HAVE_LIBNL_2_x 1
|
||||||
|
|
||||||
|
/* if libnl exists and is version 3.x */
|
||||||
|
#cmakedefine HAVE_LIBNL_3_x 1
|
||||||
|
|
||||||
|
/* libnl has NLE_FAILURE */
|
||||||
|
#cmakedefine HAVE_LIBNL_NLE 1
|
||||||
|
|
||||||
|
/* libnl has new-style socket api */
|
||||||
|
#cmakedefine HAVE_LIBNL_SOCKETS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <limits.h> header file. */
|
||||||
|
#cmakedefine HAVE_LIMITS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/compiler.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_COMPILER_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/ethtool.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_ETHTOOL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/if_bonding.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_IF_BONDING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/if_packet.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_IF_PACKET_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/net_tstamp.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_NET_TSTAMP_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/sockios.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_SOCKIOS_H 1
|
||||||
|
|
||||||
|
/* if tp_vlan_tci exists */
|
||||||
|
#cmakedefine HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/types.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/usbdevice_fs.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_USBDEVICE_FS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/wireless.h> header file. */
|
||||||
|
#cmakedefine HAVE_LINUX_WIRELESS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#cmakedefine HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <netinet/ether.h> header file. */
|
||||||
|
#cmakedefine HAVE_NETINET_ETHER_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <netinet/if_ether.h> header file. */
|
||||||
|
#cmakedefine HAVE_NETINET_IF_ETHER_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <netpacket/if_packet.h> header file. */
|
||||||
|
#cmakedefine HAVE_NETPACKET_IF_PACKET_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <netpacket/packet.h> header file. */
|
||||||
|
#cmakedefine HAVE_NETPACKET_PACKET_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <net/if_media.h> header file. */
|
||||||
|
#cmakedefine HAVE_NET_IF_MEDIA_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <net/pfvar.h> header file. */
|
||||||
|
#cmakedefine HAVE_NET_PFVAR_H 1
|
||||||
|
|
||||||
|
/* if there's an os_proto.h for this platform, to use additional prototypes */
|
||||||
|
#cmakedefine HAVE_OS_PROTO_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if remote packet capture is to be supported */
|
||||||
|
#cmakedefine HAVE_REMOTE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <paths.h> header file. */
|
||||||
|
#cmakedefine HAVE_PATHS_H 1
|
||||||
|
|
||||||
|
/* define if net/pfvar.h defines PF_NAT through PF_NORDR */
|
||||||
|
#cmakedefine HAVE_PF_NAT_THROUGH_PF_NORDR 1
|
||||||
|
|
||||||
|
/* define if you have the Septel API */
|
||||||
|
#cmakedefine HAVE_SEPTEL_API 1
|
||||||
|
|
||||||
|
/* define if you have the Myricom SNF API */
|
||||||
|
#cmakedefine HAVE_SNF_API 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
|
#cmakedefine HAVE_SNPRINTF 1
|
||||||
|
|
||||||
|
/* if struct sockaddr has the sa_len member */
|
||||||
|
#cmakedefine HAVE_SOCKADDR_SA_LEN 1
|
||||||
|
|
||||||
|
/* if struct sockaddr_storage exists */
|
||||||
|
#cmakedefine HAVE_SOCKADDR_STORAGE 1
|
||||||
|
|
||||||
|
/* define if socklen_t is defined */
|
||||||
|
#cmakedefine HAVE_SOCKLEN_T 1
|
||||||
|
|
||||||
|
/* On solaris */
|
||||||
|
#cmakedefine HAVE_SOLARIS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#cmakedefine HAVE_STDINT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#cmakedefine HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strerror' function. */
|
||||||
|
#cmakedefine HAVE_STRERROR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strlcpy' function. */
|
||||||
|
#cmakedefine HAVE_STRLCPY 1
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct BPF_TIMEVAL'. */
|
||||||
|
#cmakedefine HAVE_STRUCT_BPF_TIMEVAL 1
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct ether_addr'. */
|
||||||
|
#cmakedefine HAVE_STRUCT_ETHER_ADDR 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/bitypes.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_BITYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/bufmod.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_BUFMOD_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/dlpi_ext.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_DLPI_EXT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ioccom.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_IOCCOM_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/sockio.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_SOCKIO_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#cmakedefine HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* define if you have the TurboCap API */
|
||||||
|
#cmakedefine HAVE_TC_API 1
|
||||||
|
|
||||||
|
/* if if_packet.h has tpacket_stats defined */
|
||||||
|
#cmakedefine HAVE_TPACKET_STATS 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#cmakedefine HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* if struct usbdevfs_ctrltransfer has bRequestType */
|
||||||
|
#cmakedefine HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
|
#cmakedefine HAVE_VSNPRINTF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `PacketIsLoopbackAdapter' function. */
|
||||||
|
#cmakedefine HAVE_PACKET_IS_LOOPBACK_ADAPTER 1
|
||||||
|
|
||||||
|
/* define if the system supports zerocopy BPF */
|
||||||
|
#cmakedefine HAVE_ZEROCOPY_BPF 1
|
||||||
|
|
||||||
|
/* define if your compiler has __attribute__ */
|
||||||
|
#cmakedefine HAVE___ATTRIBUTE__ 1
|
||||||
|
|
||||||
|
/* IPv6 */
|
||||||
|
#cmakedefine INET6 1
|
||||||
|
|
||||||
|
/* if unaligned access fails */
|
||||||
|
#cmakedefine LBL_ALIGN 1
|
||||||
|
|
||||||
|
/* path for device for USB sniffing */
|
||||||
|
#cmakedefine LINUX_USB_MON_DEV 1
|
||||||
|
|
||||||
|
/* if we need a pcap_parse wrapper around yyparse */
|
||||||
|
#cmakedefine NEED_YYPARSE_WRAPPER 1
|
||||||
|
|
||||||
|
/* Define to 1 if netinet/ether.h declares `ether_hostton' */
|
||||||
|
#cmakedefine NETINET_ETHER_H_DECLARES_ETHER_HOSTTON 1
|
||||||
|
|
||||||
|
/* Define to 1 if netinet/if_ether.h declares `ether_hostton' */
|
||||||
|
#cmakedefine NETINET_IF_ETHER_H_DECLARES_ETHER_HOSTTON 1
|
||||||
|
|
||||||
|
/* do not use protochain */
|
||||||
|
#cmakedefine NO_PROTOCHAIN 1
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#cmakedefine PACKAGE_BUGREPORT 1
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#cmakedefine PACKAGE_NAME 1
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#cmakedefine PACKAGE_STRING 1
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#cmakedefine PACKAGE_TARNAME 1
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#cmakedefine PACKAGE_URL 1
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#cmakedefine PACKAGE_VERSION 1
|
||||||
|
|
||||||
|
/* /dev/dlpi directory */
|
||||||
|
#cmakedefine PCAP_DEV_PREFIX 1
|
||||||
|
|
||||||
|
/* target host supports Bluetooth sniffing */
|
||||||
|
#cmakedefine PCAP_SUPPORT_BT 1
|
||||||
|
|
||||||
|
/* target host supports Bluetooth Monitor */
|
||||||
|
#cmakedefine PCAP_SUPPORT_BT_MONITOR 1
|
||||||
|
|
||||||
|
/* support D-Bus sniffing */
|
||||||
|
#cmakedefine PCAP_SUPPORT_DBUS 1
|
||||||
|
|
||||||
|
/* target host supports netfilter sniffing */
|
||||||
|
#cmakedefine PCAP_SUPPORT_NETFILTER 1
|
||||||
|
|
||||||
|
/* use Linux packet ring capture if available */
|
||||||
|
#cmakedefine PCAP_SUPPORT_PACKET_RING 1
|
||||||
|
|
||||||
|
/* target host supports USB sniffing */
|
||||||
|
#cmakedefine PCAP_SUPPORT_USB 1
|
||||||
|
|
||||||
|
/* include ACN support */
|
||||||
|
#cmakedefine SITA 1
|
||||||
|
|
||||||
|
/* if struct sockaddr_hci has hci_channel member */
|
||||||
|
#cmakedefine SOCKADDR_HCI_HAS_HCI_CHANNEL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#cmakedefine STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Enable parser debugging */
|
||||||
|
#cmakedefine YYDEBUG 1
|
||||||
|
|
||||||
|
/* Enable large inode numbers on Mac OS X 10.5. */
|
||||||
|
#ifndef _DARWIN_USE_64_BIT_INODE
|
||||||
|
# define _DARWIN_USE_64_BIT_INODE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
#cmakedefine _FILE_OFFSET_BITS 1
|
||||||
|
|
||||||
|
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
||||||
|
#cmakedefine _LARGEFILE_SOURCE 1
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
#cmakedefine _LARGE_FILES 1
|
||||||
|
|
||||||
|
/* define on AIX to get certain functions */
|
||||||
|
#cmakedefine _SUN 1
|
||||||
|
|
||||||
|
/* define if your compiler allows __attribute__((format)) without a warning */
|
||||||
|
#cmakedefine __ATTRIBUTE___FORMAT_OK 1
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* to handle Ultrix compilers that don't support const in prototypes */
|
||||||
|
#cmakedefine const 1
|
||||||
|
|
||||||
|
/* Define as token for inline if inlining supported */
|
||||||
|
#cmakedefine inline 1
|
||||||
|
|
||||||
|
/* Define to `short' if int16_t not defined. */
|
||||||
|
#cmakedefine int16_t 1
|
||||||
|
|
||||||
|
/* Define to `int' if int32_t not defined. */
|
||||||
|
#cmakedefine int32_t 1
|
||||||
|
|
||||||
|
/* Define to `long long' if int64_t not defined. */
|
||||||
|
#cmakedefine int64_t 1
|
||||||
|
|
||||||
|
/* Define to `signed char' if int8_t not defined. */
|
||||||
|
#cmakedefine int8_t 1
|
||||||
|
|
||||||
|
/* on sinix */
|
||||||
|
#cmakedefine sinix 1
|
||||||
|
|
||||||
|
/* Define to `unsigned short' if u_int16_t not defined. */
|
||||||
|
#cmakedefine u_int16_t 1
|
||||||
|
|
||||||
|
/* Define to `unsigned int' if u_int32_t not defined. */
|
||||||
|
#cmakedefine u_int32_t 1
|
||||||
|
|
||||||
|
/* Define to `unsigned long long' if u_int64_t not defined. */
|
||||||
|
#cmakedefine u_int64_t 1
|
||||||
|
|
||||||
|
/* Define to `unsigned char' if u_int8_t not defined. */
|
||||||
|
#cmakedefine u_int8_t 1
|
||||||
|
#endif
|
373
config.guess
vendored
373
config.guess
vendored
@ -1,14 +1,12 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright 1992-2015 Free Software Foundation, Inc.
|
||||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
|
||||||
# 2011, 2012 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
timestamp='2012-02-10'
|
timestamp='2015-02-23'
|
||||||
|
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
@ -22,19 +20,17 @@ timestamp='2012-02-10'
|
|||||||
# As a special exception to the GNU General Public License, if you
|
# As a special exception to the GNU General Public License, if you
|
||||||
# distribute this file as part of a program that contains a
|
# distribute this file as part of a program that contains a
|
||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that
|
||||||
|
# program. This Exception is an additional permission under section 7
|
||||||
|
# of the GNU General Public License, version 3 ("GPLv3").
|
||||||
# Originally written by Per Bothner. Please send patches (context
|
|
||||||
# diff format) to <config-patches@gnu.org> and include a ChangeLog
|
|
||||||
# entry.
|
|
||||||
#
|
#
|
||||||
# This script attempts to guess a canonical system name similar to
|
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
|
||||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
|
||||||
# exits with 0. Otherwise, it exits with 1.
|
|
||||||
#
|
#
|
||||||
# You can get the latest version of this script from:
|
# You can get the latest version of this script from:
|
||||||
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
|
||||||
|
#
|
||||||
|
# Please send patches to <config-patches@gnu.org>.
|
||||||
|
|
||||||
|
|
||||||
me=`echo "$0" | sed -e 's,.*/,,'`
|
me=`echo "$0" | sed -e 's,.*/,,'`
|
||||||
|
|
||||||
@ -54,9 +50,7 @@ version="\
|
|||||||
GNU config.guess ($timestamp)
|
GNU config.guess ($timestamp)
|
||||||
|
|
||||||
Originally written by Per Bothner.
|
Originally written by Per Bothner.
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
Copyright 1992-2015 Free Software Foundation, Inc.
|
||||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
||||||
Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
@ -138,6 +132,27 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
|||||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||||
|
|
||||||
|
case "${UNAME_SYSTEM}" in
|
||||||
|
Linux|GNU|GNU/*)
|
||||||
|
# If the system lacks a compiler, then just pick glibc.
|
||||||
|
# We could probably try harder.
|
||||||
|
LIBC=gnu
|
||||||
|
|
||||||
|
eval $set_cc_for_build
|
||||||
|
cat <<-EOF > $dummy.c
|
||||||
|
#include <features.h>
|
||||||
|
#if defined(__UCLIBC__)
|
||||||
|
LIBC=uclibc
|
||||||
|
#elif defined(__dietlibc__)
|
||||||
|
LIBC=dietlibc
|
||||||
|
#else
|
||||||
|
LIBC=gnu
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Note: order is significant - the case branches are not exclusive.
|
# Note: order is significant - the case branches are not exclusive.
|
||||||
|
|
||||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
@ -153,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# Note: NetBSD doesn't particularly care about the vendor
|
# Note: NetBSD doesn't particularly care about the vendor
|
||||||
# portion of the name. We always set it to "unknown".
|
# portion of the name. We always set it to "unknown".
|
||||||
sysctl="sysctl -n hw.machine_arch"
|
sysctl="sysctl -n hw.machine_arch"
|
||||||
UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
|
UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
|
||||||
/usr/sbin/$sysctl 2>/dev/null || echo unknown)`
|
/sbin/$sysctl 2>/dev/null || \
|
||||||
|
/usr/sbin/$sysctl 2>/dev/null || \
|
||||||
|
echo unknown)`
|
||||||
case "${UNAME_MACHINE_ARCH}" in
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
armeb) machine=armeb-unknown ;;
|
armeb) machine=armeb-unknown ;;
|
||||||
arm*) machine=arm-unknown ;;
|
arm*) machine=arm-unknown ;;
|
||||||
sh3el) machine=shl-unknown ;;
|
sh3el) machine=shl-unknown ;;
|
||||||
sh3eb) machine=sh-unknown ;;
|
sh3eb) machine=sh-unknown ;;
|
||||||
sh5el) machine=sh5le-unknown ;;
|
sh5el) machine=sh5le-unknown ;;
|
||||||
|
earmv*)
|
||||||
|
arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
|
||||||
|
endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
|
||||||
|
machine=${arch}${endian}-unknown
|
||||||
|
;;
|
||||||
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
*) machine=${UNAME_MACHINE_ARCH}-unknown ;;
|
||||||
esac
|
esac
|
||||||
# The Operating System including object format, if it has switched
|
# The Operating System including object format, if it has switched
|
||||||
# to ELF recently, or will in the future.
|
# to ELF recently, or will in the future.
|
||||||
case "${UNAME_MACHINE_ARCH}" in
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep -q __ELF__
|
| grep -q __ELF__
|
||||||
@ -182,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
os=netbsd
|
os=netbsd
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
# Determine ABI tags.
|
||||||
|
case "${UNAME_MACHINE_ARCH}" in
|
||||||
|
earm*)
|
||||||
|
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
|
||||||
|
abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
# The OS release
|
# The OS release
|
||||||
# Debian GNU/NetBSD machines have a different userland, and
|
# Debian GNU/NetBSD machines have a different userland, and
|
||||||
# thus, need a distinct triplet. However, they do not need
|
# thus, need a distinct triplet. However, they do not need
|
||||||
@ -198,7 +227,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||||
# contains redundant information, the shorter form:
|
# contains redundant information, the shorter form:
|
||||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||||
echo "${machine}-${os}${release}"
|
echo "${machine}-${os}${release}${abi}"
|
||||||
|
exit ;;
|
||||||
|
*:Bitrig:*:*)
|
||||||
|
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
|
||||||
|
echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
*:OpenBSD:*:*)
|
*:OpenBSD:*:*)
|
||||||
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
|
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
|
||||||
@ -302,7 +335,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
arm:riscos:*:*|arm:RISCOS:*:*)
|
arm*:riscos:*:*|arm*:RISCOS:*:*)
|
||||||
echo arm-unknown-riscos
|
echo arm-unknown-riscos
|
||||||
exit ;;
|
exit ;;
|
||||||
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
|
||||||
@ -560,8 +593,9 @@ EOF
|
|||||||
else
|
else
|
||||||
IBM_ARCH=powerpc
|
IBM_ARCH=powerpc
|
||||||
fi
|
fi
|
||||||
if [ -x /usr/bin/oslevel ] ; then
|
if [ -x /usr/bin/lslpp ] ; then
|
||||||
IBM_REV=`/usr/bin/oslevel`
|
IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
|
||||||
|
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
|
||||||
else
|
else
|
||||||
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
|
||||||
fi
|
fi
|
||||||
@ -801,10 +835,13 @@ EOF
|
|||||||
i*:CYGWIN*:*)
|
i*:CYGWIN*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-cygwin
|
echo ${UNAME_MACHINE}-pc-cygwin
|
||||||
exit ;;
|
exit ;;
|
||||||
|
*:MINGW64*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-mingw64
|
||||||
|
exit ;;
|
||||||
*:MINGW*:*)
|
*:MINGW*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-mingw32
|
echo ${UNAME_MACHINE}-pc-mingw32
|
||||||
exit ;;
|
exit ;;
|
||||||
i*:MSYS*:*)
|
*:MSYS*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-msys
|
echo ${UNAME_MACHINE}-pc-msys
|
||||||
exit ;;
|
exit ;;
|
||||||
i*:windows32*:*)
|
i*:windows32*:*)
|
||||||
@ -852,21 +889,21 @@ EOF
|
|||||||
exit ;;
|
exit ;;
|
||||||
*:GNU:*:*)
|
*:GNU:*:*)
|
||||||
# the GNU system
|
# the GNU system
|
||||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
exit ;;
|
exit ;;
|
||||||
*:GNU/*:*:*)
|
*:GNU/*:*:*)
|
||||||
# other systems with GNU libc and userland
|
# other systems with GNU libc and userland
|
||||||
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
i*86:Minix:*:*)
|
i*86:Minix:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-minix
|
echo ${UNAME_MACHINE}-pc-minix
|
||||||
exit ;;
|
exit ;;
|
||||||
aarch64:Linux:*:*)
|
aarch64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
aarch64_be:Linux:*:*)
|
aarch64_be:Linux:*:*)
|
||||||
UNAME_MACHINE=aarch64_be
|
UNAME_MACHINE=aarch64_be
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
alpha:Linux:*:*)
|
alpha:Linux:*:*)
|
||||||
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
|
||||||
@ -879,59 +916,54 @@ EOF
|
|||||||
EV68*) UNAME_MACHINE=alphaev68 ;;
|
EV68*) UNAME_MACHINE=alphaev68 ;;
|
||||||
esac
|
esac
|
||||||
objdump --private-headers /bin/sh | grep -q ld.so.1
|
objdump --private-headers /bin/sh | grep -q ld.so.1
|
||||||
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
|
if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
|
exit ;;
|
||||||
|
arc:Linux:*:* | arceb:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
arm*:Linux:*:*)
|
arm*:Linux:*:*)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep -q __ARM_EABI__
|
| grep -q __ARM_EABI__
|
||||||
then
|
then
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
else
|
else
|
||||||
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
|
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
|
||||||
| grep -q __ARM_PCS_VFP
|
| grep -q __ARM_PCS_VFP
|
||||||
then
|
then
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
|
||||||
else
|
else
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
exit ;;
|
exit ;;
|
||||||
avr32*:Linux:*:*)
|
avr32*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
cris:Linux:*:*)
|
cris:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-axis-linux-gnu
|
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
crisv32:Linux:*:*)
|
crisv32:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-axis-linux-gnu
|
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
frv:Linux:*:*)
|
frv:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
hexagon:Linux:*:*)
|
hexagon:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
i*86:Linux:*:*)
|
i*86:Linux:*:*)
|
||||||
LIBC=gnu
|
echo ${UNAME_MACHINE}-pc-linux-${LIBC}
|
||||||
eval $set_cc_for_build
|
|
||||||
sed 's/^ //' << EOF >$dummy.c
|
|
||||||
#ifdef __dietlibc__
|
|
||||||
LIBC=dietlibc
|
|
||||||
#endif
|
|
||||||
EOF
|
|
||||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
|
|
||||||
echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
|
|
||||||
exit ;;
|
exit ;;
|
||||||
ia64:Linux:*:*)
|
ia64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
m32r*:Linux:*:*)
|
m32r*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
m68*:Linux:*:*)
|
m68*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
mips:Linux:*:* | mips64:Linux:*:*)
|
mips:Linux:*:* | mips64:Linux:*:*)
|
||||||
eval $set_cc_for_build
|
eval $set_cc_for_build
|
||||||
@ -950,54 +982,63 @@ EOF
|
|||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
|
||||||
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
|
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
|
||||||
;;
|
;;
|
||||||
or32:Linux:*:*)
|
openrisc*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo or1k-unknown-linux-${LIBC}
|
||||||
|
exit ;;
|
||||||
|
or32:Linux:*:* | or1k*:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
padre:Linux:*:*)
|
padre:Linux:*:*)
|
||||||
echo sparc-unknown-linux-gnu
|
echo sparc-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
parisc64:Linux:*:* | hppa64:Linux:*:*)
|
parisc64:Linux:*:* | hppa64:Linux:*:*)
|
||||||
echo hppa64-unknown-linux-gnu
|
echo hppa64-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
parisc:Linux:*:* | hppa:Linux:*:*)
|
parisc:Linux:*:* | hppa:Linux:*:*)
|
||||||
# Look for CPU level
|
# Look for CPU level
|
||||||
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
|
||||||
PA7*) echo hppa1.1-unknown-linux-gnu ;;
|
PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
|
||||||
PA8*) echo hppa2.0-unknown-linux-gnu ;;
|
PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
|
||||||
*) echo hppa-unknown-linux-gnu ;;
|
*) echo hppa-unknown-linux-${LIBC} ;;
|
||||||
esac
|
esac
|
||||||
exit ;;
|
exit ;;
|
||||||
ppc64:Linux:*:*)
|
ppc64:Linux:*:*)
|
||||||
echo powerpc64-unknown-linux-gnu
|
echo powerpc64-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
ppc:Linux:*:*)
|
ppc:Linux:*:*)
|
||||||
echo powerpc-unknown-linux-gnu
|
echo powerpc-unknown-linux-${LIBC}
|
||||||
|
exit ;;
|
||||||
|
ppc64le:Linux:*:*)
|
||||||
|
echo powerpc64le-unknown-linux-${LIBC}
|
||||||
|
exit ;;
|
||||||
|
ppcle:Linux:*:*)
|
||||||
|
echo powerpcle-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
s390:Linux:*:* | s390x:Linux:*:*)
|
s390:Linux:*:* | s390x:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-ibm-linux
|
echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
sh64*:Linux:*:*)
|
sh64*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
sh*:Linux:*:*)
|
sh*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
sparc:Linux:*:* | sparc64:Linux:*:*)
|
sparc:Linux:*:* | sparc64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
tile*:Linux:*:*)
|
tile*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
vax:Linux:*:*)
|
vax:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-dec-linux-gnu
|
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
x86_64:Linux:*:*)
|
x86_64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
xtensa*:Linux:*:*)
|
xtensa*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||||
exit ;;
|
exit ;;
|
||||||
i*86:DYNIX/ptx:4*:*)
|
i*86:DYNIX/ptx:4*:*)
|
||||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
|
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
|
||||||
@ -1201,6 +1242,9 @@ EOF
|
|||||||
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
|
||||||
echo i586-pc-haiku
|
echo i586-pc-haiku
|
||||||
exit ;;
|
exit ;;
|
||||||
|
x86_64:Haiku:*:*)
|
||||||
|
echo x86_64-unknown-haiku
|
||||||
|
exit ;;
|
||||||
SX-4:SUPER-UX:*:*)
|
SX-4:SUPER-UX:*:*)
|
||||||
echo sx4-nec-superux${UNAME_RELEASE}
|
echo sx4-nec-superux${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
@ -1227,19 +1271,31 @@ EOF
|
|||||||
exit ;;
|
exit ;;
|
||||||
*:Darwin:*:*)
|
*:Darwin:*:*)
|
||||||
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
||||||
case $UNAME_PROCESSOR in
|
eval $set_cc_for_build
|
||||||
i386)
|
if test "$UNAME_PROCESSOR" = unknown ; then
|
||||||
eval $set_cc_for_build
|
UNAME_PROCESSOR=powerpc
|
||||||
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
fi
|
||||||
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
|
if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
|
||||||
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
|
||||||
grep IS_64BIT_ARCH >/dev/null
|
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
|
||||||
then
|
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
|
||||||
UNAME_PROCESSOR="x86_64"
|
grep IS_64BIT_ARCH >/dev/null
|
||||||
fi
|
then
|
||||||
fi ;;
|
case $UNAME_PROCESSOR in
|
||||||
unknown) UNAME_PROCESSOR=powerpc ;;
|
i386) UNAME_PROCESSOR=x86_64 ;;
|
||||||
esac
|
powerpc) UNAME_PROCESSOR=powerpc64 ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif test "$UNAME_PROCESSOR" = i386 ; then
|
||||||
|
# Avoid executing cc on OS X 10.9, as it ships with a stub
|
||||||
|
# that puts up a graphical alert prompting to install
|
||||||
|
# developer tools. Any system running Mac OS X 10.7 or
|
||||||
|
# later (Darwin 11 and later) is required to have a 64-bit
|
||||||
|
# processor. This is not true of the ARM version of Darwin
|
||||||
|
# that Apple uses in portable devices.
|
||||||
|
UNAME_PROCESSOR=x86_64
|
||||||
|
fi
|
||||||
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||||
@ -1256,7 +1312,7 @@ EOF
|
|||||||
NEO-?:NONSTOP_KERNEL:*:*)
|
NEO-?:NONSTOP_KERNEL:*:*)
|
||||||
echo neo-tandem-nsk${UNAME_RELEASE}
|
echo neo-tandem-nsk${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
NSE-?:NONSTOP_KERNEL:*:*)
|
NSE-*:NONSTOP_KERNEL:*:*)
|
||||||
echo nse-tandem-nsk${UNAME_RELEASE}
|
echo nse-tandem-nsk${UNAME_RELEASE}
|
||||||
exit ;;
|
exit ;;
|
||||||
NSR-?:NONSTOP_KERNEL:*:*)
|
NSR-?:NONSTOP_KERNEL:*:*)
|
||||||
@ -1330,157 +1386,6 @@ EOF
|
|||||||
exit ;;
|
exit ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
|
||||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
|
||||||
|
|
||||||
eval $set_cc_for_build
|
|
||||||
cat >$dummy.c <<EOF
|
|
||||||
#ifdef _SEQUENT_
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/utsname.h>
|
|
||||||
#endif
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
#if defined (sony)
|
|
||||||
#if defined (MIPSEB)
|
|
||||||
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
|
||||||
I don't know.... */
|
|
||||||
printf ("mips-sony-bsd\n"); exit (0);
|
|
||||||
#else
|
|
||||||
#include <sys/param.h>
|
|
||||||
printf ("m68k-sony-newsos%s\n",
|
|
||||||
#ifdef NEWSOS4
|
|
||||||
"4"
|
|
||||||
#else
|
|
||||||
""
|
|
||||||
#endif
|
|
||||||
); exit (0);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
|
||||||
printf ("arm-acorn-riscix\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (hp300) && !defined (hpux)
|
|
||||||
printf ("m68k-hp-bsd\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (NeXT)
|
|
||||||
#if !defined (__ARCHITECTURE__)
|
|
||||||
#define __ARCHITECTURE__ "m68k"
|
|
||||||
#endif
|
|
||||||
int version;
|
|
||||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
|
||||||
if (version < 4)
|
|
||||||
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
|
||||||
else
|
|
||||||
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
|
|
||||||
exit (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (MULTIMAX) || defined (n16)
|
|
||||||
#if defined (UMAXV)
|
|
||||||
printf ("ns32k-encore-sysv\n"); exit (0);
|
|
||||||
#else
|
|
||||||
#if defined (CMU)
|
|
||||||
printf ("ns32k-encore-mach\n"); exit (0);
|
|
||||||
#else
|
|
||||||
printf ("ns32k-encore-bsd\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__386BSD__)
|
|
||||||
printf ("i386-pc-bsd\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (sequent)
|
|
||||||
#if defined (i386)
|
|
||||||
printf ("i386-sequent-dynix\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
#if defined (ns32000)
|
|
||||||
printf ("ns32k-sequent-dynix\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (_SEQUENT_)
|
|
||||||
struct utsname un;
|
|
||||||
|
|
||||||
uname(&un);
|
|
||||||
|
|
||||||
if (strncmp(un.version, "V2", 2) == 0) {
|
|
||||||
printf ("i386-sequent-ptx2\n"); exit (0);
|
|
||||||
}
|
|
||||||
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
|
||||||
printf ("i386-sequent-ptx1\n"); exit (0);
|
|
||||||
}
|
|
||||||
printf ("i386-sequent-ptx\n"); exit (0);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (vax)
|
|
||||||
# if !defined (ultrix)
|
|
||||||
# include <sys/param.h>
|
|
||||||
# if defined (BSD)
|
|
||||||
# if BSD == 43
|
|
||||||
printf ("vax-dec-bsd4.3\n"); exit (0);
|
|
||||||
# else
|
|
||||||
# if BSD == 199006
|
|
||||||
printf ("vax-dec-bsd4.3reno\n"); exit (0);
|
|
||||||
# else
|
|
||||||
printf ("vax-dec-bsd\n"); exit (0);
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
printf ("vax-dec-bsd\n"); exit (0);
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
printf ("vax-dec-ultrix\n"); exit (0);
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (alliant) && defined (i860)
|
|
||||||
printf ("i860-alliant-bsd\n"); exit (0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
|
|
||||||
{ echo "$SYSTEM_NAME"; exit; }
|
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
|
||||||
|
|
||||||
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
|
|
||||||
|
|
||||||
# Convex versions that predate uname can use getsysinfo(1)
|
|
||||||
|
|
||||||
if [ -x /usr/convex/getsysinfo ]
|
|
||||||
then
|
|
||||||
case `getsysinfo -f cpu_type` in
|
|
||||||
c1*)
|
|
||||||
echo c1-convex-bsd
|
|
||||||
exit ;;
|
|
||||||
c2*)
|
|
||||||
if getsysinfo -f scalar_acc
|
|
||||||
then echo c32-convex-bsd
|
|
||||||
else echo c2-convex-bsd
|
|
||||||
fi
|
|
||||||
exit ;;
|
|
||||||
c34*)
|
|
||||||
echo c34-convex-bsd
|
|
||||||
exit ;;
|
|
||||||
c38*)
|
|
||||||
echo c38-convex-bsd
|
|
||||||
exit ;;
|
|
||||||
c4*)
|
|
||||||
echo c4-convex-bsd
|
|
||||||
exit ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat >&2 <<EOF
|
cat >&2 <<EOF
|
||||||
$0: unable to guess system type
|
$0: unable to guess system type
|
||||||
|
|
||||||
|
43
config.h.in
43
config.h.in
@ -1,4 +1,4 @@
|
|||||||
/* config.h.in. Generated from configure.in by autoheader. */
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
/* Enable optimizer debugging */
|
/* Enable optimizer debugging */
|
||||||
#undef BDEBUG
|
#undef BDEBUG
|
||||||
@ -76,12 +76,18 @@
|
|||||||
/* Define to 1 if you have the <linux/ethtool.h> header file. */
|
/* Define to 1 if you have the <linux/ethtool.h> header file. */
|
||||||
#undef HAVE_LINUX_ETHTOOL_H
|
#undef HAVE_LINUX_ETHTOOL_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/if_bonding.h> header file. */
|
||||||
|
#undef HAVE_LINUX_IF_BONDING_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <linux/if_packet.h> header file. */
|
/* Define to 1 if you have the <linux/if_packet.h> header file. */
|
||||||
#undef HAVE_LINUX_IF_PACKET_H
|
#undef HAVE_LINUX_IF_PACKET_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <linux/net_tstamp.h> header file. */
|
/* Define to 1 if you have the <linux/net_tstamp.h> header file. */
|
||||||
#undef HAVE_LINUX_NET_TSTAMP_H
|
#undef HAVE_LINUX_NET_TSTAMP_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/sockios.h> header file. */
|
||||||
|
#undef HAVE_LINUX_SOCKIOS_H
|
||||||
|
|
||||||
/* if tp_vlan_tci exists */
|
/* if tp_vlan_tci exists */
|
||||||
#undef HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
|
#undef HAVE_LINUX_TPACKET_AUXDATA_TP_VLAN_TCI
|
||||||
|
|
||||||
@ -118,16 +124,13 @@
|
|||||||
/* if there's an os_proto.h for this platform, to use additional prototypes */
|
/* if there's an os_proto.h for this platform, to use additional prototypes */
|
||||||
#undef HAVE_OS_PROTO_H
|
#undef HAVE_OS_PROTO_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <paths.h> header file. */
|
|
||||||
#undef HAVE_PATHS_H
|
|
||||||
|
|
||||||
/* define if net/pfvar.h defines PF_NAT through PF_NORDR */
|
/* define if net/pfvar.h defines PF_NAT through PF_NORDR */
|
||||||
#undef HAVE_PF_NAT_THROUGH_PF_NORDR
|
#undef HAVE_PF_NAT_THROUGH_PF_NORDR
|
||||||
|
|
||||||
/* define if you have a Septel API */
|
/* define if you have the Septel API */
|
||||||
#undef HAVE_SEPTEL_API
|
#undef HAVE_SEPTEL_API
|
||||||
|
|
||||||
/* define if you have Myricom SNF API */
|
/* define if you have the Myricom SNF API */
|
||||||
#undef HAVE_SNF_API
|
#undef HAVE_SNF_API
|
||||||
|
|
||||||
/* Define to 1 if you have the `snprintf' function. */
|
/* Define to 1 if you have the `snprintf' function. */
|
||||||
@ -163,6 +166,9 @@
|
|||||||
/* Define to 1 if you have the `strlcpy' function. */
|
/* Define to 1 if you have the `strlcpy' function. */
|
||||||
#undef HAVE_STRLCPY
|
#undef HAVE_STRLCPY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `strtok_r' function. */
|
||||||
|
#undef HAVE_STRTOK_R
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `struct BPF_TIMEVAL'. */
|
/* Define to 1 if the system has the type `struct BPF_TIMEVAL'. */
|
||||||
#undef HAVE_STRUCT_BPF_TIMEVAL
|
#undef HAVE_STRUCT_BPF_TIMEVAL
|
||||||
|
|
||||||
@ -181,6 +187,9 @@
|
|||||||
/* Define to 1 if you have the <sys/ioccom.h> header file. */
|
/* Define to 1 if you have the <sys/ioccom.h> header file. */
|
||||||
#undef HAVE_SYS_IOCCOM_H
|
#undef HAVE_SYS_IOCCOM_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||||
|
#undef HAVE_SYS_SELECT_H
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/sockio.h> header file. */
|
/* Define to 1 if you have the <sys/sockio.h> header file. */
|
||||||
#undef HAVE_SYS_SOCKIO_H
|
#undef HAVE_SYS_SOCKIO_H
|
||||||
|
|
||||||
@ -190,6 +199,9 @@
|
|||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
#undef HAVE_SYS_TYPES_H
|
#undef HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
|
/* define if you have the TurboCap API */
|
||||||
|
#undef HAVE_TC_API
|
||||||
|
|
||||||
/* if if_packet.h has tpacket_stats defined */
|
/* if if_packet.h has tpacket_stats defined */
|
||||||
#undef HAVE_TPACKET_STATS
|
#undef HAVE_TPACKET_STATS
|
||||||
|
|
||||||
@ -199,9 +211,6 @@
|
|||||||
/* if struct usbdevfs_ctrltransfer has bRequestType */
|
/* if struct usbdevfs_ctrltransfer has bRequestType */
|
||||||
#undef HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE
|
#undef HAVE_USBDEVFS_CTRLTRANSFER_BREQUESTTYPE
|
||||||
|
|
||||||
/* define if version.h is generated in the build procedure */
|
|
||||||
#undef HAVE_VERSION_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `vsnprintf' function. */
|
/* Define to 1 if you have the `vsnprintf' function. */
|
||||||
#undef HAVE_VSNPRINTF
|
#undef HAVE_VSNPRINTF
|
||||||
|
|
||||||
@ -220,9 +229,6 @@
|
|||||||
/* path for device for USB sniffing */
|
/* path for device for USB sniffing */
|
||||||
#undef LINUX_USB_MON_DEV
|
#undef LINUX_USB_MON_DEV
|
||||||
|
|
||||||
/* if we need a pcap_parse wrapper around yyparse */
|
|
||||||
#undef NEED_YYPARSE_WRAPPER
|
|
||||||
|
|
||||||
/* Define to 1 if netinet/ether.h declares `ether_hostton' */
|
/* Define to 1 if netinet/ether.h declares `ether_hostton' */
|
||||||
#undef NETINET_ETHER_H_DECLARES_ETHER_HOSTTON
|
#undef NETINET_ETHER_H_DECLARES_ETHER_HOSTTON
|
||||||
|
|
||||||
@ -259,18 +265,15 @@
|
|||||||
/* target host supports Bluetooth Monitor */
|
/* target host supports Bluetooth Monitor */
|
||||||
#undef PCAP_SUPPORT_BT_MONITOR
|
#undef PCAP_SUPPORT_BT_MONITOR
|
||||||
|
|
||||||
/* target host supports CAN sniffing */
|
|
||||||
#undef PCAP_SUPPORT_CAN
|
|
||||||
|
|
||||||
/* target host supports canusb */
|
|
||||||
#undef PCAP_SUPPORT_CANUSB
|
|
||||||
|
|
||||||
/* support D-Bus sniffing */
|
/* support D-Bus sniffing */
|
||||||
#undef PCAP_SUPPORT_DBUS
|
#undef PCAP_SUPPORT_DBUS
|
||||||
|
|
||||||
/* target host supports netfilter sniffing */
|
/* target host supports netfilter sniffing */
|
||||||
#undef PCAP_SUPPORT_NETFILTER
|
#undef PCAP_SUPPORT_NETFILTER
|
||||||
|
|
||||||
|
/* use Linux packet ring capture if available */
|
||||||
|
#undef PCAP_SUPPORT_PACKET_RING
|
||||||
|
|
||||||
/* target host supports USB sniffing */
|
/* target host supports USB sniffing */
|
||||||
#undef PCAP_SUPPORT_USB
|
#undef PCAP_SUPPORT_USB
|
||||||
|
|
||||||
@ -286,6 +289,10 @@
|
|||||||
/* Enable parser debugging */
|
/* Enable parser debugging */
|
||||||
#undef YYDEBUG
|
#undef YYDEBUG
|
||||||
|
|
||||||
|
/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a
|
||||||
|
`char[]'. */
|
||||||
|
#undef YYTEXT_POINTER
|
||||||
|
|
||||||
/* Enable large inode numbers on Mac OS X 10.5. */
|
/* Enable large inode numbers on Mac OS X 10.5. */
|
||||||
#ifndef _DARWIN_USE_64_BIT_INODE
|
#ifndef _DARWIN_USE_64_BIT_INODE
|
||||||
# define _DARWIN_USE_64_BIT_INODE 1
|
# define _DARWIN_USE_64_BIT_INODE 1
|
||||||
|
128
config.sub
vendored
128
config.sub
vendored
@ -1,24 +1,18 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright 1992-2015 Free Software Foundation, Inc.
|
||||||
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
|
||||||
# 2011, 2012 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
timestamp='2012-04-18'
|
timestamp='2015-02-22'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# under the terms of the GNU General Public License as published by
|
||||||
# can handle that machine. It does not imply ALL GNU software can.
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
#
|
|
||||||
# This file is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful,
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# GNU General Public License for more details.
|
# General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
@ -26,11 +20,12 @@ timestamp='2012-04-18'
|
|||||||
# As a special exception to the GNU General Public License, if you
|
# As a special exception to the GNU General Public License, if you
|
||||||
# distribute this file as part of a program that contains a
|
# distribute this file as part of a program that contains a
|
||||||
# configuration script generated by Autoconf, you may include it under
|
# configuration script generated by Autoconf, you may include it under
|
||||||
# the same distribution terms that you use for the rest of that program.
|
# the same distribution terms that you use for the rest of that
|
||||||
|
# program. This Exception is an additional permission under section 7
|
||||||
|
# of the GNU General Public License, version 3 ("GPLv3").
|
||||||
|
|
||||||
|
|
||||||
# Please send patches to <config-patches@gnu.org>. Submit a context
|
# Please send patches to <config-patches@gnu.org>.
|
||||||
# diff and a properly formatted GNU ChangeLog entry.
|
|
||||||
#
|
#
|
||||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
# Supply the specified configuration type as an argument.
|
# Supply the specified configuration type as an argument.
|
||||||
@ -73,9 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
|
|||||||
version="\
|
version="\
|
||||||
GNU config.sub ($timestamp)
|
GNU config.sub ($timestamp)
|
||||||
|
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
Copyright 1992-2015 Free Software Foundation, Inc.
|
||||||
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
|
||||||
Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
@ -123,8 +116,8 @@ esac
|
|||||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
|
||||||
linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
|
||||||
knetbsd*-gnu* | netbsd*-gnu* | \
|
knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
|
||||||
kopensolaris*-gnu* | \
|
kopensolaris*-gnu* | \
|
||||||
storm-chaos* | os2-emx* | rtmk-nova*)
|
storm-chaos* | os2-emx* | rtmk-nova*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
@ -156,7 +149,7 @@ case $os in
|
|||||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||||
-apple | -axis | -knuth | -cray | -microblaze)
|
-apple | -axis | -knuth | -cray | -microblaze*)
|
||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
@ -259,21 +252,24 @@ case $basic_machine in
|
|||||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||||
| am33_2.0 \
|
| am33_2.0 \
|
||||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
|
| arc | arceb \
|
||||||
| be32 | be64 \
|
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
|
||||||
|
| avr | avr32 \
|
||||||
|
| be32 | be64 \
|
||||||
| bfin \
|
| bfin \
|
||||||
| c4x | clipper \
|
| c4x | c8051 | clipper \
|
||||||
| d10v | d30v | dlx | dsp16xx \
|
| d10v | d30v | dlx | dsp16xx \
|
||||||
| epiphany \
|
| epiphany \
|
||||||
| fido | fr30 | frv \
|
| fido | fr30 | frv | ft32 \
|
||||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| hexagon \
|
| hexagon \
|
||||||
| i370 | i860 | i960 | ia64 \
|
| i370 | i860 | i960 | ia64 \
|
||||||
| ip2k | iq2000 \
|
| ip2k | iq2000 \
|
||||||
|
| k1om \
|
||||||
| le32 | le64 \
|
| le32 | le64 \
|
||||||
| lm32 \
|
| lm32 \
|
||||||
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
| m32c | m32r | m32rle | m68000 | m68k | m88k \
|
||||||
| maxq | mb | microblaze | mcore | mep | metag \
|
| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
|
||||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||||
| mips16 \
|
| mips16 \
|
||||||
| mips64 | mips64el \
|
| mips64 | mips64el \
|
||||||
@ -287,23 +283,26 @@ case $basic_machine in
|
|||||||
| mips64vr5900 | mips64vr5900el \
|
| mips64vr5900 | mips64vr5900el \
|
||||||
| mipsisa32 | mipsisa32el \
|
| mipsisa32 | mipsisa32el \
|
||||||
| mipsisa32r2 | mipsisa32r2el \
|
| mipsisa32r2 | mipsisa32r2el \
|
||||||
|
| mipsisa32r6 | mipsisa32r6el \
|
||||||
| mipsisa64 | mipsisa64el \
|
| mipsisa64 | mipsisa64el \
|
||||||
| mipsisa64r2 | mipsisa64r2el \
|
| mipsisa64r2 | mipsisa64r2el \
|
||||||
|
| mipsisa64r6 | mipsisa64r6el \
|
||||||
| mipsisa64sb1 | mipsisa64sb1el \
|
| mipsisa64sb1 | mipsisa64sb1el \
|
||||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
|
| mipsr5900 | mipsr5900el \
|
||||||
| mipstx39 | mipstx39el \
|
| mipstx39 | mipstx39el \
|
||||||
| mn10200 | mn10300 \
|
| mn10200 | mn10300 \
|
||||||
| moxie \
|
| moxie \
|
||||||
| mt \
|
| mt \
|
||||||
| msp430 \
|
| msp430 \
|
||||||
| nds32 | nds32le | nds32be \
|
| nds32 | nds32le | nds32be \
|
||||||
| nios | nios2 \
|
| nios | nios2 | nios2eb | nios2el \
|
||||||
| ns16k | ns32k \
|
| ns16k | ns32k \
|
||||||
| open8 \
|
| open8 | or1k | or1knd | or32 \
|
||||||
| or32 \
|
|
||||||
| pdp10 | pdp11 | pj | pjl \
|
| pdp10 | pdp11 | pj | pjl \
|
||||||
| powerpc | powerpc64 | powerpc64le | powerpcle \
|
| powerpc | powerpc64 | powerpc64le | powerpcle \
|
||||||
| pyramid \
|
| pyramid \
|
||||||
|
| riscv32 | riscv64 \
|
||||||
| rl78 | rx \
|
| rl78 | rx \
|
||||||
| score \
|
| score \
|
||||||
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
|
||||||
@ -314,6 +313,7 @@ case $basic_machine in
|
|||||||
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
|
| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
|
||||||
| ubicom32 \
|
| ubicom32 \
|
||||||
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
|
| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
|
||||||
|
| visium \
|
||||||
| we32k \
|
| we32k \
|
||||||
| x86 | xc16x | xstormy16 | xtensa \
|
| x86 | xc16x | xstormy16 | xtensa \
|
||||||
| z8k | z80)
|
| z8k | z80)
|
||||||
@ -328,7 +328,10 @@ case $basic_machine in
|
|||||||
c6x)
|
c6x)
|
||||||
basic_machine=tic6x-unknown
|
basic_machine=tic6x-unknown
|
||||||
;;
|
;;
|
||||||
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
|
leon|leon[3-9])
|
||||||
|
basic_machine=sparc-$basic_machine
|
||||||
|
;;
|
||||||
|
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
os=-none
|
os=-none
|
||||||
;;
|
;;
|
||||||
@ -370,13 +373,13 @@ case $basic_machine in
|
|||||||
| aarch64-* | aarch64_be-* \
|
| aarch64-* | aarch64_be-* \
|
||||||
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
|
||||||
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
|
||||||
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
|
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
|
||||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||||
| avr-* | avr32-* \
|
| avr-* | avr32-* \
|
||||||
| be32-* | be64-* \
|
| be32-* | be64-* \
|
||||||
| bfin-* | bs2000-* \
|
| bfin-* | bs2000-* \
|
||||||
| c[123]* | c30-* | [cjt]90-* | c4x-* \
|
| c[123]* | c30-* | [cjt]90-* | c4x-* \
|
||||||
| clipper-* | craynv-* | cydra-* \
|
| c8051-* | clipper-* | craynv-* | cydra-* \
|
||||||
| d10v-* | d30v-* | dlx-* \
|
| d10v-* | d30v-* | dlx-* \
|
||||||
| elxsi-* \
|
| elxsi-* \
|
||||||
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
|
||||||
@ -385,11 +388,13 @@ case $basic_machine in
|
|||||||
| hexagon-* \
|
| hexagon-* \
|
||||||
| i*86-* | i860-* | i960-* | ia64-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
| ip2k-* | iq2000-* \
|
| ip2k-* | iq2000-* \
|
||||||
|
| k1om-* \
|
||||||
| le32-* | le64-* \
|
| le32-* | le64-* \
|
||||||
| lm32-* \
|
| lm32-* \
|
||||||
| m32c-* | m32r-* | m32rle-* \
|
| m32c-* | m32r-* | m32rle-* \
|
||||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
|
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
|
||||||
|
| microblaze-* | microblazeel-* \
|
||||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||||
| mips16-* \
|
| mips16-* \
|
||||||
| mips64-* | mips64el-* \
|
| mips64-* | mips64el-* \
|
||||||
@ -403,18 +408,22 @@ case $basic_machine in
|
|||||||
| mips64vr5900-* | mips64vr5900el-* \
|
| mips64vr5900-* | mips64vr5900el-* \
|
||||||
| mipsisa32-* | mipsisa32el-* \
|
| mipsisa32-* | mipsisa32el-* \
|
||||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||||
|
| mipsisa32r6-* | mipsisa32r6el-* \
|
||||||
| mipsisa64-* | mipsisa64el-* \
|
| mipsisa64-* | mipsisa64el-* \
|
||||||
| mipsisa64r2-* | mipsisa64r2el-* \
|
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||||
|
| mipsisa64r6-* | mipsisa64r6el-* \
|
||||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||||
|
| mipsr5900-* | mipsr5900el-* \
|
||||||
| mipstx39-* | mipstx39el-* \
|
| mipstx39-* | mipstx39el-* \
|
||||||
| mmix-* \
|
| mmix-* \
|
||||||
| mt-* \
|
| mt-* \
|
||||||
| msp430-* \
|
| msp430-* \
|
||||||
| nds32-* | nds32le-* | nds32be-* \
|
| nds32-* | nds32le-* | nds32be-* \
|
||||||
| nios-* | nios2-* \
|
| nios-* | nios2-* | nios2eb-* | nios2el-* \
|
||||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||||
| open8-* \
|
| open8-* \
|
||||||
|
| or1k*-* \
|
||||||
| orion-* \
|
| orion-* \
|
||||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
|
||||||
@ -432,6 +441,7 @@ case $basic_machine in
|
|||||||
| ubicom32-* \
|
| ubicom32-* \
|
||||||
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
|
| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
|
||||||
| vax-* \
|
| vax-* \
|
||||||
|
| visium-* \
|
||||||
| we32k-* \
|
| we32k-* \
|
||||||
| x86-* | x86_64-* | xc16x-* | xps100-* \
|
| x86-* | x86_64-* | xc16x-* | xps100-* \
|
||||||
| xstormy16-* | xtensa*-* \
|
| xstormy16-* | xtensa*-* \
|
||||||
@ -769,6 +779,9 @@ case $basic_machine in
|
|||||||
basic_machine=m68k-isi
|
basic_machine=m68k-isi
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
|
leon-*|leon[3-9]-*)
|
||||||
|
basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
|
||||||
|
;;
|
||||||
m68knommu)
|
m68knommu)
|
||||||
basic_machine=m68k-unknown
|
basic_machine=m68k-unknown
|
||||||
os=-linux
|
os=-linux
|
||||||
@ -788,11 +801,15 @@ case $basic_machine in
|
|||||||
basic_machine=ns32k-utek
|
basic_machine=ns32k-utek
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
microblaze)
|
microblaze*)
|
||||||
basic_machine=microblaze-xilinx
|
basic_machine=microblaze-xilinx
|
||||||
;;
|
;;
|
||||||
|
mingw64)
|
||||||
|
basic_machine=x86_64-pc
|
||||||
|
os=-mingw64
|
||||||
|
;;
|
||||||
mingw32)
|
mingw32)
|
||||||
basic_machine=i386-pc
|
basic_machine=i686-pc
|
||||||
os=-mingw32
|
os=-mingw32
|
||||||
;;
|
;;
|
||||||
mingw32ce)
|
mingw32ce)
|
||||||
@ -820,6 +837,10 @@ case $basic_machine in
|
|||||||
basic_machine=powerpc-unknown
|
basic_machine=powerpc-unknown
|
||||||
os=-morphos
|
os=-morphos
|
||||||
;;
|
;;
|
||||||
|
moxiebox)
|
||||||
|
basic_machine=moxie-unknown
|
||||||
|
os=-moxiebox
|
||||||
|
;;
|
||||||
msdos)
|
msdos)
|
||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-msdos
|
os=-msdos
|
||||||
@ -828,7 +849,7 @@ case $basic_machine in
|
|||||||
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
|
||||||
;;
|
;;
|
||||||
msys)
|
msys)
|
||||||
basic_machine=i386-pc
|
basic_machine=i686-pc
|
||||||
os=-msys
|
os=-msys
|
||||||
;;
|
;;
|
||||||
mvs)
|
mvs)
|
||||||
@ -1019,7 +1040,11 @@ case $basic_machine in
|
|||||||
basic_machine=i586-unknown
|
basic_machine=i586-unknown
|
||||||
os=-pw32
|
os=-pw32
|
||||||
;;
|
;;
|
||||||
rdos)
|
rdos | rdos64)
|
||||||
|
basic_machine=x86_64-pc
|
||||||
|
os=-rdos
|
||||||
|
;;
|
||||||
|
rdos32)
|
||||||
basic_machine=i386-pc
|
basic_machine=i386-pc
|
||||||
os=-rdos
|
os=-rdos
|
||||||
;;
|
;;
|
||||||
@ -1346,29 +1371,29 @@ case $os in
|
|||||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||||
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
|
||||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
|
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
|
||||||
| -sym* | -kopensolaris* \
|
| -sym* | -kopensolaris* | -plan9* \
|
||||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||||
| -aos* | -aros* \
|
| -aos* | -aros* \
|
||||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||||
| -openbsd* | -solidbsd* \
|
| -bitrig* | -openbsd* | -solidbsd* \
|
||||||
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
||||||
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
| -chorusos* | -chorusrdb* | -cegcc* \
|
| -chorusos* | -chorusrdb* | -cegcc* \
|
||||||
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -linux-android* \
|
| -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
|
||||||
| -linux-newlib* | -linux-uclibc* \
|
| -linux-newlib* | -linux-musl* | -linux-uclibc* \
|
||||||
| -uxpv* | -beos* | -mpeix* | -udk* \
|
| -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
|
||||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||||
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
|
||||||
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
|
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
-qnx*)
|
-qnx*)
|
||||||
@ -1492,9 +1517,6 @@ case $os in
|
|||||||
-aros*)
|
-aros*)
|
||||||
os=-aros
|
os=-aros
|
||||||
;;
|
;;
|
||||||
-kaos*)
|
|
||||||
os=-kaos
|
|
||||||
;;
|
|
||||||
-zvmoe)
|
-zvmoe)
|
||||||
os=-zvmoe
|
os=-zvmoe
|
||||||
;;
|
;;
|
||||||
@ -1543,6 +1565,12 @@ case $basic_machine in
|
|||||||
c4x-* | tic4x-*)
|
c4x-* | tic4x-*)
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
c8051-*)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
|
hexagon-*)
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
tic54x-*)
|
tic54x-*)
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
6
config/have_siocglifconf.c
Normal file
6
config/have_siocglifconf.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
int main() {
|
||||||
|
ioctl(0, SIOCGLIFCONF, (char *)0);
|
||||||
|
}
|
863
configure.in → configure.ac
Executable file → Normal file
863
configure.in → configure.ac
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
31
dlpisubs.c
31
dlpisubs.c
@ -186,8 +186,8 @@ pcap_process_pkts(pcap_t *p, pcap_handler callback, u_char *user,
|
|||||||
pkthdr.len = origlen;
|
pkthdr.len = origlen;
|
||||||
pkthdr.caplen = caplen;
|
pkthdr.caplen = caplen;
|
||||||
/* Insure caplen does not exceed snapshot */
|
/* Insure caplen does not exceed snapshot */
|
||||||
if (pkthdr.caplen > p->snapshot)
|
if (pkthdr.caplen > (bpf_u_int32)p->snapshot)
|
||||||
pkthdr.caplen = p->snapshot;
|
pkthdr.caplen = (bpf_u_int32)p->snapshot;
|
||||||
(*callback)(user, &pkthdr, pk);
|
(*callback)(user, &pkthdr, pk);
|
||||||
if (++n >= count && !PACKET_COUNT_IS_UNLIMITED(count)) {
|
if (++n >= count && !PACKET_COUNT_IS_UNLIMITED(count)) {
|
||||||
p->cc = ep - bufp;
|
p->cc = ep - bufp;
|
||||||
@ -255,8 +255,29 @@ pcap_process_mactype(pcap_t *p, u_int mactype)
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DL_IPV4
|
||||||
|
case DL_IPV4:
|
||||||
|
p->linktype = DLT_IPV4;
|
||||||
|
p->offset = 0;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DL_IPV6
|
||||||
|
case DL_IPV6:
|
||||||
|
p->linktype = DLT_IPV6;
|
||||||
|
p->offset = 0;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DL_IPNET
|
||||||
|
case DL_IPNET:
|
||||||
|
p->linktype = DLT_IPNET;
|
||||||
|
p->offset = 0;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "unknown mactype %u",
|
pcap_snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "unknown mactype 0x%x",
|
||||||
mactype);
|
mactype);
|
||||||
retv = -1;
|
retv = -1;
|
||||||
}
|
}
|
||||||
@ -326,7 +347,7 @@ int
|
|||||||
pcap_alloc_databuf(pcap_t *p)
|
pcap_alloc_databuf(pcap_t *p)
|
||||||
{
|
{
|
||||||
p->bufsize = PKTBUFSIZE;
|
p->bufsize = PKTBUFSIZE;
|
||||||
p->buffer = (u_char *)malloc(p->bufsize + p->offset);
|
p->buffer = malloc(p->bufsize + p->offset);
|
||||||
if (p->buffer == NULL) {
|
if (p->buffer == NULL) {
|
||||||
strlcpy(p->errbuf, pcap_strerror(errno), PCAP_ERRBUF_SIZE);
|
strlcpy(p->errbuf, pcap_strerror(errno), PCAP_ERRBUF_SIZE);
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -362,6 +383,6 @@ strioctl(int fd, int cmd, int len, char *dp)
|
|||||||
static void
|
static void
|
||||||
pcap_stream_err(const char *func, int err, char *errbuf)
|
pcap_stream_err(const char *func, int err, char *errbuf)
|
||||||
{
|
{
|
||||||
snprintf(errbuf, PCAP_ERRBUF_SIZE, "%s: %s", func, pcap_strerror(err));
|
pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE, "%s: %s", func, pcap_strerror(err));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,9 +23,9 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <pcap-stdinc.h>
|
#include <pcap-stdinc.h>
|
||||||
#else /* WIN32 */
|
#else /* _WIN32 */
|
||||||
#if HAVE_INTTYPES_H
|
#if HAVE_INTTYPES_H
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#elif HAVE_STDINT_H
|
#elif HAVE_STDINT_H
|
||||||
@ -35,7 +35,7 @@
|
|||||||
#include <sys/bitypes.h>
|
#include <sys/bitypes.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
|
@ -112,6 +112,9 @@
|
|||||||
#ifndef ETHERTYPE_PPPOES
|
#ifndef ETHERTYPE_PPPOES
|
||||||
#define ETHERTYPE_PPPOES 0x8864
|
#define ETHERTYPE_PPPOES 0x8864
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef ETHERTYPE_8021AD
|
||||||
|
#define ETHERTYPE_8021AD 0x88a8
|
||||||
|
#endif
|
||||||
#ifndef ETHERTYPE_LOOPBACK
|
#ifndef ETHERTYPE_LOOPBACK
|
||||||
#define ETHERTYPE_LOOPBACK 0x9000
|
#define ETHERTYPE_LOOPBACK 0x9000
|
||||||
#endif
|
#endif
|
||||||
|
221
extract.h
Normal file
221
extract.h
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1992, 1993, 1994, 1995, 1996
|
||||||
|
* 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 _WIN32
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros to extract possibly-unaligned big-endian integral values.
|
||||||
|
*/
|
||||||
|
#ifdef LBL_ALIGN
|
||||||
|
/*
|
||||||
|
* The processor doesn't natively handle unaligned loads.
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && defined(HAVE___ATTRIBUTE__) && \
|
||||||
|
(defined(__alpha) || defined(__alpha__) || \
|
||||||
|
defined(__mips) || defined(__mips__))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a GCC-compatible compiler and we have __attribute__, which
|
||||||
|
* we assume that mean we have __attribute__((packed)), and this is
|
||||||
|
* MIPS or Alpha, which has instructions that can help when doing
|
||||||
|
* unaligned loads.
|
||||||
|
*
|
||||||
|
* Declare packed structures containing a uint16_t and a uint32_t,
|
||||||
|
* cast the pointer to point to one of those, and fetch through it;
|
||||||
|
* the GCC manual doesn't appear to explicitly say that
|
||||||
|
* __attribute__((packed)) causes the compiler to generate unaligned-safe
|
||||||
|
* code, but it apppears to do so.
|
||||||
|
*
|
||||||
|
* We do this in case the compiler can generate code using those
|
||||||
|
* instructions to do an unaligned load and pass stuff to "ntohs()" or
|
||||||
|
* "ntohl()", which might be better than than the code to fetch the
|
||||||
|
* bytes one at a time and assemble them. (That might not be the
|
||||||
|
* case on a little-endian platform, such as DEC's MIPS machines and
|
||||||
|
* Alpha machines, where "ntohs()" and "ntohl()" might not be done
|
||||||
|
* inline.)
|
||||||
|
*
|
||||||
|
* We do this only for specific architectures because, for example,
|
||||||
|
* at least some versions of GCC, when compiling for 64-bit SPARC,
|
||||||
|
* generate code that assumes alignment if we do this.
|
||||||
|
*
|
||||||
|
* XXX - add other architectures and compilers as possible and
|
||||||
|
* appropriate.
|
||||||
|
*
|
||||||
|
* HP's C compiler, indicated by __HP_cc being defined, supports
|
||||||
|
* "#pragma unaligned N" in version A.05.50 and later, where "N"
|
||||||
|
* specifies a number of bytes at which the typedef on the next
|
||||||
|
* line is aligned, e.g.
|
||||||
|
*
|
||||||
|
* #pragma unalign 1
|
||||||
|
* typedef uint16_t unaligned_uint16_t;
|
||||||
|
*
|
||||||
|
* to define unaligned_uint16_t as a 16-bit unaligned data type.
|
||||||
|
* This could be presumably used, in sufficiently recent versions of
|
||||||
|
* the compiler, with macros similar to those below. This would be
|
||||||
|
* useful only if that compiler could generate better code for PA-RISC
|
||||||
|
* or Itanium than would be generated by a bunch of shifts-and-ORs.
|
||||||
|
*
|
||||||
|
* DEC C, indicated by __DECC being defined, has, at least on Alpha,
|
||||||
|
* an __unaligned qualifier that can be applied to pointers to get the
|
||||||
|
* compiler to generate code that does unaligned loads and stores when
|
||||||
|
* dereferencing the pointer in question.
|
||||||
|
*
|
||||||
|
* XXX - what if the native C compiler doesn't support
|
||||||
|
* __attribute__((packed))? How can we get it to generate unaligned
|
||||||
|
* accesses for *specific* items?
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
uint16_t val;
|
||||||
|
} __attribute__((packed)) unaligned_uint16_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t val;
|
||||||
|
} __attribute__((packed)) unaligned_uint32_t;
|
||||||
|
|
||||||
|
static inline uint16_t
|
||||||
|
EXTRACT_16BITS(const void *p)
|
||||||
|
{
|
||||||
|
return ((uint16_t)ntohs(((const unaligned_uint16_t *)(p))->val));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
EXTRACT_32BITS(const void *p)
|
||||||
|
{
|
||||||
|
return ((uint32_t)ntohl(((const unaligned_uint32_t *)(p))->val));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint64_t
|
||||||
|
EXTRACT_64BITS(const void *p)
|
||||||
|
{
|
||||||
|
return ((uint64_t)(((uint64_t)ntohl(((const unaligned_uint32_t *)(p) + 0)->val)) << 32 | \
|
||||||
|
((uint64_t)ntohl(((const unaligned_uint32_t *)(p) + 1)->val)) << 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* have to do it a byte at a time */
|
||||||
|
/*
|
||||||
|
* This isn't a GCC-compatible compiler, we don't have __attribute__,
|
||||||
|
* or we do but we don't know of any better way with this instruction
|
||||||
|
* set to do unaligned loads, so do unaligned loads of big-endian
|
||||||
|
* quantities the hard way - fetch the bytes one at a time and
|
||||||
|
* assemble them.
|
||||||
|
*/
|
||||||
|
#define EXTRACT_16BITS(p) \
|
||||||
|
((uint16_t)(((uint16_t)(*((const uint8_t *)(p) + 0)) << 8) | \
|
||||||
|
((uint16_t)(*((const uint8_t *)(p) + 1)) << 0)))
|
||||||
|
#define EXTRACT_32BITS(p) \
|
||||||
|
((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 24) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 1)) << 16) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 2)) << 8) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 3)) << 0)))
|
||||||
|
#define EXTRACT_64BITS(p) \
|
||||||
|
((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 56) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 1)) << 48) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 2)) << 40) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 3)) << 32) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 4)) << 24) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 5)) << 16) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 6)) << 8) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 7)) << 0)))
|
||||||
|
#endif /* must special-case unaligned accesses */
|
||||||
|
#else /* LBL_ALIGN */
|
||||||
|
/*
|
||||||
|
* The processor natively handles unaligned loads, so we can just
|
||||||
|
* cast the pointer and fetch through it.
|
||||||
|
*/
|
||||||
|
static inline uint16_t
|
||||||
|
EXTRACT_16BITS(const void *p)
|
||||||
|
{
|
||||||
|
return ((uint16_t)ntohs(*(const uint16_t *)(p)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
EXTRACT_32BITS(const void *p)
|
||||||
|
{
|
||||||
|
return ((uint32_t)ntohl(*(const uint32_t *)(p)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint64_t
|
||||||
|
EXTRACT_64BITS(const void *p)
|
||||||
|
{
|
||||||
|
return ((uint64_t)(((uint64_t)ntohl(*((const uint32_t *)(p) + 0))) << 32 | \
|
||||||
|
((uint64_t)ntohl(*((const uint32_t *)(p) + 1))) << 0));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* LBL_ALIGN */
|
||||||
|
|
||||||
|
#define EXTRACT_24BITS(p) \
|
||||||
|
((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 0)) << 16) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 2)) << 0)))
|
||||||
|
|
||||||
|
#define EXTRACT_40BITS(p) \
|
||||||
|
((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 32) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 1)) << 24) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 3)) << 8) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 4)) << 0)))
|
||||||
|
|
||||||
|
#define EXTRACT_48BITS(p) \
|
||||||
|
((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 40) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 1)) << 32) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 2)) << 24) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 3)) << 16) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 4)) << 8) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 5)) << 0)))
|
||||||
|
|
||||||
|
#define EXTRACT_56BITS(p) \
|
||||||
|
((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 0)) << 48) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 1)) << 40) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 2)) << 32) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 4)) << 16) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 5)) << 8) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 6)) << 0)))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros to extract possibly-unaligned little-endian integral values.
|
||||||
|
* XXX - do loads on little-endian machines that support unaligned loads?
|
||||||
|
*/
|
||||||
|
#define EXTRACT_LE_8BITS(p) (*(p))
|
||||||
|
#define EXTRACT_LE_16BITS(p) \
|
||||||
|
((uint16_t)(((uint16_t)(*((const uint8_t *)(p) + 1)) << 8) | \
|
||||||
|
((uint16_t)(*((const uint8_t *)(p) + 0)) << 0)))
|
||||||
|
#define EXTRACT_LE_32BITS(p) \
|
||||||
|
((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 3)) << 24) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 2)) << 16) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 0)) << 0)))
|
||||||
|
#define EXTRACT_LE_24BITS(p) \
|
||||||
|
((uint32_t)(((uint32_t)(*((const uint8_t *)(p) + 2)) << 16) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 1)) << 8) | \
|
||||||
|
((uint32_t)(*((const uint8_t *)(p) + 0)) << 0)))
|
||||||
|
#define EXTRACT_LE_64BITS(p) \
|
||||||
|
((uint64_t)(((uint64_t)(*((const uint8_t *)(p) + 7)) << 56) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 6)) << 48) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 5)) << 40) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 4)) << 32) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 3)) << 24) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 2)) << 16) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 1)) << 8) | \
|
||||||
|
((uint64_t)(*((const uint8_t *)(p) + 0)) << 0)))
|
76
fad-getad.c
76
fad-getad.c
@ -144,7 +144,8 @@ get_sa_len(struct sockaddr *addr)
|
|||||||
* could be opened.
|
* could be opened.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf,
|
||||||
|
int (*check_usable)(const char *))
|
||||||
{
|
{
|
||||||
pcap_if_t *devlist = NULL;
|
pcap_if_t *devlist = NULL;
|
||||||
struct ifaddrs *ifap, *ifa;
|
struct ifaddrs *ifap, *ifa;
|
||||||
@ -168,11 +169,50 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
* those.
|
* those.
|
||||||
*/
|
*/
|
||||||
if (getifaddrs(&ifap) != 0) {
|
if (getifaddrs(&ifap) != 0) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"getifaddrs: %s", pcap_strerror(errno));
|
"getifaddrs: %s", pcap_strerror(errno));
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
|
for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
|
||||||
|
/*
|
||||||
|
* If this entry has a colon followed by a number at
|
||||||
|
* the end, we assume it's a logical interface. Those
|
||||||
|
* are just the way you assign multiple IP addresses to
|
||||||
|
* a real interface on Linux, so an entry for a logical
|
||||||
|
* interface should be treated like the entry for the
|
||||||
|
* real interface; we do that by stripping off the ":"
|
||||||
|
* and the number.
|
||||||
|
*
|
||||||
|
* XXX - should we do this only on Linux?
|
||||||
|
*/
|
||||||
|
p = strchr(ifa->ifa_name, ':');
|
||||||
|
if (p != NULL) {
|
||||||
|
/*
|
||||||
|
* We have a ":"; is it followed by a number?
|
||||||
|
*/
|
||||||
|
q = p + 1;
|
||||||
|
while (isdigit((unsigned char)*q))
|
||||||
|
q++;
|
||||||
|
if (*q == '\0') {
|
||||||
|
/*
|
||||||
|
* All digits after the ":" until the end.
|
||||||
|
* Strip off the ":" and everything after
|
||||||
|
* it.
|
||||||
|
*/
|
||||||
|
*p = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Can we capture on this device?
|
||||||
|
*/
|
||||||
|
if (!(*check_usable)(ifa->ifa_name)) {
|
||||||
|
/*
|
||||||
|
* No.
|
||||||
|
*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "ifa_addr" was apparently null on at least one
|
* "ifa_addr" was apparently null on at least one
|
||||||
* interface on some system. Therefore, we supply
|
* interface on some system. Therefore, we supply
|
||||||
@ -222,40 +262,12 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
dstaddr_size = 0;
|
dstaddr_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* If this entry has a colon followed by a number at
|
|
||||||
* the end, we assume it's a logical interface. Those
|
|
||||||
* are just the way you assign multiple IP addresses to
|
|
||||||
* a real interface on Linux, so an entry for a logical
|
|
||||||
* interface should be treated like the entry for the
|
|
||||||
* real interface; we do that by stripping off the ":"
|
|
||||||
* and the number.
|
|
||||||
*
|
|
||||||
* XXX - should we do this only on Linux?
|
|
||||||
*/
|
|
||||||
p = strchr(ifa->ifa_name, ':');
|
|
||||||
if (p != NULL) {
|
|
||||||
/*
|
|
||||||
* We have a ":"; is it followed by a number?
|
|
||||||
*/
|
|
||||||
q = p + 1;
|
|
||||||
while (isdigit((unsigned char)*q))
|
|
||||||
q++;
|
|
||||||
if (*q == '\0') {
|
|
||||||
/*
|
|
||||||
* All digits after the ":" until the end.
|
|
||||||
* Strip off the ":" and everything after
|
|
||||||
* it.
|
|
||||||
*/
|
|
||||||
*p = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add information for this address to the list.
|
* Add information for this address to the list.
|
||||||
*/
|
*/
|
||||||
if (add_addr_to_iflist(&devlist, ifa->ifa_name,
|
if (add_addr_to_iflist(&devlist, ifa->ifa_name,
|
||||||
ifa->ifa_flags, addr, addr_size, netmask, addr_size,
|
if_flags_to_pcap_flags(ifa->ifa_name, ifa->ifa_flags),
|
||||||
|
addr, addr_size, netmask, addr_size,
|
||||||
broadaddr, broadaddr_size, dstaddr, dstaddr_size,
|
broadaddr, broadaddr_size, dstaddr, dstaddr_size,
|
||||||
errbuf) < 0) {
|
errbuf) < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
49
fad-gifc.c
49
fad-gifc.c
@ -132,12 +132,13 @@ struct rtentry; /* declarations in <net/if.h> */
|
|||||||
* we already have that.
|
* we already have that.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf,
|
||||||
|
int (*check_usable)(const char *))
|
||||||
{
|
{
|
||||||
pcap_if_t *devlist = NULL;
|
pcap_if_t *devlist = NULL;
|
||||||
register int fd;
|
register int fd;
|
||||||
register struct ifreq *ifrp, *ifend, *ifnext;
|
register struct ifreq *ifrp, *ifend, *ifnext;
|
||||||
int n;
|
size_t n;
|
||||||
struct ifconf ifc;
|
struct ifconf ifc;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
unsigned buf_size;
|
unsigned buf_size;
|
||||||
@ -154,7 +155,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
*/
|
*/
|
||||||
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"socket: %s", pcap_strerror(errno));
|
"socket: %s", pcap_strerror(errno));
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
@ -170,7 +171,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
buf = malloc(buf_size);
|
buf = malloc(buf_size);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"malloc: %s", pcap_strerror(errno));
|
"malloc: %s", pcap_strerror(errno));
|
||||||
(void)close(fd);
|
(void)close(fd);
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -181,7 +182,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
memset(buf, 0, buf_size);
|
memset(buf, 0, buf_size);
|
||||||
if (ioctl(fd, SIOCGIFCONF, (char *)&ifc) < 0
|
if (ioctl(fd, SIOCGIFCONF, (char *)&ifc) < 0
|
||||||
&& errno != EINVAL) {
|
&& errno != EINVAL) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGIFCONF: %s", pcap_strerror(errno));
|
"SIOCGIFCONF: %s", pcap_strerror(errno));
|
||||||
(void)close(fd);
|
(void)close(fd);
|
||||||
free(buf);
|
free(buf);
|
||||||
@ -217,12 +218,12 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
/*
|
/*
|
||||||
* XXX - The 32-bit compatibility layer for Linux on IA-64
|
* XXX - The 32-bit compatibility layer for Linux on IA-64
|
||||||
* is slightly broken. It correctly converts the structures
|
* is slightly broken. It correctly converts the structures
|
||||||
* to and from kernel land from 64 bit to 32 bit but
|
* to and from kernel land from 64 bit to 32 bit but
|
||||||
* doesn't update ifc.ifc_len, leaving it larger than the
|
* doesn't update ifc.ifc_len, leaving it larger than the
|
||||||
* amount really used. This means we read off the end
|
* amount really used. This means we read off the end
|
||||||
* of the buffer and encounter an interface with an
|
* of the buffer and encounter an interface with an
|
||||||
* "empty" name. Since this is highly unlikely to ever
|
* "empty" name. Since this is highly unlikely to ever
|
||||||
* occur in a valid case we can just finish looking for
|
* occur in a valid case we can just finish looking for
|
||||||
* interfaces if we see an empty name.
|
* interfaces if we see an empty name.
|
||||||
*/
|
*/
|
||||||
if (!(*ifrp->ifr_name))
|
if (!(*ifrp->ifr_name))
|
||||||
@ -236,6 +237,16 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
if (strncmp(ifrp->ifr_name, "dummy", 5) == 0)
|
if (strncmp(ifrp->ifr_name, "dummy", 5) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Can we capture on this device?
|
||||||
|
*/
|
||||||
|
if (!(*check_usable)(ifrp->ifr_name)) {
|
||||||
|
/*
|
||||||
|
* No.
|
||||||
|
*/
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the flags for this interface.
|
* Get the flags for this interface.
|
||||||
*/
|
*/
|
||||||
@ -244,7 +255,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifrflags) < 0) {
|
if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifrflags) < 0) {
|
||||||
if (errno == ENXIO)
|
if (errno == ENXIO)
|
||||||
continue;
|
continue;
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGIFFLAGS: %.*s: %s",
|
"SIOCGIFFLAGS: %.*s: %s",
|
||||||
(int)sizeof(ifrflags.ifr_name),
|
(int)sizeof(ifrflags.ifr_name),
|
||||||
ifrflags.ifr_name,
|
ifrflags.ifr_name,
|
||||||
@ -268,7 +279,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
netmask = NULL;
|
netmask = NULL;
|
||||||
netmask_size = 0;
|
netmask_size = 0;
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGIFNETMASK: %.*s: %s",
|
"SIOCGIFNETMASK: %.*s: %s",
|
||||||
(int)sizeof(ifrnetmask.ifr_name),
|
(int)sizeof(ifrnetmask.ifr_name),
|
||||||
ifrnetmask.ifr_name,
|
ifrnetmask.ifr_name,
|
||||||
@ -299,7 +310,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
broadaddr = NULL;
|
broadaddr = NULL;
|
||||||
broadaddr_size = 0;
|
broadaddr_size = 0;
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGIFBRDADDR: %.*s: %s",
|
"SIOCGIFBRDADDR: %.*s: %s",
|
||||||
(int)sizeof(ifrbroadaddr.ifr_name),
|
(int)sizeof(ifrbroadaddr.ifr_name),
|
||||||
ifrbroadaddr.ifr_name,
|
ifrbroadaddr.ifr_name,
|
||||||
@ -338,7 +349,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
dstaddr = NULL;
|
dstaddr = NULL;
|
||||||
dstaddr_size = 0;
|
dstaddr_size = 0;
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGIFDSTADDR: %.*s: %s",
|
"SIOCGIFDSTADDR: %.*s: %s",
|
||||||
(int)sizeof(ifrdstaddr.ifr_name),
|
(int)sizeof(ifrdstaddr.ifr_name),
|
||||||
ifrdstaddr.ifr_name,
|
ifrdstaddr.ifr_name,
|
||||||
@ -391,10 +402,10 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
* Add information for this address to the list.
|
* Add information for this address to the list.
|
||||||
*/
|
*/
|
||||||
if (add_addr_to_iflist(&devlist, ifrp->ifr_name,
|
if (add_addr_to_iflist(&devlist, ifrp->ifr_name,
|
||||||
ifrflags.ifr_flags, &ifrp->ifr_addr,
|
if_flags_to_pcap_flags(ifrp->ifr_name, ifrflags.ifr_flags),
|
||||||
SA_LEN(&ifrp->ifr_addr), netmask, netmask_size,
|
&ifrp->ifr_addr, SA_LEN(&ifrp->ifr_addr),
|
||||||
broadaddr, broadaddr_size, dstaddr, dstaddr_size,
|
netmask, netmask_size, broadaddr, broadaddr_size,
|
||||||
errbuf) < 0) {
|
dstaddr, dstaddr_size, errbuf) < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
60
fad-glifc.c
60
fad-glifc.c
@ -75,7 +75,8 @@ struct rtentry; /* declarations in <net/if.h> */
|
|||||||
* SIOCGLIFCONF rather than SIOCGIFCONF in order to get IPv6 addresses.)
|
* SIOCGLIFCONF rather than SIOCGIFCONF in order to get IPv6 addresses.)
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf,
|
||||||
|
int (*check_usable)(const char *))
|
||||||
{
|
{
|
||||||
pcap_if_t *devlist = NULL;
|
pcap_if_t *devlist = NULL;
|
||||||
register int fd4, fd6, fd;
|
register int fd4, fd6, fd;
|
||||||
@ -97,7 +98,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
*/
|
*/
|
||||||
fd4 = socket(AF_INET, SOCK_DGRAM, 0);
|
fd4 = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
if (fd4 < 0) {
|
if (fd4 < 0) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"socket: %s", pcap_strerror(errno));
|
"socket: %s", pcap_strerror(errno));
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
@ -107,7 +108,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
*/
|
*/
|
||||||
fd6 = socket(AF_INET6, SOCK_DGRAM, 0);
|
fd6 = socket(AF_INET6, SOCK_DGRAM, 0);
|
||||||
if (fd6 < 0) {
|
if (fd6 < 0) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"socket: %s", pcap_strerror(errno));
|
"socket: %s", pcap_strerror(errno));
|
||||||
(void)close(fd4);
|
(void)close(fd4);
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -120,7 +121,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
ifn.lifn_flags = 0;
|
ifn.lifn_flags = 0;
|
||||||
ifn.lifn_count = 0;
|
ifn.lifn_count = 0;
|
||||||
if (ioctl(fd4, SIOCGLIFNUM, (char *)&ifn) < 0) {
|
if (ioctl(fd4, SIOCGLIFNUM, (char *)&ifn) < 0) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGLIFNUM: %s", pcap_strerror(errno));
|
"SIOCGLIFNUM: %s", pcap_strerror(errno));
|
||||||
(void)close(fd6);
|
(void)close(fd6);
|
||||||
(void)close(fd4);
|
(void)close(fd4);
|
||||||
@ -133,7 +134,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
buf_size = ifn.lifn_count * sizeof (struct lifreq);
|
buf_size = ifn.lifn_count * sizeof (struct lifreq);
|
||||||
buf = malloc(buf_size);
|
buf = malloc(buf_size);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"malloc: %s", pcap_strerror(errno));
|
"malloc: %s", pcap_strerror(errno));
|
||||||
(void)close(fd6);
|
(void)close(fd6);
|
||||||
(void)close(fd4);
|
(void)close(fd4);
|
||||||
@ -149,7 +150,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
ifc.lifc_flags = 0;
|
ifc.lifc_flags = 0;
|
||||||
memset(buf, 0, buf_size);
|
memset(buf, 0, buf_size);
|
||||||
if (ioctl(fd4, SIOCGLIFCONF, (char *)&ifc) < 0) {
|
if (ioctl(fd4, SIOCGLIFCONF, (char *)&ifc) < 0) {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGLIFCONF: %s", pcap_strerror(errno));
|
"SIOCGLIFCONF: %s", pcap_strerror(errno));
|
||||||
(void)close(fd6);
|
(void)close(fd6);
|
||||||
(void)close(fd4);
|
(void)close(fd4);
|
||||||
@ -164,14 +165,6 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
ifend = (struct lifreq *)(buf + ifc.lifc_len);
|
ifend = (struct lifreq *)(buf + ifc.lifc_len);
|
||||||
|
|
||||||
for (; ifrp < ifend; ifrp++) {
|
for (; ifrp < ifend; ifrp++) {
|
||||||
/*
|
|
||||||
* IPv6 or not?
|
|
||||||
*/
|
|
||||||
if (((struct sockaddr *)&ifrp->lifr_addr)->sa_family == AF_INET6)
|
|
||||||
fd = fd6;
|
|
||||||
else
|
|
||||||
fd = fd4;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skip entries that begin with "dummy".
|
* Skip entries that begin with "dummy".
|
||||||
* XXX - what are these? Is this Linux-specific?
|
* XXX - what are these? Is this Linux-specific?
|
||||||
@ -180,27 +173,23 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
if (strncmp(ifrp->lifr_name, "dummy", 5) == 0)
|
if (strncmp(ifrp->lifr_name, "dummy", 5) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
#ifdef HAVE_SOLARIS
|
|
||||||
/*
|
/*
|
||||||
* Skip entries that have a ":" followed by a number
|
* Can we capture on this device?
|
||||||
* at the end - those are Solaris virtual interfaces
|
|
||||||
* on which you can't capture.
|
|
||||||
*/
|
*/
|
||||||
p = strchr(ifrp->lifr_name, ':');
|
if (!(*check_usable)(ifrp->lifr_name)) {
|
||||||
if (p != NULL) {
|
|
||||||
/*
|
/*
|
||||||
* We have a ":"; is it followed by a number?
|
* No.
|
||||||
*/
|
*/
|
||||||
while (isdigit((unsigned char)*p))
|
continue;
|
||||||
p++;
|
|
||||||
if (*p == '\0') {
|
|
||||||
/*
|
|
||||||
* All digits after the ":" until the end.
|
|
||||||
*/
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/*
|
||||||
|
* IPv6 or not?
|
||||||
|
*/
|
||||||
|
if (((struct sockaddr *)&ifrp->lifr_addr)->sa_family == AF_INET6)
|
||||||
|
fd = fd6;
|
||||||
|
else
|
||||||
|
fd = fd4;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the flags for this interface.
|
* Get the flags for this interface.
|
||||||
@ -210,7 +199,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
if (ioctl(fd, SIOCGLIFFLAGS, (char *)&ifrflags) < 0) {
|
if (ioctl(fd, SIOCGLIFFLAGS, (char *)&ifrflags) < 0) {
|
||||||
if (errno == ENXIO)
|
if (errno == ENXIO)
|
||||||
continue;
|
continue;
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGLIFFLAGS: %.*s: %s",
|
"SIOCGLIFFLAGS: %.*s: %s",
|
||||||
(int)sizeof(ifrflags.lifr_name),
|
(int)sizeof(ifrflags.lifr_name),
|
||||||
ifrflags.lifr_name,
|
ifrflags.lifr_name,
|
||||||
@ -233,7 +222,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
*/
|
*/
|
||||||
netmask = NULL;
|
netmask = NULL;
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGLIFNETMASK: %.*s: %s",
|
"SIOCGLIFNETMASK: %.*s: %s",
|
||||||
(int)sizeof(ifrnetmask.lifr_name),
|
(int)sizeof(ifrnetmask.lifr_name),
|
||||||
ifrnetmask.lifr_name,
|
ifrnetmask.lifr_name,
|
||||||
@ -261,7 +250,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
*/
|
*/
|
||||||
broadaddr = NULL;
|
broadaddr = NULL;
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGLIFBRDADDR: %.*s: %s",
|
"SIOCGLIFBRDADDR: %.*s: %s",
|
||||||
(int)sizeof(ifrbroadaddr.lifr_name),
|
(int)sizeof(ifrbroadaddr.lifr_name),
|
||||||
ifrbroadaddr.lifr_name,
|
ifrbroadaddr.lifr_name,
|
||||||
@ -296,7 +285,7 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
*/
|
*/
|
||||||
dstaddr = NULL;
|
dstaddr = NULL;
|
||||||
} else {
|
} else {
|
||||||
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
"SIOCGLIFDSTADDR: %.*s: %s",
|
"SIOCGLIFDSTADDR: %.*s: %s",
|
||||||
(int)sizeof(ifrdstaddr.lifr_name),
|
(int)sizeof(ifrdstaddr.lifr_name),
|
||||||
ifrdstaddr.lifr_name,
|
ifrdstaddr.lifr_name,
|
||||||
@ -341,7 +330,8 @@ pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|||||||
* Add information for this address to the list.
|
* Add information for this address to the list.
|
||||||
*/
|
*/
|
||||||
if (add_addr_to_iflist(&devlist, ifrp->lifr_name,
|
if (add_addr_to_iflist(&devlist, ifrp->lifr_name,
|
||||||
ifrflags.lifr_flags, (struct sockaddr *)&ifrp->lifr_addr,
|
if_flags_to_pcap_flags(ifrp->lifr_name, ifrflags.lifr_flags),
|
||||||
|
(struct sockaddr *)&ifrp->lifr_addr,
|
||||||
sizeof (struct sockaddr_storage),
|
sizeof (struct sockaddr_storage),
|
||||||
netmask, sizeof (struct sockaddr_storage),
|
netmask, sizeof (struct sockaddr_storage),
|
||||||
broadaddr, sizeof (struct sockaddr_storage),
|
broadaddr, sizeof (struct sockaddr_storage),
|
||||||
|
884
fad-helpers.c
Normal file
884
fad-helpers.c
Normal file
@ -0,0 +1,884 @@
|
|||||||
|
/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1994, 1995, 1996, 1997, 1998
|
||||||
|
* 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 Computer Systems
|
||||||
|
* Engineering Group at Lawrence Berkeley Laboratory.
|
||||||
|
* 4. Neither the name of the University nor of the Laboratory 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <pcap-stdinc.h>
|
||||||
|
#else /* _WIN32 */
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#ifndef MSDOS
|
||||||
|
#include <sys/file.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#ifdef HAVE_SYS_SOCKIO_H
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct mbuf; /* Squelch compiler warnings on some platforms for */
|
||||||
|
struct rtentry; /* declarations in <net/if.h> */
|
||||||
|
#include <net/if.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <memory.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#if !defined(_WIN32) && !defined(__BORLANDC__)
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif /* !_WIN32 && !__BORLANDC__ */
|
||||||
|
#ifdef HAVE_LIMITS_H
|
||||||
|
#include <limits.h>
|
||||||
|
#else
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "pcap-int.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_OS_PROTO_H
|
||||||
|
#include "os-proto.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
/* Not all systems have IFF_LOOPBACK */
|
||||||
|
#ifdef IFF_LOOPBACK
|
||||||
|
#define ISLOOPBACK(name, flags) ((flags) & IFF_LOOPBACK)
|
||||||
|
#else
|
||||||
|
#define ISLOOPBACK(name, flags) ((name)[0] == 'l' && (name)[1] == 'o' && \
|
||||||
|
(isdigit((unsigned char)((name)[2])) || (name)[2] == '\0'))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef IFF_UP
|
||||||
|
#define ISUP(flags) ((flags) & IFF_UP)
|
||||||
|
#else
|
||||||
|
#define ISUP(flags) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef IFF_RUNNING
|
||||||
|
#define ISRUNNING(flags) ((flags) & IFF_RUNNING)
|
||||||
|
#else
|
||||||
|
#define ISRUNNING(flags) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Map UN*X-style interface flags to libpcap flags.
|
||||||
|
*/
|
||||||
|
bpf_u_int32
|
||||||
|
if_flags_to_pcap_flags(const char *name _U_, u_int if_flags)
|
||||||
|
{
|
||||||
|
bpf_u_int32 pcap_flags;
|
||||||
|
|
||||||
|
pcap_flags = 0;
|
||||||
|
if (ISLOOPBACK(name, if_flags))
|
||||||
|
pcap_flags |= PCAP_IF_LOOPBACK;
|
||||||
|
if (ISUP(if_flags))
|
||||||
|
pcap_flags |= PCAP_IF_UP;
|
||||||
|
if (ISRUNNING(if_flags))
|
||||||
|
pcap_flags |= PCAP_IF_RUNNING;
|
||||||
|
return (pcap_flags);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static struct sockaddr *
|
||||||
|
dup_sockaddr(struct sockaddr *sa, size_t sa_length)
|
||||||
|
{
|
||||||
|
struct sockaddr *newsa;
|
||||||
|
|
||||||
|
if ((newsa = malloc(sa_length)) == NULL)
|
||||||
|
return (NULL);
|
||||||
|
return (memcpy(newsa, sa, sa_length));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Construct a "figure of merit" for an interface, for use when sorting
|
||||||
|
* the list of interfaces, in which interfaces that are up are superior
|
||||||
|
* to interfaces that aren't up, interfaces that are up and running are
|
||||||
|
* superior to interfaces that are up but not running, and non-loopback
|
||||||
|
* interfaces that are up and running are superior to loopback interfaces,
|
||||||
|
* and interfaces with the same flags have a figure of merit that's higher
|
||||||
|
* the lower the instance number.
|
||||||
|
*
|
||||||
|
* The goal is to try to put the interfaces most likely to be useful for
|
||||||
|
* capture at the beginning of the list.
|
||||||
|
*
|
||||||
|
* The figure of merit, which is lower the "better" the interface is,
|
||||||
|
* has the uppermost bit set if the interface isn't running, the bit
|
||||||
|
* below that set if the interface isn't up, the bit below that set
|
||||||
|
* if the interface is a loopback interface, and the interface index
|
||||||
|
* in the 29 bits below that. (Yes, we assume u_int is 32 bits.)
|
||||||
|
*/
|
||||||
|
static u_int
|
||||||
|
get_figure_of_merit(pcap_if_t *dev)
|
||||||
|
{
|
||||||
|
const char *cp;
|
||||||
|
u_int n;
|
||||||
|
|
||||||
|
if (strcmp(dev->name, "any") == 0) {
|
||||||
|
/*
|
||||||
|
* Give the "any" device an artificially high instance
|
||||||
|
* number, so it shows up after all other non-loopback
|
||||||
|
* interfaces.
|
||||||
|
*/
|
||||||
|
n = 0x1FFFFFFF; /* 29 all-1 bits */
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* A number at the end of the device name string is
|
||||||
|
* assumed to be a unit number.
|
||||||
|
*/
|
||||||
|
cp = dev->name + strlen(dev->name) - 1;
|
||||||
|
while (cp-1 >= dev->name && *(cp-1) >= '0' && *(cp-1) <= '9')
|
||||||
|
cp--;
|
||||||
|
if (*cp >= '0' && *cp <= '9')
|
||||||
|
n = atoi(cp);
|
||||||
|
else
|
||||||
|
n = 0;
|
||||||
|
}
|
||||||
|
if (!(dev->flags & PCAP_IF_RUNNING))
|
||||||
|
n |= 0x80000000;
|
||||||
|
if (!(dev->flags & PCAP_IF_UP))
|
||||||
|
n |= 0x40000000;
|
||||||
|
if (dev->flags & PCAP_IF_LOOPBACK)
|
||||||
|
n |= 0x20000000;
|
||||||
|
return (n);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to get a description for a given device.
|
||||||
|
* Returns a mallocated description if it could and NULL if it couldn't.
|
||||||
|
*
|
||||||
|
* XXX - on FreeBSDs that support it, should it get the sysctl named
|
||||||
|
* "dev.{adapter family name}.{adapter unit}.%desc" to get a description
|
||||||
|
* of the adapter? Note that "dev.an.0.%desc" is "Aironet PC4500/PC4800"
|
||||||
|
* with my Cisco 350 card, so the name isn't entirely descriptive. The
|
||||||
|
* "dev.an.0.%pnpinfo" has a better description, although one might argue
|
||||||
|
* that the problem is really a driver bug - if it can find out that it's
|
||||||
|
* 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? 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 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.
|
||||||
|
*
|
||||||
|
* 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?
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
get_if_description(const char *name)
|
||||||
|
{
|
||||||
|
#ifdef SIOCGIFDESCR
|
||||||
|
char *description = NULL;
|
||||||
|
int s;
|
||||||
|
struct ifreq ifrdesc;
|
||||||
|
#ifndef IFDESCRSIZE
|
||||||
|
size_t descrlen = 64;
|
||||||
|
#else
|
||||||
|
size_t descrlen = IFDESCRSIZE;
|
||||||
|
#endif /* IFDESCRSIZE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the description for the interface.
|
||||||
|
*/
|
||||||
|
memset(&ifrdesc, 0, sizeof ifrdesc);
|
||||||
|
strlcpy(ifrdesc.ifr_name, name, sizeof ifrdesc.ifr_name);
|
||||||
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
|
if (s >= 0) {
|
||||||
|
#ifdef __FreeBSD__
|
||||||
|
/*
|
||||||
|
* On FreeBSD, if the buffer isn't big enough for the
|
||||||
|
* description, the ioctl succeeds, but the description
|
||||||
|
* isn't copied, ifr_buffer.length is set to the description
|
||||||
|
* length, and ifr_buffer.buffer is set to NULL.
|
||||||
|
*/
|
||||||
|
for (;;) {
|
||||||
|
free(description);
|
||||||
|
if ((description = malloc(descrlen)) != NULL) {
|
||||||
|
ifrdesc.ifr_buffer.buffer = description;
|
||||||
|
ifrdesc.ifr_buffer.length = descrlen;
|
||||||
|
if (ioctl(s, SIOCGIFDESCR, &ifrdesc) == 0) {
|
||||||
|
if (ifrdesc.ifr_buffer.buffer ==
|
||||||
|
description)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
descrlen = ifrdesc.ifr_buffer.length;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Failed to get interface description.
|
||||||
|
*/
|
||||||
|
free(description);
|
||||||
|
description = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else /* __FreeBSD__ */
|
||||||
|
/*
|
||||||
|
* The only other OS that currently supports
|
||||||
|
* SIOCGIFDESCR is OpenBSD, and it has no way
|
||||||
|
* to get the description length - it's clamped
|
||||||
|
* to a maximum of IFDESCRSIZE.
|
||||||
|
*/
|
||||||
|
if ((description = malloc(descrlen)) != NULL) {
|
||||||
|
ifrdesc.ifr_data = (caddr_t)description;
|
||||||
|
if (ioctl(s, SIOCGIFDESCR, &ifrdesc) != 0) {
|
||||||
|
/*
|
||||||
|
* Failed to get interface description.
|
||||||
|
*/
|
||||||
|
free(description);
|
||||||
|
description = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* __FreeBSD__ */
|
||||||
|
close(s);
|
||||||
|
if (description != NULL && strlen(description) == 0) {
|
||||||
|
/*
|
||||||
|
* Description is empty, so discard it.
|
||||||
|
*/
|
||||||
|
free(description);
|
||||||
|
description = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __FreeBSD__
|
||||||
|
/*
|
||||||
|
* For FreeBSD, if we didn't get a description, and this is
|
||||||
|
* a device with a name of the form usbusN, label it as a USB
|
||||||
|
* bus.
|
||||||
|
*/
|
||||||
|
if (description == NULL) {
|
||||||
|
if (strncmp(name, "usbus", 5) == 0) {
|
||||||
|
/*
|
||||||
|
* OK, it begins with "usbus".
|
||||||
|
*/
|
||||||
|
long busnum;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
busnum = strtol(name + 5, &p, 10);
|
||||||
|
if (errno == 0 && p != name + 5 && *p == '\0' &&
|
||||||
|
busnum >= 0 && busnum <= INT_MAX) {
|
||||||
|
/*
|
||||||
|
* OK, it's a valid number that's not
|
||||||
|
* bigger than INT_MAX. Construct
|
||||||
|
* a description from it.
|
||||||
|
*/
|
||||||
|
static const char descr_prefix[] = "USB bus number ";
|
||||||
|
size_t descr_size;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allow enough room for a 32-bit bus number.
|
||||||
|
* sizeof (descr_prefix) includes the
|
||||||
|
* terminating NUL.
|
||||||
|
*/
|
||||||
|
descr_size = sizeof (descr_prefix) + 10;
|
||||||
|
description = malloc(descr_size);
|
||||||
|
if (description != NULL) {
|
||||||
|
pcap_snprintf(description, descr_size,
|
||||||
|
"%s%ld", descr_prefix, busnum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return (description);
|
||||||
|
#else /* SIOCGIFDESCR */
|
||||||
|
return (NULL);
|
||||||
|
#endif /* SIOCGIFDESCR */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Look for a given device in the specified list of devices.
|
||||||
|
*
|
||||||
|
* If we find it, return 0 and set *curdev_ret to point to it.
|
||||||
|
*
|
||||||
|
* If we don't find it, check whether we can open it:
|
||||||
|
*
|
||||||
|
* If that fails with PCAP_ERROR_NO_SUCH_DEVICE or
|
||||||
|
* PCAP_ERROR_IFACE_NOT_UP, don't attempt to add an entry for
|
||||||
|
* it, as that probably means it exists but doesn't support
|
||||||
|
* packet capture.
|
||||||
|
*
|
||||||
|
* Otherwise, attempt to add an entry for it, with the specified
|
||||||
|
* ifnet flags and description, and, if that succeeds, return 0
|
||||||
|
* and set *curdev_ret to point to the new entry, otherwise
|
||||||
|
* return PCAP_ERROR and set errbuf to an error message. If we
|
||||||
|
* weren't given a description, try to get one.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
add_or_find_if(pcap_if_t **curdev_ret, pcap_if_t **alldevs, const char *name,
|
||||||
|
bpf_u_int32 flags, const char *description, char *errbuf)
|
||||||
|
{
|
||||||
|
pcap_t *p;
|
||||||
|
pcap_if_t *curdev, *prevdev, *nextdev;
|
||||||
|
u_int this_figure_of_merit, nextdev_figure_of_merit;
|
||||||
|
char open_errbuf[PCAP_ERRBUF_SIZE];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Is there already an entry in the list for this interface?
|
||||||
|
*/
|
||||||
|
for (curdev = *alldevs; curdev != NULL; curdev = curdev->next) {
|
||||||
|
if (strcmp(name, curdev->name) == 0)
|
||||||
|
break; /* yes, we found it */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curdev == NULL) {
|
||||||
|
/*
|
||||||
|
* No, we didn't find it.
|
||||||
|
*
|
||||||
|
* Can we open this interface for live capture?
|
||||||
|
*
|
||||||
|
* We do this check so that interfaces that are
|
||||||
|
* supplied by the interface enumeration mechanism
|
||||||
|
* we're using but that don't support packet capture
|
||||||
|
* aren't included in the list. Loopback interfaces
|
||||||
|
* on Solaris are an example of this; we don't just
|
||||||
|
* omit loopback interfaces on all platforms because
|
||||||
|
* you *can* capture on loopback interfaces on some
|
||||||
|
* OSes.
|
||||||
|
*
|
||||||
|
* On OS X, we don't do this check if the device
|
||||||
|
* name begins with "wlt"; at least some versions
|
||||||
|
* of OS X offer monitor mode capturing by having
|
||||||
|
* a separate "monitor mode" device for each wireless
|
||||||
|
* adapter, rather than by implementing the ioctls
|
||||||
|
* that {Free,Net,Open,DragonFly}BSD provide.
|
||||||
|
* Opening that device puts the adapter into monitor
|
||||||
|
* mode, which, at least for some adapters, causes
|
||||||
|
* them to deassociate from the network with which
|
||||||
|
* they're associated.
|
||||||
|
*
|
||||||
|
* Instead, we try to open the corresponding "en"
|
||||||
|
* device (so that we don't end up with, for users
|
||||||
|
* without sufficient privilege to open capture
|
||||||
|
* devices, a list of adapters that only includes
|
||||||
|
* the wlt devices).
|
||||||
|
*/
|
||||||
|
#ifdef __APPLE__
|
||||||
|
if (strncmp(name, "wlt", 3) == 0) {
|
||||||
|
char *en_name;
|
||||||
|
size_t en_name_len;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to allocate a buffer for the "en"
|
||||||
|
* device's name.
|
||||||
|
*/
|
||||||
|
en_name_len = strlen(name) - 1;
|
||||||
|
en_name = malloc(en_name_len + 1);
|
||||||
|
if (en_name == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
strcpy(en_name, "en");
|
||||||
|
strcat(en_name, name + 3);
|
||||||
|
p = pcap_create(en_name, open_errbuf);
|
||||||
|
free(en_name);
|
||||||
|
} else
|
||||||
|
#endif /* __APPLE */
|
||||||
|
p = pcap_create(name, open_errbuf);
|
||||||
|
if (p == NULL) {
|
||||||
|
/*
|
||||||
|
* The attempt to create the pcap_t failed;
|
||||||
|
* that's probably an indication that we're
|
||||||
|
* out of memory.
|
||||||
|
*
|
||||||
|
* Don't bother including this interface,
|
||||||
|
* but don't treat it as an error.
|
||||||
|
*/
|
||||||
|
*curdev_ret = NULL;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
/* Small snaplen, so we don't try to allocate much memory. */
|
||||||
|
pcap_set_snaplen(p, 68);
|
||||||
|
ret = pcap_activate(p);
|
||||||
|
pcap_close(p);
|
||||||
|
switch (ret) {
|
||||||
|
|
||||||
|
case PCAP_ERROR_NO_SUCH_DEVICE:
|
||||||
|
case PCAP_ERROR_IFACE_NOT_UP:
|
||||||
|
/*
|
||||||
|
* We expect these two errors - they're the
|
||||||
|
* reason we try to open the device.
|
||||||
|
*
|
||||||
|
* PCAP_ERROR_NO_SUCH_DEVICE typically means
|
||||||
|
* "there's no such device *known to the
|
||||||
|
* OS's capture mechanism*", so, even though
|
||||||
|
* it might be a valid network interface, you
|
||||||
|
* can't capture on it (e.g., the loopback
|
||||||
|
* device in Solaris up to Solaris 10, or
|
||||||
|
* the vmnet devices in OS X with VMware
|
||||||
|
* Fusion). We don't include those devices
|
||||||
|
* in our list of devices, as there's no
|
||||||
|
* point in doing so - they're not available
|
||||||
|
* for capture.
|
||||||
|
*
|
||||||
|
* PCAP_ERROR_IFACE_NOT_UP means that the
|
||||||
|
* OS's capture mechanism doesn't work on
|
||||||
|
* interfaces not marked as up; some capture
|
||||||
|
* mechanisms *do* support that, so we no
|
||||||
|
* longer reject those interfaces out of hand,
|
||||||
|
* but we *do* want to reject them if they
|
||||||
|
* can't be opened for capture.
|
||||||
|
*/
|
||||||
|
*curdev_ret = NULL;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Yes, we can open it, or we can't, for some other
|
||||||
|
* reason.
|
||||||
|
*
|
||||||
|
* If we can open it, we want to offer it for
|
||||||
|
* capture, as you can capture on it. If we can't,
|
||||||
|
* we want to offer it for capture, so that, if
|
||||||
|
* the user tries to capture on it, they'll get
|
||||||
|
* an error and they'll know why they can't
|
||||||
|
* capture on it (e.g., insufficient permissions)
|
||||||
|
* or they'll report it as a problem (and then
|
||||||
|
* have the error message to provide as information).
|
||||||
|
*
|
||||||
|
* Allocate a new entry.
|
||||||
|
*/
|
||||||
|
curdev = malloc(sizeof(pcap_if_t));
|
||||||
|
if (curdev == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fill in the entry.
|
||||||
|
*/
|
||||||
|
curdev->next = NULL;
|
||||||
|
curdev->name = strdup(name);
|
||||||
|
if (curdev->name == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
free(curdev);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (description == NULL) {
|
||||||
|
/*
|
||||||
|
* We weren't handed a description for the
|
||||||
|
* interface, so see if we can generate one
|
||||||
|
* ourselves.
|
||||||
|
*/
|
||||||
|
curdev->description = get_if_description(name);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* We were handed a description; make a copy.
|
||||||
|
*/
|
||||||
|
curdev->description = strdup(description);
|
||||||
|
if (curdev->description == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
free(curdev->name);
|
||||||
|
free(curdev);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
curdev->addresses = NULL; /* list starts out as empty */
|
||||||
|
curdev->flags = flags;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add it to the list, in the appropriate location.
|
||||||
|
* First, get the "figure of merit" for this
|
||||||
|
* interface.
|
||||||
|
*/
|
||||||
|
this_figure_of_merit = get_figure_of_merit(curdev);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now look for the last interface with an figure of merit
|
||||||
|
* less than or equal to the new interface's figure of
|
||||||
|
* merit.
|
||||||
|
*
|
||||||
|
* We start with "prevdev" being NULL, meaning we're before
|
||||||
|
* the first element in the list.
|
||||||
|
*/
|
||||||
|
prevdev = NULL;
|
||||||
|
for (;;) {
|
||||||
|
/*
|
||||||
|
* Get the interface after this one.
|
||||||
|
*/
|
||||||
|
if (prevdev == NULL) {
|
||||||
|
/*
|
||||||
|
* The next element is the first element.
|
||||||
|
*/
|
||||||
|
nextdev = *alldevs;
|
||||||
|
} else
|
||||||
|
nextdev = prevdev->next;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Are we at the end of the list?
|
||||||
|
*/
|
||||||
|
if (nextdev == NULL) {
|
||||||
|
/*
|
||||||
|
* Yes - we have to put the new entry
|
||||||
|
* after "prevdev".
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Is the new interface's figure of merit less
|
||||||
|
* than the next interface's figure of merit,
|
||||||
|
* meaning that the new interface is better
|
||||||
|
* than the next interface?
|
||||||
|
*/
|
||||||
|
nextdev_figure_of_merit = get_figure_of_merit(nextdev);
|
||||||
|
if (this_figure_of_merit < nextdev_figure_of_merit) {
|
||||||
|
/*
|
||||||
|
* Yes - we should put the new entry
|
||||||
|
* before "nextdev", i.e. after "prevdev".
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
prevdev = nextdev;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert before "nextdev".
|
||||||
|
*/
|
||||||
|
curdev->next = nextdev;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert after "prevdev" - unless "prevdev" is null,
|
||||||
|
* in which case this is the first interface.
|
||||||
|
*/
|
||||||
|
if (prevdev == NULL) {
|
||||||
|
/*
|
||||||
|
* This is the first interface. Pass back a
|
||||||
|
* pointer to it, and put "curdev" before
|
||||||
|
* "nextdev".
|
||||||
|
*/
|
||||||
|
*alldevs = curdev;
|
||||||
|
} else
|
||||||
|
prevdev->next = curdev;
|
||||||
|
}
|
||||||
|
|
||||||
|
*curdev_ret = curdev;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try to get a description for a given device, and then look for that
|
||||||
|
* device in the specified list of devices.
|
||||||
|
*
|
||||||
|
* If we find it, then, if the specified address isn't null, add it to
|
||||||
|
* the list of addresses for the device and return 0.
|
||||||
|
*
|
||||||
|
* If we don't find it, check whether we can open it:
|
||||||
|
*
|
||||||
|
* If that fails with PCAP_ERROR_NO_SUCH_DEVICE or
|
||||||
|
* PCAP_ERROR_IFACE_NOT_UP, don't attempt to add an entry for
|
||||||
|
* it, as that probably means it exists but doesn't support
|
||||||
|
* packet capture.
|
||||||
|
*
|
||||||
|
* Otherwise, attempt to add an entry for it, with the specified
|
||||||
|
* ifnet flags, and, if that succeeds, add the specified address
|
||||||
|
* to its list of addresses if that address is non-null, set
|
||||||
|
* *curdev_ret to point to the new entry, and return 0, otherwise
|
||||||
|
* return PCAP_ERROR and set errbuf to an error message.
|
||||||
|
*
|
||||||
|
* (We can get called with a null address because we might get a list
|
||||||
|
* of interface name/address combinations from the underlying OS, with
|
||||||
|
* the address being absent in some cases, rather than a list of
|
||||||
|
* interfaces with each interface having a list of addresses, so this
|
||||||
|
* call may be the only call made to add to the list, and we want to
|
||||||
|
* add interfaces even if they have no addresses.)
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
add_addr_to_iflist(pcap_if_t **alldevs, const char *name, bpf_u_int32 flags,
|
||||||
|
struct sockaddr *addr, size_t addr_size,
|
||||||
|
struct sockaddr *netmask, size_t netmask_size,
|
||||||
|
struct sockaddr *broadaddr, size_t broadaddr_size,
|
||||||
|
struct sockaddr *dstaddr, size_t dstaddr_size,
|
||||||
|
char *errbuf)
|
||||||
|
{
|
||||||
|
pcap_if_t *curdev;
|
||||||
|
|
||||||
|
if (add_or_find_if(&curdev, alldevs, name, flags, NULL, errbuf) == -1) {
|
||||||
|
/*
|
||||||
|
* Error - give up.
|
||||||
|
*/
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (curdev == NULL) {
|
||||||
|
/*
|
||||||
|
* Device wasn't added because it can't be opened.
|
||||||
|
* Not a fatal error.
|
||||||
|
*/
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addr == NULL) {
|
||||||
|
/*
|
||||||
|
* There's no address to add; this entry just meant
|
||||||
|
* "here's a new interface".
|
||||||
|
*/
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "curdev" is an entry for this interface, and we have an
|
||||||
|
* address for it; add an entry for that address to the
|
||||||
|
* interface's list of addresses.
|
||||||
|
*
|
||||||
|
* Allocate the new entry and fill it in.
|
||||||
|
*/
|
||||||
|
return (add_addr_to_dev(curdev, addr, addr_size, netmask,
|
||||||
|
netmask_size, broadaddr, broadaddr_size, dstaddr,
|
||||||
|
dstaddr_size, errbuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add an entry to the list of addresses for an interface.
|
||||||
|
* "curdev" is the entry for that interface.
|
||||||
|
* If this is the first IP address added to the interface, move it
|
||||||
|
* in the list as appropriate.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
add_addr_to_dev(pcap_if_t *curdev,
|
||||||
|
struct sockaddr *addr, size_t addr_size,
|
||||||
|
struct sockaddr *netmask, size_t netmask_size,
|
||||||
|
struct sockaddr *broadaddr, size_t broadaddr_size,
|
||||||
|
struct sockaddr *dstaddr, size_t dstaddr_size,
|
||||||
|
char *errbuf)
|
||||||
|
{
|
||||||
|
pcap_addr_t *curaddr, *prevaddr, *nextaddr;
|
||||||
|
|
||||||
|
curaddr = malloc(sizeof(pcap_addr_t));
|
||||||
|
if (curaddr == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
curaddr->next = NULL;
|
||||||
|
if (addr != NULL) {
|
||||||
|
curaddr->addr = dup_sockaddr(addr, addr_size);
|
||||||
|
if (curaddr->addr == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
free(curaddr);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
curaddr->addr = NULL;
|
||||||
|
|
||||||
|
if (netmask != NULL) {
|
||||||
|
curaddr->netmask = dup_sockaddr(netmask, netmask_size);
|
||||||
|
if (curaddr->netmask == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
if (curaddr->addr != NULL)
|
||||||
|
free(curaddr->addr);
|
||||||
|
free(curaddr);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
curaddr->netmask = NULL;
|
||||||
|
|
||||||
|
if (broadaddr != NULL) {
|
||||||
|
curaddr->broadaddr = dup_sockaddr(broadaddr, broadaddr_size);
|
||||||
|
if (curaddr->broadaddr == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
if (curaddr->netmask != NULL)
|
||||||
|
free(curaddr->netmask);
|
||||||
|
if (curaddr->addr != NULL)
|
||||||
|
free(curaddr->addr);
|
||||||
|
free(curaddr);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
curaddr->broadaddr = NULL;
|
||||||
|
|
||||||
|
if (dstaddr != NULL) {
|
||||||
|
curaddr->dstaddr = dup_sockaddr(dstaddr, dstaddr_size);
|
||||||
|
if (curaddr->dstaddr == NULL) {
|
||||||
|
(void)pcap_snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
||||||
|
"malloc: %s", pcap_strerror(errno));
|
||||||
|
if (curaddr->broadaddr != NULL)
|
||||||
|
free(curaddr->broadaddr);
|
||||||
|
if (curaddr->netmask != NULL)
|
||||||
|
free(curaddr->netmask);
|
||||||
|
if (curaddr->addr != NULL)
|
||||||
|
free(curaddr->addr);
|
||||||
|
free(curaddr);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
curaddr->dstaddr = NULL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Find the end of the list of addresses.
|
||||||
|
*/
|
||||||
|
for (prevaddr = curdev->addresses; prevaddr != NULL; prevaddr = nextaddr) {
|
||||||
|
nextaddr = prevaddr->next;
|
||||||
|
if (nextaddr == NULL) {
|
||||||
|
/*
|
||||||
|
* This is the end of the list.
|
||||||
|
*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prevaddr == NULL) {
|
||||||
|
/*
|
||||||
|
* The list was empty; this is the first member.
|
||||||
|
*/
|
||||||
|
curdev->addresses = curaddr;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* "prevaddr" is the last member of the list; append
|
||||||
|
* this member to it.
|
||||||
|
*/
|
||||||
|
prevaddr->next = curaddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Look for a given device in the specified list of devices.
|
||||||
|
*
|
||||||
|
* If we find it, return 0.
|
||||||
|
*
|
||||||
|
* If we don't find it, check whether we can open it:
|
||||||
|
*
|
||||||
|
* If that fails with PCAP_ERROR_NO_SUCH_DEVICE or
|
||||||
|
* PCAP_ERROR_IFACE_NOT_UP, don't attempt to add an entry for
|
||||||
|
* it, as that probably means it exists but doesn't support
|
||||||
|
* packet capture.
|
||||||
|
*
|
||||||
|
* Otherwise, attempt to add an entry for it, with the specified
|
||||||
|
* ifnet flags and description, and, if that succeeds, return 0
|
||||||
|
* and set *curdev_ret to point to the new entry, otherwise
|
||||||
|
* return PCAP_ERROR and set errbuf to an error message.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pcap_add_if(pcap_if_t **devlist, const char *name, u_int flags,
|
||||||
|
const char *description, char *errbuf)
|
||||||
|
{
|
||||||
|
pcap_if_t *curdev;
|
||||||
|
|
||||||
|
return (add_or_find_if(&curdev, devlist, name, flags, description,
|
||||||
|
errbuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free a list of interfaces.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
pcap_freealldevs(pcap_if_t *alldevs)
|
||||||
|
{
|
||||||
|
pcap_if_t *curdev, *nextdev;
|
||||||
|
pcap_addr_t *curaddr, *nextaddr;
|
||||||
|
|
||||||
|
for (curdev = alldevs; curdev != NULL; curdev = nextdev) {
|
||||||
|
nextdev = curdev->next;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free all addresses.
|
||||||
|
*/
|
||||||
|
for (curaddr = curdev->addresses; curaddr != NULL; curaddr = nextaddr) {
|
||||||
|
nextaddr = curaddr->next;
|
||||||
|
if (curaddr->addr)
|
||||||
|
free(curaddr->addr);
|
||||||
|
if (curaddr->netmask)
|
||||||
|
free(curaddr->netmask);
|
||||||
|
if (curaddr->broadaddr)
|
||||||
|
free(curaddr->broadaddr);
|
||||||
|
if (curaddr->dstaddr)
|
||||||
|
free(curaddr->dstaddr);
|
||||||
|
free(curaddr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the name string.
|
||||||
|
*/
|
||||||
|
free(curdev->name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the description string, if any.
|
||||||
|
*/
|
||||||
|
if (curdev->description != NULL)
|
||||||
|
free(curdev->description);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the interface.
|
||||||
|
*/
|
||||||
|
free(curdev);
|
||||||
|
}
|
||||||
|
}
|
59
fad-sita.c
59
fad-sita.c
@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* fad-sita.c: Packet capture interface additions for SITA ACN devices
|
|
||||||
*
|
|
||||||
* Copyright (c) 2007 Fulko Hew, SITA INC Canada, Inc <fulko.hew@sita.aero>
|
|
||||||
*
|
|
||||||
* License: BSD
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in
|
|
||||||
* the documentation and/or other materials provided with the
|
|
||||||
* distribution.
|
|
||||||
* 3. The names of the authors may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include "pcap-int.h"
|
|
||||||
|
|
||||||
#include "pcap-sita.h"
|
|
||||||
|
|
||||||
extern pcap_if_t *acn_if_list; /* pcap's list of available interfaces */
|
|
||||||
|
|
||||||
int pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf) {
|
|
||||||
|
|
||||||
//printf("pcap_findalldevs()\n"); // fulko
|
|
||||||
|
|
||||||
*alldevsp = 0; /* initialize the returned variables before we do anything */
|
|
||||||
strcpy(errbuf, "");
|
|
||||||
if (acn_parse_hosts_file(errbuf)) /* scan the hosts file for potential IOPs */
|
|
||||||
{
|
|
||||||
//printf("pcap_findalldevs() returning BAD after parsehosts\n"); // fulko
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
//printf("pcap_findalldevs() got hostlist now finding devs\n"); // fulko
|
|
||||||
if (acn_findalldevs(errbuf)) /* then ask the IOPs for their monitorable devices */
|
|
||||||
{
|
|
||||||
//printf("pcap_findalldevs() returning BAD after findalldevs\n"); // fulko
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*alldevsp = acn_if_list;
|
|
||||||
acn_if_list = 0; /* then forget our list head, because someone will call pcap_freealldevs() to empty the malloc'ed stuff */
|
|
||||||
//printf("pcap_findalldevs() returning ZERO OK\n"); // fulko
|
|
||||||
return 0;
|
|
||||||
}
|
|
248
fad-win32.c
248
fad-win32.c
@ -1,248 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy)
|
|
||||||
* Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* 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, CACE Technologies
|
|
||||||
* nor the names of its contributors may be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior written
|
|
||||||
* permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <pcap.h>
|
|
||||||
#include <pcap-int.h>
|
|
||||||
#include <Packet32.h>
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
static int
|
|
||||||
pcap_add_if_win32(pcap_if_t **devlist, char *name, const char *desc,
|
|
||||||
char *errbuf)
|
|
||||||
{
|
|
||||||
pcap_if_t *curdev;
|
|
||||||
npf_if_addr if_addrs[MAX_NETWORK_ADDRESSES];
|
|
||||||
LONG if_addr_size;
|
|
||||||
int res = 0;
|
|
||||||
|
|
||||||
if_addr_size = MAX_NETWORK_ADDRESSES;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add an entry for this interface, with no addresses.
|
|
||||||
*/
|
|
||||||
if (add_or_find_if(&curdev, devlist, name, 0, desc, errbuf) == -1) {
|
|
||||||
/*
|
|
||||||
* Failure.
|
|
||||||
*/
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the list of addresses for the interface.
|
|
||||||
*/
|
|
||||||
if (!PacketGetNetInfoEx((void *)name, if_addrs, &if_addr_size)) {
|
|
||||||
/*
|
|
||||||
* Failure.
|
|
||||||
*
|
|
||||||
* We don't return an error, because this can happen with
|
|
||||||
* NdisWan interfaces, and we want to supply them even
|
|
||||||
* if we can't supply their addresses.
|
|
||||||
*
|
|
||||||
* We return an entry with an empty address list.
|
|
||||||
*/
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now add the addresses.
|
|
||||||
*/
|
|
||||||
while (if_addr_size-- > 0) {
|
|
||||||
/*
|
|
||||||
* "curdev" is an entry for this interface; add an entry for
|
|
||||||
* this address to its list of addresses.
|
|
||||||
*/
|
|
||||||
if(curdev == NULL)
|
|
||||||
break;
|
|
||||||
res = add_addr_to_dev(curdev,
|
|
||||||
(struct sockaddr *)&if_addrs[if_addr_size].IPAddress,
|
|
||||||
sizeof (struct sockaddr_storage),
|
|
||||||
(struct sockaddr *)&if_addrs[if_addr_size].SubnetMask,
|
|
||||||
sizeof (struct sockaddr_storage),
|
|
||||||
(struct sockaddr *)&if_addrs[if_addr_size].Broadcast,
|
|
||||||
sizeof (struct sockaddr_storage),
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
errbuf);
|
|
||||||
if (res == -1) {
|
|
||||||
/*
|
|
||||||
* Failure.
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (res);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get a list of all interfaces that are up and that we can open.
|
|
||||||
* Returns -1 on error, 0 otherwise.
|
|
||||||
* The list, as returned through "alldevsp", may be null if no interfaces
|
|
||||||
* were up and could be opened.
|
|
||||||
*
|
|
||||||
* Win32 implementation, based on WinPcap
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
|
||||||
{
|
|
||||||
pcap_if_t *devlist = NULL;
|
|
||||||
int ret = 0;
|
|
||||||
const char *desc;
|
|
||||||
char *AdaptersName;
|
|
||||||
ULONG NameLength;
|
|
||||||
char *name;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find out how big a buffer we need.
|
|
||||||
*
|
|
||||||
* This call should always return FALSE; if the error is
|
|
||||||
* ERROR_INSUFFICIENT_BUFFER, NameLength will be set to
|
|
||||||
* the size of the buffer we need, otherwise there's a
|
|
||||||
* problem, and NameLength should be set to 0.
|
|
||||||
*
|
|
||||||
* It shouldn't require NameLength to be set, but,
|
|
||||||
* at least as of WinPcap 4.1.3, it checks whether
|
|
||||||
* NameLength is big enough before it checks for a
|
|
||||||
* NULL buffer argument, so, while it'll still do
|
|
||||||
* the right thing if NameLength is uninitialized and
|
|
||||||
* whatever junk happens to be there is big enough
|
|
||||||
* (because the pointer argument will be null), it's
|
|
||||||
* still reading an uninitialized variable.
|
|
||||||
*/
|
|
||||||
NameLength = 0;
|
|
||||||
if (!PacketGetAdapterNames(NULL, &NameLength))
|
|
||||||
{
|
|
||||||
DWORD last_error = GetLastError();
|
|
||||||
|
|
||||||
if (last_error != ERROR_INSUFFICIENT_BUFFER)
|
|
||||||
{
|
|
||||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
||||||
"PacketGetAdapterNames: %s",
|
|
||||||
pcap_win32strerror());
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NameLength > 0)
|
|
||||||
AdaptersName = (char*) malloc(NameLength);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*alldevsp = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (AdaptersName == NULL)
|
|
||||||
{
|
|
||||||
snprintf(errbuf, PCAP_ERRBUF_SIZE, "Cannot allocate enough memory to list the adapters.");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!PacketGetAdapterNames(AdaptersName, &NameLength)) {
|
|
||||||
snprintf(errbuf, PCAP_ERRBUF_SIZE,
|
|
||||||
"PacketGetAdapterNames: %s",
|
|
||||||
pcap_win32strerror());
|
|
||||||
free(AdaptersName);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* "PacketGetAdapterNames()" returned a list of
|
|
||||||
* null-terminated ASCII interface name strings,
|
|
||||||
* terminated by a null string, followed by a list
|
|
||||||
* of null-terminated ASCII interface description
|
|
||||||
* strings, terminated by a null string.
|
|
||||||
* This means there are two ASCII nulls at the end
|
|
||||||
* of the first list.
|
|
||||||
*
|
|
||||||
* Find the end of the first list; that's the
|
|
||||||
* beginning of the second list.
|
|
||||||
*/
|
|
||||||
desc = &AdaptersName[0];
|
|
||||||
while (*desc != '\0' || *(desc + 1) != '\0')
|
|
||||||
desc++;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Found it - "desc" points to the first of the two
|
|
||||||
* nulls at the end of the list of names, so the
|
|
||||||
* first byte of the list of descriptions is two bytes
|
|
||||||
* after it.
|
|
||||||
*/
|
|
||||||
desc += 2;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Loop over the elements in the first list.
|
|
||||||
*/
|
|
||||||
name = &AdaptersName[0];
|
|
||||||
while (*name != '\0') {
|
|
||||||
/*
|
|
||||||
* Add an entry for this interface.
|
|
||||||
*/
|
|
||||||
if (pcap_add_if_win32(&devlist, name, desc, errbuf) == -1) {
|
|
||||||
/*
|
|
||||||
* Failure.
|
|
||||||
*/
|
|
||||||
ret = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
name += strlen(name) + 1;
|
|
||||||
desc += strlen(desc) + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret != -1) {
|
|
||||||
/*
|
|
||||||
* We haven't had any errors yet; do any platform-specific
|
|
||||||
* operations to add devices.
|
|
||||||
*/
|
|
||||||
if (pcap_platform_finddevs(&devlist, errbuf) < 0)
|
|
||||||
ret = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ret == -1) {
|
|
||||||
/*
|
|
||||||
* We had an error; free the list we've been constructing.
|
|
||||||
*/
|
|
||||||
if (devlist != NULL) {
|
|
||||||
pcap_freealldevs(devlist);
|
|
||||||
devlist = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*alldevsp = devlist;
|
|
||||||
free(AdaptersName);
|
|
||||||
return (ret);
|
|
||||||
}
|
|
11
gen_version_c.sh
Executable file
11
gen_version_c.sh
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
echo '#include <pcap/export-defs.h>' > "$2"
|
||||||
|
echo 'PCAP_API_DEF' >> "$2"
|
||||||
|
if grep GIT "$1" >/dev/null; then
|
||||||
|
read ver <"$1"
|
||||||
|
echo $ver | tr -d '\012'
|
||||||
|
date +_%Y_%m_%d
|
||||||
|
else
|
||||||
|
cat "$1"
|
||||||
|
fi | sed -e 's/.*/char pcap_version[] = "&";/' >> "$2"
|
||||||
|
|
19
gen_version_header.sh
Executable file
19
gen_version_header.sh
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
print_version_string()
|
||||||
|
{
|
||||||
|
if grep GIT "$1" >/dev/null
|
||||||
|
then
|
||||||
|
read ver <"$1"
|
||||||
|
echo $ver | tr -d '\012'
|
||||||
|
date +_%Y_%m_%d
|
||||||
|
else
|
||||||
|
cat "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
if test $# != 3
|
||||||
|
then
|
||||||
|
echo "Usage: gen_version_header.sh <version file> <template> <output file>" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
version_string=`print_version_string "$1"`
|
||||||
|
sed "s/%%LIBPCAP_VERSION%%/$version_string/" "$2" >"$3"
|
142
gencode.h
142
gencode.h
@ -161,7 +161,7 @@
|
|||||||
#define A_CONNECTACK 44 /* Connect Ack message */
|
#define A_CONNECTACK 44 /* Connect Ack message */
|
||||||
#define A_RELEASE 45 /* Release message */
|
#define A_RELEASE 45 /* Release message */
|
||||||
#define A_RELEASE_DONE 46 /* Release message */
|
#define A_RELEASE_DONE 46 /* Release message */
|
||||||
|
|
||||||
/* ATM field types */
|
/* ATM field types */
|
||||||
#define A_VPI 51
|
#define A_VPI 51
|
||||||
#define A_VCI 52
|
#define A_VCI 52
|
||||||
@ -281,83 +281,115 @@ struct qual {
|
|||||||
unsigned char pad;
|
unsigned char pad;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct arth *gen_loadi(int);
|
struct _compiler_state;
|
||||||
struct arth *gen_load(int, struct arth *, int);
|
|
||||||
struct arth *gen_loadlen(void);
|
typedef struct _compiler_state compiler_state_t;
|
||||||
struct arth *gen_neg(struct arth *);
|
|
||||||
struct arth *gen_arth(int, struct arth *, struct arth *);
|
struct arth *gen_loadi(compiler_state_t *, int);
|
||||||
|
struct arth *gen_load(compiler_state_t *, int, struct arth *, int);
|
||||||
|
struct arth *gen_loadlen(compiler_state_t *);
|
||||||
|
struct arth *gen_neg(compiler_state_t *, struct arth *);
|
||||||
|
struct arth *gen_arth(compiler_state_t *, int, struct arth *, struct arth *);
|
||||||
|
|
||||||
void gen_and(struct block *, struct block *);
|
void gen_and(struct block *, struct block *);
|
||||||
void gen_or(struct block *, struct block *);
|
void gen_or(struct block *, struct block *);
|
||||||
void gen_not(struct block *);
|
void gen_not(struct block *);
|
||||||
|
|
||||||
struct block *gen_scode(const char *, struct qual);
|
struct block *gen_scode(compiler_state_t *, const char *, struct qual);
|
||||||
struct block *gen_ecode(const u_char *, struct qual);
|
struct block *gen_ecode(compiler_state_t *, const u_char *, struct qual);
|
||||||
struct block *gen_acode(const u_char *, struct qual);
|
struct block *gen_acode(compiler_state_t *, const u_char *, struct qual);
|
||||||
struct block *gen_mcode(const char *, const char *, int, struct qual);
|
struct block *gen_mcode(compiler_state_t *, const char *, const char *,
|
||||||
|
unsigned int, struct qual);
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
struct block *gen_mcode6(const char *, const char *, int, struct qual);
|
struct block *gen_mcode6(compiler_state_t *, const char *, const char *,
|
||||||
|
unsigned int, struct qual);
|
||||||
#endif
|
#endif
|
||||||
struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
|
struct block *gen_ncode(compiler_state_t *, const char *, bpf_u_int32,
|
||||||
struct block *gen_proto_abbrev(int);
|
struct qual);
|
||||||
struct block *gen_relation(int, struct arth *, struct arth *, int);
|
struct block *gen_proto_abbrev(compiler_state_t *, int);
|
||||||
struct block *gen_less(int);
|
struct block *gen_relation(compiler_state_t *, int, struct arth *,
|
||||||
struct block *gen_greater(int);
|
struct arth *, int);
|
||||||
struct block *gen_byteop(int, int, int);
|
struct block *gen_less(compiler_state_t *, int);
|
||||||
struct block *gen_broadcast(int);
|
struct block *gen_greater(compiler_state_t *, int);
|
||||||
struct block *gen_multicast(int);
|
struct block *gen_byteop(compiler_state_t *, int, int, int);
|
||||||
struct block *gen_inbound(int);
|
struct block *gen_broadcast(compiler_state_t *, int);
|
||||||
|
struct block *gen_multicast(compiler_state_t *, int);
|
||||||
|
struct block *gen_inbound(compiler_state_t *, int);
|
||||||
|
|
||||||
struct block *gen_llc(void);
|
struct block *gen_llc(compiler_state_t *);
|
||||||
struct block *gen_llc_i(void);
|
struct block *gen_llc_i(compiler_state_t *);
|
||||||
struct block *gen_llc_s(void);
|
struct block *gen_llc_s(compiler_state_t *);
|
||||||
struct block *gen_llc_u(void);
|
struct block *gen_llc_u(compiler_state_t *);
|
||||||
struct block *gen_llc_s_subtype(bpf_u_int32);
|
struct block *gen_llc_s_subtype(compiler_state_t *, bpf_u_int32);
|
||||||
struct block *gen_llc_u_subtype(bpf_u_int32);
|
struct block *gen_llc_u_subtype(compiler_state_t *, bpf_u_int32);
|
||||||
|
|
||||||
struct block *gen_vlan(int);
|
struct block *gen_vlan(compiler_state_t *, int);
|
||||||
struct block *gen_mpls(int);
|
struct block *gen_mpls(compiler_state_t *, int);
|
||||||
|
|
||||||
struct block *gen_pppoed(void);
|
struct block *gen_pppoed(compiler_state_t *);
|
||||||
struct block *gen_pppoes(int);
|
struct block *gen_pppoes(compiler_state_t *, int);
|
||||||
|
|
||||||
struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
|
struct block *gen_geneve(compiler_state_t *, int);
|
||||||
struct block *gen_atmtype_abbrev(int type);
|
|
||||||
struct block *gen_atmmulti_abbrev(int type);
|
|
||||||
|
|
||||||
struct block *gen_mtp2type_abbrev(int type);
|
struct block *gen_atmfield_code(compiler_state_t *, int, bpf_int32,
|
||||||
struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
|
bpf_u_int32, int);
|
||||||
|
struct block *gen_atmtype_abbrev(compiler_state_t *, int type);
|
||||||
|
struct block *gen_atmmulti_abbrev(compiler_state_t *, int type);
|
||||||
|
|
||||||
struct block *gen_pf_ifname(const char *);
|
struct block *gen_mtp2type_abbrev(compiler_state_t *, int type);
|
||||||
struct block *gen_pf_rnr(int);
|
struct block *gen_mtp3field_code(compiler_state_t *, int, bpf_u_int32,
|
||||||
struct block *gen_pf_srnr(int);
|
bpf_u_int32, int);
|
||||||
struct block *gen_pf_ruleset(char *);
|
|
||||||
struct block *gen_pf_reason(int);
|
|
||||||
struct block *gen_pf_action(int);
|
|
||||||
struct block *gen_pf_dir(int);
|
|
||||||
|
|
||||||
struct block *gen_p80211_type(int, int);
|
struct block *gen_pf_ifname(compiler_state_t *, const char *);
|
||||||
struct block *gen_p80211_fcdir(int);
|
struct block *gen_pf_rnr(compiler_state_t *, int);
|
||||||
|
struct block *gen_pf_srnr(compiler_state_t *, int);
|
||||||
|
struct block *gen_pf_ruleset(compiler_state_t *, char *);
|
||||||
|
struct block *gen_pf_reason(compiler_state_t *, int);
|
||||||
|
struct block *gen_pf_action(compiler_state_t *, int);
|
||||||
|
|
||||||
void bpf_optimize(struct block **);
|
struct block *gen_p80211_type(compiler_state_t *, int, int);
|
||||||
void bpf_error(const char *, ...)
|
struct block *gen_p80211_fcdir(compiler_state_t *, int);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Representation of a program as a tree of blocks, plus current mark.
|
||||||
|
* A block is marked if only if its mark equals the current mark.
|
||||||
|
* Rather than traverse the code array, marking each item, 'cur_mark'
|
||||||
|
* is incremented. This automatically makes each element unmarked.
|
||||||
|
*/
|
||||||
|
#define isMarked(icp, p) ((p)->mark == (icp)->cur_mark)
|
||||||
|
#define unMarkAll(icp) (icp)->cur_mark += 1
|
||||||
|
#define Mark(icp, p) ((p)->mark = (icp)->cur_mark)
|
||||||
|
|
||||||
|
struct icode {
|
||||||
|
struct block *root;
|
||||||
|
int cur_mark;
|
||||||
|
};
|
||||||
|
|
||||||
|
void bpf_optimize(compiler_state_t *, struct icode *ic);
|
||||||
|
void bpf_syntax_error(compiler_state_t *, const char *);
|
||||||
|
void bpf_error(compiler_state_t *, const char *, ...)
|
||||||
__attribute__((noreturn))
|
__attribute__((noreturn))
|
||||||
#ifdef __ATTRIBUTE___FORMAT_OK
|
#ifdef __ATTRIBUTE___FORMAT_OK
|
||||||
__attribute__((format (printf, 1, 2)))
|
__attribute__((format (printf, 2, 3)))
|
||||||
#endif /* __ATTRIBUTE___FORMAT_OK */
|
#endif /* __ATTRIBUTE___FORMAT_OK */
|
||||||
;
|
;
|
||||||
|
|
||||||
void finish_parse(struct block *);
|
void finish_parse(compiler_state_t *, struct block *);
|
||||||
char *sdup(const char *);
|
char *sdup(compiler_state_t *, const char *);
|
||||||
|
|
||||||
struct bpf_insn *icode_to_fcode(struct block *, u_int *);
|
struct _opt_state;
|
||||||
int pcap_parse(void);
|
typedef struct _opt_state opt_state_t;
|
||||||
void lex_init(const char *);
|
|
||||||
void lex_cleanup(void);
|
struct bpf_insn *icode_to_fcode(compiler_state_t *, struct icode *,
|
||||||
|
struct block *, u_int *);
|
||||||
void sappend(struct slist *, struct slist *);
|
void sappend(struct slist *, struct slist *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Older versions of Bison don't put this declaration in
|
||||||
|
* grammar.h.
|
||||||
|
*/
|
||||||
|
int pcap_parse(void *, compiler_state_t *);
|
||||||
|
|
||||||
/* XXX */
|
/* XXX */
|
||||||
#define JT(b) ((b)->et.succ)
|
#define JT(b) ((b)->et.succ)
|
||||||
#define JF(b) ((b)->ef.succ)
|
#define JF(b) ((b)->ef.succ)
|
||||||
|
|
||||||
extern int no_optimize;
|
|
||||||
|
249
grammar.y
249
grammar.y
@ -1,3 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* We want a reentrant parser.
|
||||||
|
*/
|
||||||
|
%pure-parser
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We also want a reentrant scanner, so we have to pass the
|
||||||
|
* handle for the reentrant scanner to the parser, and the
|
||||||
|
* parser has to pass it to the lexical analyzer.
|
||||||
|
*
|
||||||
|
* We use void * rather than yyscan_t because, at least with some
|
||||||
|
* versions of Flex and Bison, if you use yyscan_t in %parse-param and
|
||||||
|
* %lex-param, you have to include scanner.h before grammar.h to get
|
||||||
|
* yyscan_t declared, and you have to include grammar.h before scanner.h
|
||||||
|
* to get YYSTYPE declared. Using void * breaks the cycle; the Flex
|
||||||
|
* documentation says yyscan_t is just a void *.
|
||||||
|
*/
|
||||||
|
%parse-param {void *yyscanner}
|
||||||
|
%lex-param {void *yyscanner}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* And we need to pass the compiler state to the scanner.
|
||||||
|
*/
|
||||||
|
%parse-param {compiler_state_t *cstate}
|
||||||
|
|
||||||
%{
|
%{
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
||||||
@ -25,16 +50,16 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <pcap-stdinc.h>
|
#include <pcap-stdinc.h>
|
||||||
#else /* WIN32 */
|
#else /* _WIN32 */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
#if __STDC__
|
#if __STDC__
|
||||||
struct mbuf;
|
struct mbuf;
|
||||||
struct rtentry;
|
struct rtentry;
|
||||||
@ -42,13 +67,16 @@ struct rtentry;
|
|||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "pcap-int.h"
|
#include "pcap-int.h"
|
||||||
|
|
||||||
#include "gencode.h"
|
#include "gencode.h"
|
||||||
|
#include "grammar.h"
|
||||||
|
#include "scanner.h"
|
||||||
|
|
||||||
#ifdef HAVE_NET_PFVAR_H
|
#ifdef HAVE_NET_PFVAR_H
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <net/pfvar.h>
|
#include <net/pfvar.h>
|
||||||
@ -169,31 +197,18 @@ str2tok(const char *str, const struct tok *toks)
|
|||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int n_errors = 0;
|
|
||||||
|
|
||||||
static struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF };
|
static struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF };
|
||||||
|
|
||||||
static void
|
static void
|
||||||
yyerror(const char *msg)
|
yyerror(void *yyscanner, compiler_state_t *cstate, const char *msg)
|
||||||
{
|
{
|
||||||
++n_errors;
|
bpf_syntax_error(cstate, msg);
|
||||||
bpf_error("%s", msg);
|
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NEED_YYPARSE_WRAPPER
|
|
||||||
int yyparse(void);
|
|
||||||
|
|
||||||
int
|
|
||||||
pcap_parse()
|
|
||||||
{
|
|
||||||
return (yyparse());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_NET_PFVAR_H
|
#ifdef HAVE_NET_PFVAR_H
|
||||||
static int
|
static int
|
||||||
pfreason_to_num(const char *reason)
|
pfreason_to_num(compiler_state_t *cstate, const char *reason)
|
||||||
{
|
{
|
||||||
const char *reasons[] = PFRES_NAMES;
|
const char *reasons[] = PFRES_NAMES;
|
||||||
int i;
|
int i;
|
||||||
@ -202,12 +217,12 @@ pfreason_to_num(const char *reason)
|
|||||||
if (pcap_strcasecmp(reason, reasons[i]) == 0)
|
if (pcap_strcasecmp(reason, reasons[i]) == 0)
|
||||||
return (i);
|
return (i);
|
||||||
}
|
}
|
||||||
bpf_error("unknown PF reason");
|
bpf_error(cstate, "unknown PF reason");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pfaction_to_num(const char *action)
|
pfaction_to_num(compiler_state_t *cstate, const char *action)
|
||||||
{
|
{
|
||||||
if (pcap_strcasecmp(action, "pass") == 0 ||
|
if (pcap_strcasecmp(action, "pass") == 0 ||
|
||||||
pcap_strcasecmp(action, "accept") == 0)
|
pcap_strcasecmp(action, "accept") == 0)
|
||||||
@ -226,15 +241,15 @@ pfaction_to_num(const char *action)
|
|||||||
return (PF_NORDR);
|
return (PF_NORDR);
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
bpf_error("unknown PF action");
|
bpf_error(cstate, "unknown PF action");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* !HAVE_NET_PFVAR_H */
|
#else /* !HAVE_NET_PFVAR_H */
|
||||||
static int
|
static int
|
||||||
pfreason_to_num(const char *reason)
|
pfreason_to_num(compiler_state_t *cstate, const char *reason)
|
||||||
{
|
{
|
||||||
bpf_error("libpcap was compiled on a machine without pf support");
|
bpf_error(cstate, "libpcap was compiled on a machine without pf support");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
/* this is to make the VC compiler happy */
|
/* this is to make the VC compiler happy */
|
||||||
@ -242,9 +257,9 @@ pfreason_to_num(const char *reason)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pfaction_to_num(const char *action)
|
pfaction_to_num(compiler_state_t *cstate, const char *action)
|
||||||
{
|
{
|
||||||
bpf_error("libpcap was compiled on a machine without pf support");
|
bpf_error(cstate, "libpcap was compiled on a machine without pf support");
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
|
|
||||||
/* this is to make the VC compiler happy */
|
/* this is to make the VC compiler happy */
|
||||||
@ -299,8 +314,8 @@ pfaction_to_num(const char *action)
|
|||||||
%token LEN
|
%token LEN
|
||||||
%token IPV6 ICMPV6 AH ESP
|
%token IPV6 ICMPV6 AH ESP
|
||||||
%token VLAN MPLS
|
%token VLAN MPLS
|
||||||
%token PPPOED PPPOES
|
%token PPPOED PPPOES GENEVE
|
||||||
%token ISO ESIS CLNP ISIS L1 L2 IIH LSP SNP CSNP PSNP
|
%token ISO ESIS CLNP ISIS L1 L2 IIH LSP SNP CSNP PSNP
|
||||||
%token STP
|
%token STP
|
||||||
%token IPX
|
%token IPX
|
||||||
%token NETBEUI
|
%token NETBEUI
|
||||||
@ -310,7 +325,7 @@ pfaction_to_num(const char *action)
|
|||||||
%token RADIO
|
%token RADIO
|
||||||
%token FISU LSSU MSU HFISU HLSSU HMSU
|
%token FISU LSSU MSU HFISU HLSSU HMSU
|
||||||
%token SIO OPC DPC SLS HSIO HOPC HDPC HSLS
|
%token SIO OPC DPC SLS HSIO HOPC HDPC HSLS
|
||||||
|
|
||||||
|
|
||||||
%type <s> ID
|
%type <s> ID
|
||||||
%type <e> EID
|
%type <e> EID
|
||||||
@ -329,7 +344,7 @@ pfaction_to_num(const char *action)
|
|||||||
%%
|
%%
|
||||||
prog: null expr
|
prog: null expr
|
||||||
{
|
{
|
||||||
finish_parse($2.b);
|
finish_parse(cstate, $2.b);
|
||||||
}
|
}
|
||||||
| null
|
| null
|
||||||
;
|
;
|
||||||
@ -346,48 +361,48 @@ and: AND { $$ = $<blk>0; }
|
|||||||
or: OR { $$ = $<blk>0; }
|
or: OR { $$ = $<blk>0; }
|
||||||
;
|
;
|
||||||
id: nid
|
id: nid
|
||||||
| pnum { $$.b = gen_ncode(NULL, (bpf_u_int32)$1,
|
| pnum { $$.b = gen_ncode(cstate, NULL, (bpf_u_int32)$1,
|
||||||
$$.q = $<blk>0.q); }
|
$$.q = $<blk>0.q); }
|
||||||
| paren pid ')' { $$ = $2; }
|
| paren pid ')' { $$ = $2; }
|
||||||
;
|
;
|
||||||
nid: ID { $$.b = gen_scode($1, $$.q = $<blk>0.q); }
|
nid: ID { $$.b = gen_scode(cstate, $1, $$.q = $<blk>0.q); }
|
||||||
| HID '/' NUM { $$.b = gen_mcode($1, NULL, $3,
|
| HID '/' NUM { $$.b = gen_mcode(cstate, $1, NULL, $3,
|
||||||
$$.q = $<blk>0.q); }
|
$$.q = $<blk>0.q); }
|
||||||
| HID NETMASK HID { $$.b = gen_mcode($1, $3, 0,
|
| HID NETMASK HID { $$.b = gen_mcode(cstate, $1, $3, 0,
|
||||||
$$.q = $<blk>0.q); }
|
$$.q = $<blk>0.q); }
|
||||||
| HID {
|
| HID {
|
||||||
/* Decide how to parse HID based on proto */
|
/* Decide how to parse HID based on proto */
|
||||||
$$.q = $<blk>0.q;
|
$$.q = $<blk>0.q;
|
||||||
if ($$.q.addr == Q_PORT)
|
if ($$.q.addr == Q_PORT)
|
||||||
bpf_error("'port' modifier applied to ip host");
|
bpf_error(cstate, "'port' modifier applied to ip host");
|
||||||
else if ($$.q.addr == Q_PORTRANGE)
|
else if ($$.q.addr == Q_PORTRANGE)
|
||||||
bpf_error("'portrange' modifier applied to ip host");
|
bpf_error(cstate, "'portrange' modifier applied to ip host");
|
||||||
else if ($$.q.addr == Q_PROTO)
|
else if ($$.q.addr == Q_PROTO)
|
||||||
bpf_error("'proto' modifier applied to ip host");
|
bpf_error(cstate, "'proto' modifier applied to ip host");
|
||||||
else if ($$.q.addr == Q_PROTOCHAIN)
|
else if ($$.q.addr == Q_PROTOCHAIN)
|
||||||
bpf_error("'protochain' modifier applied to ip host");
|
bpf_error(cstate, "'protochain' modifier applied to ip host");
|
||||||
$$.b = gen_ncode($1, 0, $$.q);
|
$$.b = gen_ncode(cstate, $1, 0, $$.q);
|
||||||
}
|
}
|
||||||
| HID6 '/' NUM {
|
| HID6 '/' NUM {
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
$$.b = gen_mcode6($1, NULL, $3,
|
$$.b = gen_mcode6(cstate, $1, NULL, $3,
|
||||||
$$.q = $<blk>0.q);
|
$$.q = $<blk>0.q);
|
||||||
#else
|
#else
|
||||||
bpf_error("'ip6addr/prefixlen' not supported "
|
bpf_error(cstate, "'ip6addr/prefixlen' not supported "
|
||||||
"in this configuration");
|
"in this configuration");
|
||||||
#endif /*INET6*/
|
#endif /*INET6*/
|
||||||
}
|
}
|
||||||
| HID6 {
|
| HID6 {
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
$$.b = gen_mcode6($1, 0, 128,
|
$$.b = gen_mcode6(cstate, $1, 0, 128,
|
||||||
$$.q = $<blk>0.q);
|
$$.q = $<blk>0.q);
|
||||||
#else
|
#else
|
||||||
bpf_error("'ip6addr' not supported "
|
bpf_error(cstate, "'ip6addr' not supported "
|
||||||
"in this configuration");
|
"in this configuration");
|
||||||
#endif /*INET6*/
|
#endif /*INET6*/
|
||||||
}
|
}
|
||||||
| EID {
|
| EID {
|
||||||
$$.b = gen_ecode($1, $$.q = $<blk>0.q);
|
$$.b = gen_ecode(cstate, $1, $$.q = $<blk>0.q);
|
||||||
/*
|
/*
|
||||||
* $1 was allocated by "pcap_ether_aton()",
|
* $1 was allocated by "pcap_ether_aton()",
|
||||||
* so we must free it now that we're done
|
* so we must free it now that we're done
|
||||||
@ -396,7 +411,7 @@ nid: ID { $$.b = gen_scode($1, $$.q = $<blk>0.q); }
|
|||||||
free($1);
|
free($1);
|
||||||
}
|
}
|
||||||
| AID {
|
| AID {
|
||||||
$$.b = gen_acode($1, $$.q = $<blk>0.q);
|
$$.b = gen_acode(cstate, $1, $$.q = $<blk>0.q);
|
||||||
/*
|
/*
|
||||||
* $1 was allocated by "pcap_ether_aton()",
|
* $1 was allocated by "pcap_ether_aton()",
|
||||||
* so we must free it now that we're done
|
* so we must free it now that we're done
|
||||||
@ -414,7 +429,7 @@ pid: nid
|
|||||||
| qid and id { gen_and($1.b, $3.b); $$ = $3; }
|
| qid and id { gen_and($1.b, $3.b); $$ = $3; }
|
||||||
| qid or id { gen_or($1.b, $3.b); $$ = $3; }
|
| qid or id { gen_or($1.b, $3.b); $$ = $3; }
|
||||||
;
|
;
|
||||||
qid: pnum { $$.b = gen_ncode(NULL, (bpf_u_int32)$1,
|
qid: pnum { $$.b = gen_ncode(cstate, NULL, (bpf_u_int32)$1,
|
||||||
$$.q = $<blk>0.q); }
|
$$.q = $<blk>0.q); }
|
||||||
| pid
|
| pid
|
||||||
;
|
;
|
||||||
@ -430,16 +445,16 @@ head: pqual dqual aqual { QSET($$.q, $1, $2, $3); }
|
|||||||
;
|
;
|
||||||
rterm: head id { $$ = $2; }
|
rterm: head id { $$ = $2; }
|
||||||
| paren expr ')' { $$.b = $2.b; $$.q = $1.q; }
|
| paren expr ')' { $$.b = $2.b; $$.q = $1.q; }
|
||||||
| pname { $$.b = gen_proto_abbrev($1); $$.q = qerr; }
|
| pname { $$.b = gen_proto_abbrev(cstate, $1); $$.q = qerr; }
|
||||||
| arth relop arth { $$.b = gen_relation($2, $1, $3, 0);
|
| arth relop arth { $$.b = gen_relation(cstate, $2, $1, $3, 0);
|
||||||
$$.q = qerr; }
|
$$.q = qerr; }
|
||||||
| arth irelop arth { $$.b = gen_relation($2, $1, $3, 1);
|
| arth irelop arth { $$.b = gen_relation(cstate, $2, $1, $3, 1);
|
||||||
$$.q = qerr; }
|
$$.q = qerr; }
|
||||||
| other { $$.b = $1; $$.q = qerr; }
|
| other { $$.b = $1; $$.q = qerr; }
|
||||||
| atmtype { $$.b = gen_atmtype_abbrev($1); $$.q = qerr; }
|
| atmtype { $$.b = gen_atmtype_abbrev(cstate, $1); $$.q = qerr; }
|
||||||
| atmmultitype { $$.b = gen_atmmulti_abbrev($1); $$.q = qerr; }
|
| atmmultitype { $$.b = gen_atmmulti_abbrev(cstate, $1); $$.q = qerr; }
|
||||||
| atmfield atmvalue { $$.b = $2.b; $$.q = qerr; }
|
| atmfield atmvalue { $$.b = $2.b; $$.q = qerr; }
|
||||||
| mtp2type { $$.b = gen_mtp2type_abbrev($1); $$.q = qerr; }
|
| mtp2type { $$.b = gen_mtp2type_abbrev(cstate, $1); $$.q = qerr; }
|
||||||
| mtp3field mtp3value { $$.b = $2.b; $$.q = qerr; }
|
| mtp3field mtp3value { $$.b = $2.b; $$.q = qerr; }
|
||||||
;
|
;
|
||||||
/* protocol level qualifiers */
|
/* protocol level qualifiers */
|
||||||
@ -509,52 +524,54 @@ pname: LINK { $$ = Q_LINK; }
|
|||||||
| NETBEUI { $$ = Q_NETBEUI; }
|
| NETBEUI { $$ = Q_NETBEUI; }
|
||||||
| RADIO { $$ = Q_RADIO; }
|
| RADIO { $$ = Q_RADIO; }
|
||||||
;
|
;
|
||||||
other: pqual TK_BROADCAST { $$ = gen_broadcast($1); }
|
other: pqual TK_BROADCAST { $$ = gen_broadcast(cstate, $1); }
|
||||||
| pqual TK_MULTICAST { $$ = gen_multicast($1); }
|
| pqual TK_MULTICAST { $$ = gen_multicast(cstate, $1); }
|
||||||
| LESS NUM { $$ = gen_less($2); }
|
| LESS NUM { $$ = gen_less(cstate, $2); }
|
||||||
| GREATER NUM { $$ = gen_greater($2); }
|
| GREATER NUM { $$ = gen_greater(cstate, $2); }
|
||||||
| CBYTE NUM byteop NUM { $$ = gen_byteop($3, $2, $4); }
|
| CBYTE NUM byteop NUM { $$ = gen_byteop(cstate, $3, $2, $4); }
|
||||||
| INBOUND { $$ = gen_inbound(0); }
|
| INBOUND { $$ = gen_inbound(cstate, 0); }
|
||||||
| OUTBOUND { $$ = gen_inbound(1); }
|
| OUTBOUND { $$ = gen_inbound(cstate, 1); }
|
||||||
| VLAN pnum { $$ = gen_vlan($2); }
|
| VLAN pnum { $$ = gen_vlan(cstate, $2); }
|
||||||
| VLAN { $$ = gen_vlan(-1); }
|
| VLAN { $$ = gen_vlan(cstate, -1); }
|
||||||
| MPLS pnum { $$ = gen_mpls($2); }
|
| MPLS pnum { $$ = gen_mpls(cstate, $2); }
|
||||||
| MPLS { $$ = gen_mpls(-1); }
|
| MPLS { $$ = gen_mpls(cstate, -1); }
|
||||||
| PPPOED { $$ = gen_pppoed(); }
|
| PPPOED { $$ = gen_pppoed(cstate); }
|
||||||
| PPPOES pnum { $$ = gen_pppoes($2); }
|
| PPPOES pnum { $$ = gen_pppoes(cstate, $2); }
|
||||||
| PPPOES { $$ = gen_pppoes(-1); }
|
| PPPOES { $$ = gen_pppoes(cstate, -1); }
|
||||||
|
| GENEVE pnum { $$ = gen_geneve(cstate, $2); }
|
||||||
|
| GENEVE { $$ = gen_geneve(cstate, -1); }
|
||||||
| pfvar { $$ = $1; }
|
| pfvar { $$ = $1; }
|
||||||
| pqual p80211 { $$ = $2; }
|
| pqual p80211 { $$ = $2; }
|
||||||
| pllc { $$ = $1; }
|
| pllc { $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
pfvar: PF_IFNAME ID { $$ = gen_pf_ifname($2); }
|
pfvar: PF_IFNAME ID { $$ = gen_pf_ifname(cstate, $2); }
|
||||||
| PF_RSET ID { $$ = gen_pf_ruleset($2); }
|
| PF_RSET ID { $$ = gen_pf_ruleset(cstate, $2); }
|
||||||
| PF_RNR NUM { $$ = gen_pf_rnr($2); }
|
| PF_RNR NUM { $$ = gen_pf_rnr(cstate, $2); }
|
||||||
| PF_SRNR NUM { $$ = gen_pf_srnr($2); }
|
| PF_SRNR NUM { $$ = gen_pf_srnr(cstate, $2); }
|
||||||
| PF_REASON reason { $$ = gen_pf_reason($2); }
|
| PF_REASON reason { $$ = gen_pf_reason(cstate, $2); }
|
||||||
| PF_ACTION action { $$ = gen_pf_action($2); }
|
| PF_ACTION action { $$ = gen_pf_action(cstate, $2); }
|
||||||
;
|
;
|
||||||
|
|
||||||
p80211: TYPE type SUBTYPE subtype
|
p80211: TYPE type SUBTYPE subtype
|
||||||
{ $$ = gen_p80211_type($2 | $4,
|
{ $$ = gen_p80211_type(cstate, $2 | $4,
|
||||||
IEEE80211_FC0_TYPE_MASK |
|
IEEE80211_FC0_TYPE_MASK |
|
||||||
IEEE80211_FC0_SUBTYPE_MASK);
|
IEEE80211_FC0_SUBTYPE_MASK);
|
||||||
}
|
}
|
||||||
| TYPE type { $$ = gen_p80211_type($2,
|
| TYPE type { $$ = gen_p80211_type(cstate, $2,
|
||||||
IEEE80211_FC0_TYPE_MASK);
|
IEEE80211_FC0_TYPE_MASK);
|
||||||
}
|
}
|
||||||
| SUBTYPE type_subtype { $$ = gen_p80211_type($2,
|
| SUBTYPE type_subtype { $$ = gen_p80211_type(cstate, $2,
|
||||||
IEEE80211_FC0_TYPE_MASK |
|
IEEE80211_FC0_TYPE_MASK |
|
||||||
IEEE80211_FC0_SUBTYPE_MASK);
|
IEEE80211_FC0_SUBTYPE_MASK);
|
||||||
}
|
}
|
||||||
| DIR dir { $$ = gen_p80211_fcdir($2); }
|
| DIR dir { $$ = gen_p80211_fcdir(cstate, $2); }
|
||||||
;
|
;
|
||||||
|
|
||||||
type: NUM
|
type: NUM
|
||||||
| ID { $$ = str2tok($1, ieee80211_types);
|
| ID { $$ = str2tok($1, ieee80211_types);
|
||||||
if ($$ == -1)
|
if ($$ == -1)
|
||||||
bpf_error("unknown 802.11 type name");
|
bpf_error(cstate, "unknown 802.11 type name");
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -564,7 +581,7 @@ subtype: NUM
|
|||||||
for (i = 0;; i++) {
|
for (i = 0;; i++) {
|
||||||
if (ieee80211_type_subtypes[i].tok == NULL) {
|
if (ieee80211_type_subtypes[i].tok == NULL) {
|
||||||
/* Ran out of types */
|
/* Ran out of types */
|
||||||
bpf_error("unknown 802.11 type");
|
bpf_error(cstate, "unknown 802.11 type");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ($<i>-1 == ieee80211_type_subtypes[i].type) {
|
if ($<i>-1 == ieee80211_type_subtypes[i].type) {
|
||||||
@ -575,7 +592,7 @@ subtype: NUM
|
|||||||
|
|
||||||
$$ = str2tok($1, types);
|
$$ = str2tok($1, types);
|
||||||
if ($$ == -1)
|
if ($$ == -1)
|
||||||
bpf_error("unknown 802.11 subtype name");
|
bpf_error(cstate, "unknown 802.11 subtype name");
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -583,7 +600,7 @@ type_subtype: ID { int i;
|
|||||||
for (i = 0;; i++) {
|
for (i = 0;; i++) {
|
||||||
if (ieee80211_type_subtypes[i].tok == NULL) {
|
if (ieee80211_type_subtypes[i].tok == NULL) {
|
||||||
/* Ran out of types */
|
/* Ran out of types */
|
||||||
bpf_error("unknown 802.11 type name");
|
bpf_error(cstate, "unknown 802.11 type name");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$$ = str2tok($1, ieee80211_type_subtypes[i].tok);
|
$$ = str2tok($1, ieee80211_type_subtypes[i].tok);
|
||||||
@ -595,29 +612,29 @@ type_subtype: ID { int i;
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
pllc: LLC { $$ = gen_llc(); }
|
pllc: LLC { $$ = gen_llc(cstate); }
|
||||||
| LLC ID { if (pcap_strcasecmp($2, "i") == 0)
|
| LLC ID { if (pcap_strcasecmp($2, "i") == 0)
|
||||||
$$ = gen_llc_i();
|
$$ = gen_llc_i(cstate);
|
||||||
else if (pcap_strcasecmp($2, "s") == 0)
|
else if (pcap_strcasecmp($2, "s") == 0)
|
||||||
$$ = gen_llc_s();
|
$$ = gen_llc_s(cstate);
|
||||||
else if (pcap_strcasecmp($2, "u") == 0)
|
else if (pcap_strcasecmp($2, "u") == 0)
|
||||||
$$ = gen_llc_u();
|
$$ = gen_llc_u(cstate);
|
||||||
else {
|
else {
|
||||||
u_int subtype;
|
int subtype;
|
||||||
|
|
||||||
subtype = str2tok($2, llc_s_subtypes);
|
subtype = str2tok($2, llc_s_subtypes);
|
||||||
if (subtype != -1)
|
if (subtype != -1)
|
||||||
$$ = gen_llc_s_subtype(subtype);
|
$$ = gen_llc_s_subtype(cstate, subtype);
|
||||||
else {
|
else {
|
||||||
subtype = str2tok($2, llc_u_subtypes);
|
subtype = str2tok($2, llc_u_subtypes);
|
||||||
if (subtype == -1)
|
if (subtype == -1)
|
||||||
bpf_error("unknown LLC type name \"%s\"", $2);
|
bpf_error(cstate, "unknown LLC type name \"%s\"", $2);
|
||||||
$$ = gen_llc_u_subtype(subtype);
|
$$ = gen_llc_u_subtype(cstate, subtype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* sigh, "rnr" is already a keyword for PF */
|
/* sigh, "rnr" is already a keyword for PF */
|
||||||
| LLC PF_RNR { $$ = gen_llc_s_subtype(LLC_RNR); }
|
| LLC PF_RNR { $$ = gen_llc_s_subtype(cstate, LLC_RNR); }
|
||||||
;
|
;
|
||||||
|
|
||||||
dir: NUM
|
dir: NUM
|
||||||
@ -630,15 +647,15 @@ dir: NUM
|
|||||||
else if (pcap_strcasecmp($1, "dstods") == 0)
|
else if (pcap_strcasecmp($1, "dstods") == 0)
|
||||||
$$ = IEEE80211_FC1_DIR_DSTODS;
|
$$ = IEEE80211_FC1_DIR_DSTODS;
|
||||||
else
|
else
|
||||||
bpf_error("unknown 802.11 direction");
|
bpf_error(cstate, "unknown 802.11 direction");
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
reason: NUM { $$ = $1; }
|
reason: NUM { $$ = $1; }
|
||||||
| ID { $$ = pfreason_to_num($1); }
|
| ID { $$ = pfreason_to_num(cstate, $1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
action: ID { $$ = pfaction_to_num($1); }
|
action: ID { $$ = pfaction_to_num(cstate, $1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
relop: '>' { $$ = BPF_JGT; }
|
relop: '>' { $$ = BPF_JGT; }
|
||||||
@ -649,24 +666,24 @@ irelop: LEQ { $$ = BPF_JGT; }
|
|||||||
| '<' { $$ = BPF_JGE; }
|
| '<' { $$ = BPF_JGE; }
|
||||||
| NEQ { $$ = BPF_JEQ; }
|
| NEQ { $$ = BPF_JEQ; }
|
||||||
;
|
;
|
||||||
arth: pnum { $$ = gen_loadi($1); }
|
arth: pnum { $$ = gen_loadi(cstate, $1); }
|
||||||
| narth
|
| narth
|
||||||
;
|
;
|
||||||
narth: pname '[' arth ']' { $$ = gen_load($1, $3, 1); }
|
narth: pname '[' arth ']' { $$ = gen_load(cstate, $1, $3, 1); }
|
||||||
| pname '[' arth ':' NUM ']' { $$ = gen_load($1, $3, $5); }
|
| pname '[' arth ':' NUM ']' { $$ = gen_load(cstate, $1, $3, $5); }
|
||||||
| arth '+' arth { $$ = gen_arth(BPF_ADD, $1, $3); }
|
| arth '+' arth { $$ = gen_arth(cstate, BPF_ADD, $1, $3); }
|
||||||
| arth '-' arth { $$ = gen_arth(BPF_SUB, $1, $3); }
|
| arth '-' arth { $$ = gen_arth(cstate, BPF_SUB, $1, $3); }
|
||||||
| arth '*' arth { $$ = gen_arth(BPF_MUL, $1, $3); }
|
| arth '*' arth { $$ = gen_arth(cstate, BPF_MUL, $1, $3); }
|
||||||
| arth '/' arth { $$ = gen_arth(BPF_DIV, $1, $3); }
|
| arth '/' arth { $$ = gen_arth(cstate, BPF_DIV, $1, $3); }
|
||||||
| arth '%' arth { $$ = gen_arth(BPF_MOD, $1, $3); }
|
| arth '%' arth { $$ = gen_arth(cstate, BPF_MOD, $1, $3); }
|
||||||
| arth '&' arth { $$ = gen_arth(BPF_AND, $1, $3); }
|
| arth '&' arth { $$ = gen_arth(cstate, BPF_AND, $1, $3); }
|
||||||
| arth '|' arth { $$ = gen_arth(BPF_OR, $1, $3); }
|
| arth '|' arth { $$ = gen_arth(cstate, BPF_OR, $1, $3); }
|
||||||
| arth '^' arth { $$ = gen_arth(BPF_XOR, $1, $3); }
|
| arth '^' arth { $$ = gen_arth(cstate, BPF_XOR, $1, $3); }
|
||||||
| arth LSH arth { $$ = gen_arth(BPF_LSH, $1, $3); }
|
| arth LSH arth { $$ = gen_arth(cstate, BPF_LSH, $1, $3); }
|
||||||
| arth RSH arth { $$ = gen_arth(BPF_RSH, $1, $3); }
|
| arth RSH arth { $$ = gen_arth(cstate, BPF_RSH, $1, $3); }
|
||||||
| '-' arth %prec UMINUS { $$ = gen_neg($2); }
|
| '-' arth %prec UMINUS { $$ = gen_neg(cstate, $2); }
|
||||||
| paren narth ')' { $$ = $2; }
|
| paren narth ')' { $$ = $2; }
|
||||||
| LEN { $$ = gen_loadlen(); }
|
| LEN { $$ = gen_loadlen(cstate); }
|
||||||
;
|
;
|
||||||
byteop: '&' { $$ = '&'; }
|
byteop: '&' { $$ = '&'; }
|
||||||
| '|' { $$ = '|'; }
|
| '|' { $$ = '|'; }
|
||||||
@ -695,15 +712,15 @@ atmfield: VPI { $$.atmfieldtype = A_VPI; }
|
|||||||
| VCI { $$.atmfieldtype = A_VCI; }
|
| VCI { $$.atmfieldtype = A_VCI; }
|
||||||
;
|
;
|
||||||
atmvalue: atmfieldvalue
|
atmvalue: atmfieldvalue
|
||||||
| relop NUM { $$.b = gen_atmfield_code($<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 0); }
|
| relop NUM { $$.b = gen_atmfield_code(cstate, $<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 0); }
|
||||||
| irelop NUM { $$.b = gen_atmfield_code($<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 1); }
|
| irelop NUM { $$.b = gen_atmfield_code(cstate, $<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 1); }
|
||||||
| paren atmlistvalue ')' { $$.b = $2.b; $$.q = qerr; }
|
| paren atmlistvalue ')' { $$.b = $2.b; $$.q = qerr; }
|
||||||
;
|
;
|
||||||
atmfieldvalue: NUM {
|
atmfieldvalue: NUM {
|
||||||
$$.atmfieldtype = $<blk>0.atmfieldtype;
|
$$.atmfieldtype = $<blk>0.atmfieldtype;
|
||||||
if ($$.atmfieldtype == A_VPI ||
|
if ($$.atmfieldtype == A_VPI ||
|
||||||
$$.atmfieldtype == A_VCI)
|
$$.atmfieldtype == A_VCI)
|
||||||
$$.b = gen_atmfield_code($$.atmfieldtype, (bpf_int32) $1, BPF_JEQ, 0);
|
$$.b = gen_atmfield_code(cstate, $$.atmfieldtype, (bpf_int32) $1, BPF_JEQ, 0);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
atmlistvalue: atmfieldvalue
|
atmlistvalue: atmfieldvalue
|
||||||
@ -728,8 +745,8 @@ mtp3field: SIO { $$.mtp3fieldtype = M_SIO; }
|
|||||||
| HSLS { $$.mtp3fieldtype = MH_SLS; }
|
| HSLS { $$.mtp3fieldtype = MH_SLS; }
|
||||||
;
|
;
|
||||||
mtp3value: mtp3fieldvalue
|
mtp3value: mtp3fieldvalue
|
||||||
| relop NUM { $$.b = gen_mtp3field_code($<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 0); }
|
| relop NUM { $$.b = gen_mtp3field_code(cstate, $<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 0); }
|
||||||
| irelop NUM { $$.b = gen_mtp3field_code($<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 1); }
|
| irelop NUM { $$.b = gen_mtp3field_code(cstate, $<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 1); }
|
||||||
| paren mtp3listvalue ')' { $$.b = $2.b; $$.q = qerr; }
|
| paren mtp3listvalue ')' { $$.b = $2.b; $$.q = qerr; }
|
||||||
;
|
;
|
||||||
mtp3fieldvalue: NUM {
|
mtp3fieldvalue: NUM {
|
||||||
@ -742,7 +759,7 @@ mtp3fieldvalue: NUM {
|
|||||||
$$.mtp3fieldtype == MH_OPC ||
|
$$.mtp3fieldtype == MH_OPC ||
|
||||||
$$.mtp3fieldtype == MH_DPC ||
|
$$.mtp3fieldtype == MH_DPC ||
|
||||||
$$.mtp3fieldtype == MH_SLS)
|
$$.mtp3fieldtype == MH_SLS)
|
||||||
$$.b = gen_mtp3field_code($$.mtp3fieldtype, (u_int) $1, BPF_JEQ, 0);
|
$$.b = gen_mtp3field_code(cstate, $$.mtp3fieldtype, (u_int) $1, BPF_JEQ, 0);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
mtp3listvalue: mtp3fieldvalue
|
mtp3listvalue: mtp3fieldvalue
|
||||||
|
14
install-sh
14
install-sh
@ -115,7 +115,7 @@ fi
|
|||||||
if [ x"$dir_arg" != x ]; then
|
if [ x"$dir_arg" != x ]; then
|
||||||
dst=$src
|
dst=$src
|
||||||
src=""
|
src=""
|
||||||
|
|
||||||
if [ -d $dst ]; then
|
if [ -d $dst ]; then
|
||||||
instcmd=:
|
instcmd=:
|
||||||
else
|
else
|
||||||
@ -124,7 +124,7 @@ if [ x"$dir_arg" != x ]; then
|
|||||||
else
|
else
|
||||||
|
|
||||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||||
# might cause directories to be created, which would be especially bad
|
# might cause directories to be created, which would be especially bad
|
||||||
# if $src (and thus $dsttmp) contains '*'.
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
|
||||||
if [ -f $src -o -d $src ]
|
if [ -f $src -o -d $src ]
|
||||||
@ -134,7 +134,7 @@ else
|
|||||||
echo "install: $src does not exist"
|
echo "install: $src does not exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ x"$dst" = x ]
|
if [ x"$dst" = x ]
|
||||||
then
|
then
|
||||||
echo "install: no destination specified"
|
echo "install: no destination specified"
|
||||||
@ -201,17 +201,17 @@ else
|
|||||||
|
|
||||||
# If we're going to rename the final executable, determine the name now.
|
# If we're going to rename the final executable, determine the name now.
|
||||||
|
|
||||||
if [ x"$transformarg" = x ]
|
if [ x"$transformarg" = x ]
|
||||||
then
|
then
|
||||||
dstfile=`basename $dst`
|
dstfile=`basename $dst`
|
||||||
else
|
else
|
||||||
dstfile=`basename $dst $transformbasename |
|
dstfile=`basename $dst $transformbasename |
|
||||||
sed $transformarg`$transformbasename
|
sed $transformarg`$transformbasename
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# don't allow the sed command to completely eliminate the filename
|
# don't allow the sed command to completely eliminate the filename
|
||||||
|
|
||||||
if [ x"$dstfile" = x ]
|
if [ x"$dstfile" = x ]
|
||||||
then
|
then
|
||||||
dstfile=`basename $dst`
|
dstfile=`basename $dst`
|
||||||
else
|
else
|
||||||
@ -242,7 +242,7 @@ else
|
|||||||
# Now rename the file to the real destination.
|
# Now rename the file to the real destination.
|
||||||
|
|
||||||
$doit $rmcmd -f $dstdir/$dstfile &&
|
$doit $rmcmd -f $dstdir/$dstfile &&
|
||||||
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
||||||
|
|
||||||
fi &&
|
fi &&
|
||||||
|
|
||||||
|
23
lbl/os-aix7.h
Normal file
23
lbl/os-aix7.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1993, 1994, 1995, 1996, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Prototypes missing in AIX 7.x */
|
||||||
|
int ffs(int i);
|
@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Prototypes missing in Digital UNIX 4.x */
|
/* Prototypes missing in Digital UNIX 4.x */
|
||||||
int snprintf(char *, size_t, const char *, ...);
|
int pcap_snprintf(char *, size_t, const char *, ...);
|
||||||
int vsnprintf(char *, size_t, const char *, va_list);
|
int pcap_vsnprintf(char *, size_t, const char *, va_list);
|
||||||
int pfopen(char *, int);
|
int pfopen(char *, int);
|
||||||
|
|
||||||
|
@ -21,10 +21,10 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Prototypes missing in Tru64 UNIX 5.x
|
* Prototypes missing in Tru64 UNIX 5.x
|
||||||
* XXX - "snprintf()" and "vsnprintf()" aren't missing, but you have to
|
* XXX - "pcap_snprintf()" and "pcap_vsnprintf()" aren't missing, but you have to
|
||||||
* #define the right value to get them defined by <stdio.h>.
|
* #define the right value to get them defined by <stdio.h>.
|
||||||
*/
|
*/
|
||||||
int snprintf(char *, size_t, const char *, ...);
|
int pcap_snprintf(char *, size_t, const char *, ...);
|
||||||
int vsnprintf(char *, size_t, const char *, va_list);
|
int pcap_vsnprintf(char *, size_t, const char *, va_list);
|
||||||
int pfopen(char *, int);
|
int pfopen(char *, int);
|
||||||
|
|
||||||
|
@ -21,4 +21,4 @@
|
|||||||
|
|
||||||
/* Prototypes missing in SunOS 5 */
|
/* Prototypes missing in SunOS 5 */
|
||||||
char *strerror(int);
|
char *strerror(int);
|
||||||
int snprintf(char *, size_t, const char *, ...);
|
int pcap_snprintf(char *, size_t, const char *, ...);
|
||||||
|
@ -65,7 +65,6 @@ int fchmod(int, int);
|
|||||||
int fchown(int, int, int);
|
int fchown(int, int, int);
|
||||||
void endgrent(void);
|
void endgrent(void);
|
||||||
void endpwent(void);
|
void endpwent(void);
|
||||||
void endservent(void);
|
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
struct ether_addr;
|
struct ether_addr;
|
||||||
#endif
|
#endif
|
||||||
@ -146,7 +145,6 @@ int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
|
|||||||
int setpgrp(int, int);
|
int setpgrp(int, int);
|
||||||
void setpwent(void);
|
void setpwent(void);
|
||||||
int setrlimit(int, struct rlimit *);
|
int setrlimit(int, struct rlimit *);
|
||||||
void setservent(int);
|
|
||||||
int setsockopt(int, int, int, char *, int);
|
int setsockopt(int, int, int, char *, int);
|
||||||
int shutdown(int, int);
|
int shutdown(int, int);
|
||||||
int sigblock(int);
|
int sigblock(int);
|
||||||
@ -157,7 +155,7 @@ int sigsetmask(int);
|
|||||||
struct sigvec;
|
struct sigvec;
|
||||||
#endif
|
#endif
|
||||||
int sigvec(int, struct sigvec *, struct sigvec*);
|
int sigvec(int, struct sigvec *, struct sigvec*);
|
||||||
int snprintf(char *, size_t, const char *, ...);
|
int pcap_snprintf(char *, size_t, const char *, ...);
|
||||||
int socket(int, int, int);
|
int socket(int, int, int);
|
||||||
int socketpair(int, int, int, int *);
|
int socketpair(int, int, int, int *);
|
||||||
int symlink(const char *, const char *);
|
int symlink(const char *, const char *);
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
int bcmp(const char *, const char *, u_int);
|
int bcmp(const char *, const char *, u_int);
|
||||||
void bcopy(const void *, void *, u_int);
|
void bcopy(const void *, void *, u_int);
|
||||||
void bzero(void *, u_int);
|
void bzero(void *, u_int);
|
||||||
void endservent(void);
|
|
||||||
int getopt(int, char * const *, const char *);
|
int getopt(int, char * const *, const char *);
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
struct timeval;
|
struct timeval;
|
||||||
|
@ -39,6 +39,8 @@ static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "getopt.h"
|
||||||
|
|
||||||
int opterr = 1, /* if error message should be printed */
|
int opterr = 1, /* if error message should be printed */
|
||||||
optind = 1, /* index into parent argv vector */
|
optind = 1, /* index into parent argv vector */
|
||||||
optopt, /* character checked for validity */
|
optopt, /* character checked for validity */
|
||||||
@ -59,14 +61,17 @@ getopt(nargc, nargv, ostr)
|
|||||||
char * const *nargv;
|
char * const *nargv;
|
||||||
const char *ostr;
|
const char *ostr;
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
char *cp;
|
||||||
char *__progname="windump";
|
static char *__progname;
|
||||||
#else
|
|
||||||
extern char *__progname;
|
|
||||||
#endif
|
|
||||||
static char *place = EMSG; /* option letter processing */
|
static char *place = EMSG; /* option letter processing */
|
||||||
char *oli; /* option letter list index */
|
char *oli; /* option letter list index */
|
||||||
|
|
||||||
|
if (__progname == NULL) {
|
||||||
|
if ((cp = strrchr(nargv[0], '/')) != NULL)
|
||||||
|
__progname = cp + 1;
|
||||||
|
else
|
||||||
|
__progname = nargv[0];
|
||||||
|
}
|
||||||
if (optreset || !*place) { /* update scanning pointer */
|
if (optreset || !*place) { /* update scanning pointer */
|
||||||
optreset = 0;
|
optreset = 0;
|
||||||
if (optind >= nargc || *(place = nargv[optind]) != '-') {
|
if (optind >= nargc || *(place = nargv[optind]) != '-') {
|
7
missing/getopt.h
Normal file
7
missing/getopt.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/*
|
||||||
|
* Header for the getopt() we supply if the platform doesn't supply it.
|
||||||
|
*/
|
||||||
|
extern char *optarg; /* getopt(3) external variables */
|
||||||
|
extern int optind, opterr, optopt;
|
||||||
|
|
||||||
|
extern int getopt(int nargc, char * const *nargv, const char *ostr);
|
@ -456,13 +456,13 @@ xyzprintf (struct state *state, const char *char_format, va_list ap)
|
|||||||
|
|
||||||
#ifndef HAVE_SNPRINTF
|
#ifndef HAVE_SNPRINTF
|
||||||
int
|
int
|
||||||
snprintf (char *str, size_t sz, const char *format, ...)
|
pcap_snprintf (char *str, size_t sz, const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
ret = vsnprintf (str, sz, format, args);
|
ret = pcap_vsnprintf (str, sz, format, args);
|
||||||
|
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
{
|
{
|
||||||
@ -473,7 +473,7 @@ snprintf (char *str, size_t sz, const char *format, ...)
|
|||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
ret2 = vsprintf (tmp, format, args);
|
ret2 = pcap_vsprintf (tmp, format, args);
|
||||||
if (ret != ret2 || strcmp(str, tmp))
|
if (ret != ret2 || strcmp(str, tmp))
|
||||||
abort ();
|
abort ();
|
||||||
free (tmp);
|
free (tmp);
|
||||||
@ -518,13 +518,13 @@ asprintf (char **ret, const char *format, ...)
|
|||||||
|
|
||||||
#ifndef HAVE_ASNPRINTF
|
#ifndef HAVE_ASNPRINTF
|
||||||
int
|
int
|
||||||
asnprintf (char **ret, size_t max_sz, const char *format, ...)
|
pcap_asnprintf (char **ret, size_t max_sz, const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
val = vasnprintf (ret, max_sz, format, args);
|
val = pcap_vasnprintf (ret, max_sz, format, args);
|
||||||
|
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
{
|
{
|
||||||
@ -534,7 +534,7 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...)
|
|||||||
if (tmp == NULL)
|
if (tmp == NULL)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
ret2 = vsprintf (tmp, format, args);
|
ret2 = pcap_vsprintf (tmp, format, args);
|
||||||
if (val != ret2 || strcmp(*ret, tmp))
|
if (val != ret2 || strcmp(*ret, tmp))
|
||||||
abort ();
|
abort ();
|
||||||
free (tmp);
|
free (tmp);
|
||||||
@ -548,16 +548,16 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...)
|
|||||||
|
|
||||||
#ifndef HAVE_VASPRINTF
|
#ifndef HAVE_VASPRINTF
|
||||||
int
|
int
|
||||||
vasprintf (char **ret, const char *format, va_list args)
|
pcap_vasprintf (char **ret, const char *format, va_list args)
|
||||||
{
|
{
|
||||||
return vasnprintf (ret, 0, format, args);
|
return pcap_vasnprintf (ret, 0, format, args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_VASNPRINTF
|
#ifndef HAVE_VASNPRINTF
|
||||||
int
|
int
|
||||||
vasnprintf (char **ret, size_t max_sz, const char *format, va_list args)
|
pcap_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args)
|
||||||
{
|
{
|
||||||
int st;
|
int st;
|
||||||
size_t len;
|
size_t len;
|
||||||
@ -600,7 +600,7 @@ vasnprintf (char **ret, size_t max_sz, const char *format, va_list args)
|
|||||||
|
|
||||||
#ifndef HAVE_VSNPRINTF
|
#ifndef HAVE_VSNPRINTF
|
||||||
int
|
int
|
||||||
vsnprintf (char *str, size_t sz, const char *format, va_list args)
|
pcap_vsnprintf (char *str, size_t sz, const char *format, va_list args)
|
||||||
{
|
{
|
||||||
struct state state;
|
struct state state;
|
||||||
int ret;
|
int ret;
|
||||||
|
87
missing/strtok_r.c
Normal file
87
missing/strtok_r.c
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/*-
|
||||||
|
* Copyright (c) 1998 Softweyr LLC. All rights reserved.
|
||||||
|
*
|
||||||
|
* strtok_r, from Berkeley strtok
|
||||||
|
* Oct 13, 1998 by Wes Peters <wes@softweyr.com>
|
||||||
|
*
|
||||||
|
* Copyright (c) 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
|
||||||
|
* notices, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notices, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, 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 SOFTWEYR LLC, 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.
|
||||||
|
*
|
||||||
|
* From: @(#)strtok.c 8.1 (Berkeley) 6/4/93
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "portability.h"
|
||||||
|
|
||||||
|
char *
|
||||||
|
pcap_strtok_r(char *s, const char *delim, char **last)
|
||||||
|
{
|
||||||
|
char *spanp, *tok;
|
||||||
|
int c, sc;
|
||||||
|
|
||||||
|
if (s == NULL && (s = *last) == NULL)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Skip (span) leading delimiters (s += strspn(s, delim), sort of).
|
||||||
|
*/
|
||||||
|
cont:
|
||||||
|
c = *s++;
|
||||||
|
for (spanp = (char *)delim; (sc = *spanp++) != 0;) {
|
||||||
|
if (c == sc)
|
||||||
|
goto cont;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c == 0) { /* no non-delimiter characters */
|
||||||
|
*last = NULL;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
tok = s - 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
|
||||||
|
* Note that delim must have one NUL; we stop if we see that, too.
|
||||||
|
*/
|
||||||
|
for (;;) {
|
||||||
|
c = *s++;
|
||||||
|
spanp = (char *)delim;
|
||||||
|
do {
|
||||||
|
if ((sc = *spanp++) == c) {
|
||||||
|
if (c == 0)
|
||||||
|
s = NULL;
|
||||||
|
else
|
||||||
|
s[-1] = '\0';
|
||||||
|
*last = s;
|
||||||
|
return (tok);
|
||||||
|
}
|
||||||
|
} while (sc != 0);
|
||||||
|
}
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
31
missing/win_snprintf.c
Normal file
31
missing/win_snprintf.c
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
pcap_vsnprintf(char *str, size_t str_size, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = _vsnprintf_s(str, str_size, _TRUNCATE, format, args);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XXX - _vsnprintf() and _snprintf() do *not* guarantee
|
||||||
|
* that str is null-terminated, but C99's vsnprintf()
|
||||||
|
* and snprintf() do, and we want to offer C99 behavior,
|
||||||
|
* so forcibly null-terminate the string.
|
||||||
|
*/
|
||||||
|
str[str_size - 1] = '\0';
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
pcap_snprintf(char *str, size_t str_size, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
ret = pcap_vsnprintf(str, str_size, format, args);
|
||||||
|
va_end(args);
|
||||||
|
return (ret);
|
||||||
|
}
|
3
mkdep
3
mkdep
@ -13,9 +13,6 @@
|
|||||||
# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88
|
# @(#)mkdep.sh 5.11 (Berkeley) 5/5/88
|
||||||
#
|
#
|
||||||
|
|
||||||
PATH=/bin:/usr/bin:/usr/ucb:/usr/local:/usr/local/bin:/usr/sfw/bin
|
|
||||||
export PATH
|
|
||||||
|
|
||||||
MAKE=Makefile # default makefile name is "Makefile"
|
MAKE=Makefile # default makefile name is "Makefile"
|
||||||
CC=cc # default C compiler is "cc"
|
CC=cc # default C compiler is "cc"
|
||||||
DEPENDENCY_CFLAG=-M # default dependency-generation flag is -M
|
DEPENDENCY_CFLAG=-M # default dependency-generation flag is -M
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
static void Abort (char *fmt,...)
|
static void Abort (const char *fmt,...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start (args, fmt);
|
va_start (args, fmt);
|
||||||
@ -27,7 +27,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
fprintf (outFile,
|
fprintf (outFile,
|
||||||
"/* data statements for file %s at %.24s */\n"
|
"/* data statements for file %s at %.24s */\n"
|
||||||
"/* Generated by BIN2C, G.Vanem 1995 */\n",
|
"/* Generated by BIN2C, G. Vanem 1995 */\n",
|
||||||
argv[1], ctime(&now));
|
argv[1], ctime(&now));
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -7,7 +7,13 @@
|
|||||||
|
|
||||||
default: check_gcclib all
|
default: check_gcclib all
|
||||||
|
|
||||||
GCCLIB = /djgpp/lib/gcc-lib/djgpp/3.31
|
#
|
||||||
|
# This value is normally not important. Used by 'dxe3gen' in
|
||||||
|
# msdos/pm_drvr/makefile.dj to make "dynamically loaded modules".
|
||||||
|
# But this is not finished.
|
||||||
|
#
|
||||||
|
#GCC_LIB = $(shell gcc -print-libgcc-file-name)
|
||||||
|
GCC_LIB = .
|
||||||
MAKEFILE = Makefile.dj
|
MAKEFILE = Makefile.dj
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -19,10 +25,11 @@ MAKEFILE = Makefile.dj
|
|||||||
|
|
||||||
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
WATT32_ROOT = $(subst \,/,$(WATT_ROOT))
|
||||||
|
|
||||||
|
OBJ_DIR = djgpp.obj
|
||||||
|
|
||||||
ifeq ($(wildcard $(GCCLIB)/libgcc.a),)
|
ifeq ($(wildcard $(GCC_LIB)),)
|
||||||
check_gcclib:
|
check_gcclib:
|
||||||
@echo libgcc.a not found. Set \"$(GCCLIB)\" to \"/djgpp/lib/gcc-lib/djgpp/3.X\"
|
@echo libgcc.a not found. Set \"$(GCC_LIB)\" to \"/djgpp/lib/gcc/djgpp/4.X/libgcc.a\"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +61,7 @@ ASM = nasm.exe -fbin -dDEBUG
|
|||||||
YACC = bison.exe
|
YACC = bison.exe
|
||||||
LEX = flex.exe
|
LEX = flex.exe
|
||||||
|
|
||||||
CFLAGS = -g -gcoff -O2 -Wall -I. -I$(WATT32_ROOT)/inc
|
CFLAGS = -g -O2 -Wall -I. -I$(WATT32_ROOT)/inc
|
||||||
|
|
||||||
ifeq ($(USE_EXCEPT),1)
|
ifeq ($(USE_EXCEPT),1)
|
||||||
CFLAGS += -DUSE_EXCEPT
|
CFLAGS += -DUSE_EXCEPT
|
||||||
@ -70,7 +77,7 @@ ifeq ($(USE_32BIT_DRIVERS),1)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) -c $(CFLAGS) $<
|
$(CC) -c $(CFLAGS) -o $@ $<
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
%.o: %.s
|
%.o: %.s
|
||||||
|
@ -101,7 +101,7 @@ clean:
|
|||||||
|
|
||||||
#
|
#
|
||||||
# dependencies
|
# dependencies
|
||||||
#
|
#
|
||||||
pkt_rx0.obj: msdos\pkt_rx0.asm
|
pkt_rx0.obj: msdos\pkt_rx0.asm
|
||||||
|
|
||||||
bpf_filt.obj: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
bpf_filt.obj: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
||||||
|
@ -6,43 +6,49 @@
|
|||||||
#
|
#
|
||||||
# c:\net\pcap> make -f msdos/makefile.dj
|
# c:\net\pcap> make -f msdos/makefile.dj
|
||||||
#
|
#
|
||||||
|
# Note: you should do a "set LFN=y" before running this makefile.
|
||||||
|
#
|
||||||
|
|
||||||
VPATH = missing msdos
|
VPATH = missing msdos bpf/net
|
||||||
|
|
||||||
PREREQUISITES = scanner.c grammar.c tokdefs.h version.h msdos/pkt_stub.inc
|
PREREQUISITES = scanner.c grammar.c tokdefs.h version.h msdos/pkt_stub.inc
|
||||||
|
|
||||||
include msdos/common.dj
|
include ./msdos/common.dj
|
||||||
|
|
||||||
DRIVER_DIR = ./msdos/pm_drvr
|
DRIVER_DIR = ./msdos/pm_drvr
|
||||||
|
|
||||||
CFLAGS += -DDEBUG -DNDIS_DEBUG -DHAVE_LIMITS_H -DHAVE_STRERROR \
|
CFLAGS += -DDEBUG -DNDIS_DEBUG -DHAVE_LIMITS_H -DHAVE_STRERROR -DHAVE_SNPRINTF -DHAVE_VSNPRINTF\
|
||||||
-D_U_='__attribute__((unused))' -DHAVE_VERSION_H
|
-D_U_='__attribute__((unused))'
|
||||||
|
|
||||||
# CFLAGS += -Dyylval=pcap_lval -DBDEBUG -DNDEBUG
|
CFLAGS += -Dyylval=pcap_lval # -DBDEBUG -DNDEBUG
|
||||||
|
|
||||||
SOURCES = grammar.c scanner.c bpf_filt.c bpf_imag.c bpf_dump.c \
|
SOURCES = grammar.c scanner.c bpf/net/bpf_filter.c bpf_image.c bpf_dump.c \
|
||||||
etherent.c gencode.c nametoad.c pcap-dos.c optimize.c \
|
etherent.c gencode.c nametoaddr.c pcap-common.c pcap-dos.c optimize.c \
|
||||||
savefile.c pcap.c inet.c msdos\pktdrvr.c msdos/ndis2.c \
|
savefile.c pcap.c sf-pcap.c sf-pcap-ng.c inet.c \
|
||||||
missing/snprintf.c
|
msdos/pktdrvr.c msdos/ndis2.c # missing/snprintf.c
|
||||||
|
|
||||||
OBJECTS = $(notdir $(SOURCES:.c=.o))
|
OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.c=.o)))
|
||||||
TEMPBIN = tmp.bin
|
TEMPBIN = tmp.bin
|
||||||
|
|
||||||
ifeq ($(USE_32BIT_DRIVERS),1)
|
ifeq ($(USE_32BIT_DRIVERS),1)
|
||||||
PM_OBJECTS = $(addprefix $(DRIVER_DIR)/, \
|
PM_OBJECTS = $(addprefix $(OBJ_DIR)/, \
|
||||||
printk.o pci.o pci-scan.o bios32.o dma.o irq.o intwrap.o \
|
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)
|
lock.o kmalloc.o quirks.o timer.o net_init.o)
|
||||||
#
|
#
|
||||||
# Static link of drivers
|
# Static link of drivers
|
||||||
#
|
#
|
||||||
ifeq ($(USE_32BIT_MODULES),0)
|
ifeq ($(USE_32BIT_MODULES),0)
|
||||||
PM_OBJECTS += $(addprefix $(DRIVER_DIR)/, \
|
PM_OBJECTS += $(addprefix $(OBJ_DIR)/, \
|
||||||
accton.o 8390.o 3c503.o 3c509.o 3c59x.o 3c515.o \
|
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)
|
3c575_cb.o 3c90x.o ne.o wd.o cs89x0.o rtl8139.o)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
all: libpcap.a
|
TARGETS = msdos/bin2c.exe libpcap.a filtertest.exe findalldevstest.exe \
|
||||||
|
nonblocktest.exe opentest.exe
|
||||||
|
|
||||||
|
all: $(TARGETS)
|
||||||
|
@echo 'Welcome to libpcap/djgpp with samples.'
|
||||||
|
|
||||||
ifeq ($(USE_32BIT_DRIVERS),1)
|
ifeq ($(USE_32BIT_DRIVERS),1)
|
||||||
$(PM_OBJECTS):
|
$(PM_OBJECTS):
|
||||||
@ -53,6 +59,22 @@ libpcap.a: version.h $(OBJECTS) $(PM_OBJECTS)
|
|||||||
rm -f $@
|
rm -f $@
|
||||||
ar rs $@ $^
|
ar rs $@ $^
|
||||||
|
|
||||||
|
filtertest.exe: tests/filtertest.c libpcap.a
|
||||||
|
$(CC) $(CFLAGS) -Din_addr_t=u_long -o $@ $^ $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
@echo
|
||||||
|
|
||||||
|
findalldevstest.exe: tests/findalldevstest.c libpcap.a
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
@echo
|
||||||
|
|
||||||
|
nonblocktest.exe: tests/nonblocktest.c libpcap.a
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
@echo
|
||||||
|
|
||||||
|
opentest.exe: tests/opentest.c libpcap.a
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(WATT32_ROOT)/lib/libwatt.a
|
||||||
|
@echo
|
||||||
|
|
||||||
msdos/pkt_stub.inc: msdos/bin2c.exe msdos/pkt_rx1.S
|
msdos/pkt_stub.inc: msdos/bin2c.exe msdos/pkt_rx1.S
|
||||||
$(ASM) -o $(TEMPBIN) -lmsdos/pkt_rx1.lst msdos/pkt_rx1.S
|
$(ASM) -o $(TEMPBIN) -lmsdos/pkt_rx1.lst msdos/pkt_rx1.S
|
||||||
./msdos/bin2c $(TEMPBIN) > $@
|
./msdos/bin2c $(TEMPBIN) > $@
|
||||||
@ -61,8 +83,8 @@ msdos/pkt_stub.inc: msdos/bin2c.exe msdos/pkt_rx1.S
|
|||||||
grammar.c tokdefs.h: grammar.y
|
grammar.c tokdefs.h: grammar.y
|
||||||
rm -f grammar.c tokdefs.h
|
rm -f grammar.c tokdefs.h
|
||||||
$(YACC) --name-prefix=pcap_ --yacc --defines grammar.y
|
$(YACC) --name-prefix=pcap_ --yacc --defines grammar.y
|
||||||
mv -f y_tab.c grammar.c
|
mv -f y.tab.c grammar.c
|
||||||
mv -f y_tab.h tokdefs.h
|
mv -f y.tab.h tokdefs.h
|
||||||
|
|
||||||
version.h: ./VERSION
|
version.h: ./VERSION
|
||||||
@echo '/* Generated from VERSION. Do not edit */' > $@
|
@echo '/* Generated from VERSION. Do not edit */' > $@
|
||||||
@ -76,76 +98,30 @@ msdos/bin2c.exe: msdos/bin2c.c
|
|||||||
$(CC) $*.c -o $*.exe
|
$(CC) $*.c -o $*.exe
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -f Makefile.dj -C $(DRIVER_DIR) clean
|
rm -f $(OBJECTS) msdos/pkt_rx1.lst Makefile.bak .depend.dj $(PREREQUISITES)
|
||||||
$(MAKE) -f Makefile.dj -C libcpcap clean
|
# $(MAKE) -f Makefile.dj -C $(DRIVER_DIR) clean
|
||||||
rm -f $(OBJECTS) msdos/pkt_rx1.lst Makefile.bak $(PREREQUISITES)
|
|
||||||
|
|
||||||
vclean: clean
|
vclean: clean
|
||||||
rm -f libpcap.a msdos/bin2c.exe
|
rm -f $(TARGETS)
|
||||||
|
-rmdir $(OBJ_DIR)
|
||||||
#
|
|
||||||
# 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
|
# Manually generated dependencies
|
||||||
#
|
#
|
||||||
msdos/pktdrvr.c: msdos/pkt_stub.inc
|
msdos/pktdrvr.c: msdos/pkt_stub.inc
|
||||||
scanner.c: scanner.l
|
scanner.c: scanner.l
|
||||||
grammar.c tokdefs.h: grammar.y
|
grammar.c tokdefs.h: grammar.y
|
||||||
grammar.h: grammar.y
|
grammar.h: grammar.y
|
||||||
scanner.l: pcap-int.h pcap-namedb.h gencode.h grammar.h gnuc.h
|
scanner.l: pcap-int.h pcap-namedb.h gencode.h grammar.h
|
||||||
grammar.y: pcap-int.h gencode.h pcap-namedb.h gnuc.h
|
grammar.y: pcap-int.h gencode.h pcap-namedb.h
|
||||||
|
|
||||||
#
|
#
|
||||||
# Automatically generated dependencies
|
# Generate dependencies.
|
||||||
#
|
#
|
||||||
# DO NOT DELETE THIS LINE
|
REPLACE = sed -e 's/\(.*\)\.o: /\n$$(OBJ_DIR)\/\1.o: /'
|
||||||
grammar.o: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h pf.h \
|
|
||||||
pcap-namedb.h
|
depend: $(PREREQUISITES)
|
||||||
scanner.o: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h pcap-namedb.h \
|
$(CC) -MM $(CFLAGS) $(SOURCES) | $(REPLACE) > .depend.dj
|
||||||
tokdefs.h
|
|
||||||
bpf_filt.o: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
-include .depend.dj
|
||||||
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
|
|
||||||
|
@ -24,11 +24,11 @@ DEFS = -dDEBUG -dNDIS_DEBUG -d_U_= -dHAVE_LIMITS_H -dHAVE_STRERROR &
|
|||||||
CC = wcc386.exe
|
CC = wcc386.exe
|
||||||
ASM = wasm.exe -$(MODEL) $(DEFS) -dDOSX -dDOS4GW -zq -bt=dos -fr=nul -d3 -s
|
ASM = wasm.exe -$(MODEL) $(DEFS) -dDOSX -dDOS4GW -zq -bt=dos -fr=nul -d3 -s
|
||||||
|
|
||||||
OBJS = $(OBJDIR)\grammar.obj $(OBJDIR)\scanner.obj $(OBJDIR)\pcap.obj &
|
OBJS = $(OBJDIR)\grammar.obj $(OBJDIR)\scanner.obj $(OBJDIR)\pcap.obj &
|
||||||
$(OBJDIR)\bpf_filt.obj $(OBJDIR)\bpf_imag.obj $(OBJDIR)\bpf_dump.obj &
|
$(OBJDIR)\bpf_filter.obj $(OBJDIR)\bpf_imag.obj $(OBJDIR)\bpf_dump.obj &
|
||||||
$(OBJDIR)\etherent.obj $(OBJDIR)\gencode.obj $(OBJDIR)\nametoad.obj &
|
$(OBJDIR)\etherent.obj $(OBJDIR)\gencode.obj $(OBJDIR)\nametoad.obj &
|
||||||
$(OBJDIR)\pcap-dos.obj $(OBJDIR)\pktdrvr.obj $(OBJDIR)\optimize.obj &
|
$(OBJDIR)\pcap-dos.obj $(OBJDIR)\pktdrvr.obj $(OBJDIR)\optimize.obj &
|
||||||
$(OBJDIR)\savefile.obj $(OBJDIR)\inet.obj $(OBJDIR)\ndis2.obj
|
$(OBJDIR)\savefile.obj $(OBJDIR)\inet.obj $(OBJDIR)\ndis2.obj
|
||||||
|
|
||||||
CFLAGS = $(DEFS) $(YYDEFS) -I. -I$(%watt_root)\inc -I.\msdos\pm_drvr &
|
CFLAGS = $(DEFS) $(YYDEFS) -I. -I$(%watt_root)\inc -I.\msdos\pm_drvr &
|
||||||
-$(MODEL) -mf -zff -zgf -zq -bt=dos -fr=nul -w6 -fpi &
|
-$(MODEL) -mf -zff -zgf -zq -bt=dos -fr=nul -w6 -fpi &
|
||||||
@ -48,10 +48,13 @@ wlib.arg: msdos\makefile.wc
|
|||||||
%create $^@
|
%create $^@
|
||||||
for %f in ($(OBJS)) do %append $^@ +- %f
|
for %f in ($(OBJS)) do %append $^@ +- %f
|
||||||
|
|
||||||
$(OBJDIR)\pktdrvr.obj: msdos\pkt_stub.inc msdos\pktdrvr.c gnuc.h &
|
$(OBJDIR)\pktdrvr.obj: msdos\pkt_stub.inc msdos\pktdrvr.c &
|
||||||
pcap-dos.h pcap-int.h pcap.h msdos\pktdrvr.h
|
pcap-dos.h pcap-int.h pcap.h msdos\pktdrvr.h
|
||||||
*$(CC) $(CFLAGS) msdos\pktdrvr.c -fo=$@
|
*$(CC) $(CFLAGS) msdos\pktdrvr.c -fo=$@
|
||||||
|
|
||||||
|
$(OBJDIR)\bpf_filter.obj: bpf\net\bpf_filter.c
|
||||||
|
*$(CC) $(CFLAGS) bpf\net\bpf_filter.c -fo=$@
|
||||||
|
|
||||||
$(OBJDIR)\ndis2.obj: msdos\ndis2.c
|
$(OBJDIR)\ndis2.obj: msdos\ndis2.c
|
||||||
*$(CC) $(CFLAGS) msdos\ndis2.c -fo=$@
|
*$(CC) $(CFLAGS) msdos\ndis2.c -fo=$@
|
||||||
|
|
||||||
@ -59,7 +62,7 @@ $(OBJDIR)\ndis2.obj: msdos\ndis2.c
|
|||||||
.c{$(OBJDIR)}.obj:
|
.c{$(OBJDIR)}.obj:
|
||||||
*$(CC) $(CFLAGS) $[@ -fo=$@
|
*$(CC) $(CFLAGS) $[@ -fo=$@
|
||||||
|
|
||||||
grammar.c tokdefs.h: grammar.y
|
grammar.c tokdefs.h: grammar.y
|
||||||
bison --name-prefix=pcap_ --yacc --defines $[@
|
bison --name-prefix=pcap_ --yacc --defines $[@
|
||||||
- @del grammar.c
|
- @del grammar.c
|
||||||
- @del tokdefs.h
|
- @del tokdefs.h
|
||||||
@ -90,14 +93,14 @@ clean realclean vclean: .SYMBOLIC
|
|||||||
|
|
||||||
#
|
#
|
||||||
# dependencies
|
# dependencies
|
||||||
#
|
#
|
||||||
$(OBJDIR)\bpf_filt.obj: bpf_filt.c pcap-int.h pcap.h pcap-bpf.h gnuc.h
|
$(OBJDIR)\bpf_filter.obj: bpf\net\bpf_filter.c pcap-int.h pcap.h pcap-bpf.h
|
||||||
|
|
||||||
$(OBJDIR)\bpf_imag.obj: bpf_imag.c pcap-int.h pcap.h pcap-bpf.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)\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)\etherent.obj: etherent.c pcap-int.h pcap.h pcap-bpf.h pcap-namedb.h
|
||||||
|
|
||||||
$(OBJDIR)\optimize.obj: optimize.c pcap-int.h pcap.h pcap-bpf.h gencode.h
|
$(OBJDIR)\optimize.obj: optimize.c pcap-int.h pcap.h pcap-bpf.h gencode.h
|
||||||
|
|
||||||
@ -108,22 +111,22 @@ $(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)\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 &
|
$(OBJDIR)\grammar.obj: grammar.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
||||||
pf.h pcap-nam.h
|
pcap-namedb.h
|
||||||
|
|
||||||
$(OBJDIR)\scanner.obj: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
$(OBJDIR)\scanner.obj: scanner.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
||||||
pcap-nam.h tokdefs.h
|
pcap-namedb.h tokdefs.h
|
||||||
|
|
||||||
$(OBJDIR)\gencode.obj: gencode.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.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 &
|
ethertyp.h nlpid.h llc.h gencode.h atmuni31.h sunatmpo.h ppp.h sll.h &
|
||||||
arcnet.h pf.h pcap-nam.h
|
arcnet.h pcap-namedb.h
|
||||||
|
|
||||||
$(OBJDIR)\nametoad.obj: nametoad.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
$(OBJDIR)\nametoad.obj: nametoad.c pcap-int.h pcap.h pcap-bpf.h gencode.h &
|
||||||
pcap-nam.h ethertyp.h
|
pcap-namedb.h ethertyp.h
|
||||||
|
|
||||||
$(OBJDIR)\pcap-dos.obj: pcap-dos.c pcap.h pcap-bpf.h pcap-dos.h pcap-int.h &
|
$(OBJDIR)\pcap-dos.obj: pcap-dos.c pcap.h pcap-bpf.h pcap-dos.h pcap-int.h &
|
||||||
msdos\pktdrvr.h
|
msdos\pktdrvr.h
|
||||||
|
|
||||||
$(OBJDIR)\pktdrvr.obj: msdos\pktdrvr.c gnuc.h pcap-dos.h pcap-int.h &
|
$(OBJDIR)\pktdrvr.obj: msdos\pktdrvr.c pcap-dos.h pcap-int.h &
|
||||||
pcap.h pcap-bpf.h msdos\pktdrvr.h msdos\pkt_stub.inc
|
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 &
|
$(OBJDIR)\ndis2.obj: msdos\ndis2.c pcap-dos.h pcap-int.h pcap.h pcap-bpf.h &
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1993,1994
|
* Copyright (c) 1993,1994
|
||||||
* Texas A&M University. All rights reserved.
|
* Texas A&M University. All rights reserved.
|
||||||
*
|
*
|
||||||
@ -198,7 +198,7 @@ static struct {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Some handy macros
|
* Some handy macros
|
||||||
*/
|
*/
|
||||||
#define PERROR(str) printf("%s (%d): %s\n", __FILE__,__LINE__,str)
|
#define PERROR(str) printf("%s (%d): %s\n", __FILE__,__LINE__,str)
|
||||||
#define DEBUG_RING() (debugStrings[stopDebug+1 == MAX_NUM_DEBUG_STRINGS ? \
|
#define DEBUG_RING() (debugStrings[stopDebug+1 == MAX_NUM_DEBUG_STRINGS ? \
|
||||||
stopDebug = 0 : ++stopDebug])
|
stopDebug = 0 : ++stopDebug])
|
||||||
@ -444,7 +444,7 @@ CALLBACK (NdisReceiveChain (WORD macId, WORD frameSize, WORD reqHandle,
|
|||||||
ARGSUSED (frameSize);
|
ARGSUSED (frameSize);
|
||||||
ARGSUSED (reqHandle);
|
ARGSUSED (reqHandle);
|
||||||
ARGSUSED (indicate);
|
ARGSUSED (indicate);
|
||||||
ARGSUSED (protDS);
|
ARGSUSED (protDS);
|
||||||
|
|
||||||
/* This frees up the buffer for the MAC to use
|
/* This frees up the buffer for the MAC to use
|
||||||
*/
|
*/
|
||||||
@ -484,7 +484,7 @@ CALLBACK (NdisStatusProc (WORD macId, WORD param1, BYTE *indicate,
|
|||||||
* Tell the NDIS driver to start the delivery of the packet
|
* Tell the NDIS driver to start the delivery of the packet
|
||||||
*/
|
*/
|
||||||
int NdisSendPacket (struct _PktBuf *pktBuf, int macId)
|
int NdisSendPacket (struct _PktBuf *pktBuf, int macId)
|
||||||
{
|
{
|
||||||
struct _TxBufDescr txBufDescr;
|
struct _TxBufDescr txBufDescr;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
@ -513,7 +513,7 @@ int NdisSendPacket (struct _PktBuf *pktBuf, int macId)
|
|||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
case ERR_SUCCESS:
|
case ERR_SUCCESS:
|
||||||
/* Everything was hunky dory and synchronous. Free up the
|
/* Everything was hunky dory and synchronous. Free up the
|
||||||
* packet buffer
|
* packet buffer
|
||||||
*/
|
*/
|
||||||
xmitPending--;
|
xmitPending--;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1993,1994
|
* Copyright (c) 1993,1994
|
||||||
* Texas A&M University. All rights reserved.
|
* Texas A&M University. All rights reserved.
|
||||||
*
|
*
|
||||||
|
376
msdos/ndis_0.asm
376
msdos/ndis_0.asm
@ -1,188 +1,188 @@
|
|||||||
PAGE 60,132
|
PAGE 60,132
|
||||||
NAME NDIS_0
|
NAME NDIS_0
|
||||||
|
|
||||||
ifdef DOSX
|
ifdef DOSX
|
||||||
.386
|
.386
|
||||||
_TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
|
_TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||||
_TEXT ENDS
|
_TEXT ENDS
|
||||||
_DATA SEGMENT PUBLIC DWORD USE16 'CODE'
|
_DATA SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||||
_DATA ENDS
|
_DATA ENDS
|
||||||
_TEXT32 SEGMENT PUBLIC BYTE USE32 'CODE'
|
_TEXT32 SEGMENT PUBLIC BYTE USE32 'CODE'
|
||||||
_TEXT32 ENDS
|
_TEXT32 ENDS
|
||||||
CB_DSEG EQU <CS> ; DOSX is tiny-model
|
CB_DSEG EQU <CS> ; DOSX is tiny-model
|
||||||
D_SEG EQU <_TEXT SEGMENT>
|
D_SEG EQU <_TEXT SEGMENT>
|
||||||
D_END EQU <_TEXT ENDS>
|
D_END EQU <_TEXT ENDS>
|
||||||
ASSUME CS:_TEXT,DS:_TEXT
|
ASSUME CS:_TEXT,DS:_TEXT
|
||||||
|
|
||||||
PUSHREGS equ <pushad>
|
PUSHREGS equ <pushad>
|
||||||
POPREGS equ <popad>
|
POPREGS equ <popad>
|
||||||
|
|
||||||
PUBPROC macro name
|
PUBPROC macro name
|
||||||
align 4
|
align 4
|
||||||
public @&name
|
public @&name
|
||||||
@&name label near
|
@&name label near
|
||||||
endm
|
endm
|
||||||
else
|
else
|
||||||
.286
|
.286
|
||||||
_TEXT SEGMENT PUBLIC DWORD 'CODE'
|
_TEXT SEGMENT PUBLIC DWORD 'CODE'
|
||||||
_TEXT ENDS
|
_TEXT ENDS
|
||||||
_DATA SEGMENT PUBLIC DWORD 'DATA'
|
_DATA SEGMENT PUBLIC DWORD 'DATA'
|
||||||
_DATA ENDS
|
_DATA ENDS
|
||||||
CB_DSEG EQU <SEG _DATA> ; 16bit is small/large model
|
CB_DSEG EQU <SEG _DATA> ; 16bit is small/large model
|
||||||
D_SEG EQU <_DATA SEGMENT>
|
D_SEG EQU <_DATA SEGMENT>
|
||||||
D_END EQU <_DATA ENDS>
|
D_END EQU <_DATA ENDS>
|
||||||
ASSUME CS:_TEXT,DS:_DATA
|
ASSUME CS:_TEXT,DS:_DATA
|
||||||
|
|
||||||
PUSHREGS equ <pusha>
|
PUSHREGS equ <pusha>
|
||||||
POPREGS equ <popa>
|
POPREGS equ <popa>
|
||||||
|
|
||||||
PUBPROC macro name
|
PUBPROC macro name
|
||||||
public _&name
|
public _&name
|
||||||
_&name label far
|
_&name label far
|
||||||
endm
|
endm
|
||||||
endif
|
endif
|
||||||
|
|
||||||
;-------------------------------------------
|
;-------------------------------------------
|
||||||
|
|
||||||
D_SEG
|
D_SEG
|
||||||
|
|
||||||
D_END
|
D_END
|
||||||
|
|
||||||
|
|
||||||
_TEXT SEGMENT
|
_TEXT SEGMENT
|
||||||
|
|
||||||
EXTRN _NdisSystemRequest : near
|
EXTRN _NdisSystemRequest : near
|
||||||
EXTRN _NdisRequestConfirm : near
|
EXTRN _NdisRequestConfirm : near
|
||||||
EXTRN _NdisTransmitConfirm : near
|
EXTRN _NdisTransmitConfirm : near
|
||||||
EXTRN _NdisReceiveLookahead : near
|
EXTRN _NdisReceiveLookahead : near
|
||||||
EXTRN _NdisIndicationComplete : near
|
EXTRN _NdisIndicationComplete : near
|
||||||
EXTRN _NdisReceiveChain : near
|
EXTRN _NdisReceiveChain : near
|
||||||
EXTRN _NdisStatusProc : near
|
EXTRN _NdisStatusProc : near
|
||||||
EXTRN _NdisAllocStack : near
|
EXTRN _NdisAllocStack : near
|
||||||
EXTRN _NdisFreeStack : near
|
EXTRN _NdisFreeStack : near
|
||||||
|
|
||||||
;
|
;
|
||||||
; *ALL* interrupt threads come through this macro.
|
; *ALL* interrupt threads come through this macro.
|
||||||
;
|
;
|
||||||
CALLBACK macro callbackProc, argsSize
|
CALLBACK macro callbackProc, argsSize
|
||||||
|
|
||||||
pushf
|
pushf
|
||||||
PUSHREGS ;; Save the registers
|
PUSHREGS ;; Save the registers
|
||||||
|
|
||||||
push es
|
push es
|
||||||
push ds
|
push ds
|
||||||
mov ax,CB_DSEG ;; Load DS
|
mov ax,CB_DSEG ;; Load DS
|
||||||
mov ds,ax
|
mov ds,ax
|
||||||
call _NdisAllocStack ;; Get and install a stack.
|
call _NdisAllocStack ;; Get and install a stack.
|
||||||
|
|
||||||
mov bx,ss ;; Save off the old stack in other regs
|
mov bx,ss ;; Save off the old stack in other regs
|
||||||
mov cx,sp
|
mov cx,sp
|
||||||
mov ss,dx ;; Install the new one
|
mov ss,dx ;; Install the new one
|
||||||
mov sp,ax
|
mov sp,ax
|
||||||
push bx ;; Save the old one on to the new stack
|
push bx ;; Save the old one on to the new stack
|
||||||
push cx
|
push cx
|
||||||
sub sp,&argsSize ;; Allocate space for arguments on the stack
|
sub sp,&argsSize ;; Allocate space for arguments on the stack
|
||||||
|
|
||||||
mov ax,ss ;; Set up the destination for the move
|
mov ax,ss ;; Set up the destination for the move
|
||||||
mov es,ax
|
mov es,ax
|
||||||
mov di,sp
|
mov di,sp
|
||||||
mov ds,bx ;; Set up the source for the move.
|
mov ds,bx ;; Set up the source for the move.
|
||||||
mov si,cx
|
mov si,cx
|
||||||
add si,4+6+32
|
add si,4+6+32
|
||||||
|
|
||||||
mov cx,&argsSize ;; Move the arguments to the stack.
|
mov cx,&argsSize ;; Move the arguments to the stack.
|
||||||
shr cx,1
|
shr cx,1
|
||||||
cld
|
cld
|
||||||
rep movsw
|
rep movsw
|
||||||
|
|
||||||
mov ax,CB_DSEG ;; Set my data segment again.
|
mov ax,CB_DSEG ;; Set my data segment again.
|
||||||
mov ds,ax
|
mov ds,ax
|
||||||
|
|
||||||
call &callbackProc ;; Call the real callback.
|
call &callbackProc ;; Call the real callback.
|
||||||
pop di ;; Pop off the old stack
|
pop di ;; Pop off the old stack
|
||||||
pop si
|
pop si
|
||||||
mov bx,ss ;; Save off the current allocated stack.
|
mov bx,ss ;; Save off the current allocated stack.
|
||||||
mov cx,sp
|
mov cx,sp
|
||||||
mov ss,si ;; Restore the old stack
|
mov ss,si ;; Restore the old stack
|
||||||
mov sp,di
|
mov sp,di
|
||||||
push ax ;; Save the return code
|
push ax ;; Save the return code
|
||||||
push bx ;; Free the stack. Push the pointer to it
|
push bx ;; Free the stack. Push the pointer to it
|
||||||
push cx
|
push cx
|
||||||
call _NdisFreeStack
|
call _NdisFreeStack
|
||||||
add sp,4
|
add sp,4
|
||||||
pop ax ;; Get the return code back
|
pop ax ;; Get the return code back
|
||||||
add di,32 ;; Get a pointer to ax on the stack
|
add di,32 ;; Get a pointer to ax on the stack
|
||||||
mov word ptr ss:[di],ax
|
mov word ptr ss:[di],ax
|
||||||
pop ds
|
pop ds
|
||||||
pop es
|
pop es
|
||||||
|
|
||||||
POPREGS
|
POPREGS
|
||||||
popf
|
popf
|
||||||
endm
|
endm
|
||||||
|
|
||||||
;
|
;
|
||||||
; Define all of the callbacks for the NDIS procs.
|
; Define all of the callbacks for the NDIS procs.
|
||||||
;
|
;
|
||||||
|
|
||||||
PUBPROC systemRequestGlue
|
PUBPROC systemRequestGlue
|
||||||
CALLBACK _NdisSystemRequest,14
|
CALLBACK _NdisSystemRequest,14
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
PUBPROC requestConfirmGlue
|
PUBPROC requestConfirmGlue
|
||||||
CALLBACK _NdisRequestConfirm,12
|
CALLBACK _NdisRequestConfirm,12
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
PUBPROC transmitConfirmGlue
|
PUBPROC transmitConfirmGlue
|
||||||
CALLBACK _NdisTransmitConfirm,10
|
CALLBACK _NdisTransmitConfirm,10
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
PUBPROC receiveLookaheadGlue
|
PUBPROC receiveLookaheadGlue
|
||||||
CALLBACK _NdisReceiveLookahead,16
|
CALLBACK _NdisReceiveLookahead,16
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
PUBPROC indicationCompleteGlue
|
PUBPROC indicationCompleteGlue
|
||||||
CALLBACK _NdisIndicationComplete,4
|
CALLBACK _NdisIndicationComplete,4
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
PUBPROC receiveChainGlue
|
PUBPROC receiveChainGlue
|
||||||
CALLBACK _NdisReceiveChain,16
|
CALLBACK _NdisReceiveChain,16
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
PUBPROC statusGlue
|
PUBPROC statusGlue
|
||||||
CALLBACK _NdisStatusProc,12
|
CALLBACK _NdisStatusProc,12
|
||||||
RETF
|
RETF
|
||||||
|
|
||||||
;
|
;
|
||||||
; int FAR NdisGetLinkage (int handle, char *data, int size);
|
; int FAR NdisGetLinkage (int handle, char *data, int size);
|
||||||
;
|
;
|
||||||
|
|
||||||
ifdef DOSX
|
ifdef DOSX
|
||||||
PUBPROC NdisGetLinkage
|
PUBPROC NdisGetLinkage
|
||||||
push ebx
|
push ebx
|
||||||
mov ebx, [esp+8] ; device handle
|
mov ebx, [esp+8] ; device handle
|
||||||
mov eax, 4402h ; IOCTRL read function
|
mov eax, 4402h ; IOCTRL read function
|
||||||
mov edx, [esp+12] ; DS:EDX -> result data
|
mov edx, [esp+12] ; DS:EDX -> result data
|
||||||
mov ecx, [esp+16] ; ECX = length
|
mov ecx, [esp+16] ; ECX = length
|
||||||
int 21h
|
int 21h
|
||||||
pop ebx
|
pop ebx
|
||||||
jc @fail
|
jc @fail
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@fail: ret
|
@fail: ret
|
||||||
|
|
||||||
else
|
else
|
||||||
PUBPROC NdisGetLinkage
|
PUBPROC NdisGetLinkage
|
||||||
enter 0, 0
|
enter 0, 0
|
||||||
mov bx, [bp+6]
|
mov bx, [bp+6]
|
||||||
mov ax, 4402h
|
mov ax, 4402h
|
||||||
mov dx, [bp+8]
|
mov dx, [bp+8]
|
||||||
mov cx, [bp+12]
|
mov cx, [bp+12]
|
||||||
int 21h
|
int 21h
|
||||||
jc @fail
|
jc @fail
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
@fail: leave
|
@fail: leave
|
||||||
retf
|
retf
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ENDS
|
ENDS
|
||||||
|
|
||||||
END
|
END
|
||||||
|
@ -1,197 +1,197 @@
|
|||||||
PAGE 60,132
|
PAGE 60,132
|
||||||
NAME PKT_RX
|
NAME PKT_RX
|
||||||
|
|
||||||
ifdef ??version ; using TASM
|
ifdef ??version ; using TASM
|
||||||
masm
|
masm
|
||||||
jumps
|
jumps
|
||||||
endif
|
endif
|
||||||
|
|
||||||
PUBLIC _pktDrop, _pktRxBuf, _pktTxBuf, _pktTemp
|
PUBLIC _pktDrop, _pktRxBuf, _pktTxBuf, _pktTemp
|
||||||
PUBLIC _rxOutOfs, _rxInOfs, _PktReceiver, _pktRxEnd
|
PUBLIC _rxOutOfs, _rxInOfs, _PktReceiver, _pktRxEnd
|
||||||
|
|
||||||
;
|
;
|
||||||
; these sizes MUST be equal to the sizes in PKTDRVR.H
|
; these sizes MUST be equal to the sizes in PKTDRVR.H
|
||||||
;
|
;
|
||||||
|
|
||||||
RX_BUF_SIZE = 1500 ; max message size on Ethernet
|
RX_BUF_SIZE = 1500 ; max message size on Ethernet
|
||||||
TX_BUF_SIZE = 1500
|
TX_BUF_SIZE = 1500
|
||||||
|
|
||||||
ifdef DOSX
|
ifdef DOSX
|
||||||
.386
|
.386
|
||||||
NUM_RX_BUF = 32 ; # of RX element buffers
|
NUM_RX_BUF = 32 ; # of RX element buffers
|
||||||
_TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
|
_TEXT SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||||
_TEXT ENDS
|
_TEXT ENDS
|
||||||
_DATA SEGMENT PUBLIC DWORD USE16 'CODE'
|
_DATA SEGMENT PUBLIC DWORD USE16 'CODE'
|
||||||
_DATA ENDS
|
_DATA ENDS
|
||||||
D_SEG EQU <_TEXT SEGMENT>
|
D_SEG EQU <_TEXT SEGMENT>
|
||||||
D_END EQU <_TEXT ENDS>
|
D_END EQU <_TEXT ENDS>
|
||||||
ASSUME CS:_TEXT,DS:_TEXT
|
ASSUME CS:_TEXT,DS:_TEXT
|
||||||
else
|
else
|
||||||
.286
|
.286
|
||||||
NUM_RX_BUF = 10
|
NUM_RX_BUF = 10
|
||||||
_TEXT SEGMENT PUBLIC DWORD 'CODE'
|
_TEXT SEGMENT PUBLIC DWORD 'CODE'
|
||||||
_TEXT ENDS
|
_TEXT ENDS
|
||||||
_DATA SEGMENT PUBLIC DWORD 'DATA'
|
_DATA SEGMENT PUBLIC DWORD 'DATA'
|
||||||
_DATA ENDS
|
_DATA ENDS
|
||||||
D_SEG EQU <_DATA SEGMENT>
|
D_SEG EQU <_DATA SEGMENT>
|
||||||
D_END EQU <_DATA ENDS>
|
D_END EQU <_DATA ENDS>
|
||||||
ASSUME CS:_TEXT,DS:_DATA
|
ASSUME CS:_TEXT,DS:_DATA
|
||||||
endif
|
endif
|
||||||
|
|
||||||
;-------------------------------------------
|
;-------------------------------------------
|
||||||
|
|
||||||
D_SEG
|
D_SEG
|
||||||
|
|
||||||
RX_ELEMENT STRUC
|
RX_ELEMENT STRUC
|
||||||
firstCount dw 0 ; # of bytes on 1st call
|
firstCount dw 0 ; # of bytes on 1st call
|
||||||
secondCount dw 0 ; # of bytes on 2nd call
|
secondCount dw 0 ; # of bytes on 2nd call
|
||||||
handle dw 0 ; handle for upcall
|
handle dw 0 ; handle for upcall
|
||||||
destinAdr db 6 dup (0) ; packet destination address
|
destinAdr db 6 dup (0) ; packet destination address
|
||||||
sourceAdr db 6 dup (0) ; packet source address
|
sourceAdr db 6 dup (0) ; packet source address
|
||||||
protocol dw 0 ; packet protocol number
|
protocol dw 0 ; packet protocol number
|
||||||
rxBuffer db RX_BUF_SIZE dup (0) ; RX buffer
|
rxBuffer db RX_BUF_SIZE dup (0) ; RX buffer
|
||||||
ENDS
|
ENDS
|
||||||
align 4
|
align 4
|
||||||
_rxOutOfs dw offset _pktRxBuf ; ring buffer offsets
|
_rxOutOfs dw offset _pktRxBuf ; ring buffer offsets
|
||||||
_rxInOfs dw offset _pktRxBuf ; into _pktRxBuf
|
_rxInOfs dw offset _pktRxBuf ; into _pktRxBuf
|
||||||
_pktDrop dw 0,0 ; packet drop counter
|
_pktDrop dw 0,0 ; packet drop counter
|
||||||
_pktTemp db 20 dup (0) ; temp work area
|
_pktTemp db 20 dup (0) ; temp work area
|
||||||
_pktTxBuf db (TX_BUF_SIZE+14) dup (0) ; TX buffer
|
_pktTxBuf db (TX_BUF_SIZE+14) dup (0) ; TX buffer
|
||||||
_pktRxBuf RX_ELEMENT NUM_RX_BUF dup (<>) ; RX structures
|
_pktRxBuf RX_ELEMENT NUM_RX_BUF dup (<>) ; RX structures
|
||||||
LAST_OFS = offset $
|
LAST_OFS = offset $
|
||||||
|
|
||||||
screenSeg dw 0B800h
|
screenSeg dw 0B800h
|
||||||
newInOffset dw 0
|
newInOffset dw 0
|
||||||
|
|
||||||
fanChars db '-\|/'
|
fanChars db '-\|/'
|
||||||
fanIndex dw 0
|
fanIndex dw 0
|
||||||
|
|
||||||
D_END
|
D_END
|
||||||
|
|
||||||
_TEXT SEGMENT
|
_TEXT SEGMENT
|
||||||
|
|
||||||
|
|
||||||
SHOW_RX MACRO
|
SHOW_RX MACRO
|
||||||
push es
|
push es
|
||||||
push bx
|
push bx
|
||||||
mov bx, screenSeg
|
mov bx, screenSeg
|
||||||
mov es, bx ;; r-mode segment of colour screen
|
mov es, bx ;; r-mode segment of colour screen
|
||||||
mov di, 158 ;; upper right corner - 1
|
mov di, 158 ;; upper right corner - 1
|
||||||
mov bx, fanIndex
|
mov bx, fanIndex
|
||||||
mov al, fanChars[bx] ;; get write char
|
mov al, fanChars[bx] ;; get write char
|
||||||
mov ah, 15 ;; and white colour
|
mov ah, 15 ;; and white colour
|
||||||
stosw ;; write to screen at ES:EDI
|
stosw ;; write to screen at ES:EDI
|
||||||
inc fanIndex ;; update next index
|
inc fanIndex ;; update next index
|
||||||
and fanIndex, 3
|
and fanIndex, 3
|
||||||
pop bx
|
pop bx
|
||||||
pop es
|
pop es
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
;------------------------------------------------------------------------
|
;------------------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; This macro return ES:DI to tail of Rx queue
|
; This macro return ES:DI to tail of Rx queue
|
||||||
|
|
||||||
ENQUEUE MACRO
|
ENQUEUE MACRO
|
||||||
LOCAL @noWrap
|
LOCAL @noWrap
|
||||||
mov ax, _rxInOfs ;; DI = current in-offset
|
mov ax, _rxInOfs ;; DI = current in-offset
|
||||||
add ax, SIZE RX_ELEMENT ;; point to next _pktRxBuf buffer
|
add ax, SIZE RX_ELEMENT ;; point to next _pktRxBuf buffer
|
||||||
cmp ax, LAST_OFS ;; pointing past last ?
|
cmp ax, LAST_OFS ;; pointing past last ?
|
||||||
jb @noWrap ;; no - jump
|
jb @noWrap ;; no - jump
|
||||||
lea ax, _pktRxBuf ;; yes, point to 1st buffer
|
lea ax, _pktRxBuf ;; yes, point to 1st buffer
|
||||||
align 4
|
align 4
|
||||||
@noWrap: cmp ax, _rxOutOfs ;; in-ofs = out-ofs ?
|
@noWrap: cmp ax, _rxOutOfs ;; in-ofs = out-ofs ?
|
||||||
je @dump ;; yes, queue is full
|
je @dump ;; yes, queue is full
|
||||||
mov di, _rxInOfs ;; ES:DI -> buffer at queue input
|
mov di, _rxInOfs ;; ES:DI -> buffer at queue input
|
||||||
mov newInOffset, ax ;; remember new input offset
|
mov newInOffset, ax ;; remember new input offset
|
||||||
|
|
||||||
;; NOTE. rxInOfs is updated after the packet has been copied
|
;; NOTE. rxInOfs is updated after the packet has been copied
|
||||||
;; to ES:DI (= DS:SI on 2nd call) by the packet driver
|
;; to ES:DI (= DS:SI on 2nd call) by the packet driver
|
||||||
|
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
;------------------------------------------------------------------------
|
;------------------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; This routine gets called by the packet driver twice:
|
; This routine gets called by the packet driver twice:
|
||||||
; 1st time (AX=0) it requests an address where to put the packet
|
; 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)
|
; 2nd time (AX=1) the packet has been copied to this location (DS:SI)
|
||||||
; BX has client handle (stored in RX_ELEMENT.handle).
|
; BX has client handle (stored in RX_ELEMENT.handle).
|
||||||
; CX has # of bytes in packet on both call. They should be equal.
|
; 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
|
; A test for equality is done by putting CX in _pktRxBuf [n].firstCount
|
||||||
; and _pktRxBuf[n].secondCount, and CL on first call in
|
; and _pktRxBuf[n].secondCount, and CL on first call in
|
||||||
; _pktRxBuf[n].rxBuffer[CX]. These values are checked in "PktReceive"
|
; _pktRxBuf[n].rxBuffer[CX]. These values are checked in "PktReceive"
|
||||||
; (PKTDRVR.C)
|
; (PKTDRVR.C)
|
||||||
;
|
;
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
_PktReceiver:
|
_PktReceiver:
|
||||||
pushf
|
pushf
|
||||||
cli ; no distraction wanted !
|
cli ; no distraction wanted !
|
||||||
push ds
|
push ds
|
||||||
push bx
|
push bx
|
||||||
ifdef DOSX
|
ifdef DOSX
|
||||||
mov bx, cs
|
mov bx, cs
|
||||||
else
|
else
|
||||||
mov bx, SEG _DATA
|
mov bx, SEG _DATA
|
||||||
endif
|
endif
|
||||||
mov ds, bx
|
mov ds, bx
|
||||||
mov es, bx ; ES = DS = CS or seg _DATA
|
mov es, bx ; ES = DS = CS or seg _DATA
|
||||||
pop bx ; restore handle
|
pop bx ; restore handle
|
||||||
|
|
||||||
cmp ax, 0 ; first call? (AX=0)
|
cmp ax, 0 ; first call? (AX=0)
|
||||||
jne @post ; AX=1: second call, do post process
|
jne @post ; AX=1: second call, do post process
|
||||||
|
|
||||||
ifdef DEBUG
|
ifdef DEBUG
|
||||||
SHOW_RX ; show that a packet is received
|
SHOW_RX ; show that a packet is received
|
||||||
endif
|
endif
|
||||||
cmp cx, RX_BUF_SIZE+14 ; size OK ?
|
cmp cx, RX_BUF_SIZE+14 ; size OK ?
|
||||||
ja @skip ; no, packet to large for us
|
ja @skip ; no, packet to large for us
|
||||||
|
|
||||||
ENQUEUE ; ES:DI -> _pktRxBuf[n]
|
ENQUEUE ; ES:DI -> _pktRxBuf[n]
|
||||||
|
|
||||||
mov [di].firstCount, cx ; remember the first count.
|
mov [di].firstCount, cx ; remember the first count.
|
||||||
mov [di].handle, bx ; remember the handle.
|
mov [di].handle, bx ; remember the handle.
|
||||||
add di, 6 ; ES:DI -> _pktRxBuf[n].destinAdr
|
add di, 6 ; ES:DI -> _pktRxBuf[n].destinAdr
|
||||||
pop ds
|
pop ds
|
||||||
popf
|
popf
|
||||||
retf ; far return to driver with ES:DI
|
retf ; far return to driver with ES:DI
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@dump: inc _pktDrop[0] ; discard the packet on 1st call
|
@dump: inc _pktDrop[0] ; discard the packet on 1st call
|
||||||
adc _pktDrop[2], 0 ; increment packets lost
|
adc _pktDrop[2], 0 ; increment packets lost
|
||||||
|
|
||||||
@skip: xor di, di ; return ES:DI = NIL pointer
|
@skip: xor di, di ; return ES:DI = NIL pointer
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
mov es, ax
|
mov es, ax
|
||||||
pop ds
|
pop ds
|
||||||
popf
|
popf
|
||||||
retf
|
retf
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@post: or si, si ; DS:SI->_pktRxBuf[n][n].destinAdr
|
@post: or si, si ; DS:SI->_pktRxBuf[n][n].destinAdr
|
||||||
jz @discard ; make sure we don't use NULL-pointer
|
jz @discard ; make sure we don't use NULL-pointer
|
||||||
|
|
||||||
sub si, 6 ; DS:SI -> _pktRxBuf[n].destinAdr
|
sub si, 6 ; DS:SI -> _pktRxBuf[n].destinAdr
|
||||||
;
|
;
|
||||||
; push si
|
; push si
|
||||||
; push [si].firstCount
|
; push [si].firstCount
|
||||||
; call bpf_filter_match ; run the filter here some day?
|
; call bpf_filter_match ; run the filter here some day?
|
||||||
; add sp, 4
|
; add sp, 4
|
||||||
; cmp ax, 0
|
; cmp ax, 0
|
||||||
; je @discard
|
; je @discard
|
||||||
|
|
||||||
mov [si].secondCount, cx
|
mov [si].secondCount, cx
|
||||||
mov ax, newInOffset
|
mov ax, newInOffset
|
||||||
mov _rxInOfs, ax ; update _pktRxBuf input offset
|
mov _rxInOfs, ax ; update _pktRxBuf input offset
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@discard:pop ds
|
@discard:pop ds
|
||||||
popf
|
popf
|
||||||
retf
|
retf
|
||||||
|
|
||||||
_pktRxEnd db 0 ; marker for end of r-mode code/data
|
_pktRxEnd db 0 ; marker for end of r-mode code/data
|
||||||
|
|
||||||
_TEXT ENDS
|
_TEXT ENDS
|
||||||
|
|
||||||
END
|
END
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
;
|
;
|
||||||
%define ETH_MTU 1500 ; max data size on Ethernet
|
%define ETH_MTU 1500 ; max data size on Ethernet
|
||||||
%define ETH_MIN 60 ; min/max total frame size
|
%define ETH_MIN 60 ; min/max total frame size
|
||||||
%define ETH_MAX (ETH_MTU+2*6+2)
|
%define ETH_MAX (ETH_MTU+2*6+2) ; =1514
|
||||||
%define NUM_RX_BUF 32 ; # of RX element buffers
|
%define NUM_RX_BUF 32 ; # of RX element buffers
|
||||||
%define RX_SIZE (ETH_MAX+6) ; sizeof(RX_ELEMENT) = 1514+6
|
%define RX_SIZE (ETH_MAX+6) ; sizeof(RX_ELEMENT) = 1514+6
|
||||||
%idefine offset
|
%idefine offset
|
||||||
|
@ -209,7 +209,7 @@ LOCAL struct { /* internal statistics */
|
|||||||
DWORD tooLarge; /* size > ETH_MAX */
|
DWORD tooLarge; /* size > ETH_MAX */
|
||||||
DWORD badSync; /* count_1 != count_2 */
|
DWORD badSync; /* count_1 != count_2 */
|
||||||
DWORD wrongHandle; /* upcall to wrong handle */
|
DWORD wrongHandle; /* upcall to wrong handle */
|
||||||
} intStat;
|
} intStat;
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ PUBLIC const char *PktGetErrorStr (int errNum)
|
|||||||
PUBLIC const char *PktGetClassName (WORD class)
|
PUBLIC const char *PktGetClassName (WORD class)
|
||||||
{
|
{
|
||||||
switch (class)
|
switch (class)
|
||||||
{
|
{
|
||||||
case PD_ETHER:
|
case PD_ETHER:
|
||||||
return ("DIX-Ether");
|
return ("DIX-Ether");
|
||||||
case PD_PRONET10:
|
case PD_PRONET10:
|
||||||
@ -1036,7 +1036,7 @@ LOCAL __inline void PktFreeMem (void)
|
|||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
PUBLIC BOOL PktExitDriver (void)
|
PUBLIC BOOL PktExitDriver (void)
|
||||||
{
|
{
|
||||||
if (pktInfo.handle)
|
if (pktInfo.handle)
|
||||||
{
|
{
|
||||||
if (!PktSetReceiverMode(PDRX_BROADCAST))
|
if (!PktSetReceiverMode(PDRX_BROADCAST))
|
||||||
|
@ -79,7 +79,7 @@ typedef struct {
|
|||||||
DWORD outErrors; /* # of transmission errors */
|
DWORD outErrors; /* # of transmission errors */
|
||||||
DWORD lost; /* # of packets lost (RX) */
|
DWORD lost; /* # of packets lost (RX) */
|
||||||
} PKT_STAT;
|
} PKT_STAT;
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
ETHER destin;
|
ETHER destin;
|
||||||
|
@ -10,19 +10,21 @@ supported:
|
|||||||
- GNU C 2.7+ with djgpp 2.01+ DOS extender
|
- GNU C 2.7+ with djgpp 2.01+ DOS extender
|
||||||
- Watcom C 11.x with DOS4GW extender
|
- Watcom C 11.x with DOS4GW extender
|
||||||
|
|
||||||
Note: the files in the libpcap.zip contains short trucated filenames.
|
Note: the files in the libpcap.zip contains short truncated filenames.
|
||||||
So for djgpp to work with these, disable the use of long file names by
|
So for djgpp to work with these, disable the use of long file names by
|
||||||
setting "LFN=n" in the environment.
|
setting "LFN=n" in the environment. On the other hand, if you get libpcap
|
||||||
|
from Github or the official libpcap.tar.gz, some filenames are beyond 8+3.
|
||||||
|
In this case set "LFN=y".
|
||||||
|
|
||||||
Files specific to DOS are pcap-dos.[ch] and the assembly and C files in
|
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
|
the MSDOS sub-directory. Remember to built the libpcap library from the top
|
||||||
install directory. And not from the MSDOS sub-directory.
|
install directory. And not from the MSDOS sub-directory.
|
||||||
|
|
||||||
Note for djgpp users:
|
Note for djgpp users:
|
||||||
If you got the libpcap from the official site www.tcpdump, then that
|
If you got the libpcap from the official site www.tcpdump, then that
|
||||||
distribution does NOT contain any sources for building 32-bit drivers.
|
distribution does NOT contain any sources for building 32-bit drivers.
|
||||||
Instead get the full version at
|
Instead get the full version at
|
||||||
http://www.bgnett.no/~giva/pcap/libpcap.zip
|
http://www.watt-32.net/pcap/libpcap.zip
|
||||||
|
|
||||||
and set "USE_32BIT_DRIVERS = 1" in msdos\common.dj.
|
and set "USE_32BIT_DRIVERS = 1" in msdos\common.dj.
|
||||||
|
|
||||||
@ -49,30 +51,28 @@ The following packages and tools must be present for all targets.
|
|||||||
receive network data. It's mostly used to access the 'hosts'
|
receive network data. It's mostly used to access the 'hosts'
|
||||||
file and other <netdb.h> features. Get 'watt32s*.zip' at:
|
file and other <netdb.h> features. Get 'watt32s*.zip' at:
|
||||||
|
|
||||||
http://www.bgnett.no/~giva/
|
http://www.watt-32.net
|
||||||
|
|
||||||
2. Exception handler and disassember library (libexc.a) is needed if
|
2. Exception handler and disassember library (libexc.a) is needed if
|
||||||
"USE_EXCEPT = 1" in common.dj. Available at:
|
"USE_EXCEPT = 1" in common.dj. Available at:
|
||||||
|
|
||||||
http://www.bgnett.no/~giva/misc/exc_dx07.zip
|
http://www.watt-32.net/misc/exc_dx07.zip
|
||||||
|
|
||||||
3. Flex & Bison is used to generate parser for the filter handler
|
3. Flex & Bison is used to generate parser for the filter handler
|
||||||
pcap_compile:
|
pcap_compile:
|
||||||
|
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/flx254b.zip
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/flx254b.zip
|
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/bsn241b.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
|
4. NASM assembler v 0.98 or later is required when building djgpp and
|
||||||
Watcom targets:
|
Watcom targets:
|
||||||
|
http://www.nasm.us/
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2tk/nasm098p.zip
|
|
||||||
|
|
||||||
5. sed (Stream Editor) is required for doing `make depend'.
|
5. sed (Stream Editor) is required for doing `make depend'.
|
||||||
It's available at
|
It's available at:
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/sed*.zip
|
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/sed422b.zip
|
||||||
|
|
||||||
A touch tool to update the time-stamp of a file. E.g.
|
A touch tool to update the time-stamp of a file. E.g.:
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/grep*.zip
|
ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/grep29b.zip
|
||||||
|
|
||||||
6. For djgpp rm.exe and cp.exe are required. These should already be
|
6. For djgpp rm.exe and cp.exe are required. These should already be
|
||||||
part of your djgpp installation. Also required (experimental at the
|
part of your djgpp installation. Also required (experimental at the
|
||||||
@ -121,10 +121,17 @@ Follow these steps in building libpcap:
|
|||||||
|
|
||||||
Note: Code in `USE_NDIS2' does not work at the moment.
|
Note: Code in `USE_NDIS2' does not work at the moment.
|
||||||
|
|
||||||
4. The resulting libraries are put in current directory. There's no
|
4. The resulting library is put in current directory. There's some
|
||||||
test-program for `libpcap'. Linking the library with `tcpdump' is
|
test-program for `libpcap': `filtertest.exe', `findalldevstest.exe',
|
||||||
the ultimate test anyway.
|
`nonblocktest.exe' and `opentest.exe'.
|
||||||
|
|
||||||
|
But linking the library with `tcpdump' is the ultimate test. DOS/djgpp
|
||||||
|
should now hopefully be a supported target. Get the sources at:
|
||||||
|
http://www.tcpdump.org/
|
||||||
|
or
|
||||||
|
https://github.com/the-tcpdump-group/tcpdump/
|
||||||
|
|
||||||
|
(click on the 'Download ZIP' on the right side of that page.)
|
||||||
|
|
||||||
|
|
||||||
Extensions to libpcap
|
Extensions to libpcap
|
||||||
@ -132,14 +139,14 @@ Extensions to libpcap
|
|||||||
|
|
||||||
I've included some extra functions to DOS-libpcap:
|
I've included some extra functions to DOS-libpcap:
|
||||||
|
|
||||||
`pcap_config_hook (const char *name, const char *value)'
|
`pcap_config_hook (const char *keyword, const char *value)' :
|
||||||
|
|
||||||
Allows an application to set values of internal libpcap variables.
|
Allows an application to set values of internal libpcap variables.
|
||||||
`name' is typically a left-side keyword with an associated `value'
|
`keyword' and an associated `value' should be present in the `debug_tab[]'
|
||||||
that is called from application's configure process (see tcpdump's
|
array in pcap-dos.c (currently only used to set debug-levels and parameters
|
||||||
config.c file). libpcap keeps a set of tables that are searched for
|
for the 32-bit network drivers.) Thus an application using DOS-libpcap can
|
||||||
a name/value match. Currently only used to set debug-levels and
|
override the default value during it's configure process (see tcpdump's
|
||||||
parameters for the 32-bit network drivers.
|
msdos/config.c file for an extended example).
|
||||||
|
|
||||||
`pcap_set_wait (pcap_t *, void (*)(void), int)' :
|
`pcap_set_wait (pcap_t *, void (*)(void), int)' :
|
||||||
|
|
||||||
@ -153,8 +160,7 @@ I've included some extra functions to DOS-libpcap:
|
|||||||
Happy sniffing !
|
Happy sniffing !
|
||||||
|
|
||||||
|
|
||||||
Gisle Vanem <giva@bgnett.no>
|
Gisle Vanem <gvanem@yahoo.no>
|
||||||
<gvanem@broadpark.no>
|
|
||||||
|
|
||||||
October 1999, 2004
|
October 1999, 2004, 2006, 2013
|
||||||
|
|
||||||
|
73
nametoaddr.c
73
nametoaddr.c
@ -31,10 +31,36 @@
|
|||||||
#include <netdnet/dnetdb.h>
|
#include <netdnet/dnetdb.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef _WIN32
|
||||||
#include <pcap-stdinc.h>
|
#include <pcap-stdinc.h>
|
||||||
|
|
||||||
#else /* WIN32 */
|
#ifdef INET6
|
||||||
|
/*
|
||||||
|
* To quote the MSDN page for getaddrinfo() at
|
||||||
|
*
|
||||||
|
* https://msdn.microsoft.com/en-us/library/windows/desktop/ms738520(v=vs.85).aspx
|
||||||
|
*
|
||||||
|
* "Support for getaddrinfo on Windows 2000 and older versions
|
||||||
|
* The getaddrinfo function was added to the Ws2_32.dll on Windows XP and
|
||||||
|
* later. To execute an application that uses this function on earlier
|
||||||
|
* versions of Windows, then you need to include the Ws2tcpip.h and
|
||||||
|
* Wspiapi.h files. When the Wspiapi.h include file is added, the
|
||||||
|
* getaddrinfo function is defined to the WspiapiGetAddrInfo inline
|
||||||
|
* function in the Wspiapi.h file. At runtime, the WspiapiGetAddrInfo
|
||||||
|
* function is implemented in such a way that if the Ws2_32.dll or the
|
||||||
|
* Wship6.dll (the file containing getaddrinfo in the IPv6 Technology
|
||||||
|
* Preview for Windows 2000) does not include getaddrinfo, then a
|
||||||
|
* version of getaddrinfo is implemented inline based on code in the
|
||||||
|
* Wspiapi.h header file. This inline code will be used on older Windows
|
||||||
|
* platforms that do not natively support the getaddrinfo function."
|
||||||
|
*
|
||||||
|
* We use getaddrinfo(), so we include Wspiapi.h here. pcap-stdinc.h
|
||||||
|
* includes Ws2tcpip.h, so we don't need to include it ourselves.
|
||||||
|
*/
|
||||||
|
#include <Wspiapi.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else /* _WIN32 */
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/types.h> /* concession to AIX */
|
#include <sys/types.h> /* concession to AIX */
|
||||||
@ -42,9 +68,9 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
#ifdef HAVE_ETHER_HOSTTON
|
#ifdef HAVE_ETHER_HOSTTON
|
||||||
/*
|
/*
|
||||||
* XXX - do we need any of this if <netinet/if_ether.h> doesn't declare
|
* XXX - do we need any of this if <netinet/if_ether.h> doesn't declare
|
||||||
@ -62,7 +88,7 @@ struct rtentry; /* declarations in <net/if.h> */
|
|||||||
#endif /* HAVE_ETHER_HOSTTON */
|
#endif /* HAVE_ETHER_HOSTTON */
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#endif /* WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@ -74,6 +100,7 @@ struct rtentry; /* declarations in <net/if.h> */
|
|||||||
|
|
||||||
#include "gencode.h"
|
#include "gencode.h"
|
||||||
#include <pcap/namedb.h>
|
#include <pcap/namedb.h>
|
||||||
|
#include "nametoaddr.h"
|
||||||
|
|
||||||
#ifdef HAVE_OS_PROTO_H
|
#ifdef HAVE_OS_PROTO_H
|
||||||
#include "os-proto.h"
|
#include "os-proto.h"
|
||||||
@ -140,7 +167,7 @@ pcap_nametoaddrinfo(const char *name)
|
|||||||
bpf_u_int32
|
bpf_u_int32
|
||||||
pcap_nametonetaddr(const char *name)
|
pcap_nametonetaddr(const char *name)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#ifndef _WIN32
|
||||||
struct netent *np;
|
struct netent *np;
|
||||||
|
|
||||||
if ((np = getnetbyname(name)) != NULL)
|
if ((np = getnetbyname(name)) != NULL)
|
||||||
@ -150,6 +177,15 @@ pcap_nametonetaddr(const char *name)
|
|||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* There's no "getnetbyname()" on Windows.
|
* There's no "getnetbyname()" on Windows.
|
||||||
|
*
|
||||||
|
* XXX - I guess we could use the BSD code to read
|
||||||
|
* C:\Windows\System32\drivers\etc/networks, assuming
|
||||||
|
* that's its home on all the versions of Windows
|
||||||
|
* we use, but that file probably just has the loopback
|
||||||
|
* network on 127/24 on 99 44/100% of Windows machines.
|
||||||
|
*
|
||||||
|
* (Heck, these days it probably just has that on 99 44/100%
|
||||||
|
* of *UN*X* machines.)
|
||||||
*/
|
*/
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
@ -274,8 +310,14 @@ struct eproto {
|
|||||||
u_short p;
|
u_short p;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Static data base of ether protocol types. */
|
/*
|
||||||
struct eproto eproto_db[] = {
|
* Static data base of ether protocol types.
|
||||||
|
* tcpdump used to import this, and it's declared as an export on
|
||||||
|
* Debian, at least, so make it a public symbol, even though we
|
||||||
|
* don't officially export it by declaring it in a header file.
|
||||||
|
* (Programs *should* do this themselves, as tcpdump now does.)
|
||||||
|
*/
|
||||||
|
PCAP_API_DEF struct eproto eproto_db[] = {
|
||||||
{ "pup", ETHERTYPE_PUP },
|
{ "pup", ETHERTYPE_PUP },
|
||||||
{ "xns", ETHERTYPE_NS },
|
{ "xns", ETHERTYPE_NS },
|
||||||
{ "ip", ETHERTYPE_IP },
|
{ "ip", ETHERTYPE_IP },
|
||||||
@ -383,7 +425,7 @@ __pcap_atodn(const char *s, bpf_u_int32 *addr)
|
|||||||
u_int node, area;
|
u_int node, area;
|
||||||
|
|
||||||
if (sscanf(s, "%d.%d", &area, &node) != 2)
|
if (sscanf(s, "%d.%d", &area, &node) != 2)
|
||||||
bpf_error("malformed decnet address '%s'", s);
|
return(0);
|
||||||
|
|
||||||
*addr = (area << AREASHIFT) & AREAMASK;
|
*addr = (area << AREASHIFT) & AREAMASK;
|
||||||
*addr |= (node & NODEMASK);
|
*addr |= (node & NODEMASK);
|
||||||
@ -487,23 +529,20 @@ pcap_ether_hostton(const char *name)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u_short
|
int
|
||||||
__pcap_nametodnaddr(const char *name)
|
__pcap_nametodnaddr(const char *name, u_short *res)
|
||||||
{
|
{
|
||||||
#ifdef DECNETLIB
|
#ifdef DECNETLIB
|
||||||
struct nodeent *getnodebyname();
|
struct nodeent *getnodebyname();
|
||||||
struct nodeent *nep;
|
struct nodeent *nep;
|
||||||
unsigned short res;
|
|
||||||
|
|
||||||
nep = getnodebyname(name);
|
nep = getnodebyname(name);
|
||||||
if (nep == ((struct nodeent *)0))
|
if (nep == ((struct nodeent *)0))
|
||||||
bpf_error("unknown decnet host name '%s'\n", name);
|
return(0);
|
||||||
|
|
||||||
memcpy((char *)&res, (char *)nep->n_addr, sizeof(unsigned short));
|
memcpy((char *)res, (char *)nep->n_addr, sizeof(unsigned short));
|
||||||
return(res);
|
return(1);
|
||||||
#else
|
#else
|
||||||
bpf_error("decnet name support not included, '%s' cannot be translated\n",
|
|
||||||
name);
|
|
||||||
return(0);
|
return(0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1994, 1995, 1996, 1997, 1998
|
* Copyright (c) 1994, 1996
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -32,29 +31,18 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef __cplusplus
|
||||||
#include "config.h"
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <pcap.h>
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get a list of all interfaces that are up and that we can open.
|
* Routines used for name-or-address-string-to-address resolution
|
||||||
* Returns -1 on error, 0 otherwise.
|
* that are *not* exported to code using libpcap.
|
||||||
* The list, as returned through "alldevsp", may be null if no interfaces
|
|
||||||
* were up and could be opened.
|
|
||||||
*
|
|
||||||
* This is the implementation used on platforms that have no support for
|
|
||||||
* packet capture.
|
|
||||||
*/
|
*/
|
||||||
int
|
int __pcap_atodn(const char *, bpf_u_int32 *);
|
||||||
pcap_findalldevs_interfaces(pcap_if_t **alldevsp, char *errbuf)
|
int __pcap_atoin(const char *, bpf_u_int32 *);
|
||||||
{
|
int __pcap_nametodnaddr(const char *, u_short *);
|
||||||
/*
|
|
||||||
* Succeed, but don't return any interfaces; we return only those
|
#ifdef __cplusplus
|
||||||
* we can open, and we can't open any if there's no support
|
|
||||||
* for packet capture.
|
|
||||||
*/
|
|
||||||
*alldevsp = NULL;
|
|
||||||
return (0);
|
|
||||||
}
|
}
|
||||||
|
#endif
|
859
optimize.c
859
optimize.c
File diff suppressed because it is too large
Load Diff
@ -1,77 +0,0 @@
|
|||||||
%define prefix /usr
|
|
||||||
%define version @VERSION@
|
|
||||||
|
|
||||||
Summary: A system-independent interface for user-level packet capture
|
|
||||||
Name: libpcap
|
|
||||||
Version: %version
|
|
||||||
Release: 1
|
|
||||||
Group: Development/Libraries
|
|
||||||
License: BSD with advertising
|
|
||||||
Source: @NAME@.tar.gz
|
|
||||||
BuildRoot: /tmp/%{name}-buildroot
|
|
||||||
URL: http://www.tcpdump.org
|
|
||||||
|
|
||||||
Source: http://www.tcpdump.org/release/%{name}-%{version}.tar.gz
|
|
||||||
|
|
||||||
%description
|
|
||||||
Libpcap provides a portable framework for low-level network
|
|
||||||
monitoring. Libpcap can provide network statistics collection,
|
|
||||||
security monitoring and network debugging. Since almost every system
|
|
||||||
vendor provides a different interface for packet capture, the libpcap
|
|
||||||
authors created this system-independent API to ease in porting and to
|
|
||||||
alleviate the need for several system-dependent packet capture modules
|
|
||||||
in each application.
|
|
||||||
|
|
||||||
Install libpcap if you need to do low-level network traffic monitoring
|
|
||||||
on your network.
|
|
||||||
|
|
||||||
%package devel
|
|
||||||
Summary: Libraries and header files for the libpcap library
|
|
||||||
Group: Development/Libraries
|
|
||||||
|
|
||||||
%description devel
|
|
||||||
Libpcap provides a portable framework for low-level network
|
|
||||||
monitoring. Libpcap can provide network statistics collection,
|
|
||||||
security monitoring and network debugging. Since almost every system
|
|
||||||
vendor provides a different interface for packet capture, the libpcap
|
|
||||||
authors created this system-independent API to ease in porting and to
|
|
||||||
alleviate the need for several system-dependent packet capture modules
|
|
||||||
in each application.
|
|
||||||
|
|
||||||
This package provides the libraries, include files, and other
|
|
||||||
resources needed for developing libpcap applications.
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%setup -q
|
|
||||||
|
|
||||||
%build
|
|
||||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
|
||||||
%configure
|
|
||||||
make %{?_smp_mflags}
|
|
||||||
|
|
||||||
%install
|
|
||||||
rm -rf $RPM_BUILD_ROOT
|
|
||||||
|
|
||||||
make DESTDIR=$RPM_BUILD_ROOT install
|
|
||||||
|
|
||||||
%clean
|
|
||||||
rm -rf $RPM_BUILD_ROOT
|
|
||||||
|
|
||||||
%files
|
|
||||||
%defattr(-,root,root)
|
|
||||||
%doc LICENSE README CHANGES INSTALL.txt README.linux TODO VERSION CREDITS packaging/pcap.spec
|
|
||||||
%{_libdir}/libpcap.so.*
|
|
||||||
%{_mandir}/man7/pcap*.7*
|
|
||||||
|
|
||||||
%files devel
|
|
||||||
%defattr(-,root,root)
|
|
||||||
%{_bindir}/pcap-config
|
|
||||||
%{_includedir}/pcap/*.h
|
|
||||||
%{_includedir}/pcap.h
|
|
||||||
%{_includedir}/pcap-bpf.h
|
|
||||||
%{_includedir}/pcap-namedb.h
|
|
||||||
%{_libdir}/libpcap.so
|
|
||||||
%{_libdir}/libpcap.a
|
|
||||||
%{_mandir}/man1/pcap-config.1*
|
|
||||||
%{_mandir}/man3/pcap*.3*
|
|
||||||
%{_mandir}/man5/pcap*.5*
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user