mirror of
https://github.com/nmap/nmap.git
synced 2025-12-14 11:49:01 +00:00
libdnet stripped and integrated, ARP ping scan starting to work pretty well
This commit is contained in:
@@ -74,7 +74,8 @@ o Changed from CVS to Subversion source control system (which
|
||||
|
||||
o Added 'leet ASCII art to the confugrator! ARTIST NOTE: If you
|
||||
think the ASCII art sucks, feel free to send me alternatives. Note
|
||||
that only people compiling the UNIX source code get the ASCII art.
|
||||
that only people compiling the UNIX source code get the ASCII
|
||||
art. (ASCII artist unknown).
|
||||
|
||||
Nmap 3.81
|
||||
|
||||
|
||||
17
Makefile.in
17
Makefile.in
@@ -18,6 +18,7 @@ CXX = @CXX@
|
||||
CCOPT =
|
||||
LIBPCAPDIR = @libpcapdir@
|
||||
LIBPCREDIR = @LIBPCREDIR@
|
||||
LIBDNETDIR = @LIBDNETDIR@
|
||||
INCLS = -I$(LIBPCAPDIR)
|
||||
DEFS = @DEFS@ -DNMAP_VERSION=\"$(NMAP_VERSION)\" -DNMAP_NAME=\"$(NMAP_NAME)\" -DNMAP_URL=\"$(NMAP_URL)\" -DNMAP_PLATFORM=\"$(NMAP_PLATFORM)\" -DNMAPDATADIR=\"$(nmapdatadir)\"
|
||||
# For mtrace debugging -- see MTRACE define in main.cc for instructions
|
||||
@@ -29,7 +30,7 @@ CPPFLAGS = @CPPFLAGS@
|
||||
# CFLAGS = $(DEFS) $(INCLS)
|
||||
STATIC =
|
||||
LDFLAGS = @LDFLAGS@ $(STATIC)
|
||||
LIBS = @LIBNBASE_LIBS@ @LIBNSOCK_LIBS@ @LIBPCRE_LIBS@ @LIBPCAP_LIBS@ @OPENSSL_LIBS@ @LIBS@
|
||||
LIBS = @LIBNBASE_LIBS@ @LIBNSOCK_LIBS@ @LIBPCRE_LIBS@ @LIBPCAP_LIBS@ @OPENSSL_LIBS@ @LIBDNET_LIBS@ @LIBS@
|
||||
# LIBS = -lefence @LIBS@
|
||||
# LIBS = -lrmalloc @LIBS@
|
||||
SHTOOL = ./shtool
|
||||
@@ -59,7 +60,7 @@ export DEPS = nmap.h nmap_amigaos.h nmap_error.h targets.h idle_scan.h osscan.h
|
||||
|
||||
all: $(TARGET) $(TARGETNMAPFE)
|
||||
|
||||
$(TARGET): $(DEPS) @PCAP_DEPENDS@ @PCRE_DEPENDS@ $(NBASEDIR)/libnbase.a $(NSOCKDIR)/src/libnsock.a $(OBJS)
|
||||
$(TARGET): $(DEPS) @PCAP_DEPENDS@ @PCRE_DEPENDS@ @LIBDNET_DEPENDS@ $(NBASEDIR)/libnbase.a $(NSOCKDIR)/src/libnsock.a $(OBJS)
|
||||
@echo Compiling nmap
|
||||
rm -f $@
|
||||
$(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
|
||||
@@ -71,6 +72,9 @@ FORCE:
|
||||
$(LIBPCREDIR)/libpcre.a: $(LIBPCREDIR)/Makefile FORCE
|
||||
@echo Compiling libpcre; cd $(LIBPCREDIR) && $(MAKE)
|
||||
|
||||
$(LIBDNETDIR)/src/.libs/libdnet.a: $(LIBDNETDIR)/Makefile FORCE
|
||||
@echo Compiling libdnet; cd $(LIBDNETDIR) && $(MAKE)
|
||||
|
||||
$(LIBPCAPDIR)/libpcap.a: $(LIBPCAPDIR)/Makefile FORCE
|
||||
@echo Compiling libpcap; cd $(LIBPCAPDIR) && $(MAKE)
|
||||
|
||||
@@ -101,7 +105,7 @@ distro:
|
||||
web:
|
||||
cd scripts && $(MAKE) web
|
||||
|
||||
clean: @PCAP_CLEAN@ @PCRE_CLEAN@ nmapfe_clean nsock_clean nbase_clean my_clean
|
||||
clean: @PCAP_CLEAN@ @PCRE_CLEAN@ @DNET_CLEAN@ nmapfe_clean nsock_clean nbase_clean my_clean
|
||||
|
||||
my_clean:
|
||||
rm -f $(OBJS) $(TARGET) config.cache
|
||||
@@ -109,6 +113,8 @@ pcap_clean:
|
||||
-cd $(LIBPCAPDIR) && $(MAKE) clean
|
||||
pcre_clean:
|
||||
-cd $(LIBPCREDIR) && $(MAKE) clean
|
||||
dnet_clean
|
||||
-cd $(LIBDNETDIR) && $(MAKE) clean
|
||||
nmapfe_clean:
|
||||
-cd nmapfe && $(MAKE) clean
|
||||
nbase_clean:
|
||||
@@ -119,8 +125,11 @@ pcap_dist_clean:
|
||||
-cd $(LIBPCAPDIR) && $(MAKE) distclean
|
||||
pcre_dist_clean:
|
||||
-cd $(LIBPCREDIR) && $(MAKE) distclean
|
||||
dnet_dist_clean:
|
||||
-cd $(LIBDNETDIR) && $(MAKE) distclean
|
||||
|
||||
distclean: my_clean my_distclean @PCAP_DIST_CLEAN@ @PCRE_DIST_CLEAN@ @DNET_DIST_CLEAN@
|
||||
|
||||
distclean: my_clean my_distclean @PCAP_DIST_CLEAN@ @PCRE_DIST_CLEAN@
|
||||
my_distclean:
|
||||
rm -f Makefile Makefile.bak config.h stamp-h stamp-h.in \
|
||||
config.cache config.log config.status
|
||||
|
||||
55
configure
vendored
55
configure
vendored
@@ -310,8 +310,9 @@ ac_includes_default="\
|
||||
#endif"
|
||||
|
||||
ac_subdirs_all="$ac_subdirs_all libpcre"
|
||||
ac_subdirs_all="$ac_subdirs_all libdnet-stripped"
|
||||
ac_subdirs_all="$ac_subdirs_all $nmap_cfg_subdirs"
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libpcapdir pcredir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CXXPROG COMPAT_OBJS COMPAT_SRCS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CPP EGREP TARGETNMAPFE INSTALLNMAPFE OPENSSL_LIBS PCAP_DEPENDS PCAP_CLEAN PCAP_DIST_CLEAN LIBPCAP_LIBS subdirs LIBPCRE_LIBS LIBPCREDIR PCRE_DEPENDS PCRE_CLEAN PCRE_DIST_CLEAN NBASEDIR LIBNBASE_LIBS NSOCKDIR LIBNSOCK_LIBS GTK_CONFIG LIBOBJS LTLIBOBJS'
|
||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libpcapdir pcredir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CXXPROG COMPAT_OBJS COMPAT_SRCS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CPP EGREP TARGETNMAPFE INSTALLNMAPFE OPENSSL_LIBS PCAP_DEPENDS PCAP_CLEAN PCAP_DIST_CLEAN LIBPCAP_LIBS subdirs LIBPCRE_LIBS LIBPCREDIR PCRE_DEPENDS PCRE_CLEAN PCRE_DIST_CLEAN LIBDNET_LIBS LIBDNETDIR DNET_DEPENDS DNET_CLEAN DNET_DIST_CLEAN NBASEDIR LIBNBASE_LIBS NSOCKDIR LIBNSOCK_LIBS GTK_CONFIG LIBOBJS LTLIBOBJS'
|
||||
ac_subst_files=''
|
||||
|
||||
# Initialize some variables set by options.
|
||||
@@ -859,6 +860,7 @@ Optional Packages:
|
||||
--with-openssl=DIR Use optional openssl libs and includes from DIR/lib/ and DIR/include/openssl/)
|
||||
--with-libpcap=DIR Look for pcap in DIR/include and DIR/libs
|
||||
--with-libpcre=DIR Use an existing (compiled) pcre lib from DIR/include and DIR/lib. Specify --with-libpcre=included to always use the version included with Nmap
|
||||
--with-libdnet=DIR Use an existing (compiled) dnet lib from DIR/include and DIR/lib.
|
||||
--with-libnbase=DIR Look for nbase include/libs in DIR
|
||||
--with-libnsock=DIR Compile and link to libnsock in DIR
|
||||
|
||||
@@ -6308,6 +6310,52 @@ fi
|
||||
|
||||
|
||||
|
||||
have_dnet=no
|
||||
requested_included_dnet=no
|
||||
LIBDNETDIR=libdnet-stripped
|
||||
|
||||
# First we test whether they specified libdnet explicitly
|
||||
|
||||
# Check whether --with-libdnet or --without-libdnet was given.
|
||||
if test "${with_libdnet+set}" = set; then
|
||||
withval="$with_libdnet"
|
||||
case "$with_libdnet" in
|
||||
yes)
|
||||
;;
|
||||
included)
|
||||
;;
|
||||
*)
|
||||
CXXFLAGS="-I$with_libdnet/include $CXXFLAGS"
|
||||
LDFLAGS="-L$with_libdnet/lib $LDFLAGS"
|
||||
have_dnet=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
fi;
|
||||
|
||||
# If they didn't provide location, we use the included one
|
||||
if test $have_dnet != yes ; then
|
||||
|
||||
|
||||
subdirs="$subdirs libdnet-stripped "
|
||||
|
||||
CXXFLAGS="-I$LIBDNETDIR/include $CXXFLAGS"
|
||||
LIBDNET_LIBS="$LIBDNETDIR/src/.libs/libdnet.a"
|
||||
DNET_DEPENDS="$LIBDNETDIR/libdnet.a"
|
||||
DNET_CLEAN="dnet_clean"
|
||||
DNET_DIST_CLEAN="dnet_dist_clean"
|
||||
else
|
||||
LIBDNET_LIBS="-ldnet"
|
||||
DNET_DEPENDS=""
|
||||
DNET_CLEAN=""
|
||||
DNET_DIST_CLEAN=""
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
echo "$as_me:$LINENO: checking struct ip" >&5
|
||||
@@ -8329,6 +8377,11 @@ s,@LIBPCREDIR@,$LIBPCREDIR,;t t
|
||||
s,@PCRE_DEPENDS@,$PCRE_DEPENDS,;t t
|
||||
s,@PCRE_CLEAN@,$PCRE_CLEAN,;t t
|
||||
s,@PCRE_DIST_CLEAN@,$PCRE_DIST_CLEAN,;t t
|
||||
s,@LIBDNET_LIBS@,$LIBDNET_LIBS,;t t
|
||||
s,@LIBDNETDIR@,$LIBDNETDIR,;t t
|
||||
s,@DNET_DEPENDS@,$DNET_DEPENDS,;t t
|
||||
s,@DNET_CLEAN@,$DNET_CLEAN,;t t
|
||||
s,@DNET_DIST_CLEAN@,$DNET_DIST_CLEAN,;t t
|
||||
s,@NBASEDIR@,$NBASEDIR,;t t
|
||||
s,@LIBNBASE_LIBS@,$LIBNBASE_LIBS,;t t
|
||||
s,@NSOCKDIR@,$NSOCKDIR,;t t
|
||||
|
||||
40
configure.ac
40
configure.ac
@@ -440,6 +440,46 @@ AC_SUBST(PCRE_DEPENDS)
|
||||
AC_SUBST(PCRE_CLEAN)
|
||||
AC_SUBST(PCRE_DIST_CLEAN)
|
||||
|
||||
have_dnet=no
|
||||
requested_included_dnet=no
|
||||
LIBDNETDIR=libdnet-stripped
|
||||
|
||||
# First we test whether they specified libdnet explicitly
|
||||
AC_ARG_WITH(libdnet,
|
||||
[ --with-libdnet=DIR Use an existing (compiled) dnet lib from DIR/include and DIR/lib.],
|
||||
[ case "$with_libdnet" in
|
||||
yes)
|
||||
;;
|
||||
included)
|
||||
;;
|
||||
*)
|
||||
CXXFLAGS="-I$with_libdnet/include $CXXFLAGS"
|
||||
LDFLAGS="-L$with_libdnet/lib $LDFLAGS"
|
||||
have_dnet=yes
|
||||
;;
|
||||
esac]
|
||||
)
|
||||
|
||||
# If they didn't provide location, we use the included one
|
||||
if test $have_dnet != yes ; then
|
||||
AC_CONFIG_SUBDIRS( libdnet-stripped )
|
||||
CXXFLAGS="-I$LIBDNETDIR/include $CXXFLAGS"
|
||||
LIBDNET_LIBS="$LIBDNETDIR/src/.libs/libdnet.a"
|
||||
DNET_DEPENDS="$LIBDNETDIR/libdnet.a"
|
||||
DNET_CLEAN="dnet_clean"
|
||||
DNET_DIST_CLEAN="dnet_dist_clean"
|
||||
else
|
||||
LIBDNET_LIBS="-ldnet"
|
||||
DNET_DEPENDS=""
|
||||
DNET_CLEAN=""
|
||||
DNET_DIST_CLEAN=""
|
||||
fi
|
||||
|
||||
AC_SUBST(LIBDNET_LIBS)
|
||||
AC_SUBST(LIBDNETDIR)
|
||||
AC_SUBST(DNET_DEPENDS)
|
||||
AC_SUBST(DNET_CLEAN)
|
||||
AC_SUBST(DNET_DIST_CLEAN)
|
||||
|
||||
dnl AC_HEADER_TIME
|
||||
|
||||
|
||||
@@ -10,5 +10,5 @@
|
||||
(__ ' /x / x _/ ( \___' \ /
|
||||
, x / ( ' . / . / | \ /
|
||||
/ / _/ / + / \/
|
||||
' (__/ / (artist unknown) \
|
||||
' (__/ / \
|
||||
NMAP IS A POWERFUL TOOL -- USE CAREFULLY AND REPONSIBLY
|
||||
|
||||
59
libdnet-stripped/INSTALL
Normal file
59
libdnet-stripped/INSTALL
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
*BSD, MacOS X, Linux
|
||||
--------------------
|
||||
|
||||
./configure && make
|
||||
|
||||
Solaris, IRIX, BSD/OS, HP-UX, Tru64
|
||||
-----------------------------------
|
||||
|
||||
For firewall support, install Darren Reed's IP Filter package:
|
||||
|
||||
http://coombs.anu.edu.au/~avalon/
|
||||
|
||||
For tunnel support on Solaris, install the Universal TUN/TAP Driver:
|
||||
|
||||
http://vtun.sourceforge.net/tun/
|
||||
|
||||
Unixware, AIX
|
||||
-------------
|
||||
|
||||
These ports are incomplete. If anyone can set me up with legitimate
|
||||
root access to these platforms, it would be most appreciated. :-)
|
||||
|
||||
Windows 2000/XP
|
||||
---------------
|
||||
|
||||
For raw Ethernet sending, install the WinPcap driver and DLLs, and
|
||||
extract their developer pack to a build directory:
|
||||
|
||||
http://winpcap.polito.it/install/default.htm
|
||||
|
||||
# XXX - unsupported for now
|
||||
# For tunnel interface support, install the OpenVPN "TAP-Win32 Virtual
|
||||
# Ethernet Adapter" component (their Windows installer will let you
|
||||
# install it alone):
|
||||
#
|
||||
# http://openvpn.sourceforge.net/
|
||||
|
||||
For firewall support, install HSC's PktFilter service:
|
||||
|
||||
http://www.hsc.fr/ressources/outils/pktfilter/index.html.en
|
||||
|
||||
Most Windows developers should just use the libdnet developer's pack
|
||||
(with MinGW and MSVC++ libraries) instead of building it themselves.
|
||||
But for those who really want to know...
|
||||
|
||||
To build a MinGW native library (under Cygwin+MinGW):
|
||||
|
||||
./configure && make
|
||||
|
||||
To build a Microsoft Visual C++ native library and Python module
|
||||
(again, under Cygwin+MinGW):
|
||||
|
||||
./configure
|
||||
cd python && C:/Python23/python.exe setup.py build
|
||||
cd ../src && lib /out:dnet.lib *.obj
|
||||
|
||||
|
||||
# $Id: INSTALL,v 1.4 2005/02/15 07:38:19 dugsong Exp $
|
||||
28
libdnet-stripped/LICENSE
Normal file
28
libdnet-stripped/LICENSE
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
Copyright (c) 2000-2004 Dug Song <dugsong@monkey.org>
|
||||
All rights reserved, all wrongs reversed.
|
||||
|
||||
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 and copyright holders 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 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 AUTHOR 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.
|
||||
|
||||
652
libdnet-stripped/Makefile
Normal file
652
libdnet-stripped/Makefile
Normal file
@@ -0,0 +1,652 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = .
|
||||
|
||||
pkgdatadir = $(datadir)/libdnet
|
||||
pkglibdir = $(libdir)/libdnet
|
||||
pkgincludedir = $(includedir)/libdnet
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/dnet-config.in \
|
||||
$(top_srcdir)/Makefile.am.common $(top_srcdir)/configure \
|
||||
INSTALL THANKS TODO acconfig.h config/config.guess \
|
||||
config/config.sub config/install-sh config/ltmain.sh \
|
||||
config/missing config/mkinstalldirs
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||
CONFIG_CLEAN_FILES = dnet-config
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
|
||||
SCRIPTS = $(bin_SCRIPTS)
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run tar
|
||||
AR = ar
|
||||
AUTOCONF = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=none
|
||||
CFLAGS = -g -O2 -Wall
|
||||
CHECKINC =
|
||||
CHECKLIB =
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=none
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = grep -E
|
||||
EXEEXT =
|
||||
F77 = g77
|
||||
FFLAGS = -g -O2
|
||||
HAVE_CHECK_FALSE =
|
||||
HAVE_CHECK_TRUE = #
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS = strlcat$U.o strlcpy$U.o arp-ioctl$U.o eth-linux$U.o fw-ipchains$U.o intf$U.o ip$U.o route-linux$U.o tun-linux$U.o
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS = strlcat$U.lo strlcpy$U.lo arp-ioctl$U.lo eth-linux$U.lo fw-ipchains$U.lo intf$U.lo ip$U.lo route-linux$U.lo tun-linux$U.lo
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run makeinfo
|
||||
OBJEXT = o
|
||||
PACKAGE = libdnet
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME =
|
||||
PACKAGE_STRING =
|
||||
PACKAGE_TARNAME =
|
||||
PACKAGE_VERSION =
|
||||
PATH_SEPARATOR = :
|
||||
PYTHON =
|
||||
PYTHON_FALSE =
|
||||
PYTHON_TRUE = #
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
TCLINC =
|
||||
TCLLIB =
|
||||
TCL_FALSE =
|
||||
TCL_TRUE = #
|
||||
VERSION = 1.10
|
||||
ac_aux_dir = config
|
||||
ac_ct_AR = ar
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 = g77
|
||||
ac_ct_RANLIB = ranlib
|
||||
ac_ct_STRIP = strip
|
||||
am__fastdepCC_FALSE =
|
||||
am__fastdepCC_TRUE = #
|
||||
am__fastdepCXX_FALSE =
|
||||
am__fastdepCXX_TRUE = #
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${prefix}/share
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${prefix}/info
|
||||
install_sh = /home/fyodor/nmap/libdnet-stripped/config/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${prefix}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
SUBDIRS = include src
|
||||
bin_SCRIPTS = dnet-config
|
||||
EXTRA_DIST = LICENSE Makefile.am.common acconfig.h
|
||||
CLEANFILES = dnet-config
|
||||
AUX_DIST = $(ac_aux_dir)/acinclude.m4 \
|
||||
$(ac_aux_dir)/config.guess \
|
||||
$(ac_aux_dir)/config.sub \
|
||||
$(ac_aux_dir)/install-sh \
|
||||
$(ac_aux_dir)/ltmain.sh \
|
||||
$(ac_aux_dir)/missing \
|
||||
$(ac_aux_dir)/mkinstalldirs
|
||||
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
dnet-config: $(top_builddir)/config.status $(srcdir)/dnet-config.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
|
||||
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
if test -f $$d$$p; then \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-binSCRIPTS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(bindir)/$$f"; \
|
||||
done
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkdir_p) $(distdir)/. $(distdir)/config
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(SCRIPTS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(bindir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-binSCRIPTS
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binSCRIPTS uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-libtool clean-recursive \
|
||||
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
||||
dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||
distclean-generic distclean-libtool distclean-recursive \
|
||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-binSCRIPTS install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-binSCRIPTS uninstall-info-am
|
||||
|
||||
|
||||
dist-hook:
|
||||
(cd $(distdir) && mkdir $(ac_aux_dir))
|
||||
for file in $(AUX_DIST); do \
|
||||
cp $$file $(distdir)/$$file; \
|
||||
done
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
25
libdnet-stripped/Makefile.am
Normal file
25
libdnet-stripped/Makefile.am
Normal file
@@ -0,0 +1,25 @@
|
||||
## $Id: Makefile.am,v 1.7 2004/01/03 08:52:22 dugsong Exp $
|
||||
|
||||
include $(top_srcdir)/Makefile.am.common
|
||||
|
||||
SUBDIRS = include src
|
||||
|
||||
bin_SCRIPTS = dnet-config
|
||||
|
||||
EXTRA_DIST = LICENSE Makefile.am.common acconfig.h
|
||||
|
||||
CLEANFILES = dnet-config
|
||||
|
||||
AUX_DIST = $(ac_aux_dir)/acinclude.m4 \
|
||||
$(ac_aux_dir)/config.guess \
|
||||
$(ac_aux_dir)/config.sub \
|
||||
$(ac_aux_dir)/install-sh \
|
||||
$(ac_aux_dir)/ltmain.sh \
|
||||
$(ac_aux_dir)/missing \
|
||||
$(ac_aux_dir)/mkinstalldirs
|
||||
|
||||
dist-hook:
|
||||
(cd $(distdir) && mkdir $(ac_aux_dir))
|
||||
for file in $(AUX_DIST); do \
|
||||
cp $$file $(distdir)/$$file; \
|
||||
done
|
||||
7
libdnet-stripped/Makefile.am.common
Normal file
7
libdnet-stripped/Makefile.am.common
Normal file
@@ -0,0 +1,7 @@
|
||||
## $Id: Makefile.am.common,v 1.2 2002/12/02 04:05:25 dugsong Exp $
|
||||
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
|
||||
DISTCLEANFILES = *~
|
||||
652
libdnet-stripped/Makefile.in
Normal file
652
libdnet-stripped/Makefile.in
Normal file
@@ -0,0 +1,652 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = .
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/dnet-config.in \
|
||||
$(top_srcdir)/Makefile.am.common $(top_srcdir)/configure \
|
||||
INSTALL THANKS TODO acconfig.h config/config.guess \
|
||||
config/config.sub config/install-sh config/ltmain.sh \
|
||||
config/missing config/mkinstalldirs
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno configure.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||
CONFIG_CLEAN_FILES = dnet-config
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
|
||||
SCRIPTS = $(bin_SCRIPTS)
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHECKINC = @CHECKINC@
|
||||
CHECKLIB = @CHECKLIB@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
HAVE_CHECK_FALSE = @HAVE_CHECK_FALSE@
|
||||
HAVE_CHECK_TRUE = @HAVE_CHECK_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_FALSE = @PYTHON_FALSE@
|
||||
PYTHON_TRUE = @PYTHON_TRUE@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TCLINC = @TCLINC@
|
||||
TCLLIB = @TCLLIB@
|
||||
TCL_FALSE = @TCL_FALSE@
|
||||
TCL_TRUE = @TCL_TRUE@
|
||||
VERSION = @VERSION@
|
||||
ac_aux_dir = @ac_aux_dir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
SUBDIRS = include src
|
||||
bin_SCRIPTS = dnet-config
|
||||
EXTRA_DIST = LICENSE Makefile.am.common acconfig.h
|
||||
CLEANFILES = dnet-config
|
||||
AUX_DIST = $(ac_aux_dir)/acinclude.m4 \
|
||||
$(ac_aux_dir)/config.guess \
|
||||
$(ac_aux_dir)/config.sub \
|
||||
$(ac_aux_dir)/install-sh \
|
||||
$(ac_aux_dir)/ltmain.sh \
|
||||
$(ac_aux_dir)/missing \
|
||||
$(ac_aux_dir)/mkinstalldirs
|
||||
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
|
||||
cd $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
dnet-config: $(top_builddir)/config.status $(srcdir)/dnet-config.in
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
||||
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
|
||||
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
if test -f $$d$$p; then \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-binSCRIPTS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(bindir)/$$f"; \
|
||||
done
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkdir_p) $(distdir)/. $(distdir)/config
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(SCRIPTS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(bindir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-binSCRIPTS
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-binSCRIPTS uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
|
||||
check-am clean clean-generic clean-libtool clean-recursive \
|
||||
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
|
||||
dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||
distclean-generic distclean-libtool distclean-recursive \
|
||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-binSCRIPTS install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am \
|
||||
uninstall-binSCRIPTS uninstall-info-am
|
||||
|
||||
|
||||
dist-hook:
|
||||
(cd $(distdir) && mkdir $(ac_aux_dir))
|
||||
for file in $(AUX_DIST); do \
|
||||
cp $$file $(distdir)/$$file; \
|
||||
done
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
21
libdnet-stripped/NMAP_MODIFICATIONS
Normal file
21
libdnet-stripped/NMAP_MODIFICATIONS
Normal file
@@ -0,0 +1,21 @@
|
||||
$Id$
|
||||
|
||||
This is Dug Song's excellent Libdnet networking library version 1.10.
|
||||
It has been stripped down for inclusion within Nmap as follows:
|
||||
|
||||
o Removed the following directories:
|
||||
python, test, man
|
||||
|
||||
o Removed all filenames from EXTRA_libdnet_la_SOURCES sources, as
|
||||
they aren't needed with GNU automake 1.9.2
|
||||
|
||||
o Removed files in now-removed dires that were reference from
|
||||
configure.in:318
|
||||
|
||||
o Ran "aclocal -I . -I config" to regenerate aclocal.m4 with my newer
|
||||
aclocal.
|
||||
|
||||
o Replaced config.guess config.sub and missing in config dir with
|
||||
versions from Autoconf 2.59.
|
||||
|
||||
o Added this NMAP_MODIFICATIONS file.
|
||||
13
libdnet-stripped/README
Normal file
13
libdnet-stripped/README
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
libdnet
|
||||
-------
|
||||
|
||||
libdnet provides a simplified, portable interface to several low-level
|
||||
networking routines, including network address manipulation, kernel
|
||||
arp(4) cache and route(4) table lookup and manipulation, network
|
||||
firewalling, network interface lookup and manipulation, IP tunnelling,
|
||||
and raw IP packet and Ethernet frame transmission.
|
||||
|
||||
WWW: http://libdnet.sourceforge.net/
|
||||
|
||||
$Id: README,v 1.2 2005/02/14 21:00:17 dugsong Exp $
|
||||
106
libdnet-stripped/THANKS
Normal file
106
libdnet-stripped/THANKS
Normal file
@@ -0,0 +1,106 @@
|
||||
# $Id: THANKS,v 1.10 2005/02/17 02:58:11 dugsong Exp $
|
||||
|
||||
many thanks to all the folks who have contributed to libdnet:
|
||||
|
||||
Thamer Al-Harbash <tmh@whitefang.com>
|
||||
excellent bug reports and fearless beta-testing
|
||||
|
||||
Marc Bevand <bevand_m@epita.fr>
|
||||
RFC 768 UDP zero-checksum fix
|
||||
|
||||
Michael Coulter <mjc@bitz.ca>
|
||||
OpenBSD pfioc_pooladdr fix, pf rule deletion bug report
|
||||
|
||||
Michael A. Davis <mike@datanerds.net>
|
||||
win32 code cleanup
|
||||
|
||||
Scott Dawson <sdawson@arbor.net>
|
||||
interface alias fix
|
||||
|
||||
Ben Fleis <ben@monkey.org>
|
||||
constification and code cleanup
|
||||
|
||||
Mike Frantzen <frantzen@w4g.org>
|
||||
dnet hex test module fix
|
||||
|
||||
Markus Friedl <markus@openbsd.org>
|
||||
BSD/OS testing and autoconf fixes
|
||||
|
||||
Tangy Gnat <tanggnat@bahamut.synacklabs.net>
|
||||
missing queue.h
|
||||
|
||||
Loren Gorden <loren.gordon@videotron.ca>
|
||||
many thorough, detailed bug reports and fixes
|
||||
|
||||
Eric Jackson <shinobi@monkey.org>
|
||||
OpenBSD-alpha testing
|
||||
|
||||
Juan <juan@foxpaw.com>
|
||||
plugged BPF fd leak on failure
|
||||
|
||||
K2 <k2@ktwo.ca>
|
||||
HP-UX, OSF1, UnixWare, Solaris x86, Slackware, etc. access
|
||||
|
||||
Kirby Kuehl <kkuehl@gmail.com>
|
||||
win32 and OpenBSD updates
|
||||
|
||||
David Lee <david.lee@teracruz.com>
|
||||
addr_btos() bugfixes
|
||||
|
||||
Kuk-hyeon Lee <errai@inzen.com>
|
||||
C++ support fixes
|
||||
|
||||
Robert Lowe <robert.h.lowe@lawrence.edu>
|
||||
Tru64 access, and allowing me to crash his machine
|
||||
|
||||
Dominic Marks <dom@cus.org.uk>
|
||||
FreeBSD 5 ipfw port fixes
|
||||
|
||||
Jose Nazario <jose@biocserver.cwru.edu>
|
||||
IRIX access, and allowing me to crash his machine
|
||||
|
||||
Nergal <nergal@7bulls.com>
|
||||
TCP sequence number handling fixes
|
||||
|
||||
Peter C. Norton <spacey@lenin.nu>
|
||||
Linux port fixes
|
||||
|
||||
plaguez <dube0866@eurobretagne.fr>
|
||||
for convincing me to write this, and suffering my bad French
|
||||
|
||||
NN Poster <nnposter@users.sourceforge.net>
|
||||
RPM spec file
|
||||
|
||||
Niels Provos <provos@monkey.org>
|
||||
many bugfixes and much encouragement
|
||||
|
||||
Andrew Reiter <arr@watson.org>
|
||||
help with ipfw braindeath
|
||||
|
||||
John S <sjohns@users.sourceforge.net>
|
||||
VPATH build bug report
|
||||
|
||||
Federico Sacerdoti <fds@sdsc.edu>
|
||||
dotted-quad IPv4 netmask support in addr_pton()
|
||||
|
||||
Mike Schiffman <mike@infonexus.com>
|
||||
inspiration via libnet
|
||||
|
||||
Matt Smart <smart@monkey.org>
|
||||
caught pastos
|
||||
|
||||
Matt Sommers <mms@arbor.net>
|
||||
BSD/OS testing
|
||||
|
||||
Mike Stolarchuk <mts@off.to>
|
||||
enlightening discussion of *ntoa optimizations
|
||||
|
||||
Greg Taleck <taleck@oz.net>
|
||||
OpenBSD pf bug reporting
|
||||
|
||||
Christophe Ternat <christophe.ternat@rstpacket.org>
|
||||
route-bsd.c fork() bug report
|
||||
|
||||
xs <xs@nitric.net>
|
||||
NetBSD testing
|
||||
|
||||
79
libdnet-stripped/TODO
Normal file
79
libdnet-stripped/TODO
Normal file
@@ -0,0 +1,79 @@
|
||||
ipfw2 on FreeBSD/5 (5.1 has pf)
|
||||
|
||||
optimize port wildcard rules for each firewall type - e.g. using ipf
|
||||
FR_NONE, pf PF_OP_NONE, etc.
|
||||
|
||||
ipchains sleazy exec
|
||||
|
||||
audit addr_ntos() for non-zero'd host bits
|
||||
|
||||
make *_loop() prevent modification within loop, or modify only
|
||||
post-iteration
|
||||
|
||||
prefix everything with dnet_*, maybe new API with common dnet_t handle?
|
||||
|
||||
more documentation and example code
|
||||
|
||||
ip-cooked.c: use RTM_RESOLVE for ip_lookup_mac() (GetBestInterface()?)
|
||||
|
||||
add a way to enable ip forwarding?
|
||||
|
||||
finish IPv6 support everywhere (fw, route, ip6, win32, etc.)
|
||||
|
||||
reimplement win32 fw (lost with laptop hd crash!@#$%)
|
||||
|
||||
NAT, ipsec interface?
|
||||
|
||||
maybe Checkpoint FW-1 support, via OPSEC (hrr)
|
||||
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
| addr | arp | eth | fw | ip | intf | route | tun |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
openbsd | | | | | | | | |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
freebsd | | | | 1 | | | | ? |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
netbsd | | | | | | | | ? |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
linux | | | | | | | | |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
solaris | | | | 7 | | | | ? |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
macosx | | | | | | | | ? |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
irix | | | | 7 | | | | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
bsdi | | | | 7 | | | | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
tru64 | | | | 7 | | | | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
hp-ux | | | | 7 | | 3 | | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
win32 | | | | | | 3 | | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
unixware| | - | 2 | - | - | | 4 | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
aix | | 5 | - | - | - | | 6 | - |
|
||||
--------+------+-----+-----+----+----+------+-------+-----+
|
||||
|
||||
= works, tested 1 = ipfw support, but no ipfw2
|
||||
? = untested 2 = eth_send doesn't work
|
||||
- = unimplemented 3 = intf_set doesn't work
|
||||
4 = route_loop only works
|
||||
5 = arp_show doesn't work
|
||||
6 = route_loop doesn't work
|
||||
7 = IP Filter should work, but untested
|
||||
|
||||
arp-{bsd,ioctl} both b0rked on unixware
|
||||
|
||||
eth_send() doesn't allow src mac spoofing on MacOS X (no
|
||||
BIOCSHDRCMPLT) without patch (http://slagheap.net/etherspoof/),
|
||||
also b0rked on BSD/OS, says markus. not possible on Tru64?
|
||||
|
||||
no support for ICMP code in ipfw, therefore none in fw-ipfw.c
|
||||
|
||||
need reliable, legit HP-UX, Unixware, and AIX accounts with root
|
||||
access to finish the ports to those platforms. i'd be happy to port to
|
||||
other platforms also, given similar (temporary) access.
|
||||
|
||||
$Id: TODO,v 1.25 2005/02/14 21:56:59 dugsong Exp $
|
||||
32
libdnet-stripped/acconfig.h
Normal file
32
libdnet-stripped/acconfig.h
Normal file
@@ -0,0 +1,32 @@
|
||||
@BOTTOM@
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef __svr4__
|
||||
# define BSD_COMP 1
|
||||
#endif
|
||||
|
||||
#if defined(__osf__) && !defined(_SOCKADDR_LEN)
|
||||
# define _SOCKADDR_LEN 1
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_INET_PTON
|
||||
int inet_pton(int, const char *, void *);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCAT
|
||||
int strlcat(char *, const char *, int);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
int strlcpy(char *, const char *, int);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRSEP
|
||||
char *strsep(char **, const char *);
|
||||
#endif
|
||||
7010
libdnet-stripped/aclocal.m4
vendored
Normal file
7010
libdnet-stripped/aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load Diff
319
libdnet-stripped/config/acinclude.m4
Normal file
319
libdnet-stripped/config/acinclude.m4
Normal file
@@ -0,0 +1,319 @@
|
||||
dnl
|
||||
dnl Check for 4.4 BSD sa_len member in sockaddr struct
|
||||
dnl
|
||||
dnl usage: AC_DNET_SOCKADDR_SA_LEN
|
||||
dnl results: HAVE_SOCKADDR_SA_LEN (defined)
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_SOCKADDR_SA_LEN,
|
||||
[AC_MSG_CHECKING(for sa_len in sockaddr struct)
|
||||
AC_CACHE_VAL(ac_cv_dnet_sockaddr_has_sa_len,
|
||||
AC_TRY_COMPILE([
|
||||
# ifndef _SOCKADDR_LEN
|
||||
# define _SOCKADDR_LEN 1
|
||||
# endif
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>],
|
||||
[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
|
||||
ac_cv_dnet_sockaddr_has_sa_len=yes,
|
||||
ac_cv_dnet_sockaddr_has_sa_len=no))
|
||||
AC_MSG_RESULT($ac_cv_dnet_sockaddr_has_sa_len)
|
||||
if test $ac_cv_dnet_sockaddr_has_sa_len = yes ; then
|
||||
AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1,
|
||||
[Define if sockaddr struct has sa_len.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for sockaddr_in6 struct in <netinet/in.h>
|
||||
dnl
|
||||
dnl usage: AC_DNET_SOCKADDR_IN6
|
||||
dnl results: HAVE_SOCKADDR_IN6
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_SOCKADDR_IN6,
|
||||
[AC_MSG_CHECKING(for sockaddr_in6 struct in <netinet/in.h>)
|
||||
AC_CACHE_VAL(ac_cv_dnet_netinet_in_h_has_sockaddr_in6,
|
||||
AC_TRY_COMPILE([
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>
|
||||
# include <netinet/in.h>],
|
||||
[struct sockaddr_in6 sin6; sin6.sin6_family = AF_INET6;],
|
||||
ac_cv_dnet_netinet_in_h_has_sockaddr_in6=yes,
|
||||
ac_cv_dnet_netinet_in_h_has_sockaddr_in6=no))
|
||||
AC_MSG_RESULT($ac_cv_dnet_netinet_in_h_has_sockaddr_in6)
|
||||
if test $ac_cv_dnet_netinet_in_h_has_sockaddr_in6 = yes ; then
|
||||
AC_DEFINE(HAVE_SOCKADDR_IN6, 1,
|
||||
[Define if <netinet/in.h> has sockaddr_in6 struct.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for arp_dev member in arpreq struct
|
||||
dnl
|
||||
dnl usage: AC_DNET_ARPREQ_ARP_DEV
|
||||
dnl results: HAVE_ARPREQ_ARP_DEV (defined)
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_ARPREQ_ARP_DEV,
|
||||
[AC_MSG_CHECKING(for arp_dev in arpreq struct)
|
||||
AC_CACHE_VAL(ac_cv_dnet_arpreq_has_arp_dev,
|
||||
AC_TRY_COMPILE([
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>
|
||||
# include <net/if_arp.h>],
|
||||
[void *p = ((struct arpreq *)0)->arp_dev],
|
||||
ac_cv_dnet_arpreq_has_arp_dev=yes,
|
||||
ac_cv_dnet_arpreq_has_arp_dev=no))
|
||||
AC_MSG_RESULT($ac_cv_dnet_arpreq_has_arp_dev)
|
||||
if test $ac_cv_dnet_arpreq_has_arp_dev = yes ; then
|
||||
AC_DEFINE(HAVE_ARPREQ_ARP_DEV, 1,
|
||||
[Define if arpreq struct has arp_dev.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for rt_msghdr struct in <net/route.h>
|
||||
dnl
|
||||
dnl usage: AC_DNET_ROUTE_RT_MSGHDR
|
||||
dnl results: HAVE_ROUTE_RT_MSGHDR
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_ROUTE_RT_MSGHDR,
|
||||
[AC_MSG_CHECKING(for rt_msghdr struct in <net/route.h>)
|
||||
AC_CACHE_VAL(ac_cv_dnet_route_h_has_rt_msghdr,
|
||||
AC_TRY_COMPILE([
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>
|
||||
# include <net/if.h>
|
||||
# include <net/route.h>],
|
||||
[struct rt_msghdr rtm; rtm.rtm_msglen = 0;],
|
||||
ac_cv_dnet_route_h_has_rt_msghdr=yes,
|
||||
ac_cv_dnet_route_h_has_rt_msghdr=no))
|
||||
AC_MSG_RESULT($ac_cv_dnet_route_h_has_rt_msghdr)
|
||||
if test $ac_cv_dnet_route_h_has_rt_msghdr = yes ; then
|
||||
AC_DEFINE(HAVE_ROUTE_RT_MSGHDR, 1,
|
||||
[Define if <net/route.h> has rt_msghdr struct.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for the Berkeley Packet Filter
|
||||
dnl
|
||||
dnl usage: AC_DNET_BSD_BPF
|
||||
dnl results: HAVE_BSD_BPF
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_BSD_BPF,
|
||||
[AC_MSG_CHECKING(for Berkeley Packet Filter)
|
||||
AC_CACHE_VAL(ac_cv_dnet_bsd_bpf,
|
||||
if test -c /dev/bpf0 ; then
|
||||
ac_cv_dnet_bsd_bpf=yes
|
||||
else
|
||||
ac_cv_dnet_bsd_bpf=no
|
||||
fi)
|
||||
AC_MSG_RESULT($ac_cv_dnet_bsd_bpf)
|
||||
if test $ac_cv_dnet_bsd_bpf = yes ; then
|
||||
AC_DEFINE(HAVE_BSD_BPF, 1,
|
||||
[Define if you have the Berkeley Packet Filter.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for the Linux /proc filesystem
|
||||
dnl
|
||||
dnl usage: AC_DNET_LINUX_PROCFS
|
||||
dnl results: HAVE_LINUX_PROCFS
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_LINUX_PROCFS,
|
||||
[AC_MSG_CHECKING(for Linux proc filesystem)
|
||||
AC_CACHE_VAL(ac_cv_dnet_linux_procfs,
|
||||
if test "x`cat /proc/sys/kernel/ostype 2>&-`" = "xLinux" ; then
|
||||
ac_cv_dnet_linux_procfs=yes
|
||||
else
|
||||
ac_cv_dnet_linux_procfs=no
|
||||
fi)
|
||||
AC_MSG_RESULT($ac_cv_dnet_linux_procfs)
|
||||
if test $ac_cv_dnet_linux_procfs = yes ; then
|
||||
AC_DEFINE(HAVE_LINUX_PROCFS, 1,
|
||||
[Define if you have the Linux /proc filesystem.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for Linux PF_PACKET sockets
|
||||
dnl
|
||||
dnl usage: AC_DNET_LINUX_PF_PACKET
|
||||
dnl results: HAVE_LINUX_PF_PACKET
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_LINUX_PF_PACKET,
|
||||
[AC_MSG_CHECKING(for Linux PF_PACKET sockets)
|
||||
AC_CACHE_VAL(ac_cv_dnet_linux_pf_packet,
|
||||
if test -f /usr/include/netpacket/packet.h ; then
|
||||
ac_cv_dnet_linux_pf_packet=yes
|
||||
else
|
||||
ac_cv_dnet_linux_pf_packet=no
|
||||
fi)
|
||||
AC_MSG_RESULT($ac_cv_dnet_linux_pf_packet)
|
||||
if test $ac_cv_dnet_linux_pf_packet = yes ; then
|
||||
AC_DEFINE(HAVE_LINUX_PF_PACKET, 1,
|
||||
[Define if you have Linux PF_PACKET sockets.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for SNMP MIB2 STREAMS (Solaris only?)
|
||||
dnl
|
||||
dnl usage: AC_DNET_STREAMS_MIB2
|
||||
dnl results: HAVE_STREAMS_MIB2
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_STREAMS_MIB2,
|
||||
[AC_MSG_CHECKING(for SNMP MIB2 STREAMS)
|
||||
AC_CACHE_VAL(ac_cv_dnet_streams_mib2,
|
||||
if test -f /usr/include/inet/mib2.h -a -c /dev/ip ; then
|
||||
ac_cv_dnet_streams_mib2=yes
|
||||
else
|
||||
ac_cv_dnet_streams_mib2=no
|
||||
fi)
|
||||
AC_MSG_RESULT($ac_cv_dnet_streams_mib2)
|
||||
if test $ac_cv_dnet_streams_mib2 = yes ; then
|
||||
AC_DEFINE(HAVE_STREAMS_MIB2, 1,
|
||||
[Define if you have SNMP MIB2 STREAMS.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for route(7) STREAMS (UnixWare only?)
|
||||
dnl
|
||||
dnl usage: AC_DNET_STREAMS_ROUTE
|
||||
dnl results: HAVE_STREAMS_ROUTE
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_STREAMS_ROUTE,
|
||||
[AC_MSG_CHECKING(for route(7) STREAMS)
|
||||
AC_CACHE_VAL(ac_cv_dnet_streams_route,
|
||||
if grep RTSTR_SEND /usr/include/net/route.h >/dev/null 2>&1 ; then
|
||||
ac_cv_dnet_streams_route=yes
|
||||
else
|
||||
ac_cv_dnet_streams_route=no
|
||||
fi)
|
||||
AC_MSG_RESULT($ac_cv_dnet_streams_route)
|
||||
if test $ac_cv_dnet_streams_route = yes ; then
|
||||
AC_DEFINE(HAVE_STREAMS_ROUTE, 1,
|
||||
[Define if you have route(7) STREAMS.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for arp(7) ioctls
|
||||
dnl
|
||||
dnl usage: AC_DNET_IOCTL_ARP
|
||||
dnl results: HAVE_IOCTL_ARP
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_IOCTL_ARP,
|
||||
[AC_MSG_CHECKING(for arp(7) ioctls)
|
||||
AC_CACHE_VAL(ac_cv_dnet_ioctl_arp,
|
||||
AC_EGREP_CPP(werd, [
|
||||
# include <sys/types.h>
|
||||
# define BSD_COMP
|
||||
# include <sys/ioctl.h>
|
||||
# ifdef SIOCGARP
|
||||
werd
|
||||
# endif],
|
||||
ac_cv_dnet_ioctl_arp=yes,
|
||||
ac_cv_dnet_ioctl_arp=no))
|
||||
case "$host_os" in
|
||||
irix*)
|
||||
ac_cv_dnet_ioctl_arp=no ;;
|
||||
esac
|
||||
AC_MSG_RESULT($ac_cv_dnet_ioctl_arp)
|
||||
if test $ac_cv_dnet_ioctl_arp = yes ; then
|
||||
AC_DEFINE(HAVE_IOCTL_ARP, 1,
|
||||
[Define if you have arp(7) ioctls.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for raw IP sockets ip_{len,off} host byte ordering
|
||||
dnl
|
||||
dnl usage: AC_DNET_RAWIP_HOST_OFFLEN
|
||||
dnl results: HAVE_RAWIP_HOST_OFFLEN
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_RAWIP_HOST_OFFLEN,
|
||||
[AC_MSG_CHECKING([for raw IP sockets ip_{len,off} host byte ordering])
|
||||
AC_CACHE_VAL(ac_cv_dnet_rawip_host_offlen, [
|
||||
case "$host_os" in
|
||||
*openbsd*)
|
||||
ac_cv_dnet_rawip_host_offlen=no ;;
|
||||
*bsd*|*osf*|*unixware*)
|
||||
ac_cv_dnet_rawip_host_offlen=yes ;;
|
||||
*)
|
||||
ac_cv_dnet_rawip_host_offlen=no ;;
|
||||
esac])
|
||||
AC_MSG_RESULT($ac_cv_dnet_rawip_host_offlen)
|
||||
if test $ac_cv_dnet_rawip_host_offlen = yes ; then
|
||||
AC_DEFINE(HAVE_RAWIP_HOST_OFFLEN, 1,
|
||||
[Define if raw IP sockets require host byte ordering for ip_off, ip_len.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl Check for cooked raw IP sockets
|
||||
dnl
|
||||
dnl usage: AC_DNET_RAWIP_COOKED
|
||||
dnl results: HAVE_RAWIP_COOKED
|
||||
dnl
|
||||
AC_DEFUN(AC_DNET_RAWIP_COOKED,
|
||||
[AC_MSG_CHECKING(for cooked raw IP sockets)
|
||||
AC_CACHE_VAL(ac_cv_dnet_rawip_cooked, [
|
||||
case "$host_os" in
|
||||
solaris*|irix*)
|
||||
ac_cv_dnet_rawip_cooked=yes ;;
|
||||
*)
|
||||
ac_cv_dnet_rawip_cooked=no ;;
|
||||
esac])
|
||||
AC_MSG_RESULT($ac_cv_dnet_rawip_cooked)
|
||||
if test $ac_cv_dnet_rawip_cooked = yes ; then
|
||||
AC_DEFINE(HAVE_RAWIP_COOKED, 1,
|
||||
[Define if you have cooked raw IP sockets.])
|
||||
fi])
|
||||
|
||||
dnl
|
||||
dnl AC_LBL_LIBRARY_NET
|
||||
dnl
|
||||
dnl This test is for network applications that need socket() and
|
||||
dnl gethostbyname() -ish functions. Under Solaris, those applications
|
||||
dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link
|
||||
dnl with "-lnsl" but should *not* link with "-lsocket" because
|
||||
dnl libsocket.a breaks a number of things (for instance:
|
||||
dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
|
||||
dnl versions of IRIX).
|
||||
dnl
|
||||
dnl Unfortunately, many application developers are not aware of this,
|
||||
dnl and mistakenly write tests that cause -lsocket to be used under
|
||||
dnl IRIX. It is also easy to write tests that cause -lnsl to be used
|
||||
dnl under operating systems where neither are necessary (or useful),
|
||||
dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
|
||||
dnl
|
||||
dnl This test exists so that every application developer does not test
|
||||
dnl this in a different, and subtly broken fashion.
|
||||
|
||||
dnl It has been argued that this test should be broken up into two
|
||||
dnl seperate tests, one for the resolver libraries, and one for the
|
||||
dnl libraries necessary for using Sockets API. Unfortunately, the two
|
||||
dnl are carefully intertwined and allowing the autoconf user to use
|
||||
dnl them independantly potentially results in unfortunate ordering
|
||||
dnl dependancies -- as such, such component macros would have to
|
||||
dnl carefully use indirection and be aware if the other components were
|
||||
dnl executed. Since other autoconf macros do not go to this trouble,
|
||||
dnl and almost no applications use sockets without the resolver, this
|
||||
dnl complexity has not been implemented.
|
||||
dnl
|
||||
dnl The check for libresolv is in case you are attempting to link
|
||||
dnl statically and happen to have a libresolv.a lying around (and no
|
||||
dnl libnsl.a).
|
||||
dnl
|
||||
AC_DEFUN(AC_LBL_LIBRARY_NET, [
|
||||
# Most operating systems have gethostbyname() in the default searched
|
||||
# libraries (i.e. libc):
|
||||
AC_CHECK_FUNC(gethostbyname, ,
|
||||
# Some OSes (eg. Solaris) place it in libnsl:
|
||||
AC_CHECK_LIB(nsl, gethostbyname, ,
|
||||
# Some strange OSes (SINIX) have it in libsocket:
|
||||
AC_CHECK_LIB(socket, gethostbyname, ,
|
||||
# Unfortunately libsocket sometimes depends on libnsl.
|
||||
# AC_CHECK_LIB's API is essentially broken so the
|
||||
# following ugliness is necessary:
|
||||
AC_CHECK_LIB(socket, gethostbyname,
|
||||
LIBS="-lsocket -lnsl $LIBS",
|
||||
AC_CHECK_LIB(resolv, gethostbyname),
|
||||
-lnsl))))
|
||||
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
|
||||
AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
|
||||
-lnsl)))
|
||||
# DLPI needs putmsg under HPUX so test for -lstr while we're at it
|
||||
AC_CHECK_LIB(str, putmsg)
|
||||
])
|
||||
1410
libdnet-stripped/config/config.guess
vendored
Executable file
1410
libdnet-stripped/config/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1510
libdnet-stripped/config/config.sub
vendored
Executable file
1510
libdnet-stripped/config/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
295
libdnet-stripped/config/install-sh
Executable file
295
libdnet-stripped/config/install-sh
Executable file
@@ -0,0 +1,295 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2003-09-24.23
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch. It can only install one file at a time, a restriction
|
||||
# shared with many OS's install programs.
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit="${DOITPROG-}"
|
||||
|
||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||
|
||||
mvprog="${MVPROG-mv}"
|
||||
cpprog="${CPPROG-cp}"
|
||||
chmodprog="${CHMODPROG-chmod}"
|
||||
chownprog="${CHOWNPROG-chown}"
|
||||
chgrpprog="${CHGRPPROG-chgrp}"
|
||||
stripprog="${STRIPPROG-strip}"
|
||||
rmprog="${RMPROG-rm}"
|
||||
mkdirprog="${MKDIRPROG-mkdir}"
|
||||
|
||||
transformbasename=
|
||||
transform_arg=
|
||||
instcmd="$mvprog"
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=
|
||||
chgrpcmd=
|
||||
stripcmd=
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
|
||||
usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
|
||||
or: $0 -d DIR1 DIR2...
|
||||
|
||||
In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
|
||||
In the second, create the directory path DIR.
|
||||
|
||||
Options:
|
||||
-b=TRANSFORMBASENAME
|
||||
-c copy source (using $cpprog) instead of moving (using $mvprog).
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrp installed files to GROUP.
|
||||
-m MODE $chmod installed files to MODE.
|
||||
-o USER $chown installed files to USER.
|
||||
-s strip installed files (using $stripprog).
|
||||
-t=TRANSFORM
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-c) instcmd=$cpprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--help) echo "$usage"; exit 0;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit 0;;
|
||||
|
||||
*) if test -z "$src"; then
|
||||
src=$1
|
||||
else
|
||||
# this colon is to work around a 386BSD /bin/sh bug
|
||||
:
|
||||
dst=$1
|
||||
fi
|
||||
shift
|
||||
continue;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -z "$src"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
|
||||
if test -d "$dst"; then
|
||||
instcmd=:
|
||||
chmodcmd=
|
||||
else
|
||||
instcmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
dst=$dst/`basename "$src"`
|
||||
fi
|
||||
fi
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
IFS=$oIFS
|
||||
|
||||
pathcomp=
|
||||
|
||||
while test $# -ne 0 ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
test -d "$pathcomp" || $mkdirprog "$pathcomp"
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
$doit $instcmd "$dst" \
|
||||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
||||
|
||||
else
|
||||
# If we're going to rename the final executable, determine the name now.
|
||||
if test -z "$transformarg"; then
|
||||
dstfile=`basename "$dst"`
|
||||
else
|
||||
dstfile=`basename "$dst" $transformbasename \
|
||||
| sed $transformarg`$transformbasename
|
||||
fi
|
||||
|
||||
# don't allow the sed command to completely eliminate the filename.
|
||||
test -z "$dstfile" && dstfile=`basename "$dst"`
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Move or copy the file name to the temp name
|
||||
$doit $instcmd "$src" "$dsttmp" &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
|
||||
|
||||
# Now remove or move aside any old file at destination location. We
|
||||
# try this two ways since rm can't unlink itself on some systems and
|
||||
# the destination file might be busy for other reasons. In this case,
|
||||
# the final cleanup might fail but the new file should still install
|
||||
# successfully.
|
||||
{
|
||||
if test -f "$dstdir/$dstfile"; then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
||||
|| {
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
fi &&
|
||||
|
||||
# The final little trick to "correctly" pass the exit status to the exit trap.
|
||||
{
|
||||
(exit 0); exit
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
6422
libdnet-stripped/config/ltmain.sh
Normal file
6422
libdnet-stripped/config/ltmain.sh
Normal file
File diff suppressed because it is too large
Load Diff
360
libdnet-stripped/config/missing
Executable file
360
libdnet-stripped/config/missing
Executable file
@@ -0,0 +1,360 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2003-09-02.23
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003
|
||||
# Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program 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, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aclocal*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
||||
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
||||
fi
|
||||
if [ -f "$file" ]; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
|
||||
# We have makeinfo, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
|
||||
fi
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar)
|
||||
shift
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
137
libdnet-stripped/config/mkinstalldirs
Executable file
137
libdnet-stripped/config/mkinstalldirs
Executable file
@@ -0,0 +1,137 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Public domain.
|
||||
|
||||
scriptversion=2003-09-26.19
|
||||
|
||||
errstatus=0
|
||||
dirmode=""
|
||||
|
||||
usage="\
|
||||
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
|
||||
|
||||
Create each directory DIR (with mode MODE, if specified), including all
|
||||
leading file name components.
|
||||
"
|
||||
|
||||
# process command line arguments
|
||||
while test $# -gt 0 ; do
|
||||
case $1 in
|
||||
-h | --help | --h*) # -h for help
|
||||
echo "$usage"
|
||||
exit 0
|
||||
;;
|
||||
-m) # -m PERM arg
|
||||
shift
|
||||
test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
|
||||
dirmode=$1
|
||||
shift
|
||||
;;
|
||||
--version)
|
||||
echo "$0 $scriptversion"
|
||||
exit 0
|
||||
;;
|
||||
--) # stop option processing
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*) # unknown option
|
||||
echo "$usage" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
*) # first non-opt arg
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for file
|
||||
do
|
||||
if test -d "$file"; then
|
||||
shift
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
case $# in
|
||||
0) exit 0 ;;
|
||||
esac
|
||||
|
||||
case $dirmode in
|
||||
'')
|
||||
if mkdir -p -- . 2>/dev/null; then
|
||||
echo "mkdir -p -- $*"
|
||||
exec mkdir -p -- "$@"
|
||||
else
|
||||
# On NextStep and OpenStep, the `mkdir' command does not
|
||||
# recognize any option. It will interpret all options as
|
||||
# directories to create, and then abort because `.' already
|
||||
# exists.
|
||||
test -d ./-p && rmdir ./-p
|
||||
test -d ./-- && rmdir ./--
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
|
||||
echo "mkdir -m $dirmode -p -- $*"
|
||||
exec mkdir -m "$dirmode" -p -- "$@"
|
||||
else
|
||||
# Clean up after NextStep and OpenStep mkdir.
|
||||
for d in ./-m ./-p ./-- "./$dirmode";
|
||||
do
|
||||
test -d $d && rmdir $d
|
||||
done
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
for file
|
||||
do
|
||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||
shift
|
||||
|
||||
pathcomp=
|
||||
for d
|
||||
do
|
||||
pathcomp="$pathcomp$d"
|
||||
case $pathcomp in
|
||||
-*) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp"
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
else
|
||||
if test ! -z "$dirmode"; then
|
||||
echo "chmod $dirmode $pathcomp"
|
||||
lasterr=""
|
||||
chmod "$dirmode" "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -z "$lasterr"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp="$pathcomp/"
|
||||
done
|
||||
done
|
||||
|
||||
exit $errstatus
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
24305
libdnet-stripped/configure
vendored
Executable file
24305
libdnet-stripped/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
320
libdnet-stripped/configure.in
Normal file
320
libdnet-stripped/configure.in
Normal file
@@ -0,0 +1,320 @@
|
||||
dnl
|
||||
dnl configure.in
|
||||
dnl
|
||||
dnl Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
dnl
|
||||
dnl $Id: configure.in,v 1.64 2005/02/25 23:05:09 dugsong Exp $
|
||||
|
||||
AC_INIT(include/dnet.h)
|
||||
AC_CONFIG_AUX_DIR(config)
|
||||
AC_SUBST(ac_aux_dir)
|
||||
|
||||
AM_INIT_AUTOMAKE(libdnet, 1.10)
|
||||
AM_CONFIG_HEADER(include/config.h)
|
||||
|
||||
dnl XXX - stop the insanity!@#$
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
dnl Check for system type.
|
||||
dnl XXX - we do this to qualify our later feature checks, since some
|
||||
dnl systems claim to support multiple features, but are quite b0rked.
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
dnl Initialize prefix.
|
||||
if test "$prefix" = "NONE"; then
|
||||
prefix="/usr/local"
|
||||
fi
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
AC_LIBTOOL_DLOPEN
|
||||
AM_PROG_LIBTOOL
|
||||
|
||||
dnl Checks for Python.
|
||||
dnl XXX - use AM_PATH_PYTHON after automake upgrade
|
||||
AC_MSG_CHECKING(for Python)
|
||||
AC_ARG_WITH(python,
|
||||
[ --with-python=DIR build Python module (using python in DIR)],
|
||||
[ case "$withval" in
|
||||
yes)
|
||||
AC_MSG_RESULT(yes)
|
||||
PYTHON="python"
|
||||
;;
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT($withval)
|
||||
for subdir in . bin; do
|
||||
if test -x $withval/$subdir/python; then
|
||||
owd=`pwd`
|
||||
if cd $withval/$subdir; then withval=`pwd`; cd $owd; fi
|
||||
PYTHON="$withval/python"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test "x$PYTHON" = "x"; then
|
||||
AC_ERROR(python not found in $withval)
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
])
|
||||
AC_SUBST(PYTHON)
|
||||
AC_SUBST(TCLINC)
|
||||
AC_SUBST(TCLLIB)
|
||||
AM_CONDITIONAL(PYTHON, [test "x$PYTHON" != "x"])
|
||||
AM_CONDITIONAL(TCL, [test "x$TCLINC" != "x"])
|
||||
|
||||
dnl XXX - stupid IRIX cpp
|
||||
if test -r /usr/include/sgidefs.h ; then
|
||||
CPPFLAGS="$CPPFLAGS -D__sgi"
|
||||
fi
|
||||
dnl XXX - we need MingW32 under Cygwin for win32
|
||||
AC_CYGWIN
|
||||
if test "$CYGWIN" = yes ; then
|
||||
if test -d /usr/include/mingw ; then
|
||||
CPPFLAGS="$CPPFLAGS -mno-cygwin"
|
||||
CFLAGS="$CFLAGS -mno-cygwin"
|
||||
AC_DEFINE(WIN32_LEAN_AND_MEAN, 1,
|
||||
[Define for faster code generation.])
|
||||
AC_CHECK_LIB(ws2_32, main)
|
||||
AC_CHECK_LIB(iphlpapi, main)
|
||||
AC_DEFINE(snprintf, _snprintf,
|
||||
[Use MingW32's internal snprintf])
|
||||
else
|
||||
AC_MSG_ERROR([need MingW32 package to build under Cygwin])
|
||||
fi
|
||||
AC_MSG_CHECKING(for WinPcap developer's pack)
|
||||
AC_ARG_WITH(wpdpack,
|
||||
[ --with-wpdpack=DIR use WinPcap developer's pack in DIR],
|
||||
[ AC_MSG_RESULT($withval)
|
||||
if test -f $withval/include/packet32.h -a -f $withval/lib/packet.lib; then
|
||||
owd=`pwd`
|
||||
if cd $withval; then withval=`pwd`; cd $owd; fi
|
||||
CFLAGS="$CFLAGS -I$withval/include"
|
||||
LIBS="$LIBS -L$withval/lib -lpacket"
|
||||
else
|
||||
AC_MSG_ERROR(packet32.h or packet.lib not found in $withval)
|
||||
fi ],
|
||||
[ for dir in ${prefix} ${HOME}/WPdpack ; do
|
||||
if test -f ${dir}/include/packet32.h -a -f ${dir}/lib/packet.lib; then
|
||||
CFLAGS="$CFLAGS -I${dir}/include"
|
||||
LIBS="$LIBS -L${dir}/lib -lpacket"
|
||||
have_pcap=yes
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if test "$have_pcap" != yes; then
|
||||
AC_MSG_ERROR(WinPcap developer's pack not found)
|
||||
fi
|
||||
AC_MSG_RESULT(yes) ])
|
||||
fi
|
||||
|
||||
dnl Checks for libraries.
|
||||
if test "$CYGWIN" != yes ; then
|
||||
AC_LBL_LIBRARY_NET
|
||||
AC_CHECK_LIB(nm, open_mib)
|
||||
fi
|
||||
|
||||
dnl Checks for Check.
|
||||
AC_MSG_CHECKING(for Check)
|
||||
AC_ARG_WITH(check,
|
||||
[ --with-check=DIR use Check (http://check.sf.net) in DIR],
|
||||
[ case "$withval" in
|
||||
yes|no)
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT($withval)
|
||||
if test -f $withval/include/check.h -a -f $withval/lib/libcheck.a; then
|
||||
owd=`pwd`
|
||||
if cd $withval; then withval=`pwd`; cd $owd; fi
|
||||
CHECKINC="-I$withval/include"
|
||||
CHECKLIB="-L$withval/lib -lcheck"
|
||||
elif test -f $withval/src/check.h -a -f $withval/src/libcheck.a; then
|
||||
owd=`pwd`
|
||||
if cd $withval; then withval=`pwd`; cd $owd; fi
|
||||
CHECKINC="-I$withval/src"
|
||||
CHECKLIB="-L$withval/src -lcheck"
|
||||
else
|
||||
AC_ERROR(check.h or libcheck.a not found in $withval)
|
||||
fi
|
||||
;;
|
||||
esac ],
|
||||
[ if test -f ${prefix}/include/check.h -a -f ${prefix}/lib/libcheck.a; then
|
||||
CHECKINC="-I${prefix}/include"
|
||||
CHECKLIB="-L${prefix}/lib -lcheck"
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
])
|
||||
AC_SUBST(CHECKINC)
|
||||
AC_SUBST(CHECKLIB)
|
||||
AM_CONDITIONAL(HAVE_CHECK, test "x$CHECKLIB" != "x")
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
if test "$CYGWIN" = yes ; then
|
||||
AC_CHECK_HEADERS(Iphlpapi.h winsock2.h)
|
||||
else
|
||||
AC_CHECK_HEADERS(fcntl.h unistd.h)
|
||||
AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi.h sys/dlpihdr.h sys/dlpi_ext.h \
|
||||
sys/ioctl.h sys/mib.h sys/ndd_var.h sys/socket.h sys/sockio.h \
|
||||
sys/sysctl.h sys/time.h)
|
||||
AC_CHECK_HEADERS(net/bpf.h net/if.h net/if_var.h \
|
||||
net/if_arp.h net/if_dl.h net/pfilt.h \
|
||||
net/pfvar.h net/radix.h net/raw.h net/route.h netinet/in_var.h \
|
||||
net/if_tun.h linux/if_tun.h netinet/ip_fw.h linux/ip_fw.h \
|
||||
linux/ip_fwchains.h linux/netfilter_ipv4/ipchains_core.h)
|
||||
AC_CHECK_HEADERS(ip_fil_compat.h netinet/ip_fil_compat.h ip_compat.h \
|
||||
netinet/ip_compat.h ip_fil.h netinet/ip_fil.h)
|
||||
AC_CHECK_HEADERS(hpsecurity.h stropts.h)
|
||||
fi
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_DNET_SOCKADDR_IN6
|
||||
if test "$ac_cv_header_sys_socket_h" = yes ; then
|
||||
AC_DNET_SOCKADDR_SA_LEN
|
||||
fi
|
||||
if test "$ac_cv_header_net_if_arp_h" = yes ; then
|
||||
AC_DNET_ARPREQ_ARP_DEV
|
||||
fi
|
||||
if test "$ac_cv_header_net_route_h" = yes ; then
|
||||
AC_DNET_ROUTE_RT_MSGHDR
|
||||
fi
|
||||
AC_PROG_GCC_TRADITIONAL
|
||||
if test "$GCC" = yes ; then
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
fi
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_FUNC_MEMCMP
|
||||
AC_REPLACE_FUNCS(err strlcat strlcpy strsep)
|
||||
|
||||
dnl Checks for other system-specific jonks.
|
||||
if test "$CYGWIN" != yes ; then
|
||||
AC_DNET_BSD_BPF
|
||||
AC_DNET_LINUX_PROCFS
|
||||
AC_DNET_LINUX_PF_PACKET
|
||||
AC_DNET_STREAMS_MIB2
|
||||
AC_DNET_STREAMS_ROUTE
|
||||
AC_DNET_IOCTL_ARP
|
||||
AC_DNET_RAWIP_HOST_OFFLEN
|
||||
AC_DNET_RAWIP_COOKED
|
||||
fi
|
||||
|
||||
dnl Check for arp interface.
|
||||
if test "$ac_cv_header_Iphlpapi_h" = yes ; then
|
||||
AC_LIBOBJ([arp-win32])
|
||||
elif test "$ac_cv_dnet_ioctl_arp" = yes ; then
|
||||
AC_LIBOBJ([arp-ioctl])
|
||||
elif test "$ac_cv_dnet_route_h_has_rt_msghdr" = yes ; then
|
||||
AC_LIBOBJ([arp-bsd])
|
||||
else
|
||||
AC_LIBOBJ([arp-none])
|
||||
fi
|
||||
|
||||
dnl Check for Ethernet interface.
|
||||
if test "$ac_cv_header_Iphlpapi_h" = yes ; then
|
||||
AC_LIBOBJ([eth-win32])
|
||||
elif test "$ac_cv_header_net_pfilt_h" = yes ; then
|
||||
AC_LIBOBJ([eth-pfilt])
|
||||
elif test "$ac_cv_dnet_bsd_bpf" = yes ; then
|
||||
AC_LIBOBJ([eth-bsd])
|
||||
elif test "$ac_cv_dnet_linux_pf_packet" = yes ; then
|
||||
AC_LIBOBJ([eth-linux])
|
||||
elif test "$ac_cv_header_net_raw_h" = yes ; then
|
||||
AC_LIBOBJ([eth-snoop])
|
||||
elif test "$ac_cv_header_sys_ndd_var_h" = yes ; then
|
||||
AC_LIBOBJ([eth-ndd])
|
||||
elif test "$ac_cv_header_sys_dlpi_h" = yes || \
|
||||
test "$ac_cv_header_sys_dlpihdr_h" = yes ; then
|
||||
AC_LIBOBJ([eth-dlpi])
|
||||
else
|
||||
AC_LIBOBJ([eth-none])
|
||||
fi
|
||||
|
||||
dnl Check for firewall interface.
|
||||
if test "$ac_cv_header_Iphlpapi_h" = yes ; then
|
||||
AC_LIBOBJ([fw-pktfilter])
|
||||
elif test "$ac_cv_header_net_pfvar_h" = yes ; then
|
||||
AC_LIBOBJ([fw-pf])
|
||||
elif test "$ac_cv_header_netinet_ip_fw_h" = yes ; then
|
||||
dnl XXX - ipfw2 support later...
|
||||
case "$host_os" in
|
||||
*freebsd5*)
|
||||
AC_LIBOBJ([fw-none]) ;;
|
||||
*)
|
||||
AC_LIBOBJ([fw-ipfw]) ;;
|
||||
esac
|
||||
elif test "$ac_cv_header_netinet_ip_fil_h" = yes ; then
|
||||
AC_LIBOBJ([fw-ipf])
|
||||
elif test "$ac_cv_header_linux_ip_fw_h" = yes ; then
|
||||
AC_LIBOBJ([fw-ipchains])
|
||||
elif test "$ac_cv_header_linux_ip_fwchains_h" = yes ; then
|
||||
AC_LIBOBJ([fw-ipchains])
|
||||
elif test "$ac_cv_header_linux_netfilter_ipv4_ipchains_core_h" = yes ; then
|
||||
AC_LIBOBJ([fw-ipchains])
|
||||
else
|
||||
AC_LIBOBJ([fw-none])
|
||||
fi
|
||||
|
||||
dnl Check for network interface interface.
|
||||
if test "$ac_cv_header_Iphlpapi_h" = yes ; then
|
||||
AC_LIBOBJ([intf-win32])
|
||||
else
|
||||
AC_LIBOBJ([intf])
|
||||
fi
|
||||
|
||||
dnl Check for raw IP interface.
|
||||
if test "$ac_cv_header_Iphlpapi_h" = yes ; then
|
||||
AC_LIBOBJ([ip-win32])
|
||||
elif test "$ac_cv_dnet_rawip_cooked" = yes ; then
|
||||
AC_LIBOBJ([ip-cooked])
|
||||
else
|
||||
AC_LIBOBJ([ip])
|
||||
fi
|
||||
|
||||
dnl Check for routing interface.
|
||||
if test "$ac_cv_header_Iphlpapi_h" = yes ; then
|
||||
AC_LIBOBJ([route-win32])
|
||||
elif test "$ac_cv_dnet_route_h_has_rt_msghdr" = yes ; then
|
||||
AC_LIBOBJ([route-bsd])
|
||||
elif test "$ac_cv_dnet_linux_procfs" = yes ; then
|
||||
AC_LIBOBJ([route-linux])
|
||||
elif test "$ac_cv_header_hpsecurity_h" = yes ; then
|
||||
AC_LIBOBJ([route-hpux])
|
||||
else
|
||||
AC_LIBOBJ([route-none])
|
||||
fi
|
||||
|
||||
dnl Check for tun interface.
|
||||
if test "$ac_cv_header_linux_if_tun_h" = yes ; then
|
||||
AC_LIBOBJ([tun-linux])
|
||||
elif test "$ac_cv_header_net_if_tun_h" = yes ; then
|
||||
if test "$ac_cv_header_stropts_h" = yes ; then
|
||||
AC_LIBOBJ([tun-solaris])
|
||||
else
|
||||
AC_LIBOBJ([tun-bsd])
|
||||
fi
|
||||
elif test -f "/dev/tun0" ; then
|
||||
AC_LIBOBJ([tun-bsd])
|
||||
else
|
||||
AC_LIBOBJ([tun-none])
|
||||
fi
|
||||
|
||||
dnl Generate LTLIBOBJS for libtool.
|
||||
Xsed="sed -e s/^X//"
|
||||
LTLIBOBJS=`echo X"$LIBOBJS"|\
|
||||
[$Xsed -e "s,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,"]`
|
||||
AC_SUBST(LTLIBOBJS)
|
||||
|
||||
AC_OUTPUT([Makefile dnet-config include/Makefile include/dnet/Makefile
|
||||
src/Makefile],
|
||||
[chmod 755 dnet-config])
|
||||
54
libdnet-stripped/dnet-config.in
Normal file
54
libdnet-stripped/dnet-config.in
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $Id: dnet-config.in,v 1.1 2001/10/19 01:29:00 dugsong Exp $
|
||||
|
||||
prefix=@prefix@
|
||||
exec_prefix=@prefix@
|
||||
|
||||
usage()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: dnet-config [OPTIONS]
|
||||
Options:
|
||||
[--version]
|
||||
[--libs]
|
||||
[--cflags]
|
||||
EOF
|
||||
exit $1
|
||||
}
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage 1 1>&2
|
||||
fi
|
||||
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
-*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
|
||||
*) optarg= ;;
|
||||
esac
|
||||
|
||||
case $1 in
|
||||
--version)
|
||||
echo @VERSION@
|
||||
;;
|
||||
--cflags)
|
||||
echo_cflags=yes
|
||||
;;
|
||||
--libs)
|
||||
echo_libs=yes
|
||||
;;
|
||||
*)
|
||||
usage 1 1>&2
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test "$echo_cflags" = "yes"; then
|
||||
echo -I@includedir@
|
||||
fi
|
||||
|
||||
if test "$echo_libs" = "yes"; then
|
||||
echo -L@libdir@ -ldnet @LIBS@
|
||||
fi
|
||||
|
||||
531
libdnet-stripped/include/Makefile
Normal file
531
libdnet-stripped/include/Makefile
Normal file
@@ -0,0 +1,531 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# include/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
pkgdatadir = $(datadir)/libdnet
|
||||
pkglibdir = $(libdir)/libdnet
|
||||
pkgincludedir = $(includedir)/libdnet
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/Makefile.am.common
|
||||
subdir = include
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(includedir)"
|
||||
includeHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run tar
|
||||
AR = ar
|
||||
AUTOCONF = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=none
|
||||
CFLAGS = -g -O2 -Wall
|
||||
CHECKINC =
|
||||
CHECKLIB =
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=none
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = grep -E
|
||||
EXEEXT =
|
||||
F77 = g77
|
||||
FFLAGS = -g -O2
|
||||
HAVE_CHECK_FALSE =
|
||||
HAVE_CHECK_TRUE = #
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS = strlcat$U.o strlcpy$U.o arp-ioctl$U.o eth-linux$U.o fw-ipchains$U.o intf$U.o ip$U.o route-linux$U.o tun-linux$U.o
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS = strlcat$U.lo strlcpy$U.lo arp-ioctl$U.lo eth-linux$U.lo fw-ipchains$U.lo intf$U.lo ip$U.lo route-linux$U.lo tun-linux$U.lo
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run makeinfo
|
||||
OBJEXT = o
|
||||
PACKAGE = libdnet
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME =
|
||||
PACKAGE_STRING =
|
||||
PACKAGE_TARNAME =
|
||||
PACKAGE_VERSION =
|
||||
PATH_SEPARATOR = :
|
||||
PYTHON =
|
||||
PYTHON_FALSE =
|
||||
PYTHON_TRUE = #
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
TCLINC =
|
||||
TCLLIB =
|
||||
TCL_FALSE =
|
||||
TCL_TRUE = #
|
||||
VERSION = 1.10
|
||||
ac_aux_dir = config
|
||||
ac_ct_AR = ar
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 = g77
|
||||
ac_ct_RANLIB = ranlib
|
||||
ac_ct_STRIP = strip
|
||||
am__fastdepCC_FALSE =
|
||||
am__fastdepCC_TRUE = #
|
||||
am__fastdepCXX_FALSE =
|
||||
am__fastdepCXX_TRUE = #
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${prefix}/share
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${prefix}/info
|
||||
install_sh = /home/fyodor/nmap/libdnet-stripped/config/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${prefix}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
include_HEADERS = dnet.h
|
||||
SUBDIRS = dnet
|
||||
EXTRA_DIST = err.h queue.h
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign include/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status include/config.h
|
||||
$(srcdir)/config.h.in: # $(am__configure_deps) $(top_srcdir)/acconfig.h
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-includeHEADERS: $(include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
|
||||
@list='$(include_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
$(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(include_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/..
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(HEADERS) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-includeHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-includeHEADERS uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-generic clean-libtool clean-recursive ctags \
|
||||
ctags-recursive distclean distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-recursive distclean-tags distdir \
|
||||
dvi dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-includeHEADERS install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool \
|
||||
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-includeHEADERS \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
9
libdnet-stripped/include/Makefile.am
Normal file
9
libdnet-stripped/include/Makefile.am
Normal file
@@ -0,0 +1,9 @@
|
||||
## $Id: Makefile.am,v 1.2 2002/02/20 19:05:08 dugsong Exp $
|
||||
|
||||
include $(top_srcdir)/Makefile.am.common
|
||||
|
||||
include_HEADERS = dnet.h
|
||||
|
||||
SUBDIRS = dnet
|
||||
|
||||
EXTRA_DIST = err.h queue.h
|
||||
531
libdnet-stripped/include/Makefile.in
Normal file
531
libdnet-stripped/include/Makefile.in
Normal file
@@ -0,0 +1,531 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/Makefile.am.common
|
||||
subdir = include
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(includedir)"
|
||||
includeHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHECKINC = @CHECKINC@
|
||||
CHECKLIB = @CHECKLIB@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
HAVE_CHECK_FALSE = @HAVE_CHECK_FALSE@
|
||||
HAVE_CHECK_TRUE = @HAVE_CHECK_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_FALSE = @PYTHON_FALSE@
|
||||
PYTHON_TRUE = @PYTHON_TRUE@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TCLINC = @TCLINC@
|
||||
TCLLIB = @TCLLIB@
|
||||
TCL_FALSE = @TCL_FALSE@
|
||||
TCL_TRUE = @TCL_TRUE@
|
||||
VERSION = @VERSION@
|
||||
ac_aux_dir = @ac_aux_dir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
include_HEADERS = dnet.h
|
||||
SUBDIRS = dnet
|
||||
EXTRA_DIST = err.h queue.h
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign include/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status include/config.h
|
||||
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(top_srcdir)/acconfig.h
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-includeHEADERS: $(include_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
|
||||
@list='$(include_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
$(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-includeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(include_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(includedir)/$$f"; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/..
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(HEADERS) config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(includedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-includeHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-includeHEADERS uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-generic clean-libtool clean-recursive ctags \
|
||||
ctags-recursive distclean distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-recursive distclean-tags distdir \
|
||||
dvi dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-exec install-exec-am \
|
||||
install-includeHEADERS install-info install-info-am \
|
||||
install-man install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool \
|
||||
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-includeHEADERS \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
278
libdnet-stripped/include/config.h
Normal file
278
libdnet-stripped/include/config.h
Normal file
@@ -0,0 +1,278 @@
|
||||
/* include/config.h. Generated by configure. */
|
||||
/* include/config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if arpreq struct has arp_dev. */
|
||||
#define HAVE_ARPREQ_ARP_DEV 1
|
||||
|
||||
/* Define if you have the Berkeley Packet Filter. */
|
||||
/* #undef HAVE_BSD_BPF */
|
||||
|
||||
/* Define if you have the <dlfcn.h> header file. */
|
||||
#define HAVE_DLFCN_H 1
|
||||
|
||||
/* Define if you have the `err' function. */
|
||||
#define HAVE_ERR 1
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#define HAVE_FCNTL_H 1
|
||||
|
||||
/* Define if you have the <hpsecurity.h> header file. */
|
||||
/* #undef HAVE_HPSECURITY_H */
|
||||
|
||||
/* Define if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define if you have arp(7) ioctls. */
|
||||
#define HAVE_IOCTL_ARP 1
|
||||
|
||||
/* Define if you have the <Iphlpapi.h> header file. */
|
||||
/* #undef HAVE_IPHLPAPI_H */
|
||||
|
||||
/* Define if you have the <ip_compat.h> header file. */
|
||||
/* #undef HAVE_IP_COMPAT_H */
|
||||
|
||||
/* Define if you have the <ip_fil_compat.h> header file. */
|
||||
/* #undef HAVE_IP_FIL_COMPAT_H */
|
||||
|
||||
/* Define if you have the <ip_fil.h> header file. */
|
||||
/* #undef HAVE_IP_FIL_H */
|
||||
|
||||
/* Define if you have the `iphlpapi' library (-liphlpapi). */
|
||||
/* #undef HAVE_LIBIPHLPAPI */
|
||||
|
||||
/* Define if you have the `nm' library (-lnm). */
|
||||
/* #undef HAVE_LIBNM */
|
||||
|
||||
/* Define if you have the `nsl' library (-lnsl). */
|
||||
/* #undef HAVE_LIBNSL */
|
||||
|
||||
/* Define if you have the `resolv' library (-lresolv). */
|
||||
/* #undef HAVE_LIBRESOLV */
|
||||
|
||||
/* Define if you have the `socket' library (-lsocket). */
|
||||
/* #undef HAVE_LIBSOCKET */
|
||||
|
||||
/* Define if you have the `str' library (-lstr). */
|
||||
/* #undef HAVE_LIBSTR */
|
||||
|
||||
/* Define if you have the `ws2_32' library (-lws2_32). */
|
||||
/* #undef HAVE_LIBWS2_32 */
|
||||
|
||||
/* Define if you have the <linux/if_tun.h> header file. */
|
||||
#define HAVE_LINUX_IF_TUN_H 1
|
||||
|
||||
/* Define if you have the <linux/ip_fwchains.h> header file. */
|
||||
/* #undef HAVE_LINUX_IP_FWCHAINS_H */
|
||||
|
||||
/* Define if you have the <linux/ip_fw.h> header file. */
|
||||
/* #undef HAVE_LINUX_IP_FW_H */
|
||||
|
||||
/* Define if you have the <linux/netfilter_ipv4/ipchains_core.h> header file.
|
||||
*/
|
||||
#define HAVE_LINUX_NETFILTER_IPV4_IPCHAINS_CORE_H 1
|
||||
|
||||
/* Define if you have Linux PF_PACKET sockets. */
|
||||
#define HAVE_LINUX_PF_PACKET 1
|
||||
|
||||
/* Define if you have the Linux /proc filesystem. */
|
||||
#define HAVE_LINUX_PROCFS 1
|
||||
|
||||
/* Define if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
/* Define if you have the <netinet/in_var.h> header file. */
|
||||
/* #undef HAVE_NETINET_IN_VAR_H */
|
||||
|
||||
/* Define if you have the <netinet/ip_compat.h> header file. */
|
||||
/* #undef HAVE_NETINET_IP_COMPAT_H */
|
||||
|
||||
/* Define if you have the <netinet/ip_fil_compat.h> header file. */
|
||||
/* #undef HAVE_NETINET_IP_FIL_COMPAT_H */
|
||||
|
||||
/* Define if you have the <netinet/ip_fil.h> header file. */
|
||||
/* #undef HAVE_NETINET_IP_FIL_H */
|
||||
|
||||
/* Define if you have the <netinet/ip_fw.h> header file. */
|
||||
/* #undef HAVE_NETINET_IP_FW_H */
|
||||
|
||||
/* Define if you have the <net/bpf.h> header file. */
|
||||
/* #undef HAVE_NET_BPF_H */
|
||||
|
||||
/* Define if you have the <net/if_arp.h> header file. */
|
||||
#define HAVE_NET_IF_ARP_H 1
|
||||
|
||||
/* Define if you have the <net/if_dl.h> header file. */
|
||||
/* #undef HAVE_NET_IF_DL_H */
|
||||
|
||||
/* Define if you have the <net/if.h> header file. */
|
||||
#define HAVE_NET_IF_H 1
|
||||
|
||||
/* Define if you have the <net/if_tun.h> header file. */
|
||||
/* #undef HAVE_NET_IF_TUN_H */
|
||||
|
||||
/* Define if you have the <net/if_var.h> header file. */
|
||||
/* #undef HAVE_NET_IF_VAR_H */
|
||||
|
||||
/* Define if you have the <net/pfilt.h> header file. */
|
||||
/* #undef HAVE_NET_PFILT_H */
|
||||
|
||||
/* Define if you have the <net/pfvar.h> header file. */
|
||||
/* #undef HAVE_NET_PFVAR_H */
|
||||
|
||||
/* Define if you have the <net/radix.h> header file. */
|
||||
/* #undef HAVE_NET_RADIX_H */
|
||||
|
||||
/* Define if you have the <net/raw.h> header file. */
|
||||
/* #undef HAVE_NET_RAW_H */
|
||||
|
||||
/* Define if you have the <net/route.h> header file. */
|
||||
#define HAVE_NET_ROUTE_H 1
|
||||
|
||||
/* Define if you have cooked raw IP sockets. */
|
||||
/* #undef HAVE_RAWIP_COOKED */
|
||||
|
||||
/* Define if raw IP sockets require host byte ordering for ip_off, ip_len. */
|
||||
/* #undef HAVE_RAWIP_HOST_OFFLEN */
|
||||
|
||||
/* Define if <net/route.h> has rt_msghdr struct. */
|
||||
/* #undef HAVE_ROUTE_RT_MSGHDR */
|
||||
|
||||
/* Define if <netinet/in.h> has sockaddr_in6 struct. */
|
||||
#define HAVE_SOCKADDR_IN6 1
|
||||
|
||||
/* Define if sockaddr struct has sa_len. */
|
||||
/* #undef HAVE_SOCKADDR_SA_LEN */
|
||||
|
||||
/* Define if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define if you have SNMP MIB2 STREAMS. */
|
||||
/* #undef HAVE_STREAMS_MIB2 */
|
||||
|
||||
/* Define if you have route(7) STREAMS. */
|
||||
/* #undef HAVE_STREAMS_ROUTE */
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#define HAVE_STRINGS_H 1
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define if you have the `strlcat' function. */
|
||||
/* #undef HAVE_STRLCAT */
|
||||
|
||||
/* Define if you have the `strlcpy' function. */
|
||||
/* #undef HAVE_STRLCPY */
|
||||
|
||||
/* Define if you have the <stropts.h> header file. */
|
||||
#define HAVE_STROPTS_H 1
|
||||
|
||||
/* Define if you have the `strsep' function. */
|
||||
#define HAVE_STRSEP 1
|
||||
|
||||
/* Define if you have the <sys/bufmod.h> header file. */
|
||||
/* #undef HAVE_SYS_BUFMOD_H */
|
||||
|
||||
/* Define if you have the <sys/dlpihdr.h> header file. */
|
||||
/* #undef HAVE_SYS_DLPIHDR_H */
|
||||
|
||||
/* Define if you have the <sys/dlpi_ext.h> header file. */
|
||||
/* #undef HAVE_SYS_DLPI_EXT_H */
|
||||
|
||||
/* Define if you have the <sys/dlpi.h> header file. */
|
||||
/* #undef HAVE_SYS_DLPI_H */
|
||||
|
||||
/* Define if you have the <sys/ioctl.h> header file. */
|
||||
#define HAVE_SYS_IOCTL_H 1
|
||||
|
||||
/* Define if you have the <sys/mib.h> header file. */
|
||||
/* #undef HAVE_SYS_MIB_H */
|
||||
|
||||
/* Define if you have the <sys/ndd_var.h> header file. */
|
||||
/* #undef HAVE_SYS_NDD_VAR_H */
|
||||
|
||||
/* Define if you have the <sys/socket.h> header file. */
|
||||
#define HAVE_SYS_SOCKET_H 1
|
||||
|
||||
/* Define if you have the <sys/sockio.h> header file. */
|
||||
/* #undef HAVE_SYS_SOCKIO_H */
|
||||
|
||||
/* Define if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define if you have the <sys/sysctl.h> header file. */
|
||||
#define HAVE_SYS_SYSCTL_H 1
|
||||
|
||||
/* Define if you have the <sys/time.h> header file. */
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
|
||||
/* Define if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define if you have the <winsock2.h> header file. */
|
||||
/* #undef HAVE_WINSOCK2_H */
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "libdnet"
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "1.10"
|
||||
|
||||
/* Define for faster code generation. */
|
||||
/* #undef WIN32_LEAN_AND_MEAN */
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
/* #undef const */
|
||||
|
||||
/* Define as `__inline' if that's what the C compiler calls it, or to nothing
|
||||
if it is not supported. */
|
||||
/* #undef inline */
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
/* #undef pid_t */
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||
/* #undef size_t */
|
||||
|
||||
/* Use MingW32's internal snprintf */
|
||||
/* #undef snprintf */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef __svr4__
|
||||
# define BSD_COMP 1
|
||||
#endif
|
||||
|
||||
#if defined(__osf__) && !defined(_SOCKADDR_LEN)
|
||||
# define _SOCKADDR_LEN 1
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_INET_PTON
|
||||
int inet_pton(int, const char *, void *);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCAT
|
||||
int strlcat(char *, const char *, int);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
int strlcpy(char *, const char *, int);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRSEP
|
||||
char *strsep(char **, const char *);
|
||||
#endif
|
||||
277
libdnet-stripped/include/config.h.in
Normal file
277
libdnet-stripped/include/config.h.in
Normal file
@@ -0,0 +1,277 @@
|
||||
/* include/config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define if arpreq struct has arp_dev. */
|
||||
#undef HAVE_ARPREQ_ARP_DEV
|
||||
|
||||
/* Define if you have the Berkeley Packet Filter. */
|
||||
#undef HAVE_BSD_BPF
|
||||
|
||||
/* Define if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define if you have the `err' function. */
|
||||
#undef HAVE_ERR
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define if you have the <hpsecurity.h> header file. */
|
||||
#undef HAVE_HPSECURITY_H
|
||||
|
||||
/* Define if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have arp(7) ioctls. */
|
||||
#undef HAVE_IOCTL_ARP
|
||||
|
||||
/* Define if you have the <Iphlpapi.h> header file. */
|
||||
#undef HAVE_IPHLPAPI_H
|
||||
|
||||
/* Define if you have the <ip_compat.h> header file. */
|
||||
#undef HAVE_IP_COMPAT_H
|
||||
|
||||
/* Define if you have the <ip_fil_compat.h> header file. */
|
||||
#undef HAVE_IP_FIL_COMPAT_H
|
||||
|
||||
/* Define if you have the <ip_fil.h> header file. */
|
||||
#undef HAVE_IP_FIL_H
|
||||
|
||||
/* Define if you have the `iphlpapi' library (-liphlpapi). */
|
||||
#undef HAVE_LIBIPHLPAPI
|
||||
|
||||
/* Define if you have the `nm' library (-lnm). */
|
||||
#undef HAVE_LIBNM
|
||||
|
||||
/* Define if you have the `nsl' library (-lnsl). */
|
||||
#undef HAVE_LIBNSL
|
||||
|
||||
/* Define if you have the `resolv' library (-lresolv). */
|
||||
#undef HAVE_LIBRESOLV
|
||||
|
||||
/* Define if you have the `socket' library (-lsocket). */
|
||||
#undef HAVE_LIBSOCKET
|
||||
|
||||
/* Define if you have the `str' library (-lstr). */
|
||||
#undef HAVE_LIBSTR
|
||||
|
||||
/* Define if you have the `ws2_32' library (-lws2_32). */
|
||||
#undef HAVE_LIBWS2_32
|
||||
|
||||
/* Define if you have the <linux/if_tun.h> header file. */
|
||||
#undef HAVE_LINUX_IF_TUN_H
|
||||
|
||||
/* Define if you have the <linux/ip_fwchains.h> header file. */
|
||||
#undef HAVE_LINUX_IP_FWCHAINS_H
|
||||
|
||||
/* Define if you have the <linux/ip_fw.h> header file. */
|
||||
#undef HAVE_LINUX_IP_FW_H
|
||||
|
||||
/* Define if you have the <linux/netfilter_ipv4/ipchains_core.h> header file.
|
||||
*/
|
||||
#undef HAVE_LINUX_NETFILTER_IPV4_IPCHAINS_CORE_H
|
||||
|
||||
/* Define if you have Linux PF_PACKET sockets. */
|
||||
#undef HAVE_LINUX_PF_PACKET
|
||||
|
||||
/* Define if you have the Linux /proc filesystem. */
|
||||
#undef HAVE_LINUX_PROCFS
|
||||
|
||||
/* Define if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define if you have the <netinet/in_var.h> header file. */
|
||||
#undef HAVE_NETINET_IN_VAR_H
|
||||
|
||||
/* Define if you have the <netinet/ip_compat.h> header file. */
|
||||
#undef HAVE_NETINET_IP_COMPAT_H
|
||||
|
||||
/* Define if you have the <netinet/ip_fil_compat.h> header file. */
|
||||
#undef HAVE_NETINET_IP_FIL_COMPAT_H
|
||||
|
||||
/* Define if you have the <netinet/ip_fil.h> header file. */
|
||||
#undef HAVE_NETINET_IP_FIL_H
|
||||
|
||||
/* Define if you have the <netinet/ip_fw.h> header file. */
|
||||
#undef HAVE_NETINET_IP_FW_H
|
||||
|
||||
/* Define if you have the <net/bpf.h> header file. */
|
||||
#undef HAVE_NET_BPF_H
|
||||
|
||||
/* Define if you have the <net/if_arp.h> header file. */
|
||||
#undef HAVE_NET_IF_ARP_H
|
||||
|
||||
/* Define if you have the <net/if_dl.h> header file. */
|
||||
#undef HAVE_NET_IF_DL_H
|
||||
|
||||
/* Define if you have the <net/if.h> header file. */
|
||||
#undef HAVE_NET_IF_H
|
||||
|
||||
/* Define if you have the <net/if_tun.h> header file. */
|
||||
#undef HAVE_NET_IF_TUN_H
|
||||
|
||||
/* Define if you have the <net/if_var.h> header file. */
|
||||
#undef HAVE_NET_IF_VAR_H
|
||||
|
||||
/* Define if you have the <net/pfilt.h> header file. */
|
||||
#undef HAVE_NET_PFILT_H
|
||||
|
||||
/* Define if you have the <net/pfvar.h> header file. */
|
||||
#undef HAVE_NET_PFVAR_H
|
||||
|
||||
/* Define if you have the <net/radix.h> header file. */
|
||||
#undef HAVE_NET_RADIX_H
|
||||
|
||||
/* Define if you have the <net/raw.h> header file. */
|
||||
#undef HAVE_NET_RAW_H
|
||||
|
||||
/* Define if you have the <net/route.h> header file. */
|
||||
#undef HAVE_NET_ROUTE_H
|
||||
|
||||
/* Define if you have cooked raw IP sockets. */
|
||||
#undef HAVE_RAWIP_COOKED
|
||||
|
||||
/* Define if raw IP sockets require host byte ordering for ip_off, ip_len. */
|
||||
#undef HAVE_RAWIP_HOST_OFFLEN
|
||||
|
||||
/* Define if <net/route.h> has rt_msghdr struct. */
|
||||
#undef HAVE_ROUTE_RT_MSGHDR
|
||||
|
||||
/* Define if <netinet/in.h> has sockaddr_in6 struct. */
|
||||
#undef HAVE_SOCKADDR_IN6
|
||||
|
||||
/* Define if sockaddr struct has sa_len. */
|
||||
#undef HAVE_SOCKADDR_SA_LEN
|
||||
|
||||
/* Define if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define if you have SNMP MIB2 STREAMS. */
|
||||
#undef HAVE_STREAMS_MIB2
|
||||
|
||||
/* Define if you have route(7) STREAMS. */
|
||||
#undef HAVE_STREAMS_ROUTE
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have the `strlcat' function. */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define if you have the `strlcpy' function. */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define if you have the <stropts.h> header file. */
|
||||
#undef HAVE_STROPTS_H
|
||||
|
||||
/* Define if you have the `strsep' function. */
|
||||
#undef HAVE_STRSEP
|
||||
|
||||
/* Define if you have the <sys/bufmod.h> header file. */
|
||||
#undef HAVE_SYS_BUFMOD_H
|
||||
|
||||
/* Define if you have the <sys/dlpihdr.h> header file. */
|
||||
#undef HAVE_SYS_DLPIHDR_H
|
||||
|
||||
/* Define if you have the <sys/dlpi_ext.h> header file. */
|
||||
#undef HAVE_SYS_DLPI_EXT_H
|
||||
|
||||
/* Define if you have the <sys/dlpi.h> header file. */
|
||||
#undef HAVE_SYS_DLPI_H
|
||||
|
||||
/* Define if you have the <sys/ioctl.h> header file. */
|
||||
#undef HAVE_SYS_IOCTL_H
|
||||
|
||||
/* Define if you have the <sys/mib.h> header file. */
|
||||
#undef HAVE_SYS_MIB_H
|
||||
|
||||
/* Define if you have the <sys/ndd_var.h> header file. */
|
||||
#undef HAVE_SYS_NDD_VAR_H
|
||||
|
||||
/* Define if you have the <sys/socket.h> header file. */
|
||||
#undef HAVE_SYS_SOCKET_H
|
||||
|
||||
/* Define if you have the <sys/sockio.h> header file. */
|
||||
#undef HAVE_SYS_SOCKIO_H
|
||||
|
||||
/* Define if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define if you have the <sys/sysctl.h> header file. */
|
||||
#undef HAVE_SYS_SYSCTL_H
|
||||
|
||||
/* Define if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
/* Define if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the <winsock2.h> header file. */
|
||||
#undef HAVE_WINSOCK2_H
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define for faster code generation. */
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Define as `__inline' if that's what the C compiler calls it, or to nothing
|
||||
if it is not supported. */
|
||||
#undef inline
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef pid_t
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
/* Use MingW32's internal snprintf */
|
||||
#undef snprintf
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_WINSOCK2_H
|
||||
# include <winsock2.h>
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef __svr4__
|
||||
# define BSD_COMP 1
|
||||
#endif
|
||||
|
||||
#if defined(__osf__) && !defined(_SOCKADDR_LEN)
|
||||
# define _SOCKADDR_LEN 1
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_INET_PTON
|
||||
int inet_pton(int, const char *, void *);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCAT
|
||||
int strlcat(char *, const char *, int);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRLCPY
|
||||
int strlcpy(char *, const char *, int);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRSEP
|
||||
char *strsep(char **, const char *);
|
||||
#endif
|
||||
31
libdnet-stripped/include/dnet.h
Normal file
31
libdnet-stripped/include/dnet.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* dnet.h
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: dnet.h,v 1.6 2004/09/10 03:10:01 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_H
|
||||
#define DNET_H
|
||||
|
||||
#include <dnet/os.h>
|
||||
|
||||
#include <dnet/eth.h>
|
||||
#include <dnet/ip.h>
|
||||
#include <dnet/ip6.h>
|
||||
#include <dnet/addr.h>
|
||||
#include <dnet/arp.h>
|
||||
#include <dnet/icmp.h>
|
||||
#include <dnet/tcp.h>
|
||||
#include <dnet/udp.h>
|
||||
|
||||
#include <dnet/intf.h>
|
||||
#include <dnet/route.h>
|
||||
#include <dnet/fw.h>
|
||||
#include <dnet/tun.h>
|
||||
|
||||
#include <dnet/blob.h>
|
||||
#include <dnet/rand.h>
|
||||
|
||||
#endif /* DNET_H */
|
||||
413
libdnet-stripped/include/dnet/Makefile
Normal file
413
libdnet-stripped/include/dnet/Makefile
Normal file
@@ -0,0 +1,413 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# include/dnet/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ../..
|
||||
|
||||
pkgdatadir = $(datadir)/libdnet
|
||||
pkglibdir = $(libdir)/libdnet
|
||||
pkgincludedir = $(includedir)/libdnet
|
||||
top_builddir = ../..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
DIST_COMMON = $(dnetinclude_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(top_srcdir)/Makefile.am.common
|
||||
subdir = include/dnet
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(dnetincludedir)"
|
||||
dnetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(dnetinclude_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run tar
|
||||
AR = ar
|
||||
AUTOCONF = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=none
|
||||
CFLAGS = -g -O2 -Wall
|
||||
CHECKINC =
|
||||
CHECKLIB =
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=none
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = grep -E
|
||||
EXEEXT =
|
||||
F77 = g77
|
||||
FFLAGS = -g -O2
|
||||
HAVE_CHECK_FALSE =
|
||||
HAVE_CHECK_TRUE = #
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS = strlcat$U.o strlcpy$U.o arp-ioctl$U.o eth-linux$U.o fw-ipchains$U.o intf$U.o ip$U.o route-linux$U.o tun-linux$U.o
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS = strlcat$U.lo strlcpy$U.lo arp-ioctl$U.lo eth-linux$U.lo fw-ipchains$U.lo intf$U.lo ip$U.lo route-linux$U.lo tun-linux$U.lo
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run makeinfo
|
||||
OBJEXT = o
|
||||
PACKAGE = libdnet
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME =
|
||||
PACKAGE_STRING =
|
||||
PACKAGE_TARNAME =
|
||||
PACKAGE_VERSION =
|
||||
PATH_SEPARATOR = :
|
||||
PYTHON =
|
||||
PYTHON_FALSE =
|
||||
PYTHON_TRUE = #
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
TCLINC =
|
||||
TCLLIB =
|
||||
TCL_FALSE =
|
||||
TCL_TRUE = #
|
||||
VERSION = 1.10
|
||||
ac_aux_dir = config
|
||||
ac_ct_AR = ar
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 = g77
|
||||
ac_ct_RANLIB = ranlib
|
||||
ac_ct_STRIP = strip
|
||||
am__fastdepCC_FALSE =
|
||||
am__fastdepCC_TRUE = #
|
||||
am__fastdepCXX_FALSE =
|
||||
am__fastdepCXX_TRUE = #
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${prefix}/share
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${prefix}/info
|
||||
install_sh = /home/fyodor/nmap/libdnet-stripped/config/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${prefix}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
dnetincludedir = $(includedir)/dnet
|
||||
dnetinclude_HEADERS = addr.h arp.h blob.h eth.h fw.h icmp.h intf.h ip.h \
|
||||
ip6.h os.h rand.h route.h tcp.h tun.h udp.h
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/dnet/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign include/dnet/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-dnetincludeHEADERS: $(dnetinclude_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(dnetincludedir)" || $(mkdir_p) "$(DESTDIR)$(dnetincludedir)"
|
||||
@list='$(dnetinclude_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(dnetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(dnetincludedir)/$$f'"; \
|
||||
$(dnetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(dnetincludedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-dnetincludeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(dnetinclude_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(dnetincludedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(dnetincludedir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/../..
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(dnetincludedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-dnetincludeHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-dnetincludeHEADERS uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool ctags distclean distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dnetincludeHEADERS install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-dnetincludeHEADERS \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
8
libdnet-stripped/include/dnet/Makefile.am
Normal file
8
libdnet-stripped/include/dnet/Makefile.am
Normal file
@@ -0,0 +1,8 @@
|
||||
## $Id: Makefile.am,v 1.5 2004/09/10 02:35:51 dugsong Exp $
|
||||
|
||||
include $(top_srcdir)/Makefile.am.common
|
||||
|
||||
dnetincludedir = $(includedir)/dnet
|
||||
|
||||
dnetinclude_HEADERS = addr.h arp.h blob.h eth.h fw.h icmp.h intf.h ip.h \
|
||||
ip6.h os.h rand.h route.h tcp.h tun.h udp.h
|
||||
413
libdnet-stripped/include/dnet/Makefile.in
Normal file
413
libdnet-stripped/include/dnet/Makefile.in
Normal file
@@ -0,0 +1,413 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = $(dnetinclude_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(top_srcdir)/Makefile.am.common
|
||||
subdir = include/dnet
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(dnetincludedir)"
|
||||
dnetincludeHEADERS_INSTALL = $(INSTALL_HEADER)
|
||||
HEADERS = $(dnetinclude_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHECKINC = @CHECKINC@
|
||||
CHECKLIB = @CHECKLIB@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
HAVE_CHECK_FALSE = @HAVE_CHECK_FALSE@
|
||||
HAVE_CHECK_TRUE = @HAVE_CHECK_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_FALSE = @PYTHON_FALSE@
|
||||
PYTHON_TRUE = @PYTHON_TRUE@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TCLINC = @TCLINC@
|
||||
TCLLIB = @TCLLIB@
|
||||
TCL_FALSE = @TCL_FALSE@
|
||||
TCL_TRUE = @TCL_TRUE@
|
||||
VERSION = @VERSION@
|
||||
ac_aux_dir = @ac_aux_dir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
dnetincludedir = $(includedir)/dnet
|
||||
dnetinclude_HEADERS = addr.h arp.h blob.h eth.h fw.h icmp.h intf.h ip.h \
|
||||
ip6.h os.h rand.h route.h tcp.h tun.h udp.h
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/dnet/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign include/dnet/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-dnetincludeHEADERS: $(dnetinclude_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(dnetincludedir)" || $(mkdir_p) "$(DESTDIR)$(dnetincludedir)"
|
||||
@list='$(dnetinclude_HEADERS)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(dnetincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(dnetincludedir)/$$f'"; \
|
||||
$(dnetincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(dnetincludedir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-dnetincludeHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(dnetinclude_HEADERS)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(dnetincludedir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(dnetincludedir)/$$f"; \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/../..
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(dnetincludedir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-dnetincludeHEADERS
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-dnetincludeHEADERS uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool ctags distclean distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dnetincludeHEADERS install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-dnetincludeHEADERS \
|
||||
uninstall-info-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
67
libdnet-stripped/include/dnet/addr.h
Normal file
67
libdnet-stripped/include/dnet/addr.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* addr.h
|
||||
*
|
||||
* Network address operations.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: addr.h,v 1.12 2003/02/27 03:44:55 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_ADDR_H
|
||||
#define DNET_ADDR_H
|
||||
|
||||
#define ADDR_TYPE_NONE 0 /* No address set */
|
||||
#define ADDR_TYPE_ETH 1 /* Ethernet */
|
||||
#define ADDR_TYPE_IP 2 /* Internet Protocol v4 */
|
||||
#define ADDR_TYPE_IP6 3 /* Internet Protocol v6 */
|
||||
|
||||
struct addr {
|
||||
uint16_t addr_type;
|
||||
uint16_t addr_bits;
|
||||
union {
|
||||
eth_addr_t __eth;
|
||||
ip_addr_t __ip;
|
||||
ip6_addr_t __ip6;
|
||||
|
||||
uint8_t __data8[16];
|
||||
uint16_t __data16[8];
|
||||
uint32_t __data32[4];
|
||||
} __addr_u;
|
||||
};
|
||||
#define addr_eth __addr_u.__eth
|
||||
#define addr_ip __addr_u.__ip
|
||||
#define addr_ip6 __addr_u.__ip6
|
||||
#define addr_data8 __addr_u.__data8
|
||||
#define addr_data16 __addr_u.__data16
|
||||
#define addr_data32 __addr_u.__data32
|
||||
|
||||
#define addr_pack(addr, type, bits, data, len) do { \
|
||||
(addr)->addr_type = type; \
|
||||
(addr)->addr_bits = bits; \
|
||||
memmove((addr)->addr_data8, (char *)data, len); \
|
||||
} while (0)
|
||||
|
||||
__BEGIN_DECLS
|
||||
int addr_cmp(const struct addr *a, const struct addr *b);
|
||||
|
||||
int addr_bcast(const struct addr *a, struct addr *b);
|
||||
int addr_net(const struct addr *a, struct addr *b);
|
||||
|
||||
char *addr_ntop(const struct addr *src, char *dst, size_t size);
|
||||
int addr_pton(const char *src, struct addr *dst);
|
||||
|
||||
char *addr_ntoa(const struct addr *a);
|
||||
#define addr_aton addr_pton
|
||||
|
||||
int addr_ntos(const struct addr *a, struct sockaddr *sa);
|
||||
int addr_ston(const struct sockaddr *sa, struct addr *a);
|
||||
|
||||
int addr_btos(uint16_t bits, struct sockaddr *sa);
|
||||
int addr_stob(const struct sockaddr *sa, uint16_t *bits);
|
||||
|
||||
int addr_btom(uint16_t bits, void *mask, size_t size);
|
||||
int addr_mtob(const void *mask, size_t size, uint16_t *bits);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_ADDR_H */
|
||||
103
libdnet-stripped/include/dnet/arp.h
Normal file
103
libdnet-stripped/include/dnet/arp.h
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* arp.h
|
||||
*
|
||||
* Address Resolution Protocol.
|
||||
* RFC 826
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: arp.h,v 1.12 2003/03/16 17:39:17 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_ARP_H
|
||||
#define DNET_ARP_H
|
||||
|
||||
#define ARP_HDR_LEN 8 /* base ARP header length */
|
||||
#define ARP_ETHIP_LEN 20 /* base ARP message length */
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x)
|
||||
# pragma pack(1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ARP header
|
||||
*/
|
||||
struct arp_hdr {
|
||||
uint16_t ar_hrd; /* format of hardware address */
|
||||
uint16_t ar_pro; /* format of protocol address */
|
||||
uint8_t ar_hln; /* length of hardware address (ETH_ADDR_LEN) */
|
||||
uint8_t ar_pln; /* length of protocol address (IP_ADDR_LEN) */
|
||||
uint16_t ar_op; /* operation */
|
||||
};
|
||||
|
||||
/*
|
||||
* Hardware address format
|
||||
*/
|
||||
#define ARP_HRD_ETH 0x0001 /* ethernet hardware */
|
||||
#define ARP_HRD_IEEE802 0x0006 /* IEEE 802 hardware */
|
||||
|
||||
/*
|
||||
* Protocol address format
|
||||
*/
|
||||
#define ARP_PRO_IP 0x0800 /* IP protocol */
|
||||
|
||||
/*
|
||||
* ARP operation
|
||||
*/
|
||||
#define ARP_OP_REQUEST 1 /* request to resolve ha given pa */
|
||||
#define ARP_OP_REPLY 2 /* response giving hardware address */
|
||||
#define ARP_OP_REVREQUEST 3 /* request to resolve pa given ha */
|
||||
#define ARP_OP_REVREPLY 4 /* response giving protocol address */
|
||||
|
||||
/*
|
||||
* Ethernet/IP ARP message
|
||||
*/
|
||||
struct arp_ethip {
|
||||
uint8_t ar_sha[ETH_ADDR_LEN]; /* sender hardware address */
|
||||
uint8_t ar_spa[IP_ADDR_LEN]; /* sender protocol address */
|
||||
uint8_t ar_tha[ETH_ADDR_LEN]; /* target hardware address */
|
||||
uint8_t ar_tpa[IP_ADDR_LEN]; /* target protocol address */
|
||||
};
|
||||
|
||||
/*
|
||||
* ARP cache entry
|
||||
*/
|
||||
struct arp_entry {
|
||||
struct addr arp_pa; /* protocol address */
|
||||
struct addr arp_ha; /* hardware address */
|
||||
};
|
||||
|
||||
#ifndef __GNUC__
|
||||
# pragma pack()
|
||||
#endif
|
||||
|
||||
#define arp_pack_hdr_ethip(hdr, op, sha, spa, tha, tpa) do { \
|
||||
struct arp_hdr *pack_arp_p = (struct arp_hdr *)(hdr); \
|
||||
struct arp_ethip *pack_ethip_p = (struct arp_ethip *) \
|
||||
((uint8_t *)(hdr) + ARP_HDR_LEN); \
|
||||
pack_arp_p->ar_hrd = htons(ARP_HRD_ETH); \
|
||||
pack_arp_p->ar_pro = htons(ARP_PRO_IP); \
|
||||
pack_arp_p->ar_hln = ETH_ADDR_LEN; \
|
||||
pack_arp_p->ar_pln = IP_ADDR_LEN; \
|
||||
pack_arp_p->ar_op = htons(op); \
|
||||
memmove(pack_ethip_p->ar_sha, &(sha), ETH_ADDR_LEN); \
|
||||
memmove(pack_ethip_p->ar_spa, &(spa), IP_ADDR_LEN); \
|
||||
memmove(pack_ethip_p->ar_tha, &(tha), ETH_ADDR_LEN); \
|
||||
memmove(pack_ethip_p->ar_tpa, &(tpa), IP_ADDR_LEN); \
|
||||
} while (0)
|
||||
|
||||
typedef struct arp_handle arp_t;
|
||||
|
||||
typedef int (*arp_handler)(const struct arp_entry *entry, void *arg);
|
||||
|
||||
__BEGIN_DECLS
|
||||
arp_t *arp_open(void);
|
||||
int arp_add(arp_t *arp, const struct arp_entry *entry);
|
||||
int arp_delete(arp_t *arp, const struct arp_entry *entry);
|
||||
int arp_get(arp_t *arp, struct arp_entry *entry);
|
||||
int arp_loop(arp_t *arp, arp_handler callback, void *arg);
|
||||
arp_t *arp_close(arp_t *arp);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_ARP_H */
|
||||
56
libdnet-stripped/include/dnet/blob.h
Normal file
56
libdnet-stripped/include/dnet/blob.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* blob.h
|
||||
*
|
||||
* Binary blob handling.
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: blob.h,v 1.2 2002/04/05 03:06:44 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_BLOB_H
|
||||
#define DNET_BLOB_H
|
||||
|
||||
typedef struct blob {
|
||||
u_char *base; /* start of data */
|
||||
int off; /* offset into data */
|
||||
int end; /* end of data */
|
||||
int size; /* size of allocation */
|
||||
} blob_t;
|
||||
|
||||
__BEGIN_DECLS
|
||||
blob_t *blob_new(void);
|
||||
|
||||
int blob_read(blob_t *b, void *buf, int len);
|
||||
int blob_write(blob_t *b, const void *buf, int len);
|
||||
|
||||
int blob_seek(blob_t *b, int off, int whence);
|
||||
#define blob_skip(b, l) blob_seek(b, l, SEEK_CUR)
|
||||
#define blob_rewind(b) blob_seek(b, 0, SEEK_SET)
|
||||
|
||||
#define blob_offset(b) ((b)->off)
|
||||
#define blob_left(b) ((b)->end - (b)->off)
|
||||
|
||||
int blob_index(blob_t *b, const void *buf, int len);
|
||||
int blob_rindex(blob_t *b, const void *buf, int len);
|
||||
|
||||
int blob_pack(blob_t *b, const char *fmt, ...);
|
||||
int blob_unpack(blob_t *b, const char *fmt, ...);
|
||||
|
||||
int blob_insert(blob_t *b, const void *buf, int len);
|
||||
int blob_delete(blob_t *b, void *buf, int len);
|
||||
|
||||
int blob_print(blob_t *b, char *style, int len);
|
||||
|
||||
blob_t *blob_free(blob_t *b);
|
||||
|
||||
int blob_register_alloc(size_t size, void *(*bmalloc)(size_t),
|
||||
void (*bfree)(void *), void *(*brealloc)(void *, size_t));
|
||||
#ifdef va_start
|
||||
typedef int (*blob_fmt_cb)(int pack, int len, blob_t *b, va_list *arg);
|
||||
|
||||
int blob_register_pack(char c, blob_fmt_cb fmt_cb);
|
||||
#endif
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_BLOB_H */
|
||||
77
libdnet-stripped/include/dnet/eth.h
Normal file
77
libdnet-stripped/include/dnet/eth.h
Normal file
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* eth.h
|
||||
*
|
||||
* Ethernet.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth.h,v 1.16 2005/01/25 21:29:12 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_ETH_H
|
||||
#define DNET_ETH_H
|
||||
|
||||
#define ETH_ADDR_LEN 6
|
||||
#define ETH_ADDR_BITS 48
|
||||
#define ETH_TYPE_LEN 2
|
||||
#define ETH_CRC_LEN 4
|
||||
#define ETH_HDR_LEN 14
|
||||
|
||||
#define ETH_LEN_MIN 64 /* minimum frame length with CRC */
|
||||
#define ETH_LEN_MAX 1518 /* maximum frame length with CRC */
|
||||
|
||||
#define ETH_MTU (ETH_LEN_MAX - ETH_HDR_LEN - ETH_CRC_LEN)
|
||||
#define ETH_MIN (ETH_LEN_MIN - ETH_HDR_LEN - ETH_CRC_LEN)
|
||||
|
||||
typedef struct eth_addr {
|
||||
uint8_t data[ETH_ADDR_LEN];
|
||||
} eth_addr_t;
|
||||
|
||||
struct eth_hdr {
|
||||
eth_addr_t eth_dst; /* destination address */
|
||||
eth_addr_t eth_src; /* source address */
|
||||
uint16_t eth_type; /* payload type */
|
||||
};
|
||||
|
||||
/*
|
||||
* Ethernet payload types - http://standards.ieee.org/regauth/ethertype
|
||||
*/
|
||||
#define ETH_TYPE_PUP 0x0200 /* PUP protocol */
|
||||
#define ETH_TYPE_IP 0x0800 /* IP protocol */
|
||||
#define ETH_TYPE_ARP 0x0806 /* address resolution protocol */
|
||||
#define ETH_TYPE_REVARP 0x8035 /* reverse addr resolution protocol */
|
||||
#define ETH_TYPE_8021Q 0x8100 /* IEEE 802.1Q VLAN tagging */
|
||||
#define ETH_TYPE_IPV6 0x86DD /* IPv6 protocol */
|
||||
#define ETH_TYPE_MPLS 0x8847 /* MPLS */
|
||||
#define ETH_TYPE_MPLS_MCAST 0x8848 /* MPLS Multicast */
|
||||
#define ETH_TYPE_PPPOEDISC 0x8863 /* PPP Over Ethernet Discovery Stage */
|
||||
#define ETH_TYPE_PPPOE 0x8864 /* PPP Over Ethernet Session Stage */
|
||||
#define ETH_TYPE_LOOPBACK 0x9000 /* used to test interfaces */
|
||||
|
||||
#define ETH_IS_MULTICAST(ea) (*(ea) & 0x01) /* is address mcast/bcast? */
|
||||
|
||||
#define ETH_ADDR_BROADCAST "\xff\xff\xff\xff\xff\xff"
|
||||
|
||||
#define eth_pack_hdr(h, dst, src, type) do { \
|
||||
struct eth_hdr *eth_pack_p = (struct eth_hdr *)(h); \
|
||||
memmove(ð_pack_p->eth_dst, &(dst), ETH_ADDR_LEN); \
|
||||
memmove(ð_pack_p->eth_src, &(src), ETH_ADDR_LEN); \
|
||||
eth_pack_p->eth_type = htons(type); \
|
||||
} while (0)
|
||||
|
||||
typedef struct eth_handle eth_t;
|
||||
|
||||
__BEGIN_DECLS
|
||||
eth_t *eth_open(const char *device);
|
||||
int eth_get(eth_t *e, eth_addr_t *ea);
|
||||
int eth_set(eth_t *e, const eth_addr_t *ea);
|
||||
ssize_t eth_send(eth_t *e, const void *buf, size_t len);
|
||||
eth_t *eth_close(eth_t *e);
|
||||
|
||||
char *eth_ntop(const eth_addr_t *eth, char *dst, size_t len);
|
||||
int eth_pton(const char *src, eth_addr_t *dst);
|
||||
char *eth_ntoa(const eth_addr_t *eth);
|
||||
#define eth_aton eth_pton
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_ETH_H */
|
||||
54
libdnet-stripped/include/dnet/fw.h
Normal file
54
libdnet-stripped/include/dnet/fw.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* fw.h
|
||||
*
|
||||
* Network firewalling operations.
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: fw.h,v 1.13 2002/12/14 04:02:36 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_FW_H
|
||||
#define DNET_FW_H
|
||||
|
||||
struct fw_rule {
|
||||
char fw_device[INTF_NAME_LEN]; /* interface name */
|
||||
uint8_t fw_op; /* operation */
|
||||
uint8_t fw_dir; /* direction */
|
||||
uint8_t fw_proto; /* IP protocol */
|
||||
struct addr fw_src; /* src address / net */
|
||||
struct addr fw_dst; /* dst address / net */
|
||||
uint16_t fw_sport[2]; /* range / ICMP type */
|
||||
uint16_t fw_dport[2]; /* range / ICMP code */
|
||||
};
|
||||
|
||||
#define FW_OP_ALLOW 1
|
||||
#define FW_OP_BLOCK 2
|
||||
|
||||
#define FW_DIR_IN 1
|
||||
#define FW_DIR_OUT 2
|
||||
|
||||
#define fw_pack_rule(rule, dev, op, dir, p, s, d, sp1, sp2, dp1, dp2) \
|
||||
do { \
|
||||
strlcpy((rule)->fw_device, dev, sizeof((rule)->fw_device)); \
|
||||
(rule)->fw_op = op; (rule)->fw_dir = dir; \
|
||||
(rule)->fw_proto = p; \
|
||||
memmove(&(rule)->fw_src, &(s), sizeof((rule)->fw_src)); \
|
||||
memmove(&(rule)->fw_dst, &(d), sizeof((rule)->fw_dst)); \
|
||||
(rule)->fw_sport[0] = sp1; (rule)->fw_sport[1] = sp2; \
|
||||
(rule)->fw_dport[0] = dp1; (rule)->fw_dport[1] = dp2; \
|
||||
} while (0)
|
||||
|
||||
typedef struct fw_handle fw_t;
|
||||
|
||||
typedef int (*fw_handler)(const struct fw_rule *rule, void *arg);
|
||||
|
||||
__BEGIN_DECLS
|
||||
fw_t *fw_open(void);
|
||||
int fw_add(fw_t *f, const struct fw_rule *rule);
|
||||
int fw_delete(fw_t *f, const struct fw_rule *rule);
|
||||
int fw_loop(fw_t *f, fw_handler callback, void *arg);
|
||||
fw_t *fw_close(fw_t *f);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_FW_H */
|
||||
265
libdnet-stripped/include/dnet/icmp.h
Normal file
265
libdnet-stripped/include/dnet/icmp.h
Normal file
@@ -0,0 +1,265 @@
|
||||
/*
|
||||
* icmp.h
|
||||
*
|
||||
* Internet Control Message Protocol.
|
||||
* RFC 792, 950, 1256, 1393, 1475, 2002, 2521
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: icmp.h,v 1.14 2003/03/16 17:39:17 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_ICMP_H
|
||||
#define DNET_ICMP_H
|
||||
|
||||
#define ICMP_HDR_LEN 4 /* base ICMP header length */
|
||||
#define ICMP_LEN_MIN 8 /* minimum ICMP message size, with header */
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x)
|
||||
# pragma pack(1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ICMP header
|
||||
*/
|
||||
struct icmp_hdr {
|
||||
uint8_t icmp_type; /* type of message, see below */
|
||||
uint8_t icmp_code; /* type sub code */
|
||||
uint16_t icmp_cksum; /* ones complement cksum of struct */
|
||||
};
|
||||
|
||||
/*
|
||||
* Types (icmp_type) and codes (icmp_code) -
|
||||
* http://www.iana.org/assignments/icmp-parameters
|
||||
*/
|
||||
#define ICMP_CODE_NONE 0 /* for types without codes */
|
||||
#define ICMP_ECHOREPLY 0 /* echo reply */
|
||||
#define ICMP_UNREACH 3 /* dest unreachable, codes: */
|
||||
#define ICMP_UNREACH_NET 0 /* bad net */
|
||||
#define ICMP_UNREACH_HOST 1 /* bad host */
|
||||
#define ICMP_UNREACH_PROTO 2 /* bad protocol */
|
||||
#define ICMP_UNREACH_PORT 3 /* bad port */
|
||||
#define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */
|
||||
#define ICMP_UNREACH_SRCFAIL 5 /* src route failed */
|
||||
#define ICMP_UNREACH_NET_UNKNOWN 6 /* unknown net */
|
||||
#define ICMP_UNREACH_HOST_UNKNOWN 7 /* unknown host */
|
||||
#define ICMP_UNREACH_ISOLATED 8 /* src host isolated */
|
||||
#define ICMP_UNREACH_NET_PROHIB 9 /* for crypto devs */
|
||||
#define ICMP_UNREACH_HOST_PROHIB 10 /* ditto */
|
||||
#define ICMP_UNREACH_TOSNET 11 /* bad tos for net */
|
||||
#define ICMP_UNREACH_TOSHOST 12 /* bad tos for host */
|
||||
#define ICMP_UNREACH_FILTER_PROHIB 13 /* prohibited access */
|
||||
#define ICMP_UNREACH_HOST_PRECEDENCE 14 /* precedence error */
|
||||
#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 /* precedence cutoff */
|
||||
#define ICMP_SRCQUENCH 4 /* packet lost, slow down */
|
||||
#define ICMP_REDIRECT 5 /* shorter route, codes: */
|
||||
#define ICMP_REDIRECT_NET 0 /* for network */
|
||||
#define ICMP_REDIRECT_HOST 1 /* for host */
|
||||
#define ICMP_REDIRECT_TOSNET 2 /* for tos and net */
|
||||
#define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */
|
||||
#define ICMP_ALTHOSTADDR 6 /* alternate host address */
|
||||
#define ICMP_ECHO 8 /* echo service */
|
||||
#define ICMP_RTRADVERT 9 /* router advertise, codes: */
|
||||
#define ICMP_RTRADVERT_NORMAL 0 /* normal */
|
||||
#define ICMP_RTRADVERT_NOROUTE_COMMON 16 /* selective routing */
|
||||
#define ICMP_RTRSOLICIT 10 /* router solicitation */
|
||||
#define ICMP_TIMEXCEED 11 /* time exceeded, code: */
|
||||
#define ICMP_TIMEXCEED_INTRANS 0 /* ttl==0 in transit */
|
||||
#define ICMP_TIMEXCEED_REASS 1 /* ttl==0 in reass */
|
||||
#define ICMP_PARAMPROB 12 /* ip header bad */
|
||||
#define ICMP_PARAMPROB_ERRATPTR 0 /* req. opt. absent */
|
||||
#define ICMP_PARAMPROB_OPTABSENT 1 /* req. opt. absent */
|
||||
#define ICMP_PARAMPROB_LENGTH 2 /* bad length */
|
||||
#define ICMP_TSTAMP 13 /* timestamp request */
|
||||
#define ICMP_TSTAMPREPLY 14 /* timestamp reply */
|
||||
#define ICMP_INFO 15 /* information request */
|
||||
#define ICMP_INFOREPLY 16 /* information reply */
|
||||
#define ICMP_MASK 17 /* address mask request */
|
||||
#define ICMP_MASKREPLY 18 /* address mask reply */
|
||||
#define ICMP_TRACEROUTE 30 /* traceroute */
|
||||
#define ICMP_DATACONVERR 31 /* data conversion error */
|
||||
#define ICMP_MOBILE_REDIRECT 32 /* mobile host redirect */
|
||||
#define ICMP_IPV6_WHEREAREYOU 33 /* IPv6 where-are-you */
|
||||
#define ICMP_IPV6_IAMHERE 34 /* IPv6 i-am-here */
|
||||
#define ICMP_MOBILE_REG 35 /* mobile registration req */
|
||||
#define ICMP_MOBILE_REGREPLY 36 /* mobile registration reply */
|
||||
#define ICMP_DNS 37 /* domain name request */
|
||||
#define ICMP_DNSREPLY 38 /* domain name reply */
|
||||
#define ICMP_SKIP 39 /* SKIP */
|
||||
#define ICMP_PHOTURIS 40 /* Photuris */
|
||||
#define ICMP_PHOTURIS_UNKNOWN_INDEX 0 /* unknown sec index */
|
||||
#define ICMP_PHOTURIS_AUTH_FAILED 1 /* auth failed */
|
||||
#define ICMP_PHOTURIS_DECOMPRESS_FAILED 2 /* decompress failed */
|
||||
#define ICMP_PHOTURIS_DECRYPT_FAILED 3 /* decrypt failed */
|
||||
#define ICMP_PHOTURIS_NEED_AUTHN 4 /* no authentication */
|
||||
#define ICMP_PHOTURIS_NEED_AUTHZ 5 /* no authorization */
|
||||
#define ICMP_TYPE_MAX 40
|
||||
|
||||
#define ICMP_INFOTYPE(type) \
|
||||
((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
|
||||
(type) == ICMP_RTRADVERT || (type) == ICMP_RTRSOLICIT || \
|
||||
(type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
|
||||
(type) == ICMP_INFO || (type) == ICMP_INFOREPLY || \
|
||||
(type) == ICMP_MASK || (type) == ICMP_MASKREPLY)
|
||||
|
||||
/*
|
||||
* Echo message data
|
||||
*/
|
||||
struct icmp_msg_echo {
|
||||
uint16_t icmp_id;
|
||||
uint16_t icmp_seq;
|
||||
uint8_t icmp_data __flexarr; /* optional data */
|
||||
};
|
||||
|
||||
/*
|
||||
* Fragmentation-needed (unreachable) message data
|
||||
*/
|
||||
struct icmp_msg_needfrag {
|
||||
uint16_t icmp_void; /* must be zero */
|
||||
uint16_t icmp_mtu; /* MTU of next-hop network */
|
||||
uint8_t icmp_ip __flexarr; /* IP hdr + 8 bytes of pkt */
|
||||
};
|
||||
|
||||
/*
|
||||
* Unreachable, source quench, redirect, time exceeded,
|
||||
* parameter problem message data
|
||||
*/
|
||||
struct icmp_msg_quote {
|
||||
uint32_t icmp_void; /* must be zero */
|
||||
#define icmp_gwaddr icmp_void /* router IP address to use */
|
||||
#define icmp_pptr icmp_void /* ptr to bad octet field */
|
||||
uint8_t icmp_ip __flexarr; /* IP hdr + 8 bytes of pkt */
|
||||
};
|
||||
|
||||
/*
|
||||
* Router advertisement message data, RFC 1256
|
||||
*/
|
||||
struct icmp_msg_rtradvert {
|
||||
uint8_t icmp_num_addrs; /* # of address / pref pairs */
|
||||
uint8_t icmp_wpa; /* words / address == 2 */
|
||||
uint16_t icmp_lifetime; /* route lifetime in seconds */
|
||||
struct icmp_msg_rtr_data {
|
||||
uint32_t icmp_void;
|
||||
#define icmp_gwaddr icmp_void /* router IP address */
|
||||
uint32_t icmp_pref; /* router preference (usu 0) */
|
||||
} icmp_rtr __flexarr; /* variable # of routers */
|
||||
};
|
||||
#define ICMP_RTR_PREF_NODEFAULT 0x80000000 /* do not use as default gw */
|
||||
|
||||
/*
|
||||
* Timestamp message data
|
||||
*/
|
||||
struct icmp_msg_tstamp {
|
||||
uint32_t icmp_id; /* identifier */
|
||||
uint32_t icmp_seq; /* sequence number */
|
||||
uint32_t icmp_ts_orig; /* originate timestamp */
|
||||
uint32_t icmp_ts_rx; /* receive timestamp */
|
||||
uint32_t icmp_ts_tx; /* transmit timestamp */
|
||||
};
|
||||
|
||||
/*
|
||||
* Address mask message data, RFC 950
|
||||
*/
|
||||
struct icmp_msg_mask {
|
||||
uint32_t icmp_id; /* identifier */
|
||||
uint32_t icmp_seq; /* sequence number */
|
||||
uint32_t icmp_mask; /* address mask */
|
||||
};
|
||||
|
||||
/*
|
||||
* Traceroute message data, RFC 1393, RFC 1812
|
||||
*/
|
||||
struct icmp_msg_traceroute {
|
||||
uint16_t icmp_id; /* identifier */
|
||||
uint16_t icmp_void; /* unused */
|
||||
uint16_t icmp_ohc; /* outbound hop count */
|
||||
uint16_t icmp_rhc; /* return hop count */
|
||||
uint32_t icmp_speed; /* link speed, bytes/sec */
|
||||
uint32_t icmp_mtu; /* MTU in bytes */
|
||||
};
|
||||
|
||||
/*
|
||||
* Domain name reply message data, RFC 1788
|
||||
*/
|
||||
struct icmp_msg_dnsreply {
|
||||
uint16_t icmp_id; /* identifier */
|
||||
uint16_t icmp_seq; /* sequence number */
|
||||
uint32_t icmp_ttl; /* time-to-live */
|
||||
uint8_t icmp_names __flexarr; /* variable number of names */
|
||||
};
|
||||
|
||||
/*
|
||||
* Generic identifier, sequence number data
|
||||
*/
|
||||
struct icmp_msg_idseq {
|
||||
uint16_t icmp_id;
|
||||
uint16_t icmp_seq;
|
||||
};
|
||||
|
||||
/*
|
||||
* ICMP message union
|
||||
*/
|
||||
union icmp_msg {
|
||||
struct icmp_msg_echo echo; /* ICMP_ECHO{REPLY} */
|
||||
struct icmp_msg_quote unreach; /* ICMP_UNREACH */
|
||||
struct icmp_msg_needfrag needfrag; /* ICMP_UNREACH_NEEDFRAG */
|
||||
struct icmp_msg_quote srcquench; /* ICMP_SRCQUENCH */
|
||||
struct icmp_msg_quote redirect; /* ICMP_REDIRECT (set to 0) */
|
||||
uint32_t rtrsolicit; /* ICMP_RTRSOLICIT */
|
||||
struct icmp_msg_rtradvert rtradvert; /* ICMP_RTRADVERT */
|
||||
struct icmp_msg_quote timexceed; /* ICMP_TIMEXCEED */
|
||||
struct icmp_msg_quote paramprob; /* ICMP_PARAMPROB */
|
||||
struct icmp_msg_tstamp tstamp; /* ICMP_TSTAMP{REPLY} */
|
||||
struct icmp_msg_idseq info; /* ICMP_INFO{REPLY} */
|
||||
struct icmp_msg_mask mask; /* ICMP_MASK{REPLY} */
|
||||
struct icmp_msg_traceroute traceroute; /* ICMP_TRACEROUTE */
|
||||
struct icmp_msg_idseq dns; /* ICMP_DNS */
|
||||
struct icmp_msg_dnsreply dnsreply; /* ICMP_DNSREPLY */
|
||||
};
|
||||
|
||||
#ifndef __GNUC__
|
||||
# pragma pack()
|
||||
#endif
|
||||
|
||||
#define icmp_pack_hdr(hdr, type, code) do { \
|
||||
struct icmp_hdr *icmp_pack_p = (struct icmp_hdr *)(hdr); \
|
||||
icmp_pack_p->icmp_type = type; icmp_pack_p->icmp_code = code; \
|
||||
} while (0)
|
||||
|
||||
#define icmp_pack_hdr_echo(hdr, type, code, id, seq, data, len) do { \
|
||||
struct icmp_msg_echo *echo_pack_p = (struct icmp_msg_echo *) \
|
||||
((uint8_t *)(hdr) + ICMP_HDR_LEN); \
|
||||
icmp_pack_hdr(hdr, type, code); \
|
||||
echo_pack_p->icmp_id = htons(id); \
|
||||
echo_pack_p->icmp_seq = htons(seq); \
|
||||
memmove(echo_pack_p->icmp_data, data, len); \
|
||||
} while (0)
|
||||
|
||||
#define icmp_pack_hdr_quote(hdr, type, code, word, pkt, len) do { \
|
||||
struct icmp_msg_quote *quote_pack_p = (struct icmp_msg_quote *) \
|
||||
((uint8_t *)(hdr) + ICMP_HDR_LEN); \
|
||||
icmp_pack_hdr(hdr, type, code); \
|
||||
quote_pack_p->icmp_void = htonl(word); \
|
||||
memmove(quote_pack_p->icmp_ip, pkt, len); \
|
||||
} while (0)
|
||||
|
||||
#define icmp_pack_hdr_mask(hdr, type, code, id, seq, mask) do { \
|
||||
struct icmp_msg_mask *mask_pack_p = (struct icmp_msg_mask *) \
|
||||
((uint8_t *)(hdr) + ICMP_HDR_LEN); \
|
||||
icmp_pack_hdr(hdr, type, code); \
|
||||
mask_pack_p->icmp_id = htons(id); \
|
||||
mask_pack_p->icmp_seq = htons(seq); \
|
||||
mask_pack_p->icmp_mask = htonl(mask); \
|
||||
} while (0)
|
||||
|
||||
#define icmp_pack_hdr_needfrag(hdr, type, code, mtu, pkt, len) do { \
|
||||
struct icmp_msg_needfrag *frag_pack_p = \
|
||||
(struct icmp_msg_needfrag *)((uint8_t *)(hdr) + ICMP_HDR_LEN); \
|
||||
icmp_pack_hdr(hdr, type, code); \
|
||||
frag_pack_p->icmp_void = 0; \
|
||||
frag_pack_p->icmp_mtu = htons(mtu); \
|
||||
memmove(frag_pack_p->icmp_ip, pkt, len); \
|
||||
} while (0)
|
||||
|
||||
#endif /* DNET_ICMP_H */
|
||||
68
libdnet-stripped/include/dnet/intf.h
Normal file
68
libdnet-stripped/include/dnet/intf.h
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* intf.c
|
||||
*
|
||||
* Network interface operations.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: intf.h,v 1.16 2004/01/13 07:41:09 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_INTF_H
|
||||
#define DNET_INTF_H
|
||||
|
||||
/*
|
||||
* Interface entry
|
||||
*/
|
||||
#define INTF_NAME_LEN 16
|
||||
|
||||
struct intf_entry {
|
||||
u_int intf_len; /* length of entry */
|
||||
char intf_name[INTF_NAME_LEN]; /* interface name */
|
||||
u_short intf_type; /* interface type (r/o) */
|
||||
u_short intf_flags; /* interface flags */
|
||||
u_int intf_mtu; /* interface MTU */
|
||||
struct addr intf_addr; /* interface address */
|
||||
struct addr intf_dst_addr; /* point-to-point dst */
|
||||
struct addr intf_link_addr; /* link-layer address */
|
||||
u_int intf_alias_num; /* number of aliases */
|
||||
struct addr intf_alias_addrs __flexarr; /* array of aliases */
|
||||
};
|
||||
|
||||
/*
|
||||
* MIB-II interface types - http://www.iana.org/assignments/ianaiftype-mib
|
||||
*/
|
||||
#define INTF_TYPE_OTHER 1 /* other */
|
||||
#define INTF_TYPE_ETH 6 /* Ethernet */
|
||||
#define INTF_TYPE_TOKENRING 9 /* Token Ring */
|
||||
#define INTF_TYPE_FDDI 15 /* FDDI */
|
||||
#define INTF_TYPE_PPP 23 /* Point-to-Point Protocol */
|
||||
#define INTF_TYPE_LOOPBACK 24 /* software loopback */
|
||||
#define INTF_TYPE_SLIP 28 /* Serial Line Interface Protocol */
|
||||
#define INTF_TYPE_TUN 53 /* proprietary virtual/internal */
|
||||
|
||||
/*
|
||||
* Interface flags
|
||||
*/
|
||||
#define INTF_FLAG_UP 0x01 /* enable interface */
|
||||
#define INTF_FLAG_LOOPBACK 0x02 /* is a loopback net (r/o) */
|
||||
#define INTF_FLAG_POINTOPOINT 0x04 /* point-to-point link (r/o) */
|
||||
#define INTF_FLAG_NOARP 0x08 /* disable ARP */
|
||||
#define INTF_FLAG_BROADCAST 0x10 /* supports broadcast (r/o) */
|
||||
#define INTF_FLAG_MULTICAST 0x20 /* supports multicast (r/o) */
|
||||
|
||||
typedef struct intf_handle intf_t;
|
||||
|
||||
typedef int (*intf_handler)(const struct intf_entry *entry, void *arg);
|
||||
|
||||
__BEGIN_DECLS
|
||||
intf_t *intf_open(void);
|
||||
int intf_get(intf_t *i, struct intf_entry *entry);
|
||||
int intf_get_src(intf_t *i, struct intf_entry *entry, struct addr *src);
|
||||
int intf_get_dst(intf_t *i, struct intf_entry *entry, struct addr *dst);
|
||||
int intf_set(intf_t *i, const struct intf_entry *entry);
|
||||
int intf_loop(intf_t *i, intf_handler callback, void *arg);
|
||||
intf_t *intf_close(intf_t *i);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_INTF_H */
|
||||
432
libdnet-stripped/include/dnet/ip.h
Normal file
432
libdnet-stripped/include/dnet/ip.h
Normal file
@@ -0,0 +1,432 @@
|
||||
/*
|
||||
* ip.h
|
||||
*
|
||||
* Internet Protocol (RFC 791).
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip.h,v 1.25 2005/02/16 22:02:45 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_IP_H
|
||||
#define DNET_IP_H
|
||||
|
||||
#define IP_ADDR_LEN 4 /* IP address length */
|
||||
#define IP_ADDR_BITS 32 /* IP address bits */
|
||||
|
||||
#define IP_HDR_LEN 20 /* base IP header length */
|
||||
#define IP_OPT_LEN 2 /* base IP option length */
|
||||
#define IP_OPT_LEN_MAX 40
|
||||
#define IP_HDR_LEN_MAX (IP_HDR_LEN + IP_OPT_LEN_MAX)
|
||||
|
||||
#define IP_LEN_MAX 65535
|
||||
#define IP_LEN_MIN IP_HDR_LEN
|
||||
|
||||
typedef uint32_t ip_addr_t;
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x)
|
||||
# pragma pack(1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* IP header, without options
|
||||
*/
|
||||
struct ip_hdr {
|
||||
#if DNET_BYTESEX == DNET_BIG_ENDIAN
|
||||
uint8_t ip_v:4, /* version */
|
||||
ip_hl:4; /* header length (incl any options) */
|
||||
#elif DNET_BYTESEX == DNET_LIL_ENDIAN
|
||||
uint8_t ip_hl:4,
|
||||
ip_v:4;
|
||||
#else
|
||||
# error "need to include <dnet.h>"
|
||||
#endif
|
||||
uint8_t ip_tos; /* type of service */
|
||||
uint16_t ip_len; /* total length (incl header) */
|
||||
uint16_t ip_id; /* identification */
|
||||
uint16_t ip_off; /* fragment offset and flags */
|
||||
uint8_t ip_ttl; /* time to live */
|
||||
uint8_t ip_p; /* protocol */
|
||||
uint16_t ip_sum; /* checksum */
|
||||
ip_addr_t ip_src; /* source address */
|
||||
ip_addr_t ip_dst; /* destination address */
|
||||
};
|
||||
|
||||
/*
|
||||
* Type of service (ip_tos), RFC 1349 ("obsoleted by RFC 2474")
|
||||
*/
|
||||
#define IP_TOS_DEFAULT 0x00 /* default */
|
||||
#define IP_TOS_LOWDELAY 0x10 /* low delay */
|
||||
#define IP_TOS_THROUGHPUT 0x08 /* high throughput */
|
||||
#define IP_TOS_RELIABILITY 0x04 /* high reliability */
|
||||
#define IP_TOS_LOWCOST 0x02 /* low monetary cost - XXX */
|
||||
#define IP_TOS_ECT 0x02 /* ECN-capable transport */
|
||||
#define IP_TOS_CE 0x01 /* congestion experienced */
|
||||
|
||||
/*
|
||||
* IP precedence (high 3 bits of ip_tos), hopefully unused
|
||||
*/
|
||||
#define IP_TOS_PREC_ROUTINE 0x00
|
||||
#define IP_TOS_PREC_PRIORITY 0x20
|
||||
#define IP_TOS_PREC_IMMEDIATE 0x40
|
||||
#define IP_TOS_PREC_FLASH 0x60
|
||||
#define IP_TOS_PREC_FLASHOVERRIDE 0x80
|
||||
#define IP_TOS_PREC_CRITIC_ECP 0xa0
|
||||
#define IP_TOS_PREC_INTERNETCONTROL 0xc0
|
||||
#define IP_TOS_PREC_NETCONTROL 0xe0
|
||||
|
||||
/*
|
||||
* Fragmentation flags (ip_off)
|
||||
*/
|
||||
#define IP_RF 0x8000 /* reserved */
|
||||
#define IP_DF 0x4000 /* don't fragment */
|
||||
#define IP_MF 0x2000 /* more fragments (not last frag) */
|
||||
#define IP_OFFMASK 0x1fff /* mask for fragment offset */
|
||||
|
||||
/*
|
||||
* Time-to-live (ip_ttl), seconds
|
||||
*/
|
||||
#define IP_TTL_DEFAULT 64 /* default ttl, RFC 1122, RFC 1340 */
|
||||
#define IP_TTL_MAX 255 /* maximum ttl */
|
||||
|
||||
/*
|
||||
* Protocol (ip_p) - http://www.iana.org/assignments/protocol-numbers
|
||||
*/
|
||||
#define IP_PROTO_IP 0 /* dummy for IP */
|
||||
#define IP_PROTO_HOPOPTS IP_PROTO_IP /* IPv6 hop-by-hop options */
|
||||
#define IP_PROTO_ICMP 1 /* ICMP */
|
||||
#define IP_PROTO_IGMP 2 /* IGMP */
|
||||
#define IP_PROTO_GGP 3 /* gateway-gateway protocol */
|
||||
#define IP_PROTO_IPIP 4 /* IP in IP */
|
||||
#define IP_PROTO_ST 5 /* ST datagram mode */
|
||||
#define IP_PROTO_TCP 6 /* TCP */
|
||||
#define IP_PROTO_CBT 7 /* CBT */
|
||||
#define IP_PROTO_EGP 8 /* exterior gateway protocol */
|
||||
#define IP_PROTO_IGP 9 /* interior gateway protocol */
|
||||
#define IP_PROTO_BBNRCC 10 /* BBN RCC monitoring */
|
||||
#define IP_PROTO_NVP 11 /* Network Voice Protocol */
|
||||
#define IP_PROTO_PUP 12 /* PARC universal packet */
|
||||
#define IP_PROTO_ARGUS 13 /* ARGUS */
|
||||
#define IP_PROTO_EMCON 14 /* EMCON */
|
||||
#define IP_PROTO_XNET 15 /* Cross Net Debugger */
|
||||
#define IP_PROTO_CHAOS 16 /* Chaos */
|
||||
#define IP_PROTO_UDP 17 /* UDP */
|
||||
#define IP_PROTO_MUX 18 /* multiplexing */
|
||||
#define IP_PROTO_DCNMEAS 19 /* DCN measurement */
|
||||
#define IP_PROTO_HMP 20 /* Host Monitoring Protocol */
|
||||
#define IP_PROTO_PRM 21 /* Packet Radio Measurement */
|
||||
#define IP_PROTO_IDP 22 /* Xerox NS IDP */
|
||||
#define IP_PROTO_TRUNK1 23 /* Trunk-1 */
|
||||
#define IP_PROTO_TRUNK2 24 /* Trunk-2 */
|
||||
#define IP_PROTO_LEAF1 25 /* Leaf-1 */
|
||||
#define IP_PROTO_LEAF2 26 /* Leaf-2 */
|
||||
#define IP_PROTO_RDP 27 /* "Reliable Datagram" proto */
|
||||
#define IP_PROTO_IRTP 28 /* Inet Reliable Transaction */
|
||||
#define IP_PROTO_TP 29 /* ISO TP class 4 */
|
||||
#define IP_PROTO_NETBLT 30 /* Bulk Data Transfer */
|
||||
#define IP_PROTO_MFPNSP 31 /* MFE Network Services */
|
||||
#define IP_PROTO_MERITINP 32 /* Merit Internodal Protocol */
|
||||
#define IP_PROTO_SEP 33 /* Sequential Exchange proto */
|
||||
#define IP_PROTO_3PC 34 /* Third Party Connect proto */
|
||||
#define IP_PROTO_IDPR 35 /* Interdomain Policy Route */
|
||||
#define IP_PROTO_XTP 36 /* Xpress Transfer Protocol */
|
||||
#define IP_PROTO_DDP 37 /* Datagram Delivery Proto */
|
||||
#define IP_PROTO_CMTP 38 /* IDPR Ctrl Message Trans */
|
||||
#define IP_PROTO_TPPP 39 /* TP++ Transport Protocol */
|
||||
#define IP_PROTO_IL 40 /* IL Transport Protocol */
|
||||
#define IP_PROTO_IPV6 41 /* IPv6 */
|
||||
#define IP_PROTO_SDRP 42 /* Source Demand Routing */
|
||||
#define IP_PROTO_ROUTING 43 /* IPv6 routing header */
|
||||
#define IP_PROTO_FRAGMENT 44 /* IPv6 fragmentation header */
|
||||
#define IP_PROTO_RSVP 46 /* Reservation protocol */
|
||||
#define IP_PROTO_GRE 47 /* General Routing Encap */
|
||||
#define IP_PROTO_MHRP 48 /* Mobile Host Routing */
|
||||
#define IP_PROTO_ENA 49 /* ENA */
|
||||
#define IP_PROTO_ESP 50 /* Encap Security Payload */
|
||||
#define IP_PROTO_AH 51 /* Authentication Header */
|
||||
#define IP_PROTO_INLSP 52 /* Integated Net Layer Sec */
|
||||
#define IP_PROTO_SWIPE 53 /* SWIPE */
|
||||
#define IP_PROTO_NARP 54 /* NBMA Address Resolution */
|
||||
#define IP_PROTO_MOBILE 55 /* Mobile IP, RFC 2004 */
|
||||
#define IP_PROTO_TLSP 56 /* Transport Layer Security */
|
||||
#define IP_PROTO_SKIP 57 /* SKIP */
|
||||
#define IP_PROTO_ICMPV6 58 /* ICMP for IPv6 */
|
||||
#define IP_PROTO_NONE 59 /* IPv6 no next header */
|
||||
#define IP_PROTO_DSTOPTS 60 /* IPv6 destination options */
|
||||
#define IP_PROTO_ANYHOST 61 /* any host internal proto */
|
||||
#define IP_PROTO_CFTP 62 /* CFTP */
|
||||
#define IP_PROTO_ANYNET 63 /* any local network */
|
||||
#define IP_PROTO_EXPAK 64 /* SATNET and Backroom EXPAK */
|
||||
#define IP_PROTO_KRYPTOLAN 65 /* Kryptolan */
|
||||
#define IP_PROTO_RVD 66 /* MIT Remote Virtual Disk */
|
||||
#define IP_PROTO_IPPC 67 /* Inet Pluribus Packet Core */
|
||||
#define IP_PROTO_DISTFS 68 /* any distributed fs */
|
||||
#define IP_PROTO_SATMON 69 /* SATNET Monitoring */
|
||||
#define IP_PROTO_VISA 70 /* VISA Protocol */
|
||||
#define IP_PROTO_IPCV 71 /* Inet Packet Core Utility */
|
||||
#define IP_PROTO_CPNX 72 /* Comp Proto Net Executive */
|
||||
#define IP_PROTO_CPHB 73 /* Comp Protocol Heart Beat */
|
||||
#define IP_PROTO_WSN 74 /* Wang Span Network */
|
||||
#define IP_PROTO_PVP 75 /* Packet Video Protocol */
|
||||
#define IP_PROTO_BRSATMON 76 /* Backroom SATNET Monitor */
|
||||
#define IP_PROTO_SUNND 77 /* SUN ND Protocol */
|
||||
#define IP_PROTO_WBMON 78 /* WIDEBAND Monitoring */
|
||||
#define IP_PROTO_WBEXPAK 79 /* WIDEBAND EXPAK */
|
||||
#define IP_PROTO_EON 80 /* ISO CNLP */
|
||||
#define IP_PROTO_VMTP 81 /* Versatile Msg Transport*/
|
||||
#define IP_PROTO_SVMTP 82 /* Secure VMTP */
|
||||
#define IP_PROTO_VINES 83 /* VINES */
|
||||
#define IP_PROTO_TTP 84 /* TTP */
|
||||
#define IP_PROTO_NSFIGP 85 /* NSFNET-IGP */
|
||||
#define IP_PROTO_DGP 86 /* Dissimilar Gateway Proto */
|
||||
#define IP_PROTO_TCF 87 /* TCF */
|
||||
#define IP_PROTO_EIGRP 88 /* EIGRP */
|
||||
#define IP_PROTO_OSPF 89 /* Open Shortest Path First */
|
||||
#define IP_PROTO_SPRITERPC 90 /* Sprite RPC Protocol */
|
||||
#define IP_PROTO_LARP 91 /* Locus Address Resolution */
|
||||
#define IP_PROTO_MTP 92 /* Multicast Transport Proto */
|
||||
#define IP_PROTO_AX25 93 /* AX.25 Frames */
|
||||
#define IP_PROTO_IPIPENCAP 94 /* yet-another IP encap */
|
||||
#define IP_PROTO_MICP 95 /* Mobile Internet Ctrl */
|
||||
#define IP_PROTO_SCCSP 96 /* Semaphore Comm Sec Proto */
|
||||
#define IP_PROTO_ETHERIP 97 /* Ethernet in IPv4 */
|
||||
#define IP_PROTO_ENCAP 98 /* encapsulation header */
|
||||
#define IP_PROTO_ANYENC 99 /* private encryption scheme */
|
||||
#define IP_PROTO_GMTP 100 /* GMTP */
|
||||
#define IP_PROTO_IFMP 101 /* Ipsilon Flow Mgmt Proto */
|
||||
#define IP_PROTO_PNNI 102 /* PNNI over IP */
|
||||
#define IP_PROTO_PIM 103 /* Protocol Indep Multicast */
|
||||
#define IP_PROTO_ARIS 104 /* ARIS */
|
||||
#define IP_PROTO_SCPS 105 /* SCPS */
|
||||
#define IP_PROTO_QNX 106 /* QNX */
|
||||
#define IP_PROTO_AN 107 /* Active Networks */
|
||||
#define IP_PROTO_IPCOMP 108 /* IP Payload Compression */
|
||||
#define IP_PROTO_SNP 109 /* Sitara Networks Protocol */
|
||||
#define IP_PROTO_COMPAQPEER 110 /* Compaq Peer Protocol */
|
||||
#define IP_PROTO_IPXIP 111 /* IPX in IP */
|
||||
#define IP_PROTO_VRRP 112 /* Virtual Router Redundancy */
|
||||
#define IP_PROTO_PGM 113 /* PGM Reliable Transport */
|
||||
#define IP_PROTO_ANY0HOP 114 /* 0-hop protocol */
|
||||
#define IP_PROTO_L2TP 115 /* Layer 2 Tunneling Proto */
|
||||
#define IP_PROTO_DDX 116 /* D-II Data Exchange (DDX) */
|
||||
#define IP_PROTO_IATP 117 /* Interactive Agent Xfer */
|
||||
#define IP_PROTO_STP 118 /* Schedule Transfer Proto */
|
||||
#define IP_PROTO_SRP 119 /* SpectraLink Radio Proto */
|
||||
#define IP_PROTO_UTI 120 /* UTI */
|
||||
#define IP_PROTO_SMP 121 /* Simple Message Protocol */
|
||||
#define IP_PROTO_SM 122 /* SM */
|
||||
#define IP_PROTO_PTP 123 /* Performance Transparency */
|
||||
#define IP_PROTO_ISIS 124 /* ISIS over IPv4 */
|
||||
#define IP_PROTO_FIRE 125 /* FIRE */
|
||||
#define IP_PROTO_CRTP 126 /* Combat Radio Transport */
|
||||
#define IP_PROTO_CRUDP 127 /* Combat Radio UDP */
|
||||
#define IP_PROTO_SSCOPMCE 128 /* SSCOPMCE */
|
||||
#define IP_PROTO_IPLT 129 /* IPLT */
|
||||
#define IP_PROTO_SPS 130 /* Secure Packet Shield */
|
||||
#define IP_PROTO_PIPE 131 /* Private IP Encap in IP */
|
||||
#define IP_PROTO_SCTP 132 /* Stream Ctrl Transmission */
|
||||
#define IP_PROTO_FC 133 /* Fibre Channel */
|
||||
#define IP_PROTO_RSVPIGN 134 /* RSVP-E2E-IGNORE */
|
||||
#define IP_PROTO_RAW 255 /* Raw IP packets */
|
||||
#define IP_PROTO_RESERVED IP_PROTO_RAW /* Reserved */
|
||||
#define IP_PROTO_MAX 255
|
||||
|
||||
/*
|
||||
* Option types (opt_type) - http://www.iana.org/assignments/ip-parameters
|
||||
*/
|
||||
#define IP_OPT_CONTROL 0x00 /* control */
|
||||
#define IP_OPT_DEBMEAS 0x40 /* debugging & measurement */
|
||||
#define IP_OPT_COPY 0x80 /* copy into all fragments */
|
||||
#define IP_OPT_RESERVED1 0x20
|
||||
#define IP_OPT_RESERVED2 0x60
|
||||
|
||||
#define IP_OPT_EOL 0 /* end of option list */
|
||||
#define IP_OPT_NOP 1 /* no operation */
|
||||
#define IP_OPT_SEC (2|IP_OPT_COPY) /* DoD basic security */
|
||||
#define IP_OPT_LSRR (3|IP_OPT_COPY) /* loose source route */
|
||||
#define IP_OPT_TS (4|IP_OPT_DEBMEAS) /* timestamp */
|
||||
#define IP_OPT_ESEC (5|IP_OPT_COPY) /* DoD extended security */
|
||||
#define IP_OPT_CIPSO (6|IP_OPT_COPY) /* commercial security */
|
||||
#define IP_OPT_RR 7 /* record route */
|
||||
#define IP_OPT_SATID (8|IP_OPT_COPY) /* stream ID (obsolete) */
|
||||
#define IP_OPT_SSRR (9|IP_OPT_COPY) /* strict source route */
|
||||
#define IP_OPT_ZSU 10 /* experimental measurement */
|
||||
#define IP_OPT_MTUP 11 /* MTU probe */
|
||||
#define IP_OPT_MTUR 12 /* MTU reply */
|
||||
#define IP_OPT_FINN (13|IP_OPT_COPY|IP_OPT_DEBMEAS) /* exp flow control */
|
||||
#define IP_OPT_VISA (14|IP_OPT_COPY) /* exp access control */
|
||||
#define IP_OPT_ENCODE 15 /* ??? */
|
||||
#define IP_OPT_IMITD (16|IP_OPT_COPY) /* IMI traffic descriptor */
|
||||
#define IP_OPT_EIP (17|IP_OPT_COPY) /* extended IP, RFC 1385 */
|
||||
#define IP_OPT_TR (18|IP_OPT_DEBMEAS) /* traceroute */
|
||||
#define IP_OPT_ADDEXT (19|IP_OPT_COPY) /* IPv7 ext addr, RFC 1475 */
|
||||
#define IP_OPT_RTRALT (20|IP_OPT_COPY) /* router alert, RFC 2113 */
|
||||
#define IP_OPT_SDB (21|IP_OPT_COPY) /* directed bcast, RFC 1770 */
|
||||
#define IP_OPT_NSAPA (22|IP_OPT_COPY) /* NSAP addresses */
|
||||
#define IP_OPT_DPS (23|IP_OPT_COPY) /* dynamic packet state */
|
||||
#define IP_OPT_UMP (24|IP_OPT_COPY) /* upstream multicast */
|
||||
#define IP_OPT_MAX 25
|
||||
|
||||
#define IP_OPT_COPIED(o) ((o) & 0x80)
|
||||
#define IP_OPT_CLASS(o) ((o) & 0x60)
|
||||
#define IP_OPT_NUMBER(o) ((o) & 0x1f)
|
||||
#define IP_OPT_TYPEONLY(o) ((o) == IP_OPT_EOL || (o) == IP_OPT_NOP)
|
||||
|
||||
/*
|
||||
* Security option data - RFC 791, 3.1
|
||||
*/
|
||||
struct ip_opt_data_sec {
|
||||
uint16_t s; /* security */
|
||||
uint16_t c; /* compartments */
|
||||
uint16_t h; /* handling restrictions */
|
||||
uint8_t tcc[3]; /* transmission control code */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#define IP_OPT_SEC_UNCLASS 0x0000 /* unclassified */
|
||||
#define IP_OPT_SEC_CONFID 0xf135 /* confidential */
|
||||
#define IP_OPT_SEC_EFTO 0x789a /* EFTO */
|
||||
#define IP_OPT_SEC_MMMM 0xbc4d /* MMMM */
|
||||
#define IP_OPT_SEC_PROG 0x5e26 /* PROG */
|
||||
#define IP_OPT_SEC_RESTR 0xaf13 /* restricted */
|
||||
#define IP_OPT_SEC_SECRET 0xd788 /* secret */
|
||||
#define IP_OPT_SEC_TOPSECRET 0x6bc5 /* top secret */
|
||||
|
||||
/*
|
||||
* {Loose Source, Record, Strict Source} Route option data - RFC 791, 3.1
|
||||
*/
|
||||
struct ip_opt_data_rr {
|
||||
uint8_t ptr; /* from start of option, >= 4 */
|
||||
uint32_t iplist __flexarr; /* list of IP addresses */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Timestamp option data - RFC 791, 3.1
|
||||
*/
|
||||
struct ip_opt_data_ts {
|
||||
uint8_t ptr; /* from start of option, >= 5 */
|
||||
#if DNET_BYTESEX == DNET_BIG_ENDIAN
|
||||
uint8_t oflw:4, /* number of IPs skipped */
|
||||
flg:4; /* address[ / timestamp] flag */
|
||||
#elif DNET_BYTESEX == DNET_LIL_ENDIAN
|
||||
uint8_t flg:4,
|
||||
oflw:4;
|
||||
#endif
|
||||
uint32_t ipts __flexarr; /* IP address [/ timestamp] pairs */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#define IP_OPT_TS_TSONLY 0 /* timestamps only */
|
||||
#define IP_OPT_TS_TSADDR 1 /* IP address / timestamp pairs */
|
||||
#define IP_OPT_TS_PRESPEC 3 /* IP address / zero timestamp pairs */
|
||||
|
||||
/*
|
||||
* Traceroute option data - RFC 1393, 2.2
|
||||
*/
|
||||
struct ip_opt_data_tr {
|
||||
uint16_t id; /* ID number */
|
||||
uint16_t ohc; /* outbound hop count */
|
||||
uint16_t rhc; /* return hop count */
|
||||
uint32_t origip; /* originator IP address */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* IP option (following IP header)
|
||||
*/
|
||||
struct ip_opt {
|
||||
uint8_t opt_type; /* option type */
|
||||
uint8_t opt_len; /* option length >= IP_OPT_LEN */
|
||||
union ip_opt_data {
|
||||
struct ip_opt_data_sec sec; /* IP_OPT_SEC */
|
||||
struct ip_opt_data_rr rr; /* IP_OPT_{L,S}RR */
|
||||
struct ip_opt_data_ts ts; /* IP_OPT_TS */
|
||||
uint16_t satid; /* IP_OPT_SATID */
|
||||
uint16_t mtu; /* IP_OPT_MTU{P,R} */
|
||||
struct ip_opt_data_tr tr; /* IP_OPT_TR */
|
||||
uint32_t addext[2]; /* IP_OPT_ADDEXT */
|
||||
uint16_t rtralt; /* IP_OPT_RTRALT */
|
||||
uint32_t sdb[9]; /* IP_OPT_SDB */
|
||||
uint8_t data8[IP_OPT_LEN_MAX - IP_OPT_LEN];
|
||||
} opt_data;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#ifndef __GNUC__
|
||||
# pragma pack()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Classful addressing
|
||||
*/
|
||||
#define IP_CLASSA(i) (((uint32_t)(i) & htonl(0x80000000)) == \
|
||||
htonl(0x00000000))
|
||||
#define IP_CLASSA_NET (htonl(0xff000000))
|
||||
#define IP_CLASSA_NSHIFT 24
|
||||
#define IP_CLASSA_HOST (htonl(0x00ffffff))
|
||||
#define IP_CLASSA_MAX 128
|
||||
|
||||
#define IP_CLASSB(i) (((uint32_t)(i) & htonl(0xc0000000)) == \
|
||||
htonl(0x80000000))
|
||||
#define IP_CLASSB_NET (htonl(0xffff0000))
|
||||
#define IP_CLASSB_NSHIFT 16
|
||||
#define IP_CLASSB_HOST (htonl(0x0000ffff))
|
||||
#define IP_CLASSB_MAX 65536
|
||||
|
||||
#define IP_CLASSC(i) (((uint32_t)(i) & htonl(0xe0000000)) == \
|
||||
htonl(0xc0000000))
|
||||
#define IP_CLASSC_NET (htonl(0xffffff00))
|
||||
#define IP_CLASSC_NSHIFT 8
|
||||
#define IP_CLASSC_HOST (htonl(0x000000ff))
|
||||
|
||||
#define IP_CLASSD(i) (((uint32_t)(i) & htonl(0xf0000000)) == \
|
||||
htonl(0xe0000000))
|
||||
/* These ones aren't really net and host fields, but routing needn't know. */
|
||||
#define IP_CLASSD_NET (htonl(0xf0000000))
|
||||
#define IP_CLASSD_NSHIFT 28
|
||||
#define IP_CLASSD_HOST (htonl(0x0fffffff))
|
||||
#define IP_MULTICAST(i) IP_CLASSD(i)
|
||||
|
||||
#define IP_EXPERIMENTAL(i) (((uint32_t)(i) & htonl(0xf0000000)) == \
|
||||
htonl(0xf0000000))
|
||||
#define IP_BADCLASS(i) (((uint32_t)(i) & htonl(0xf0000000)) == \
|
||||
htonl(0xf0000000))
|
||||
#define IP_LOCAL_GROUP(i) (((uint32_t)(i) & htonl(0xffffff00)) == \
|
||||
htonl(0xe0000000))
|
||||
/*
|
||||
* Reserved addresses
|
||||
*/
|
||||
#define IP_ADDR_ANY (htonl(0x00000000)) /* 0.0.0.0 */
|
||||
#define IP_ADDR_BROADCAST (htonl(0xffffffff)) /* 255.255.255.255 */
|
||||
#define IP_ADDR_LOOPBACK (htonl(0x7f000001)) /* 127.0.0.1 */
|
||||
#define IP_ADDR_MCAST_ALL (htonl(0xe0000001)) /* 224.0.0.1 */
|
||||
#define IP_ADDR_MCAST_LOCAL (htonl(0xe00000ff)) /* 224.0.0.255 */
|
||||
|
||||
#define ip_pack_hdr(hdr, tos, len, id, off, ttl, p, src, dst) do { \
|
||||
struct ip_hdr *ip_pack_p = (struct ip_hdr *)(hdr); \
|
||||
ip_pack_p->ip_v = 4; ip_pack_p->ip_hl = 5; \
|
||||
ip_pack_p->ip_tos = tos; ip_pack_p->ip_len = htons(len); \
|
||||
ip_pack_p->ip_id = htons(id); ip_pack_p->ip_off = htons(off); \
|
||||
ip_pack_p->ip_ttl = ttl; ip_pack_p->ip_p = p; \
|
||||
ip_pack_p->ip_src = src; ip_pack_p->ip_dst = dst; \
|
||||
} while (0)
|
||||
|
||||
typedef struct ip_handle ip_t;
|
||||
|
||||
__BEGIN_DECLS
|
||||
ip_t *ip_open(void);
|
||||
ssize_t ip_send(ip_t *i, const void *buf, size_t len);
|
||||
ip_t *ip_close(ip_t *i);
|
||||
|
||||
char *ip_ntop(const ip_addr_t *ip, char *dst, size_t len);
|
||||
int ip_pton(const char *src, ip_addr_t *dst);
|
||||
char *ip_ntoa(const ip_addr_t *ip);
|
||||
#define ip_aton ip_pton
|
||||
|
||||
ssize_t ip_add_option(void *buf, size_t len,
|
||||
int proto, const void *optbuf, size_t optlen);
|
||||
void ip_checksum(void *buf, size_t len);
|
||||
|
||||
int ip_cksum_add(const void *buf, size_t len, int cksum);
|
||||
#define ip_cksum_carry(x) \
|
||||
(x = (x >> 16) + (x & 0xffff), (~(x + (x >> 16)) & 0xffff))
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_IP_H */
|
||||
183
libdnet-stripped/include/dnet/ip6.h
Normal file
183
libdnet-stripped/include/dnet/ip6.h
Normal file
@@ -0,0 +1,183 @@
|
||||
/*
|
||||
* ip6.h
|
||||
*
|
||||
* Internet Protocol, Version 6 (RFC 2460).
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip6.h,v 1.6 2004/02/23 10:01:15 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_IP6_H
|
||||
#define DNET_IP6_H
|
||||
|
||||
#define IP6_ADDR_LEN 16
|
||||
#define IP6_ADDR_BITS 128
|
||||
|
||||
#define IP6_HDR_LEN 40 /* IPv6 header length */
|
||||
#define IP6_LEN_MIN IP6_HDR_LEN
|
||||
#define IP6_LEN_MAX 65535 /* non-jumbo payload */
|
||||
|
||||
#define IP6_MTU_MIN 1280 /* minimum MTU (1024 + 256) */
|
||||
|
||||
typedef struct ip6_addr {
|
||||
uint8_t data[IP6_ADDR_LEN];
|
||||
} ip6_addr_t;
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x)
|
||||
# pragma pack(1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* IPv6 header
|
||||
*/
|
||||
struct ip6_hdr {
|
||||
union {
|
||||
struct ip6_hdr_ctl {
|
||||
uint32_t ip6_un1_flow; /* 20 bits of flow ID */
|
||||
uint16_t ip6_un1_plen; /* payload length */
|
||||
uint8_t ip6_un1_nxt; /* next header */
|
||||
uint8_t ip6_un1_hlim; /* hop limit */
|
||||
} ip6_un1;
|
||||
uint8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */
|
||||
} ip6_ctlun;
|
||||
ip6_addr_t ip6_src;
|
||||
ip6_addr_t ip6_dst;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#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 /* IP_PROTO_* */
|
||||
#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
|
||||
|
||||
#define IP6_VERSION 0x60
|
||||
#define IP6_VERSION_MASK 0xf0 /* ip6_vfc version */
|
||||
|
||||
#if DNET_BYTESEX == DNET_BIG_ENDIAN
|
||||
#define IP6_FLOWINFO_MASK 0x0fffffff /* ip6_flow info (28 bits) */
|
||||
#define IP6_FLOWLABEL_MASK 0x000fffff /* ip6_flow label (20 bits) */
|
||||
#elif DNET_BYTESEX == DNET_LIL_ENDIAN
|
||||
#define IP6_FLOWINFO_MASK 0xffffff0f /* ip6_flow info (28 bits) */
|
||||
#define IP6_FLOWLABEL_MASK 0xffff0f00 /* ip6_flow label (20 bits) */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Hop limit (ip6_hlim)
|
||||
*/
|
||||
#define IP6_HLIM_DEFAULT 64
|
||||
#define IP6_HLIM_MAX 255
|
||||
|
||||
/*
|
||||
* Preferred extension header order from RFC 2460, 4.1:
|
||||
*
|
||||
* IP_PROTO_IPV6, IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS, IP_PROTO_ROUTING,
|
||||
* IP_PROTO_FRAGMENT, IP_PROTO_AH, IP_PROTO_ESP, IP_PROTO_DSTOPTS, IP_PROTO_*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Routing header data (IP_PROTO_ROUTING)
|
||||
*/
|
||||
struct ip6_ext_data_routing {
|
||||
uint8_t type; /* routing type */
|
||||
uint8_t segleft; /* segments left */
|
||||
/* followed by routing type specific data */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
struct ip6_ext_data_routing0 {
|
||||
uint8_t type; /* always zero */
|
||||
uint8_t segleft; /* segments left */
|
||||
uint8_t reserved; /* reserved field */
|
||||
uint8_t slmap[3]; /* strict/loose bit map */
|
||||
ip6_addr_t addr[1]; /* up to 23 addresses */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Fragment header data (IP_PROTO_FRAGMENT)
|
||||
*/
|
||||
struct ip6_ext_data_fragment {
|
||||
uint16_t offlg; /* offset, reserved, and flag */
|
||||
uint32_t ident; /* identification */
|
||||
} __attribute__((__packed__));
|
||||
|
||||
/*
|
||||
* Fragmentation offset, reserved, and flags (offlg)
|
||||
*/
|
||||
#if DNET_BYTESEX == DNET_BIG_ENDIAN
|
||||
#define IP6_OFF_MASK 0xfff8 /* mask out offset from offlg */
|
||||
#define IP6_RESERVED_MASK 0x0006 /* reserved bits in offlg */
|
||||
#define IP6_MORE_FRAG 0x0001 /* more-fragments flag */
|
||||
#elif DNET_BYTESEX == DNET_LIL_ENDIAN
|
||||
#define IP6_OFF_MASK 0xf8ff /* mask out offset from offlg */
|
||||
#define IP6_RESERVED_MASK 0x0600 /* reserved bits in offlg */
|
||||
#define IP6_MORE_FRAG 0x0100 /* more-fragments flag */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Option types, for IP_PROTO_HOPOPTS, IP_PROTO_DSTOPTS headers
|
||||
*/
|
||||
#define IP6_OPT_PAD1 0x00 /* 00 0 00000 */
|
||||
#define IP6_OPT_PADN 0x01 /* 00 0 00001 */
|
||||
#define IP6_OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */
|
||||
#define IP6_OPT_JUMBO_LEN 6
|
||||
#define IP6_OPT_RTALERT 0x05 /* 00 0 00101 */
|
||||
#define IP6_OPT_RTALERT_LEN 4
|
||||
#define IP6_OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */
|
||||
#define IP6_OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */
|
||||
#define IP6_OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */
|
||||
#define IP6_OPT_LEN_MIN 2
|
||||
|
||||
#define IP6_OPT_TYPE(o) ((o) & 0xC0) /* high 2 bits of opt_type */
|
||||
#define IP6_OPT_TYPE_SKIP 0x00 /* continue processing on failure */
|
||||
#define IP6_OPT_TYPE_DISCARD 0x40 /* discard packet on failure */
|
||||
#define IP6_OPT_TYPE_FORCEICMP 0x80 /* discard and send ICMP on failure */
|
||||
#define IP6_OPT_TYPE_ICMP 0xC0 /* ...only if non-multicast dst */
|
||||
|
||||
#define IP6_OPT_MUTABLE 0x20 /* option data may change en route */
|
||||
|
||||
/*
|
||||
* Extension header (chained via {ip6,ext}_nxt, following IPv6 header)
|
||||
*/
|
||||
struct ip6_ext_hdr {
|
||||
uint8_t ext_nxt; /* next header */
|
||||
uint8_t ext_len; /* following length in units of 8 octets */
|
||||
union {
|
||||
struct ip6_ext_data_routing routing;
|
||||
struct ip6_ext_data_fragment fragment;
|
||||
} ext_data;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#ifndef __GNUC__
|
||||
# pragma pack()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Reserved addresses
|
||||
*/
|
||||
#define IP6_ADDR_UNSPEC \
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
#define IP6_ADDR_LOOPBACK \
|
||||
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01"
|
||||
|
||||
#define ip6_pack_hdr(hdr, fc, fl, plen, nxt, hlim, src, dst) do { \
|
||||
struct ip6_hdr *ip6 = (struct ip6_hdr *)(hdr); \
|
||||
ip6->ip6_flow = htonl(((uint32_t)(fc) << 28) & \
|
||||
(IP6_FLOWLABEL_MASK | (fl))); \
|
||||
ip6->ip6_vfc = (IP6_VERSION | ((fc) >> 4)); \
|
||||
ip6->ip6_plen = htons((plen)); \
|
||||
ip6->ip6_nxt = (nxt); ip6->ip6_hlim = (hlim); \
|
||||
memmove(&ip6->ip6_src, &(src), IP6_ADDR_LEN); \
|
||||
memmove(&ip6->ip6_dst, &(dst), IP6_ADDR_LEN); \
|
||||
} while (0);
|
||||
|
||||
__BEGIN_DECLS
|
||||
char *ip6_ntop(const ip6_addr_t *ip6, char *dst, size_t size);
|
||||
int ip6_pton(const char *src, ip6_addr_t *dst);
|
||||
char *ip6_ntoa(const ip6_addr_t *ip6);
|
||||
#define ip6_aton ip6_pton
|
||||
|
||||
void ip6_checksum(void *buf, size_t len);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_IP6_H */
|
||||
130
libdnet-stripped/include/dnet/os.h
Normal file
130
libdnet-stripped/include/dnet/os.h
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* os.h
|
||||
*
|
||||
* Sleazy OS-specific defines.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: os.h,v 1.12 2005/02/15 05:31:00 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_OS_H
|
||||
#define DNET_OS_H
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <winsock2.h>
|
||||
# include <windows.h>
|
||||
/* XXX */
|
||||
# undef IP_OPT_LSRR
|
||||
# undef IP_OPT_TS
|
||||
# undef IP_OPT_RR
|
||||
# undef IP_OPT_SSRR
|
||||
typedef u_char uint8_t;
|
||||
typedef u_short uint16_t;
|
||||
typedef u_int uint32_t;
|
||||
# ifndef __CYGWIN__
|
||||
typedef long ssize_t;
|
||||
# endif
|
||||
#else
|
||||
# include <sys/param.h>
|
||||
# include <sys/types.h>
|
||||
# include <sys/socket.h>
|
||||
# include <netinet/in.h>
|
||||
# include <arpa/inet.h>
|
||||
# include <netdb.h>
|
||||
# ifdef __bsdi__
|
||||
# include <machine/types.h>
|
||||
typedef u_int8_t uint8_t;
|
||||
typedef u_int16_t uint16_t;
|
||||
typedef u_int32_t uint32_t;
|
||||
typedef u_int64_t uint64_t;
|
||||
# else
|
||||
# include <inttypes.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define DNET_LIL_ENDIAN 1234
|
||||
#define DNET_BIG_ENDIAN 4321
|
||||
|
||||
/* BSD and IRIX */
|
||||
#ifdef BYTE_ORDER
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||
# define DNET_BYTESEX DNET_LIL_ENDIAN
|
||||
#elif BYTE_ORDER == BIG_ENDIAN
|
||||
# define DNET_BYTESEX DNET_BIG_ENDIAN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Linux */
|
||||
#ifdef __BYTE_ORDER
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
# define DNET_BYTESEX DNET_LIL_ENDIAN
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define DNET_BYTESEX DNET_BIG_ENDIAN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Solaris */
|
||||
#if defined(_BIT_FIELDS_LTOH)
|
||||
# define DNET_BYTESEX DNET_LIL_ENDIAN
|
||||
#elif defined (_BIT_FIELDS_HTOL)
|
||||
# define DNET_BYTESEX DNET_BIG_ENDIAN
|
||||
#endif
|
||||
|
||||
/* Win32 - XXX */
|
||||
#ifdef _WIN32
|
||||
# define DNET_BYTESEX DNET_LIL_ENDIAN
|
||||
#endif
|
||||
|
||||
/* Nastiness from old BIND code. */
|
||||
#ifndef DNET_BYTESEX
|
||||
# if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \
|
||||
defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
|
||||
defined(__alpha__) || defined(__alpha)
|
||||
# define DNET_BYTESEX DNET_LIL_ENDIAN
|
||||
# elif 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(__ia64) || \
|
||||
defined (BIT_ZERO_ON_LEFT) || defined(m68k)
|
||||
# define DNET_BYTESEX DNET_BIG_ENDIAN
|
||||
# else
|
||||
# error "bytesex unknown"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* C++ support. */
|
||||
#undef __BEGIN_DECLS
|
||||
#undef __END_DECLS
|
||||
#ifdef __cplusplus
|
||||
# define __BEGIN_DECLS extern "C" {
|
||||
# define __END_DECLS } /* extern "C" */
|
||||
#else
|
||||
# define __BEGIN_DECLS
|
||||
# define __END_DECLS
|
||||
#endif
|
||||
|
||||
/* Support for flexible arrays. */
|
||||
#undef __flexarr
|
||||
#if defined(__GNUC__) && ((__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97))
|
||||
/* GCC 2.97 supports C99 flexible array members. */
|
||||
# define __flexarr []
|
||||
#else
|
||||
# ifdef __GNUC__
|
||||
# define __flexarr [0]
|
||||
# else
|
||||
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||
# define __flexarr []
|
||||
# elif defined(_WIN32)
|
||||
/* MS VC++ */
|
||||
# define __flexarr []
|
||||
# else
|
||||
/* Some other non-C99 compiler. Approximate with [1]. */
|
||||
# define __flexarr [1]
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif /* DNET_OS_H */
|
||||
33
libdnet-stripped/include/dnet/rand.h
Normal file
33
libdnet-stripped/include/dnet/rand.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* rand.h
|
||||
*
|
||||
* Pseudo-random number generation, based on OpenBSD arc4random().
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
* Copyright (c) 1996 David Mazieres <dm@lcs.mit.edu>
|
||||
*
|
||||
* $Id: rand.h,v 1.4 2002/04/07 19:01:25 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_RAND_H
|
||||
#define DNET_RAND_H
|
||||
|
||||
typedef struct rand_handle rand_t;
|
||||
|
||||
__BEGIN_DECLS
|
||||
rand_t *rand_open(void);
|
||||
|
||||
int rand_get(rand_t *r, void *buf, size_t len);
|
||||
int rand_set(rand_t *r, const void *seed, size_t len);
|
||||
int rand_add(rand_t *r, const void *buf, size_t len);
|
||||
|
||||
uint8_t rand_uint8(rand_t *r);
|
||||
uint16_t rand_uint16(rand_t *r);
|
||||
uint32_t rand_uint32(rand_t *r);
|
||||
|
||||
int rand_shuffle(rand_t *r, void *base, size_t nmemb, size_t size);
|
||||
|
||||
rand_t *rand_close(rand_t *r);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_RAND_H */
|
||||
35
libdnet-stripped/include/dnet/route.h
Normal file
35
libdnet-stripped/include/dnet/route.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* route.c
|
||||
*
|
||||
* Kernel route table operations.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: route.h,v 1.6 2002/02/04 04:02:22 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_ROUTE_H
|
||||
#define DNET_ROUTE_H
|
||||
|
||||
/*
|
||||
* Routing table entry
|
||||
*/
|
||||
struct route_entry {
|
||||
struct addr route_dst; /* destination address */
|
||||
struct addr route_gw; /* gateway address */
|
||||
};
|
||||
|
||||
typedef struct route_handle route_t;
|
||||
|
||||
typedef int (*route_handler)(const struct route_entry *entry, void *arg);
|
||||
|
||||
__BEGIN_DECLS
|
||||
route_t *route_open(void);
|
||||
int route_add(route_t *r, const struct route_entry *entry);
|
||||
int route_delete(route_t *r, const struct route_entry *entry);
|
||||
int route_get(route_t *r, struct route_entry *entry);
|
||||
int route_loop(route_t *r, route_handler callback, void *arg);
|
||||
route_t *route_close(route_t *r);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_ROUTE_H */
|
||||
158
libdnet-stripped/include/dnet/tcp.h
Normal file
158
libdnet-stripped/include/dnet/tcp.h
Normal file
@@ -0,0 +1,158 @@
|
||||
/*
|
||||
* tcp.h
|
||||
*
|
||||
* Transmission Control Protocol (RFC 793).
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: tcp.h,v 1.17 2004/02/23 10:02:11 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_TCP_H
|
||||
#define DNET_TCP_H
|
||||
|
||||
#define TCP_HDR_LEN 20 /* base TCP header length */
|
||||
#define TCP_OPT_LEN 2 /* base TCP option length */
|
||||
#define TCP_OPT_LEN_MAX 40
|
||||
#define TCP_HDR_LEN_MAX (TCP_HDR_LEN + TCP_OPT_LEN_MAX)
|
||||
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x)
|
||||
# pragma pack(1)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TCP header, without options
|
||||
*/
|
||||
struct tcp_hdr {
|
||||
uint16_t th_sport; /* source port */
|
||||
uint16_t th_dport; /* destination port */
|
||||
uint32_t th_seq; /* sequence number */
|
||||
uint32_t th_ack; /* acknowledgment number */
|
||||
#if DNET_BYTESEX == DNET_BIG_ENDIAN
|
||||
uint8_t th_off:4, /* data offset */
|
||||
th_x2:4; /* (unused) */
|
||||
#elif DNET_BYTESEX == DNET_LIL_ENDIAN
|
||||
uint8_t th_x2:4,
|
||||
th_off:4;
|
||||
#else
|
||||
# error "need to include <dnet.h>"
|
||||
#endif
|
||||
uint8_t th_flags; /* control flags */
|
||||
uint16_t th_win; /* window */
|
||||
uint16_t th_sum; /* checksum */
|
||||
uint16_t th_urp; /* urgent pointer */
|
||||
};
|
||||
|
||||
/*
|
||||
* TCP control flags (th_flags)
|
||||
*/
|
||||
#define TH_FIN 0x01 /* end of data */
|
||||
#define TH_SYN 0x02 /* synchronize sequence numbers */
|
||||
#define TH_RST 0x04 /* reset connection */
|
||||
#define TH_PUSH 0x08 /* push */
|
||||
#define TH_ACK 0x10 /* acknowledgment number set */
|
||||
#define TH_URG 0x20 /* urgent pointer set */
|
||||
#define TH_ECE 0x40 /* ECN echo, RFC 3168 */
|
||||
#define TH_CWR 0x80 /* congestion window reduced */
|
||||
|
||||
#define TCP_PORT_MAX 65535 /* maximum port */
|
||||
#define TCP_WIN_MAX 65535 /* maximum (unscaled) window */
|
||||
|
||||
/*
|
||||
* Sequence number comparison macros
|
||||
*/
|
||||
#define TCP_SEQ_LT(a,b) ((int)((a)-(b)) < 0)
|
||||
#define TCP_SEQ_LEQ(a,b) ((int)((a)-(b)) <= 0)
|
||||
#define TCP_SEQ_GT(a,b) ((int)((a)-(b)) > 0)
|
||||
#define TCP_SEQ_GEQ(a,b) ((int)((a)-(b)) >= 0)
|
||||
|
||||
/*
|
||||
* TCP FSM states
|
||||
*/
|
||||
#define TCP_STATE_CLOSED 0 /* closed */
|
||||
#define TCP_STATE_LISTEN 1 /* listening from connection */
|
||||
#define TCP_STATE_SYN_SENT 2 /* active, have sent SYN */
|
||||
#define TCP_STATE_SYN_RECEIVED 3 /* have sent and received SYN */
|
||||
|
||||
#define TCP_STATE_ESTABLISHED 4 /* established */
|
||||
#define TCP_STATE_CLOSE_WAIT 5 /* rcvd FIN, waiting for close */
|
||||
|
||||
#define TCP_STATE_FIN_WAIT_1 6 /* have closed, sent FIN */
|
||||
#define TCP_STATE_CLOSING 7 /* closed xchd FIN, await FIN-ACK */
|
||||
#define TCP_STATE_LAST_ACK 8 /* had FIN and close, await FIN-ACK */
|
||||
|
||||
#define TCP_STATE_FIN_WAIT_2 9 /* have closed, FIN is acked */
|
||||
#define TCP_STATE_TIME_WAIT 10 /* in 2*MSL quiet wait after close */
|
||||
#define TCP_STATE_MAX 11
|
||||
|
||||
/*
|
||||
* Options (opt_type) - http://www.iana.org/assignments/tcp-parameters
|
||||
*/
|
||||
#define TCP_OPT_EOL 0 /* end of option list */
|
||||
#define TCP_OPT_NOP 1 /* no operation */
|
||||
#define TCP_OPT_MSS 2 /* maximum segment size */
|
||||
#define TCP_OPT_WSCALE 3 /* window scale factor, RFC 1072 */
|
||||
#define TCP_OPT_SACKOK 4 /* SACK permitted, RFC 2018 */
|
||||
#define TCP_OPT_SACK 5 /* SACK, RFC 2018 */
|
||||
#define TCP_OPT_ECHO 6 /* echo (obsolete), RFC 1072 */
|
||||
#define TCP_OPT_ECHOREPLY 7 /* echo reply (obsolete), RFC 1072 */
|
||||
#define TCP_OPT_TIMESTAMP 8 /* timestamp, RFC 1323 */
|
||||
#define TCP_OPT_POCONN 9 /* partial order conn, RFC 1693 */
|
||||
#define TCP_OPT_POSVC 10 /* partial order service, RFC 1693 */
|
||||
#define TCP_OPT_CC 11 /* connection count, RFC 1644 */
|
||||
#define TCP_OPT_CCNEW 12 /* CC.NEW, RFC 1644 */
|
||||
#define TCP_OPT_CCECHO 13 /* CC.ECHO, RFC 1644 */
|
||||
#define TCP_OPT_ALTSUM 14 /* alt checksum request, RFC 1146 */
|
||||
#define TCP_OPT_ALTSUMDATA 15 /* alt checksum data, RFC 1146 */
|
||||
#define TCP_OPT_SKEETER 16 /* Skeeter */
|
||||
#define TCP_OPT_BUBBA 17 /* Bubba */
|
||||
#define TCP_OPT_TRAILSUM 18 /* trailer checksum */
|
||||
#define TCP_OPT_MD5 19 /* MD5 signature, RFC 2385 */
|
||||
#define TCP_OPT_SCPS 20 /* SCPS capabilities */
|
||||
#define TCP_OPT_SNACK 21 /* selective negative acks */
|
||||
#define TCP_OPT_REC 22 /* record boundaries */
|
||||
#define TCP_OPT_CORRUPT 23 /* corruption experienced */
|
||||
#define TCP_OPT_SNAP 24 /* SNAP */
|
||||
#define TCP_OPT_TCPCOMP 26 /* TCP compression filter */
|
||||
#define TCP_OPT_MAX 27
|
||||
|
||||
#define TCP_OPT_TYPEONLY(type) \
|
||||
((type) == TCP_OPT_EOL || (type) == TCP_OPT_NOP)
|
||||
|
||||
/*
|
||||
* TCP option (following TCP header)
|
||||
*/
|
||||
struct tcp_opt {
|
||||
uint8_t opt_type; /* option type */
|
||||
uint8_t opt_len; /* option length >= TCP_OPT_LEN */
|
||||
union tcp_opt_data {
|
||||
uint16_t mss; /* TCP_OPT_MSS */
|
||||
uint8_t wscale; /* TCP_OPT_WSCALE */
|
||||
uint16_t sack[19]; /* TCP_OPT_SACK */
|
||||
uint32_t echo; /* TCP_OPT_ECHO{REPLY} */
|
||||
uint32_t timestamp[2]; /* TCP_OPT_TIMESTAMP */
|
||||
uint32_t cc; /* TCP_OPT_CC{NEW,ECHO} */
|
||||
uint8_t cksum; /* TCP_OPT_ALTSUM */
|
||||
uint8_t md5[16]; /* TCP_OPT_MD5 */
|
||||
uint8_t data8[TCP_OPT_LEN_MAX - TCP_OPT_LEN];
|
||||
} opt_data;
|
||||
} __attribute__((__packed__));
|
||||
|
||||
#ifndef __GNUC__
|
||||
# pragma pack()
|
||||
#endif
|
||||
|
||||
#define tcp_pack_hdr(hdr, sport, dport, seq, ack, flags, win, urp) do { \
|
||||
struct tcp_hdr *tcp_pack_p = (struct tcp_hdr *)(hdr); \
|
||||
tcp_pack_p->th_sport = htons(sport); \
|
||||
tcp_pack_p->th_dport = htons(dport); \
|
||||
tcp_pack_p->th_seq = htonl(seq); \
|
||||
tcp_pack_p->th_ack = htonl(ack); \
|
||||
tcp_pack_p->th_x2 = 0; tcp_pack_p->th_off = 5; \
|
||||
tcp_pack_p->th_flags = flags; \
|
||||
tcp_pack_p->th_win = htons(win); \
|
||||
tcp_pack_p->th_urp = htons(urp); \
|
||||
} while (0)
|
||||
|
||||
#endif /* DNET_TCP_H */
|
||||
25
libdnet-stripped/include/dnet/tun.h
Normal file
25
libdnet-stripped/include/dnet/tun.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* tun.h
|
||||
*
|
||||
* Network tunnel device.
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: tun.h,v 1.2 2005/01/25 21:29:12 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_TUN_H
|
||||
#define DNET_TUN_H
|
||||
|
||||
typedef struct tun tun_t;
|
||||
|
||||
__BEGIN_DECLS
|
||||
tun_t *tun_open(struct addr *src, struct addr *dst, int mtu);
|
||||
int tun_fileno(tun_t *tun);
|
||||
const char *tun_name(tun_t *tun);
|
||||
ssize_t tun_send(tun_t *tun, const void *buf, size_t size);
|
||||
ssize_t tun_recv(tun_t *tun, void *buf, size_t size);
|
||||
tun_t *tun_close(tun_t *tun);
|
||||
__END_DECLS
|
||||
|
||||
#endif /* DNET_TUN_H */
|
||||
32
libdnet-stripped/include/dnet/udp.h
Normal file
32
libdnet-stripped/include/dnet/udp.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* udp.h
|
||||
*
|
||||
* User Datagram Protocol (RFC 768).
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: udp.h,v 1.8 2002/04/02 05:05:39 dugsong Exp $
|
||||
*/
|
||||
|
||||
#ifndef DNET_UDP_H
|
||||
#define DNET_UDP_H
|
||||
|
||||
#define UDP_HDR_LEN 8
|
||||
|
||||
struct udp_hdr {
|
||||
uint16_t uh_sport; /* source port */
|
||||
uint16_t uh_dport; /* destination port */
|
||||
uint16_t uh_ulen; /* udp length (including header) */
|
||||
uint16_t uh_sum; /* udp checksum */
|
||||
};
|
||||
|
||||
#define UDP_PORT_MAX 65535
|
||||
|
||||
#define udp_pack_hdr(hdr, sport, dport, ulen) do { \
|
||||
struct udp_hdr *udp_pack_p = (struct udp_hdr *)(hdr); \
|
||||
udp_pack_p->uh_sport = htons(sport); \
|
||||
udp_pack_p->uh_dport = htons(dport); \
|
||||
udp_pack_p->uh_ulen = htons(ulen); \
|
||||
} while (0)
|
||||
|
||||
#endif /* DNET_UDP_H */
|
||||
50
libdnet-stripped/include/err.h
Normal file
50
libdnet-stripped/include/err.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* err.h
|
||||
*
|
||||
* Adapted from OpenBSD libc *err* *warn* code.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* Copyright (c) 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.
|
||||
*
|
||||
* @(#)err.h 8.1 (Berkeley) 6/2/93
|
||||
*/
|
||||
|
||||
#ifndef _ERR_H_
|
||||
#define _ERR_H_
|
||||
|
||||
void err(int eval, const char *fmt, ...);
|
||||
void warn(const char *fmt, ...);
|
||||
void errx(int eval, const char *fmt, ...);
|
||||
void warnx(const char *fmt, ...);
|
||||
|
||||
#endif /* !_ERR_H_ */
|
||||
503
libdnet-stripped/include/queue.h
Normal file
503
libdnet-stripped/include/queue.h
Normal file
@@ -0,0 +1,503 @@
|
||||
/* $OpenBSD: queue.h,v 1.22 2001/06/23 04:39:35 angelos Exp $ */
|
||||
/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991, 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.
|
||||
*
|
||||
* @(#)queue.h 8.5 (Berkeley) 8/20/94
|
||||
*/
|
||||
|
||||
#ifndef _SYS_QUEUE_H_
|
||||
#define _SYS_QUEUE_H_
|
||||
|
||||
/*
|
||||
* This file defines five types of data structures: singly-linked lists,
|
||||
* lists, simple queues, tail queues, and circular queues.
|
||||
*
|
||||
*
|
||||
* A singly-linked list is headed by a single forward pointer. The elements
|
||||
* are singly linked for minimum space and pointer manipulation overhead at
|
||||
* the expense of O(n) removal for arbitrary elements. New elements can be
|
||||
* added to the list after an existing element or at the head of the list.
|
||||
* Elements being removed from the head of the list should use the explicit
|
||||
* macro for this purpose for optimum efficiency. A singly-linked list may
|
||||
* only be traversed in the forward direction. Singly-linked lists are ideal
|
||||
* for applications with large datasets and few or no removals or for
|
||||
* implementing a LIFO queue.
|
||||
*
|
||||
* A list is headed by a single forward pointer (or an array of forward
|
||||
* pointers for a hash table header). The elements are doubly linked
|
||||
* so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before
|
||||
* or after an existing element or at the head of the list. A list
|
||||
* may only be traversed in the forward direction.
|
||||
*
|
||||
* A simple queue is headed by a pair of pointers, one the head of the
|
||||
* list and the other to the tail of the list. The elements are singly
|
||||
* linked to save space, so elements can only be removed from the
|
||||
* head of the list. New elements can be added to the list before or after
|
||||
* an existing element, at the head of the list, or at the end of the
|
||||
* list. A simple queue may only be traversed in the forward direction.
|
||||
*
|
||||
* A tail queue is headed by a pair of pointers, one to the head of the
|
||||
* list and the other to the tail of the list. The elements are doubly
|
||||
* linked so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before or
|
||||
* after an existing element, at the head of the list, or at the end of
|
||||
* the list. A tail queue may be traversed in either direction.
|
||||
*
|
||||
* A circle queue is headed by a pair of pointers, one to the head of the
|
||||
* list and the other to the tail of the list. The elements are doubly
|
||||
* linked so that an arbitrary element can be removed without a need to
|
||||
* traverse the list. New elements can be added to the list before or after
|
||||
* an existing element, at the head of the list, or at the end of the list.
|
||||
* A circle queue may be traversed in either direction, but has a more
|
||||
* complex end of list detection.
|
||||
*
|
||||
* For details on the use of these macros, see the queue(3) manual page.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Singly-linked List definitions.
|
||||
*/
|
||||
#define SLIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *slh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define SLIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define SLIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *sle_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked List access methods.
|
||||
*/
|
||||
#define SLIST_FIRST(head) ((head)->slh_first)
|
||||
#define SLIST_END(head) NULL
|
||||
#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))
|
||||
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
|
||||
|
||||
#define SLIST_FOREACH(var, head, field) \
|
||||
for((var) = SLIST_FIRST(head); \
|
||||
(var) != SLIST_END(head); \
|
||||
(var) = SLIST_NEXT(var, field))
|
||||
|
||||
/*
|
||||
* Singly-linked List functions.
|
||||
*/
|
||||
#define SLIST_INIT(head) { \
|
||||
SLIST_FIRST(head) = SLIST_END(head); \
|
||||
}
|
||||
|
||||
#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
|
||||
(elm)->field.sle_next = (slistelm)->field.sle_next; \
|
||||
(slistelm)->field.sle_next = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_HEAD(head, elm, field) do { \
|
||||
(elm)->field.sle_next = (head)->slh_first; \
|
||||
(head)->slh_first = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_HEAD(head, field) do { \
|
||||
(head)->slh_first = (head)->slh_first->field.sle_next; \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE(head, elm, type, field) do { \
|
||||
if ((head)->slh_first == (elm)) { \
|
||||
SLIST_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
struct type *curelm = (head)->slh_first; \
|
||||
while( curelm->field.sle_next != (elm) ) \
|
||||
curelm = curelm->field.sle_next; \
|
||||
curelm->field.sle_next = \
|
||||
curelm->field.sle_next->field.sle_next; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* List definitions.
|
||||
*/
|
||||
#define LIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *lh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define LIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define LIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *le_next; /* next element */ \
|
||||
struct type **le_prev; /* address of previous next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* List access methods
|
||||
*/
|
||||
#define LIST_FIRST(head) ((head)->lh_first)
|
||||
#define LIST_END(head) NULL
|
||||
#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head))
|
||||
#define LIST_NEXT(elm, field) ((elm)->field.le_next)
|
||||
|
||||
#define LIST_FOREACH(var, head, field) \
|
||||
for((var) = LIST_FIRST(head); \
|
||||
(var)!= LIST_END(head); \
|
||||
(var) = LIST_NEXT(var, field))
|
||||
|
||||
/*
|
||||
* List functions.
|
||||
*/
|
||||
#define LIST_INIT(head) do { \
|
||||
LIST_FIRST(head) = LIST_END(head); \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
|
||||
if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \
|
||||
(listelm)->field.le_next->field.le_prev = \
|
||||
&(elm)->field.le_next; \
|
||||
(listelm)->field.le_next = (elm); \
|
||||
(elm)->field.le_prev = &(listelm)->field.le_next; \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
|
||||
(elm)->field.le_prev = (listelm)->field.le_prev; \
|
||||
(elm)->field.le_next = (listelm); \
|
||||
*(listelm)->field.le_prev = (elm); \
|
||||
(listelm)->field.le_prev = &(elm)->field.le_next; \
|
||||
} while (0)
|
||||
|
||||
#define LIST_INSERT_HEAD(head, elm, field) do { \
|
||||
if (((elm)->field.le_next = (head)->lh_first) != NULL) \
|
||||
(head)->lh_first->field.le_prev = &(elm)->field.le_next;\
|
||||
(head)->lh_first = (elm); \
|
||||
(elm)->field.le_prev = &(head)->lh_first; \
|
||||
} while (0)
|
||||
|
||||
#define LIST_REMOVE(elm, field) do { \
|
||||
if ((elm)->field.le_next != NULL) \
|
||||
(elm)->field.le_next->field.le_prev = \
|
||||
(elm)->field.le_prev; \
|
||||
*(elm)->field.le_prev = (elm)->field.le_next; \
|
||||
} while (0)
|
||||
|
||||
#define LIST_REPLACE(elm, elm2, field) do { \
|
||||
if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \
|
||||
(elm2)->field.le_next->field.le_prev = \
|
||||
&(elm2)->field.le_next; \
|
||||
(elm2)->field.le_prev = (elm)->field.le_prev; \
|
||||
*(elm2)->field.le_prev = (elm2); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Simple queue definitions.
|
||||
*/
|
||||
#define SIMPLEQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *sqh_first; /* first element */ \
|
||||
struct type **sqh_last; /* addr of last next element */ \
|
||||
}
|
||||
|
||||
#define SIMPLEQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).sqh_first }
|
||||
|
||||
#define SIMPLEQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *sqe_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Simple queue access methods.
|
||||
*/
|
||||
#define SIMPLEQ_FIRST(head) ((head)->sqh_first)
|
||||
#define SIMPLEQ_END(head) NULL
|
||||
#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
|
||||
#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
|
||||
|
||||
#define SIMPLEQ_FOREACH(var, head, field) \
|
||||
for((var) = SIMPLEQ_FIRST(head); \
|
||||
(var) != SIMPLEQ_END(head); \
|
||||
(var) = SIMPLEQ_NEXT(var, field))
|
||||
|
||||
/*
|
||||
* Simple queue functions.
|
||||
*/
|
||||
#define SIMPLEQ_INIT(head) do { \
|
||||
(head)->sqh_first = NULL; \
|
||||
(head)->sqh_last = &(head)->sqh_first; \
|
||||
} while (0)
|
||||
|
||||
#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
|
||||
if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
|
||||
(head)->sqh_last = &(elm)->field.sqe_next; \
|
||||
(head)->sqh_first = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
|
||||
(elm)->field.sqe_next = NULL; \
|
||||
*(head)->sqh_last = (elm); \
|
||||
(head)->sqh_last = &(elm)->field.sqe_next; \
|
||||
} while (0)
|
||||
|
||||
#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
|
||||
if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
|
||||
(head)->sqh_last = &(elm)->field.sqe_next; \
|
||||
(listelm)->field.sqe_next = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SIMPLEQ_REMOVE_HEAD(head, elm, field) do { \
|
||||
if (((head)->sqh_first = (elm)->field.sqe_next) == NULL) \
|
||||
(head)->sqh_last = &(head)->sqh_first; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Tail queue definitions.
|
||||
*/
|
||||
#define TAILQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *tqh_first; /* first element */ \
|
||||
struct type **tqh_last; /* addr of last next element */ \
|
||||
}
|
||||
|
||||
#define TAILQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).tqh_first }
|
||||
|
||||
#define TAILQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *tqe_next; /* next element */ \
|
||||
struct type **tqe_prev; /* address of previous next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* tail queue access methods
|
||||
*/
|
||||
#define TAILQ_FIRST(head) ((head)->tqh_first)
|
||||
#define TAILQ_END(head) NULL
|
||||
#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
|
||||
#define TAILQ_LAST(head, headname) \
|
||||
(*(((struct headname *)((head)->tqh_last))->tqh_last))
|
||||
/* XXX */
|
||||
#define TAILQ_PREV(elm, headname, field) \
|
||||
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
|
||||
#define TAILQ_EMPTY(head) \
|
||||
(TAILQ_FIRST(head) == TAILQ_END(head))
|
||||
|
||||
#define TAILQ_FOREACH(var, head, field) \
|
||||
for((var) = TAILQ_FIRST(head); \
|
||||
(var) != TAILQ_END(head); \
|
||||
(var) = TAILQ_NEXT(var, field))
|
||||
|
||||
#define TAILQ_FOREACH_REVERSE(var, head, field, headname) \
|
||||
for((var) = TAILQ_LAST(head, headname); \
|
||||
(var) != TAILQ_END(head); \
|
||||
(var) = TAILQ_PREV(var, headname, field))
|
||||
|
||||
/*
|
||||
* Tail queue functions.
|
||||
*/
|
||||
#define TAILQ_INIT(head) do { \
|
||||
(head)->tqh_first = NULL; \
|
||||
(head)->tqh_last = &(head)->tqh_first; \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_HEAD(head, elm, field) do { \
|
||||
if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
|
||||
(head)->tqh_first->field.tqe_prev = \
|
||||
&(elm)->field.tqe_next; \
|
||||
else \
|
||||
(head)->tqh_last = &(elm)->field.tqe_next; \
|
||||
(head)->tqh_first = (elm); \
|
||||
(elm)->field.tqe_prev = &(head)->tqh_first; \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_TAIL(head, elm, field) do { \
|
||||
(elm)->field.tqe_next = NULL; \
|
||||
(elm)->field.tqe_prev = (head)->tqh_last; \
|
||||
*(head)->tqh_last = (elm); \
|
||||
(head)->tqh_last = &(elm)->field.tqe_next; \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
|
||||
if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
|
||||
(elm)->field.tqe_next->field.tqe_prev = \
|
||||
&(elm)->field.tqe_next; \
|
||||
else \
|
||||
(head)->tqh_last = &(elm)->field.tqe_next; \
|
||||
(listelm)->field.tqe_next = (elm); \
|
||||
(elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
|
||||
(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
|
||||
(elm)->field.tqe_next = (listelm); \
|
||||
*(listelm)->field.tqe_prev = (elm); \
|
||||
(listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_REMOVE(head, elm, field) do { \
|
||||
if (((elm)->field.tqe_next) != NULL) \
|
||||
(elm)->field.tqe_next->field.tqe_prev = \
|
||||
(elm)->field.tqe_prev; \
|
||||
else \
|
||||
(head)->tqh_last = (elm)->field.tqe_prev; \
|
||||
*(elm)->field.tqe_prev = (elm)->field.tqe_next; \
|
||||
} while (0)
|
||||
|
||||
#define TAILQ_REPLACE(head, elm, elm2, field) do { \
|
||||
if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \
|
||||
(elm2)->field.tqe_next->field.tqe_prev = \
|
||||
&(elm2)->field.tqe_next; \
|
||||
else \
|
||||
(head)->tqh_last = &(elm2)->field.tqe_next; \
|
||||
(elm2)->field.tqe_prev = (elm)->field.tqe_prev; \
|
||||
*(elm2)->field.tqe_prev = (elm2); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Circular queue definitions.
|
||||
*/
|
||||
#define CIRCLEQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *cqh_first; /* first element */ \
|
||||
struct type *cqh_last; /* last element */ \
|
||||
}
|
||||
|
||||
#define CIRCLEQ_HEAD_INITIALIZER(head) \
|
||||
{ CIRCLEQ_END(&head), CIRCLEQ_END(&head) }
|
||||
|
||||
#define CIRCLEQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *cqe_next; /* next element */ \
|
||||
struct type *cqe_prev; /* previous element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Circular queue access methods
|
||||
*/
|
||||
#define CIRCLEQ_FIRST(head) ((head)->cqh_first)
|
||||
#define CIRCLEQ_LAST(head) ((head)->cqh_last)
|
||||
#define CIRCLEQ_END(head) ((void *)(head))
|
||||
#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)
|
||||
#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)
|
||||
#define CIRCLEQ_EMPTY(head) \
|
||||
(CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))
|
||||
|
||||
#define CIRCLEQ_FOREACH(var, head, field) \
|
||||
for((var) = CIRCLEQ_FIRST(head); \
|
||||
(var) != CIRCLEQ_END(head); \
|
||||
(var) = CIRCLEQ_NEXT(var, field))
|
||||
|
||||
#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \
|
||||
for((var) = CIRCLEQ_LAST(head); \
|
||||
(var) != CIRCLEQ_END(head); \
|
||||
(var) = CIRCLEQ_PREV(var, field))
|
||||
|
||||
/*
|
||||
* Circular queue functions.
|
||||
*/
|
||||
#define CIRCLEQ_INIT(head) do { \
|
||||
(head)->cqh_first = CIRCLEQ_END(head); \
|
||||
(head)->cqh_last = CIRCLEQ_END(head); \
|
||||
} while (0)
|
||||
|
||||
#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
|
||||
(elm)->field.cqe_next = (listelm)->field.cqe_next; \
|
||||
(elm)->field.cqe_prev = (listelm); \
|
||||
if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \
|
||||
(head)->cqh_last = (elm); \
|
||||
else \
|
||||
(listelm)->field.cqe_next->field.cqe_prev = (elm); \
|
||||
(listelm)->field.cqe_next = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
|
||||
(elm)->field.cqe_next = (listelm); \
|
||||
(elm)->field.cqe_prev = (listelm)->field.cqe_prev; \
|
||||
if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \
|
||||
(head)->cqh_first = (elm); \
|
||||
else \
|
||||
(listelm)->field.cqe_prev->field.cqe_next = (elm); \
|
||||
(listelm)->field.cqe_prev = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
|
||||
(elm)->field.cqe_next = (head)->cqh_first; \
|
||||
(elm)->field.cqe_prev = CIRCLEQ_END(head); \
|
||||
if ((head)->cqh_last == CIRCLEQ_END(head)) \
|
||||
(head)->cqh_last = (elm); \
|
||||
else \
|
||||
(head)->cqh_first->field.cqe_prev = (elm); \
|
||||
(head)->cqh_first = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
|
||||
(elm)->field.cqe_next = CIRCLEQ_END(head); \
|
||||
(elm)->field.cqe_prev = (head)->cqh_last; \
|
||||
if ((head)->cqh_first == CIRCLEQ_END(head)) \
|
||||
(head)->cqh_first = (elm); \
|
||||
else \
|
||||
(head)->cqh_last->field.cqe_next = (elm); \
|
||||
(head)->cqh_last = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define CIRCLEQ_REMOVE(head, elm, field) do { \
|
||||
if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \
|
||||
(head)->cqh_last = (elm)->field.cqe_prev; \
|
||||
else \
|
||||
(elm)->field.cqe_next->field.cqe_prev = \
|
||||
(elm)->field.cqe_prev; \
|
||||
if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \
|
||||
(head)->cqh_first = (elm)->field.cqe_next; \
|
||||
else \
|
||||
(elm)->field.cqe_prev->field.cqe_next = \
|
||||
(elm)->field.cqe_next; \
|
||||
} while (0)
|
||||
|
||||
#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \
|
||||
if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \
|
||||
CIRCLEQ_END(head)) \
|
||||
(head).cqh_last = (elm2); \
|
||||
else \
|
||||
(elm2)->field.cqe_next->field.cqe_prev = (elm2); \
|
||||
if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \
|
||||
CIRCLEQ_END(head)) \
|
||||
(head).cqh_first = (elm2); \
|
||||
else \
|
||||
(elm2)->field.cqe_prev->field.cqe_next = (elm2); \
|
||||
} while (0)
|
||||
|
||||
#endif /* !_SYS_QUEUE_H_ */
|
||||
1
libdnet-stripped/include/stamp-h.in
Normal file
1
libdnet-stripped/include/stamp-h.in
Normal file
@@ -0,0 +1 @@
|
||||
timestamp
|
||||
1
libdnet-stripped/include/stamp-h1
Normal file
1
libdnet-stripped/include/stamp-h1
Normal file
@@ -0,0 +1 @@
|
||||
timestamp for include/config.h
|
||||
7360
libdnet-stripped/libtool
Executable file
7360
libdnet-stripped/libtool
Executable file
File diff suppressed because it is too large
Load Diff
467
libdnet-stripped/src/Makefile
Normal file
467
libdnet-stripped/src/Makefile
Normal file
@@ -0,0 +1,467 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# src/Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
SOURCES = $(libdnet_la_SOURCES) $(EXTRA_libdnet_la_SOURCES)
|
||||
|
||||
srcdir = .
|
||||
top_srcdir = ..
|
||||
|
||||
pkgdatadir = $(datadir)/libdnet
|
||||
pkglibdir = $(libdir)/libdnet
|
||||
pkgincludedir = $(includedir)/libdnet
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = /usr/bin/install -c
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = x86_64-unknown-linux-gnu
|
||||
host_triplet = x86_64-unknown-linux-gnu
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||
$(top_srcdir)/Makefile.am.common arp-bsd.c arp-ioctl.c \
|
||||
arp-none.c arp-win32.c err.c eth-bsd.c eth-dlpi.c eth-linux.c \
|
||||
eth-ndd.c eth-none.c eth-pfilt.c eth-snoop.c eth-win32.c \
|
||||
fw-ipchains.c fw-ipf.c fw-ipfw.c fw-none.c fw-pf.c \
|
||||
fw-pktfilter.c intf-win32.c intf.c ip-cooked.c ip-win32.c ip.c \
|
||||
memcmp.c route-bsd.c route-hpux.c route-linux.c route-none.c \
|
||||
route-win32.c strlcat.c strlcpy.c strsep.c tun-bsd.c \
|
||||
tun-linux.c tun-none.c tun-solaris.c
|
||||
subdir = src
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libdnet_la_DEPENDENCIES = strlcat$U.lo strlcpy$U.lo arp-ioctl$U.lo eth-linux$U.lo fw-ipchains$U.lo intf$U.lo ip$U.lo route-linux$U.lo tun-linux$U.lo
|
||||
am_libdnet_la_OBJECTS = addr-util.lo addr.lo blob.lo ip-util.lo ip6.lo \
|
||||
rand.lo
|
||||
libdnet_la_OBJECTS = $(am_libdnet_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libdnet_la_SOURCES) $(EXTRA_libdnet_la_SOURCES)
|
||||
DIST_SOURCES = $(libdnet_la_SOURCES) $(EXTRA_libdnet_la_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run aclocal-1.9
|
||||
AMDEP_FALSE = #
|
||||
AMDEP_TRUE =
|
||||
AMTAR = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run tar
|
||||
AR = ar
|
||||
AUTOCONF = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run automake-1.9
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=none
|
||||
CFLAGS = -g -O2 -Wall
|
||||
CHECKINC =
|
||||
CHECKLIB =
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXCPP = g++ -E
|
||||
CXXDEPMODE = depmode=none
|
||||
CXXFLAGS = -g -O2
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
ECHO = echo
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = grep -E
|
||||
EXEEXT =
|
||||
F77 = g77
|
||||
FFLAGS = -g -O2
|
||||
HAVE_CHECK_FALSE =
|
||||
HAVE_CHECK_TRUE = #
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS = strlcat$U.o strlcpy$U.o arp-ioctl$U.o eth-linux$U.o fw-ipchains$U.o intf$U.o ip$U.o route-linux$U.o tun-linux$U.o
|
||||
LIBS =
|
||||
LIBTOOL = $(SHELL) $(top_builddir)/libtool
|
||||
LN_S = ln -s
|
||||
LTLIBOBJS = strlcat$U.lo strlcpy$U.lo arp-ioctl$U.lo eth-linux$U.lo fw-ipchains$U.lo intf$U.lo ip$U.lo route-linux$U.lo tun-linux$U.lo
|
||||
MAINT = #
|
||||
MAINTAINER_MODE_FALSE =
|
||||
MAINTAINER_MODE_TRUE = #
|
||||
MAKEINFO = ${SHELL} /home/fyodor/nmap/libdnet-stripped/config/missing --run makeinfo
|
||||
OBJEXT = o
|
||||
PACKAGE = libdnet
|
||||
PACKAGE_BUGREPORT =
|
||||
PACKAGE_NAME =
|
||||
PACKAGE_STRING =
|
||||
PACKAGE_TARNAME =
|
||||
PACKAGE_VERSION =
|
||||
PATH_SEPARATOR = :
|
||||
PYTHON =
|
||||
PYTHON_FALSE =
|
||||
PYTHON_TRUE = #
|
||||
RANLIB = ranlib
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP = strip
|
||||
TCLINC =
|
||||
TCLLIB =
|
||||
TCL_FALSE =
|
||||
TCL_TRUE = #
|
||||
VERSION = 1.10
|
||||
ac_aux_dir = config
|
||||
ac_ct_AR = ar
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
ac_ct_F77 = g77
|
||||
ac_ct_RANLIB = ranlib
|
||||
ac_ct_STRIP = strip
|
||||
am__fastdepCC_FALSE =
|
||||
am__fastdepCC_TRUE = #
|
||||
am__fastdepCXX_FALSE =
|
||||
am__fastdepCXX_TRUE = #
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build = x86_64-unknown-linux-gnu
|
||||
build_alias =
|
||||
build_cpu = x86_64
|
||||
build_os = linux-gnu
|
||||
build_vendor = unknown
|
||||
datadir = ${prefix}/share
|
||||
exec_prefix = ${prefix}
|
||||
host = x86_64-unknown-linux-gnu
|
||||
host_alias =
|
||||
host_cpu = x86_64
|
||||
host_os = linux-gnu
|
||||
host_vendor = unknown
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${prefix}/info
|
||||
install_sh = /home/fyodor/nmap/libdnet-stripped/config/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${prefix}/man
|
||||
mkdir_p = mkdir -p --
|
||||
oldincludedir = /usr/include
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
lib_LTLIBRARIES = libdnet.la
|
||||
libdnet_la_SOURCES = addr-util.c addr.c blob.c ip-util.c ip6.c rand.c
|
||||
EXTRA_libdnet_la_SOURCES =
|
||||
libdnet_la_LIBADD = strlcat$U.lo strlcpy$U.lo arp-ioctl$U.lo eth-linux$U.lo fw-ipchains$U.lo intf$U.lo ip$U.lo route-linux$U.lo tun-linux$U.lo
|
||||
libdnet_la_LDFLAGS = -version-info 1:0:0
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign src/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: # $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libdnet.la: $(libdnet_la_OBJECTS) $(libdnet_la_DEPENDENCIES)
|
||||
$(LINK) -rpath $(libdir) $(libdnet_la_LDFLAGS) $(libdnet_la_OBJECTS) $(libdnet_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
$(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/..
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-libLTLIBRARIES
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
13
libdnet-stripped/src/Makefile.am
Normal file
13
libdnet-stripped/src/Makefile.am
Normal file
@@ -0,0 +1,13 @@
|
||||
## $Id: Makefile.am,v 1.16 2005/02/10 17:06:36 dugsong Exp $
|
||||
|
||||
include $(top_srcdir)/Makefile.am.common
|
||||
|
||||
lib_LTLIBRARIES = libdnet.la
|
||||
|
||||
libdnet_la_SOURCES = addr-util.c addr.c blob.c ip-util.c ip6.c rand.c
|
||||
|
||||
EXTRA_libdnet_la_SOURCES =
|
||||
|
||||
libdnet_la_LIBADD = @LTLIBOBJS@
|
||||
|
||||
libdnet_la_LDFLAGS = -version-info 1:0:0
|
||||
467
libdnet-stripped/src/Makefile.in
Normal file
467
libdnet-stripped/src/Makefile.in
Normal file
@@ -0,0 +1,467 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
SOURCES = $(libdnet_la_SOURCES) $(EXTRA_libdnet_la_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||
$(top_srcdir)/Makefile.am.common arp-bsd.c arp-ioctl.c \
|
||||
arp-none.c arp-win32.c err.c eth-bsd.c eth-dlpi.c eth-linux.c \
|
||||
eth-ndd.c eth-none.c eth-pfilt.c eth-snoop.c eth-win32.c \
|
||||
fw-ipchains.c fw-ipf.c fw-ipfw.c fw-none.c fw-pf.c \
|
||||
fw-pktfilter.c intf-win32.c intf.c ip-cooked.c ip-win32.c ip.c \
|
||||
memcmp.c route-bsd.c route-hpux.c route-linux.c route-none.c \
|
||||
route-win32.c strlcat.c strlcpy.c strsep.c tun-bsd.c \
|
||||
tun-linux.c tun-none.c tun-solaris.c
|
||||
subdir = src
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/config/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/include/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(libdir)"
|
||||
libLTLIBRARIES_INSTALL = $(INSTALL)
|
||||
LTLIBRARIES = $(lib_LTLIBRARIES)
|
||||
libdnet_la_DEPENDENCIES = @LTLIBOBJS@
|
||||
am_libdnet_la_OBJECTS = addr-util.lo addr.lo blob.lo ip-util.lo ip6.lo \
|
||||
rand.lo
|
||||
libdnet_la_OBJECTS = $(am_libdnet_la_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
|
||||
depcomp =
|
||||
am__depfiles_maybe =
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(libdnet_la_SOURCES) $(EXTRA_libdnet_la_SOURCES)
|
||||
DIST_SOURCES = $(libdnet_la_SOURCES) $(EXTRA_libdnet_la_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHECKINC = @CHECKINC@
|
||||
CHECKLIB = @CHECKLIB@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
HAVE_CHECK_FALSE = @HAVE_CHECK_FALSE@
|
||||
HAVE_CHECK_TRUE = @HAVE_CHECK_TRUE@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_FALSE = @PYTHON_FALSE@
|
||||
PYTHON_TRUE = @PYTHON_TRUE@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TCLINC = @TCLINC@
|
||||
TCLLIB = @TCLLIB@
|
||||
TCL_FALSE = @TCL_FALSE@
|
||||
TCL_TRUE = @TCL_TRUE@
|
||||
VERSION = @VERSION@
|
||||
ac_aux_dir = @ac_aux_dir@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
DISTCLEANFILES = *~
|
||||
lib_LTLIBRARIES = libdnet.la
|
||||
libdnet_la_SOURCES = addr-util.c addr.c blob.c ip-util.c ip6.c rand.c
|
||||
EXTRA_libdnet_la_SOURCES =
|
||||
libdnet_la_LIBADD = @LTLIBOBJS@
|
||||
libdnet_la_LDFLAGS = -version-info 1:0:0
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/Makefile.am.common $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign src/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
if test -f $$p; then \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
|
||||
$(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
|
||||
else :; fi; \
|
||||
done
|
||||
|
||||
uninstall-libLTLIBRARIES:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
p=$(am__strip_dir) \
|
||||
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
|
||||
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
|
||||
done
|
||||
|
||||
clean-libLTLIBRARIES:
|
||||
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
|
||||
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
|
||||
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
|
||||
test "$$dir" != "$$p" || dir=.; \
|
||||
echo "rm -f \"$${dir}/so_locations\""; \
|
||||
rm -f "$${dir}/so_locations"; \
|
||||
done
|
||||
libdnet.la: $(libdnet_la_OBJECTS) $(libdnet_la_DEPENDENCIES)
|
||||
$(LINK) -rpath $(libdir) $(libdnet_la_LDFLAGS) $(libdnet_la_OBJECTS) $(libdnet_la_LIBADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
$(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
$(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/..
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(libdir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am: install-libLTLIBRARIES
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libLTLIBRARIES clean-libtool ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am \
|
||||
install-libLTLIBRARIES install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-libLTLIBRARIES
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
292
libdnet-stripped/src/addr-util.c
Normal file
292
libdnet-stripped/src/addr-util.c
Normal file
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
* addr-util.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: addr-util.c,v 1.4 2005/01/23 07:36:54 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
static const char *octet2dec[] = {
|
||||
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
|
||||
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23",
|
||||
"24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34",
|
||||
"35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45",
|
||||
"46", "47", "48", "49", "50", "51", "52", "53", "54", "55", "56",
|
||||
"57", "58", "59", "60", "61", "62", "63", "64", "65", "66", "67",
|
||||
"68", "69", "70", "71", "72", "73", "74", "75", "76", "77", "78",
|
||||
"79", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
|
||||
"90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "100",
|
||||
"101", "102", "103", "104", "105", "106", "107", "108", "109",
|
||||
"110", "111", "112", "113", "114", "115", "116", "117", "118",
|
||||
"119", "120", "121", "122", "123", "124", "125", "126", "127",
|
||||
"128", "129", "130", "131", "132", "133", "134", "135", "136",
|
||||
"137", "138", "139", "140", "141", "142", "143", "144", "145",
|
||||
"146", "147", "148", "149", "150", "151", "152", "153", "154",
|
||||
"155", "156", "157", "158", "159", "160", "161", "162", "163",
|
||||
"164", "165", "166", "167", "168", "169", "170", "171", "172",
|
||||
"173", "174", "175", "176", "177", "178", "179", "180", "181",
|
||||
"182", "183", "184", "185", "186", "187", "188", "189", "190",
|
||||
"191", "192", "193", "194", "195", "196", "197", "198", "199",
|
||||
"200", "201", "202", "203", "204", "205", "206", "207", "208",
|
||||
"209", "210", "211", "212", "213", "214", "215", "216", "217",
|
||||
"218", "219", "220", "221", "222", "223", "224", "225", "226",
|
||||
"227", "228", "229", "230", "231", "232", "233", "234", "235",
|
||||
"236", "237", "238", "239", "240", "241", "242", "243", "244",
|
||||
"245", "246", "247", "248", "249", "250", "251", "252", "253",
|
||||
"254", "255"
|
||||
};
|
||||
|
||||
static const char *octet2hex[] = {
|
||||
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a",
|
||||
"0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15",
|
||||
"16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20",
|
||||
"21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b",
|
||||
"2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36",
|
||||
"37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41",
|
||||
"42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c",
|
||||
"4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57",
|
||||
"58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62",
|
||||
"63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d",
|
||||
"6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78",
|
||||
"79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83",
|
||||
"84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e",
|
||||
"8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
|
||||
"9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4",
|
||||
"a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af",
|
||||
"b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba",
|
||||
"bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5",
|
||||
"c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0",
|
||||
"d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db",
|
||||
"dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6",
|
||||
"e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1",
|
||||
"f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc",
|
||||
"fd", "fe", "ff"
|
||||
};
|
||||
|
||||
char *
|
||||
eth_ntop(const eth_addr_t *eth, char *dst, size_t len)
|
||||
{
|
||||
const char *x;
|
||||
char *p = dst;
|
||||
int i;
|
||||
|
||||
if (len < 18)
|
||||
return (NULL);
|
||||
|
||||
for (i = 0; i < ETH_ADDR_LEN; i++) {
|
||||
for (x = octet2hex[eth->data[i]]; (*p = *x) != '\0'; x++, p++)
|
||||
;
|
||||
*p++ = ':';
|
||||
}
|
||||
p[-1] = '\0';
|
||||
|
||||
return (dst);
|
||||
}
|
||||
|
||||
char *
|
||||
eth_ntoa(const eth_addr_t *eth)
|
||||
{
|
||||
struct addr a;
|
||||
|
||||
addr_pack(&a, ADDR_TYPE_ETH, ETH_ADDR_BITS, eth->data, ETH_ADDR_LEN);
|
||||
return (addr_ntoa(&a));
|
||||
}
|
||||
|
||||
int
|
||||
eth_pton(const char *p, eth_addr_t *eth)
|
||||
{
|
||||
char *ep;
|
||||
long l;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ETH_ADDR_LEN; i++) {
|
||||
l = strtol(p, &ep, 16);
|
||||
if (ep == p || l < 0 || l > 0xff ||
|
||||
(i < ETH_ADDR_LEN - 1 && *ep != ':'))
|
||||
break;
|
||||
eth->data[i] = (u_char)l;
|
||||
p = ep + 1;
|
||||
}
|
||||
return ((i == ETH_ADDR_LEN && *ep == '\0') ? 0 : -1);
|
||||
}
|
||||
|
||||
char *
|
||||
ip_ntop(const ip_addr_t *ip, char *dst, size_t len)
|
||||
{
|
||||
const char *d;
|
||||
char *p = dst;
|
||||
u_char *data = (u_char *)ip;
|
||||
int i;
|
||||
|
||||
if (len < 16)
|
||||
return (NULL);
|
||||
|
||||
for (i = 0; i < IP_ADDR_LEN; i++) {
|
||||
for (d = octet2dec[data[i]]; (*p = *d) != '\0'; d++, p++)
|
||||
;
|
||||
*p++ = '.';
|
||||
}
|
||||
p[-1] = '\0';
|
||||
|
||||
return (dst);
|
||||
}
|
||||
|
||||
char *
|
||||
ip_ntoa(const ip_addr_t *ip)
|
||||
{
|
||||
struct addr a;
|
||||
|
||||
addr_pack(&a, ADDR_TYPE_IP, IP_ADDR_BITS, ip, IP_ADDR_LEN);
|
||||
return (addr_ntoa(&a));
|
||||
}
|
||||
|
||||
int
|
||||
ip_pton(const char *p, ip_addr_t *ip)
|
||||
{
|
||||
u_char *data = (u_char *)ip;
|
||||
char *ep;
|
||||
long l;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < IP_ADDR_LEN; i++) {
|
||||
l = strtol(p, &ep, 10);
|
||||
if (ep == p || l < 0 || l > 0xff ||
|
||||
(i < IP_ADDR_LEN - 1 && *ep != '.'))
|
||||
break;
|
||||
data[i] = (u_char)l;
|
||||
p = ep + 1;
|
||||
}
|
||||
return ((i == IP_ADDR_LEN && *ep == '\0') ? 0 : -1);
|
||||
}
|
||||
|
||||
char *
|
||||
ip6_ntop(const ip6_addr_t *ip6, char *dst, size_t len)
|
||||
{
|
||||
struct { int base, len; } best, cur;
|
||||
char *p = dst;
|
||||
int i;
|
||||
|
||||
if (len < 46)
|
||||
return (NULL);
|
||||
|
||||
best.base = cur.base = -1;
|
||||
/*
|
||||
* Algorithm borrowed from Vixie's inet_pton6()
|
||||
*/
|
||||
for (i = 0; i < IP6_ADDR_LEN; i += 2) {
|
||||
if (*((uint16_t *)&ip6->data[i]) == 0) {
|
||||
if (cur.base == -1) {
|
||||
cur.base = i;
|
||||
cur.len = 0;
|
||||
} else
|
||||
cur.len += 2;
|
||||
} else {
|
||||
if (cur.base != -1) {
|
||||
if (best.base == -1 || cur.len > best.len)
|
||||
best = cur;
|
||||
cur.base = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (cur.base != -1 && (best.base == -1 || cur.len > best.len))
|
||||
best = cur;
|
||||
if (best.base != -1 && best.len < 2)
|
||||
best.base = -1;
|
||||
if (best.base == 0)
|
||||
*p++ = ':';
|
||||
|
||||
for (i = 0; i < IP6_ADDR_LEN; i += 2) {
|
||||
if (i == best.base) {
|
||||
*p++ = ':';
|
||||
i += best.len;
|
||||
} else if (i == 12 && best.base == 0 &&
|
||||
(best.len == 10 || (best.len == 8 &&
|
||||
*((uint16_t *)&ip6->data[10]) == 0xffff))) {
|
||||
if (ip_ntop((ip_addr_t *)&ip6->data[12], p,
|
||||
len - (p - dst)) == NULL)
|
||||
return (NULL);
|
||||
return (dst);
|
||||
} else p += sprintf(p, "%x:",
|
||||
ntohs(*((uint16_t *)&ip6->data[i])));
|
||||
}
|
||||
if (best.base + 2 + best.len == IP6_ADDR_LEN) {
|
||||
*p = '\0';
|
||||
} else
|
||||
p[-1] = '\0';
|
||||
|
||||
return (dst);
|
||||
}
|
||||
|
||||
char *
|
||||
ip6_ntoa(const ip6_addr_t *ip6)
|
||||
{
|
||||
struct addr a;
|
||||
|
||||
addr_pack(&a, ADDR_TYPE_IP6, IP6_ADDR_BITS, ip6->data, IP6_ADDR_LEN);
|
||||
return (addr_ntoa(&a));
|
||||
}
|
||||
|
||||
int
|
||||
ip6_pton(const char *p, ip6_addr_t *ip6)
|
||||
{
|
||||
uint16_t data[8], *u = (uint16_t *)ip6->data;
|
||||
int i, j, n, z = -1;
|
||||
char *ep;
|
||||
long l;
|
||||
|
||||
if (*p == ':')
|
||||
p++;
|
||||
|
||||
for (n = 0; n < 8; n++) {
|
||||
l = strtol(p, &ep, 16);
|
||||
|
||||
if (ep == p) {
|
||||
if (ep[0] == ':' && z == -1) {
|
||||
z = n;
|
||||
p++;
|
||||
} else if (ep[0] == '\0') {
|
||||
break;
|
||||
} else {
|
||||
return (-1);
|
||||
}
|
||||
} else if (ep[0] == '.' && n <= 6) {
|
||||
if (ip_pton(p, (ip_addr_t *)(data + n)) < 0)
|
||||
return (-1);
|
||||
n += 2;
|
||||
ep = ""; /* XXX */
|
||||
break;
|
||||
} else if (l >= 0 && l <= 0xffff) {
|
||||
data[n] = htons((uint16_t)l);
|
||||
|
||||
if (ep[0] == '\0') {
|
||||
n++;
|
||||
break;
|
||||
} else if (ep[0] != ':' || ep[1] == '\0')
|
||||
return (-1);
|
||||
|
||||
p = ep + 1;
|
||||
} else
|
||||
return (-1);
|
||||
}
|
||||
if (n == 0 || *ep != '\0' || (z == -1 && n != 8))
|
||||
return (-1);
|
||||
|
||||
for (i = 0; i < z; i++) {
|
||||
u[i] = data[i];
|
||||
}
|
||||
while (i < 8 - (n - z - 1)) {
|
||||
u[i++] = 0;
|
||||
}
|
||||
for (j = z + 1; i < 8; i++, j++) {
|
||||
u[i] = data[j];
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
455
libdnet-stripped/src/addr.c
Normal file
455
libdnet-stripped/src/addr.c
Normal file
@@ -0,0 +1,455 @@
|
||||
/*
|
||||
* addr.c
|
||||
*
|
||||
* Network address operations.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: addr.c,v 1.33 2005/01/23 07:36:54 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_NET_IF_H
|
||||
# include <sys/socket.h>
|
||||
# include <net/if.h>
|
||||
#endif
|
||||
#ifdef HAVE_NET_IF_DL_H
|
||||
# include <net/if_dl.h>
|
||||
#endif
|
||||
#ifdef HAVE_NET_RAW_H
|
||||
# include <net/raw.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#ifndef MAXHOSTNAMELEN
|
||||
# define MAXHOSTNAMELEN 256
|
||||
#endif
|
||||
|
||||
union sockunion {
|
||||
#ifdef HAVE_NET_IF_DL_H
|
||||
struct sockaddr_dl sdl;
|
||||
#endif
|
||||
struct sockaddr_in sin;
|
||||
#ifdef HAVE_SOCKADDR_IN6
|
||||
struct sockaddr_in6 sin6;
|
||||
#endif
|
||||
struct sockaddr sa;
|
||||
#ifdef AF_RAW
|
||||
struct sockaddr_raw sr;
|
||||
#endif
|
||||
};
|
||||
|
||||
int
|
||||
addr_cmp(const struct addr *a, const struct addr *b)
|
||||
{
|
||||
int i, j, k;
|
||||
|
||||
/* XXX */
|
||||
if ((i = a->addr_type - b->addr_type) != 0)
|
||||
return (i);
|
||||
|
||||
/* XXX - 10.0.0.1 is "smaller" than 10.0.0.0/8? */
|
||||
if ((i = a->addr_bits - b->addr_bits) != 0)
|
||||
return (i);
|
||||
|
||||
j = b->addr_bits / 8;
|
||||
|
||||
for (i = 0; i < j; i++) {
|
||||
if ((k = a->addr_data8[i] - b->addr_data8[i]) != 0)
|
||||
return (k);
|
||||
}
|
||||
if ((k = b->addr_bits % 8) == 0)
|
||||
return (0);
|
||||
|
||||
k = ~0 << (8 - k);
|
||||
i = b->addr_data8[j] & k;
|
||||
j = a->addr_data8[j] & k;
|
||||
|
||||
return (j - i);
|
||||
}
|
||||
|
||||
int
|
||||
addr_net(const struct addr *a, struct addr *b)
|
||||
{
|
||||
uint32_t mask;
|
||||
int i, j;
|
||||
|
||||
if (a->addr_type == ADDR_TYPE_IP) {
|
||||
addr_btom(a->addr_bits, &mask, IP_ADDR_LEN);
|
||||
b->addr_type = ADDR_TYPE_IP;
|
||||
b->addr_bits = IP_ADDR_BITS;
|
||||
b->addr_ip = a->addr_ip & mask;
|
||||
} else if (a->addr_type == ADDR_TYPE_ETH) {
|
||||
memcpy(b, a, sizeof(*b));
|
||||
if (a->addr_data8[0] & 0x1)
|
||||
memset(b->addr_data8 + 3, 0, 3);
|
||||
b->addr_bits = ETH_ADDR_BITS;
|
||||
} else if (a->addr_type == ADDR_TYPE_IP6) {
|
||||
b->addr_type = ADDR_TYPE_IP6;
|
||||
b->addr_bits = IP6_ADDR_BITS;
|
||||
memset(&b->addr_ip6, 0, IP6_ADDR_LEN);
|
||||
|
||||
switch ((i = a->addr_bits / 32)) {
|
||||
case 4: b->addr_data32[3] = a->addr_data32[3];
|
||||
case 3: b->addr_data32[2] = a->addr_data32[2];
|
||||
case 2: b->addr_data32[1] = a->addr_data32[1];
|
||||
case 1: b->addr_data32[0] = a->addr_data32[0];
|
||||
}
|
||||
if ((j = a->addr_bits % 32) > 0) {
|
||||
addr_btom(j, &mask, sizeof(mask));
|
||||
b->addr_data32[i] = a->addr_data32[i] & mask;
|
||||
}
|
||||
} else
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
addr_bcast(const struct addr *a, struct addr *b)
|
||||
{
|
||||
struct addr mask;
|
||||
|
||||
if (a->addr_type == ADDR_TYPE_IP) {
|
||||
addr_btom(a->addr_bits, &mask.addr_ip, IP_ADDR_LEN);
|
||||
b->addr_type = ADDR_TYPE_IP;
|
||||
b->addr_bits = IP_ADDR_BITS;
|
||||
b->addr_ip = (a->addr_ip & mask.addr_ip) |
|
||||
(~0L & ~mask.addr_ip);
|
||||
} else if (a->addr_type == ADDR_TYPE_ETH) {
|
||||
b->addr_type = ADDR_TYPE_ETH;
|
||||
b->addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&b->addr_eth, ETH_ADDR_BROADCAST, ETH_ADDR_LEN);
|
||||
} else {
|
||||
/* XXX - no broadcast addresses in IPv6 */
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
char *
|
||||
addr_ntop(const struct addr *src, char *dst, size_t size)
|
||||
{
|
||||
if (src->addr_type == ADDR_TYPE_IP && size >= 20) {
|
||||
if (ip_ntop(&src->addr_ip, dst, size) != NULL) {
|
||||
if (src->addr_bits != IP_ADDR_BITS)
|
||||
sprintf(dst + strlen(dst), "/%d",
|
||||
src->addr_bits);
|
||||
return (dst);
|
||||
}
|
||||
} else if (src->addr_type == ADDR_TYPE_IP6 && size >= 42) {
|
||||
if (ip6_ntop(&src->addr_ip6, dst, size) != NULL) {
|
||||
if (src->addr_bits != IP6_ADDR_BITS)
|
||||
sprintf(dst + strlen(dst), "/%d",
|
||||
src->addr_bits);
|
||||
return (dst);
|
||||
}
|
||||
} else if (src->addr_type == ADDR_TYPE_ETH && size >= 18) {
|
||||
if (src->addr_bits == ETH_ADDR_BITS)
|
||||
return (eth_ntop(&src->addr_eth, dst, size));
|
||||
}
|
||||
errno = EINVAL;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
addr_pton(const char *src, struct addr *dst)
|
||||
{
|
||||
struct hostent *hp;
|
||||
char *ep, tmp[300];
|
||||
long bits = -1;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < (int)sizeof(tmp) - 1; i++) {
|
||||
if (src[i] == '/') {
|
||||
tmp[i] = '\0';
|
||||
if (strchr(&src[i + 1], '.')) {
|
||||
uint32_t m;
|
||||
uint16_t b;
|
||||
/* XXX - mask is specified like /255.0.0.0 */
|
||||
if (ip_pton(&src[i + 1], &m) != 0) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
addr_mtob(&m, sizeof(m), &b);
|
||||
bits = b;
|
||||
} else {
|
||||
bits = strtol(&src[i + 1], &ep, 10);
|
||||
if (ep == src || *ep != '\0' || bits < 0) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
} else if ((tmp[i] = src[i]) == '\0')
|
||||
break;
|
||||
}
|
||||
if (ip_pton(tmp, &dst->addr_ip) == 0) {
|
||||
dst->addr_type = ADDR_TYPE_IP;
|
||||
dst->addr_bits = IP_ADDR_BITS;
|
||||
} else if (eth_pton(tmp, &dst->addr_eth) == 0) {
|
||||
dst->addr_type = ADDR_TYPE_ETH;
|
||||
dst->addr_bits = ETH_ADDR_BITS;
|
||||
} else if (ip6_pton(tmp, &dst->addr_ip6) == 0) {
|
||||
dst->addr_type = ADDR_TYPE_IP6;
|
||||
dst->addr_bits = IP6_ADDR_BITS;
|
||||
} else if ((hp = gethostbyname(tmp)) != NULL) {
|
||||
memcpy(&dst->addr_ip, hp->h_addr, IP_ADDR_LEN);
|
||||
dst->addr_type = ADDR_TYPE_IP;
|
||||
dst->addr_bits = IP_ADDR_BITS;
|
||||
} else {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
if (bits >= 0) {
|
||||
if (bits > dst->addr_bits) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
dst->addr_bits = (uint16_t)bits;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
char *
|
||||
addr_ntoa(const struct addr *a)
|
||||
{
|
||||
static char *p, buf[BUFSIZ];
|
||||
char *q = NULL;
|
||||
|
||||
if (p == NULL || p > buf + sizeof(buf) - 64 /* XXX */)
|
||||
p = buf;
|
||||
|
||||
if (addr_ntop(a, p, (buf + sizeof(buf)) - p) != NULL) {
|
||||
q = p;
|
||||
p += strlen(p) + 1;
|
||||
}
|
||||
return (q);
|
||||
}
|
||||
|
||||
int
|
||||
addr_ntos(const struct addr *a, struct sockaddr *sa)
|
||||
{
|
||||
union sockunion *so = (union sockunion *)sa;
|
||||
|
||||
switch (a->addr_type) {
|
||||
case ADDR_TYPE_ETH:
|
||||
#ifdef HAVE_NET_IF_DL_H
|
||||
memset(&so->sdl, 0, sizeof(so->sdl));
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
so->sdl.sdl_len = sizeof(so->sdl);
|
||||
#endif
|
||||
so->sdl.sdl_family = AF_LINK;
|
||||
so->sdl.sdl_alen = ETH_ADDR_LEN;
|
||||
memcpy(LLADDR(&so->sdl), &a->addr_eth, ETH_ADDR_LEN);
|
||||
#else
|
||||
memset(sa, 0, sizeof(*sa));
|
||||
sa->sa_family = AF_UNSPEC;
|
||||
memcpy(sa->sa_data, &a->addr_eth, ETH_ADDR_LEN);
|
||||
#endif
|
||||
break;
|
||||
#ifdef HAVE_SOCKADDR_IN6
|
||||
case ADDR_TYPE_IP6:
|
||||
memset(&so->sin6, 0, sizeof(so->sin6));
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
so->sin6.sin6_len = sizeof(so->sin6);
|
||||
#endif
|
||||
so->sin6.sin6_family = AF_INET6;
|
||||
memcpy(&so->sin6.sin6_addr, &a->addr_ip6, IP6_ADDR_LEN);
|
||||
break;
|
||||
#endif
|
||||
case ADDR_TYPE_IP:
|
||||
memset(&so->sin, 0, sizeof(so->sin));
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
so->sin.sin_len = sizeof(so->sin);
|
||||
#endif
|
||||
so->sin.sin_family = AF_INET;
|
||||
so->sin.sin_addr.s_addr = a->addr_ip;
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
addr_ston(const struct sockaddr *sa, struct addr *a)
|
||||
{
|
||||
union sockunion *so = (union sockunion *)sa;
|
||||
|
||||
memset(a, 0, sizeof(*a));
|
||||
|
||||
switch (sa->sa_family) {
|
||||
#ifdef HAVE_NET_IF_DL_H
|
||||
case AF_LINK:
|
||||
if (so->sdl.sdl_alen != ETH_ADDR_LEN) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
a->addr_type = ADDR_TYPE_ETH;
|
||||
a->addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&a->addr_eth, LLADDR(&so->sdl), ETH_ADDR_LEN);
|
||||
break;
|
||||
#endif
|
||||
case AF_UNSPEC:
|
||||
case ARP_HRD_ETH: /* XXX- Linux arp(7) */
|
||||
a->addr_type = ADDR_TYPE_ETH;
|
||||
a->addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&a->addr_eth, sa->sa_data, ETH_ADDR_LEN);
|
||||
break;
|
||||
|
||||
#ifdef AF_RAW
|
||||
case AF_RAW: /* XXX - IRIX raw(7f) */
|
||||
a->addr_type = ADDR_TYPE_ETH;
|
||||
a->addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&a->addr_eth, so->sr.sr_addr, ETH_ADDR_LEN);
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_SOCKADDR_IN6
|
||||
case AF_INET6:
|
||||
a->addr_type = ADDR_TYPE_IP6;
|
||||
a->addr_bits = IP6_ADDR_BITS;
|
||||
memcpy(&a->addr_ip6, &so->sin6.sin6_addr, IP6_ADDR_LEN);
|
||||
break;
|
||||
#endif
|
||||
case AF_INET:
|
||||
a->addr_type = ADDR_TYPE_IP;
|
||||
a->addr_bits = IP_ADDR_BITS;
|
||||
a->addr_ip = so->sin.sin_addr.s_addr;
|
||||
break;
|
||||
default:
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
addr_btos(uint16_t bits, struct sockaddr *sa)
|
||||
{
|
||||
union sockunion *so = (union sockunion *)sa;
|
||||
|
||||
#ifdef HAVE_SOCKADDR_IN6
|
||||
if (bits > IP_ADDR_BITS && bits <= IP6_ADDR_BITS) {
|
||||
memset(&so->sin6, 0, sizeof(so->sin6));
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
so->sin6.sin6_len = IP6_ADDR_LEN + (bits / 8) + (bits % 8);
|
||||
#endif
|
||||
so->sin6.sin6_family = AF_INET6;
|
||||
return (addr_btom(bits, &so->sin6.sin6_addr, IP6_ADDR_LEN));
|
||||
} else
|
||||
#endif
|
||||
if (bits <= IP_ADDR_BITS) {
|
||||
memset(&so->sin, 0, sizeof(so->sin));
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
so->sin.sin_len = IP_ADDR_LEN + (bits / 8) + (bits % 8);
|
||||
#endif
|
||||
so->sin.sin_family = AF_INET;
|
||||
return (addr_btom(bits, &so->sin.sin_addr, IP_ADDR_LEN));
|
||||
}
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
addr_stob(const struct sockaddr *sa, uint16_t *bits)
|
||||
{
|
||||
union sockunion *so = (union sockunion *)sa;
|
||||
int i, j, len;
|
||||
uint16_t n;
|
||||
u_char *p;
|
||||
|
||||
#ifdef HAVE_SOCKADDR_IN6
|
||||
if (sa->sa_family == AF_INET6) {
|
||||
len = IP6_ADDR_LEN;
|
||||
p = (u_char *)&so->sin6.sin6_addr;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
if ((len = sa->sa_len - IP_ADDR_LEN) > IP_ADDR_LEN)
|
||||
#endif
|
||||
len = IP_ADDR_LEN;
|
||||
p = (u_char *)&so->sin.sin_addr.s_addr;
|
||||
}
|
||||
for (n = i = 0; i < len; i++, n += 8) {
|
||||
if (p[i] != 0xff)
|
||||
break;
|
||||
}
|
||||
if (i != len && p[i]) {
|
||||
for (j = 7; j > 0; j--, n++) {
|
||||
if ((p[i] & (1 << j)) == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
*bits = n;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
addr_btom(uint16_t bits, void *mask, size_t size)
|
||||
{
|
||||
int net, host;
|
||||
u_char *p;
|
||||
|
||||
if (size == IP_ADDR_LEN) {
|
||||
if (bits > IP_ADDR_BITS) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
*(uint32_t *)mask = bits ?
|
||||
htonl(~0 << (IP_ADDR_BITS - bits)) : 0;
|
||||
} else {
|
||||
if (size * 8 < bits) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
p = (u_char *)mask;
|
||||
|
||||
if ((net = bits / 8) > 0)
|
||||
memset(p, 0xff, net);
|
||||
|
||||
if ((host = bits % 8) > 0) {
|
||||
p[net] = 0xff << (8 - host);
|
||||
memset(&p[net + 1], 0, size - net - 1);
|
||||
} else
|
||||
memset(&p[net], 0, size - net);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
addr_mtob(const void *mask, size_t size, uint16_t *bits)
|
||||
{
|
||||
uint16_t n;
|
||||
u_char *p;
|
||||
int i, j;
|
||||
|
||||
p = (u_char *)mask;
|
||||
|
||||
for (n = i = 0; i < (int)size; i++, n += 8) {
|
||||
if (p[i] != 0xff)
|
||||
break;
|
||||
}
|
||||
if (i != (int)size && p[i]) {
|
||||
for (j = 7; j > 0; j--, n++) {
|
||||
if ((p[i] & (1 << j)) == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
*bits = n;
|
||||
|
||||
return (0);
|
||||
}
|
||||
323
libdnet-stripped/src/arp-bsd.c
Normal file
323
libdnet-stripped/src/arp-bsd.c
Normal file
@@ -0,0 +1,323 @@
|
||||
/*
|
||||
* arp-bsd.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: arp-bsd.c,v 1.14 2005/01/23 07:36:54 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SYSCTL_H
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_STREAMS_ROUTE
|
||||
#include <sys/stream.h>
|
||||
#include <sys/stropts.h>
|
||||
#endif
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/route.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/if_ether.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct arp_handle {
|
||||
int fd;
|
||||
int seq;
|
||||
};
|
||||
|
||||
struct arpmsg {
|
||||
struct rt_msghdr rtm;
|
||||
u_char addrs[256];
|
||||
};
|
||||
|
||||
arp_t *
|
||||
arp_open(void)
|
||||
{
|
||||
arp_t *arp;
|
||||
|
||||
if ((arp = calloc(1, sizeof(*arp))) != NULL) {
|
||||
#ifdef HAVE_STREAMS_ROUTE
|
||||
if ((arp->fd = open("/dev/route", O_RDWR, 0)) < 0)
|
||||
#else
|
||||
if ((arp->fd = socket(PF_ROUTE, SOCK_RAW, 0)) < 0)
|
||||
#endif
|
||||
return (arp_close(arp));
|
||||
}
|
||||
return (arp);
|
||||
}
|
||||
|
||||
static int
|
||||
arp_msg(arp_t *arp, struct arpmsg *msg)
|
||||
{
|
||||
struct arpmsg smsg;
|
||||
int len, i = 0;
|
||||
pid_t pid;
|
||||
|
||||
msg->rtm.rtm_version = RTM_VERSION;
|
||||
msg->rtm.rtm_seq = ++arp->seq;
|
||||
memcpy(&smsg, msg, sizeof(smsg));
|
||||
|
||||
#ifdef HAVE_STREAMS_ROUTE
|
||||
return (ioctl(arp->fd, RTSTR_SEND, &msg->rtm));
|
||||
#else
|
||||
if (write(arp->fd, &smsg, smsg.rtm.rtm_msglen) < 0) {
|
||||
if (errno != ESRCH || msg->rtm.rtm_type != RTM_DELETE)
|
||||
return (-1);
|
||||
}
|
||||
pid = getpid();
|
||||
|
||||
/* XXX - should we only read RTM_GET responses here? */
|
||||
while ((len = read(arp->fd, msg, sizeof(*msg))) > 0) {
|
||||
if (len < (int)sizeof(msg->rtm))
|
||||
return (-1);
|
||||
|
||||
if (msg->rtm.rtm_pid == pid) {
|
||||
if (msg->rtm.rtm_seq == arp->seq)
|
||||
break;
|
||||
continue;
|
||||
} else if ((i++ % 2) == 0)
|
||||
continue;
|
||||
|
||||
/* Repeat request. */
|
||||
if (write(arp->fd, &smsg, smsg.rtm.rtm_msglen) < 0) {
|
||||
if (errno != ESRCH || msg->rtm.rtm_type != RTM_DELETE)
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
if (len < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
#endif
|
||||
}
|
||||
|
||||
int
|
||||
arp_add(arp_t *arp, const struct arp_entry *entry)
|
||||
{
|
||||
struct arpmsg msg;
|
||||
struct sockaddr_in *sin;
|
||||
struct sockaddr *sa;
|
||||
int index, type;
|
||||
|
||||
if (entry->arp_pa.addr_type != ADDR_TYPE_IP ||
|
||||
entry->arp_ha.addr_type != ADDR_TYPE_ETH) {
|
||||
errno = EAFNOSUPPORT;
|
||||
return (-1);
|
||||
}
|
||||
sin = (struct sockaddr_in *)msg.addrs;
|
||||
sa = (struct sockaddr *)(sin + 1);
|
||||
|
||||
if (addr_ntos(&entry->arp_pa, (struct sockaddr *)sin) < 0)
|
||||
return (-1);
|
||||
|
||||
memset(&msg.rtm, 0, sizeof(msg.rtm));
|
||||
msg.rtm.rtm_type = RTM_GET;
|
||||
msg.rtm.rtm_addrs = RTA_DST;
|
||||
msg.rtm.rtm_msglen = sizeof(msg.rtm) + sizeof(*sin);
|
||||
|
||||
if (arp_msg(arp, &msg) < 0)
|
||||
return (-1);
|
||||
|
||||
if (msg.rtm.rtm_msglen < (int)sizeof(msg.rtm) +
|
||||
sizeof(*sin) + sizeof(*sa)) {
|
||||
errno = EADDRNOTAVAIL;
|
||||
return (-1);
|
||||
}
|
||||
if (sin->sin_addr.s_addr == entry->arp_pa.addr_ip) {
|
||||
if ((msg.rtm.rtm_flags & RTF_LLINFO) == 0 ||
|
||||
(msg.rtm.rtm_flags & RTF_GATEWAY) != 0) {
|
||||
errno = EADDRINUSE;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
if (sa->sa_family != AF_LINK) {
|
||||
errno = EADDRNOTAVAIL;
|
||||
return (-1);
|
||||
} else {
|
||||
index = ((struct sockaddr_dl *)sa)->sdl_index;
|
||||
type = ((struct sockaddr_dl *)sa)->sdl_type;
|
||||
}
|
||||
if (addr_ntos(&entry->arp_pa, (struct sockaddr *)sin) < 0 ||
|
||||
addr_ntos(&entry->arp_ha, sa) < 0)
|
||||
return (-1);
|
||||
|
||||
((struct sockaddr_dl *)sa)->sdl_index = index;
|
||||
((struct sockaddr_dl *)sa)->sdl_type = type;
|
||||
|
||||
memset(&msg.rtm, 0, sizeof(msg.rtm));
|
||||
msg.rtm.rtm_type = RTM_ADD;
|
||||
msg.rtm.rtm_addrs = RTA_DST | RTA_GATEWAY;
|
||||
msg.rtm.rtm_inits = RTV_EXPIRE;
|
||||
msg.rtm.rtm_flags = RTF_HOST | RTF_STATIC;
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
msg.rtm.rtm_msglen = sizeof(msg.rtm) + sin->sin_len + sa->sa_len;
|
||||
#else
|
||||
msg.rtm.rtm_msglen = sizeof(msg.rtm) + sizeof(*sin) + sizeof(*sa);
|
||||
#endif
|
||||
return (arp_msg(arp, &msg));
|
||||
}
|
||||
|
||||
int
|
||||
arp_delete(arp_t *arp, const struct arp_entry *entry)
|
||||
{
|
||||
struct arpmsg msg;
|
||||
struct sockaddr_in *sin;
|
||||
struct sockaddr *sa;
|
||||
|
||||
if (entry->arp_pa.addr_type != ADDR_TYPE_IP) {
|
||||
errno = EAFNOSUPPORT;
|
||||
return (-1);
|
||||
}
|
||||
sin = (struct sockaddr_in *)msg.addrs;
|
||||
sa = (struct sockaddr *)(sin + 1);
|
||||
|
||||
if (addr_ntos(&entry->arp_pa, (struct sockaddr *)sin) < 0)
|
||||
return (-1);
|
||||
|
||||
memset(&msg.rtm, 0, sizeof(msg.rtm));
|
||||
msg.rtm.rtm_type = RTM_GET;
|
||||
msg.rtm.rtm_addrs = RTA_DST;
|
||||
msg.rtm.rtm_msglen = sizeof(msg.rtm) + sizeof(*sin);
|
||||
|
||||
if (arp_msg(arp, &msg) < 0)
|
||||
return (-1);
|
||||
|
||||
if (msg.rtm.rtm_msglen < (int)sizeof(msg.rtm) +
|
||||
sizeof(*sin) + sizeof(*sa)) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
if (sin->sin_addr.s_addr == entry->arp_pa.addr_ip) {
|
||||
if ((msg.rtm.rtm_flags & RTF_LLINFO) == 0 ||
|
||||
(msg.rtm.rtm_flags & RTF_GATEWAY) != 0) {
|
||||
errno = EADDRINUSE;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
if (sa->sa_family != AF_LINK) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
msg.rtm.rtm_type = RTM_DELETE;
|
||||
|
||||
return (arp_msg(arp, &msg));
|
||||
}
|
||||
|
||||
int
|
||||
arp_get(arp_t *arp, struct arp_entry *entry)
|
||||
{
|
||||
struct arpmsg msg;
|
||||
struct sockaddr_in *sin;
|
||||
struct sockaddr *sa;
|
||||
|
||||
if (entry->arp_pa.addr_type != ADDR_TYPE_IP) {
|
||||
errno = EAFNOSUPPORT;
|
||||
return (-1);
|
||||
}
|
||||
sin = (struct sockaddr_in *)msg.addrs;
|
||||
sa = (struct sockaddr *)(sin + 1);
|
||||
|
||||
if (addr_ntos(&entry->arp_pa, (struct sockaddr *)sin) < 0)
|
||||
return (-1);
|
||||
|
||||
memset(&msg.rtm, 0, sizeof(msg.rtm));
|
||||
msg.rtm.rtm_type = RTM_GET;
|
||||
msg.rtm.rtm_addrs = RTA_DST;
|
||||
msg.rtm.rtm_flags = RTF_LLINFO;
|
||||
msg.rtm.rtm_msglen = sizeof(msg.rtm) + sizeof(*sin);
|
||||
|
||||
if (arp_msg(arp, &msg) < 0)
|
||||
return (-1);
|
||||
|
||||
if (msg.rtm.rtm_msglen < (int)sizeof(msg.rtm) +
|
||||
sizeof(*sin) + sizeof(*sa) ||
|
||||
sin->sin_addr.s_addr != entry->arp_pa.addr_ip ||
|
||||
sa->sa_family != AF_LINK) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
if (addr_ston(sa, &entry->arp_ha) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYS_SYSCTL_H
|
||||
int
|
||||
arp_loop(arp_t *arp, arp_handler callback, void *arg)
|
||||
{
|
||||
struct arp_entry entry;
|
||||
struct rt_msghdr *rtm;
|
||||
struct sockaddr_in *sin;
|
||||
struct sockaddr *sa;
|
||||
char *buf, *lim, *next;
|
||||
size_t len;
|
||||
int ret, mib[6] = { CTL_NET, PF_ROUTE, 0, AF_INET,
|
||||
NET_RT_FLAGS, RTF_LLINFO };
|
||||
|
||||
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
if (len == 0)
|
||||
return (0);
|
||||
|
||||
if ((buf = malloc(len)) == NULL)
|
||||
return (-1);
|
||||
|
||||
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
lim = buf + len;
|
||||
ret = 0;
|
||||
|
||||
for (next = buf; next < lim; next += rtm->rtm_msglen) {
|
||||
rtm = (struct rt_msghdr *)next;
|
||||
sin = (struct sockaddr_in *)(rtm + 1);
|
||||
sa = (struct sockaddr *)(sin + 1);
|
||||
|
||||
if (addr_ston((struct sockaddr *)sin, &entry.arp_pa) < 0 ||
|
||||
addr_ston(sa, &entry.arp_ha) < 0)
|
||||
continue;
|
||||
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
free(buf);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
#else
|
||||
int
|
||||
arp_loop(arp_t *arp, arp_handler callback, void *arg)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
|
||||
arp_t *
|
||||
arp_close(arp_t *arp)
|
||||
{
|
||||
if (arp != NULL) {
|
||||
if (arp->fd >= 0)
|
||||
close(arp->fd);
|
||||
free(arp);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
489
libdnet-stripped/src/arp-ioctl.c
Normal file
489
libdnet-stripped/src/arp-ioctl.c
Normal file
@@ -0,0 +1,489 @@
|
||||
/*
|
||||
* arp-ioctl.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: arp-ioctl.c,v 1.25 2005/02/09 22:31:00 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
# include <sys/sockio.h>
|
||||
# include <sys/stream.h>
|
||||
# include <sys/tihdr.h>
|
||||
# include <sys/tiuser.h>
|
||||
# include <inet/common.h>
|
||||
# include <inet/mib2.h>
|
||||
# include <inet/ip.h>
|
||||
# undef IP_ADDR_LEN
|
||||
#elif defined(HAVE_SYS_MIB_H)
|
||||
# include <sys/mib.h>
|
||||
#endif
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_arp.h>
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
# include <netinet/in.h>
|
||||
# include <stropts.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#ifdef HAVE_LINUX_PROCFS
|
||||
#define PROC_ARP_FILE "/proc/net/arp"
|
||||
#endif
|
||||
|
||||
struct arp_handle {
|
||||
int fd;
|
||||
#ifdef HAVE_ARPREQ_ARP_DEV
|
||||
intf_t *intf;
|
||||
#endif
|
||||
};
|
||||
|
||||
arp_t *
|
||||
arp_open(void)
|
||||
{
|
||||
arp_t *a;
|
||||
|
||||
if ((a = calloc(1, sizeof(*a))) != NULL) {
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
if ((a->fd = open(IP_DEV_NAME, O_RDWR)) < 0)
|
||||
#elif defined(HAVE_STREAMS_ROUTE)
|
||||
if ((a->fd = open("/dev/route", O_WRONLY, 0)) < 0)
|
||||
#else
|
||||
if ((a->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
#endif
|
||||
return (arp_close(a));
|
||||
#ifdef HAVE_ARPREQ_ARP_DEV
|
||||
if ((a->intf = intf_open()) == NULL)
|
||||
return (arp_close(a));
|
||||
#endif
|
||||
}
|
||||
return (a);
|
||||
}
|
||||
|
||||
#ifdef HAVE_ARPREQ_ARP_DEV
|
||||
static int
|
||||
_arp_set_dev(const struct intf_entry *entry, void *arg)
|
||||
{
|
||||
struct arpreq *ar = (struct arpreq *)arg;
|
||||
struct addr dst;
|
||||
uint32_t mask;
|
||||
|
||||
if (entry->intf_type == INTF_TYPE_ETH &&
|
||||
entry->intf_addr.addr_type == ADDR_TYPE_IP) {
|
||||
addr_btom(entry->intf_addr.addr_bits, &mask, IP_ADDR_LEN);
|
||||
addr_ston((struct sockaddr *)&ar->arp_pa, &dst);
|
||||
|
||||
if ((entry->intf_addr.addr_ip & mask) ==
|
||||
(dst.addr_ip & mask)) {
|
||||
strlcpy(ar->arp_dev, entry->intf_name,
|
||||
sizeof(ar->arp_dev));
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
arp_add(arp_t *a, const struct arp_entry *entry)
|
||||
{
|
||||
struct arpreq ar;
|
||||
|
||||
memset(&ar, 0, sizeof(ar));
|
||||
|
||||
if (addr_ntos(&entry->arp_pa, &ar.arp_pa) < 0)
|
||||
return (-1);
|
||||
|
||||
/* XXX - see arp(7) for details... */
|
||||
#ifdef __linux__
|
||||
if (addr_ntos(&entry->arp_ha, &ar.arp_ha) < 0)
|
||||
return (-1);
|
||||
ar.arp_ha.sa_family = ARP_HRD_ETH;
|
||||
#else
|
||||
/* XXX - Solaris, HP-UX, IRIX, other Mentat stacks? */
|
||||
ar.arp_ha.sa_family = AF_UNSPEC;
|
||||
memcpy(ar.arp_ha.sa_data, &entry->arp_ha.addr_eth, ETH_ADDR_LEN);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ARPREQ_ARP_DEV
|
||||
if (intf_loop(a->intf, _arp_set_dev, &ar) != 1) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
ar.arp_flags = ATF_PERM | ATF_COM;
|
||||
#ifdef hpux
|
||||
/* XXX - screwy extended arpreq struct */
|
||||
{
|
||||
struct sockaddr_in *sin;
|
||||
|
||||
ar.arp_hw_addr_len = ETH_ADDR_LEN;
|
||||
sin = (struct sockaddr_in *)&ar.arp_pa_mask;
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_addr.s_addr = IP_ADDR_BROADCAST;
|
||||
}
|
||||
#endif
|
||||
if (ioctl(a->fd, SIOCSARP, &ar) < 0)
|
||||
return (-1);
|
||||
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
/* XXX - force entry into ipNetToMediaTable. */
|
||||
{
|
||||
struct sockaddr_in sin;
|
||||
int fd;
|
||||
|
||||
addr_ntos(&entry->arp_pa, (struct sockaddr *)&sin);
|
||||
sin.sin_port = htons(666);
|
||||
|
||||
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
return (-1);
|
||||
|
||||
if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
|
||||
close(fd);
|
||||
return (-1);
|
||||
}
|
||||
write(fd, NULL, 0);
|
||||
close(fd);
|
||||
}
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
arp_delete(arp_t *a, const struct arp_entry *entry)
|
||||
{
|
||||
struct arpreq ar;
|
||||
|
||||
memset(&ar, 0, sizeof(ar));
|
||||
|
||||
if (addr_ntos(&entry->arp_pa, &ar.arp_pa) < 0)
|
||||
return (-1);
|
||||
|
||||
if (ioctl(a->fd, SIOCDARP, &ar) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
arp_get(arp_t *a, struct arp_entry *entry)
|
||||
{
|
||||
struct arpreq ar;
|
||||
|
||||
memset(&ar, 0, sizeof(ar));
|
||||
|
||||
if (addr_ntos(&entry->arp_pa, &ar.arp_pa) < 0)
|
||||
return (-1);
|
||||
|
||||
#ifdef HAVE_ARPREQ_ARP_DEV
|
||||
if (intf_loop(a->intf, _arp_set_dev, &ar) != 1) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
if (ioctl(a->fd, SIOCGARP, &ar) < 0)
|
||||
return (-1);
|
||||
|
||||
if ((ar.arp_flags & ATF_COM) == 0) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
return (addr_ston(&ar.arp_ha, &entry->arp_ha));
|
||||
}
|
||||
|
||||
#ifdef HAVE_LINUX_PROCFS
|
||||
int
|
||||
arp_loop(arp_t *a, arp_handler callback, void *arg)
|
||||
{
|
||||
FILE *fp;
|
||||
struct arp_entry entry;
|
||||
char buf[BUFSIZ], ipbuf[100], macbuf[100], maskbuf[100], devbuf[100];
|
||||
int i, type, flags, ret;
|
||||
|
||||
if ((fp = fopen(PROC_ARP_FILE, "r")) == NULL)
|
||||
return (-1);
|
||||
|
||||
ret = 0;
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
||||
i = sscanf(buf, "%s 0x%x 0x%x %100s %100s %100s\n",
|
||||
ipbuf, &type, &flags, macbuf, maskbuf, devbuf);
|
||||
|
||||
if (i < 4 || (flags & ATF_COM) == 0)
|
||||
continue;
|
||||
|
||||
if (addr_aton(ipbuf, &entry.arp_pa) == 0 &&
|
||||
addr_aton(macbuf, &entry.arp_ha) == 0) {
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ferror(fp)) {
|
||||
fclose(fp);
|
||||
return (-1);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
#elif defined (HAVE_STREAMS_MIB2)
|
||||
int
|
||||
arp_loop(arp_t *r, arp_handler callback, void *arg)
|
||||
{
|
||||
struct arp_entry entry;
|
||||
struct strbuf msg;
|
||||
struct T_optmgmt_req *tor;
|
||||
struct T_optmgmt_ack *toa;
|
||||
struct T_error_ack *tea;
|
||||
struct opthdr *opt;
|
||||
mib2_ipNetToMediaEntry_t *arp, *arpend;
|
||||
u_char buf[8192];
|
||||
int flags, rc, atable, ret;
|
||||
|
||||
tor = (struct T_optmgmt_req *)buf;
|
||||
toa = (struct T_optmgmt_ack *)buf;
|
||||
tea = (struct T_error_ack *)buf;
|
||||
|
||||
tor->PRIM_type = T_OPTMGMT_REQ;
|
||||
tor->OPT_offset = sizeof(*tor);
|
||||
tor->OPT_length = sizeof(*opt);
|
||||
tor->MGMT_flags = T_CURRENT;
|
||||
|
||||
opt = (struct opthdr *)(tor + 1);
|
||||
opt->level = MIB2_IP;
|
||||
opt->name = opt->len = 0;
|
||||
|
||||
msg.maxlen = sizeof(buf);
|
||||
msg.len = sizeof(*tor) + sizeof(*opt);
|
||||
msg.buf = buf;
|
||||
|
||||
if (putmsg(r->fd, &msg, NULL, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
opt = (struct opthdr *)(toa + 1);
|
||||
msg.maxlen = sizeof(buf);
|
||||
|
||||
for (;;) {
|
||||
flags = 0;
|
||||
if ((rc = getmsg(r->fd, &msg, NULL, &flags)) < 0)
|
||||
return (-1);
|
||||
|
||||
/* See if we're finished. */
|
||||
if (rc == 0 &&
|
||||
msg.len >= sizeof(*toa) &&
|
||||
toa->PRIM_type == T_OPTMGMT_ACK &&
|
||||
toa->MGMT_flags == T_SUCCESS && opt->len == 0)
|
||||
break;
|
||||
|
||||
if (msg.len >= sizeof(*tea) && tea->PRIM_type == T_ERROR_ACK)
|
||||
return (-1);
|
||||
|
||||
if (rc != MOREDATA || msg.len < (int)sizeof(*toa) ||
|
||||
toa->PRIM_type != T_OPTMGMT_ACK ||
|
||||
toa->MGMT_flags != T_SUCCESS)
|
||||
return (-1);
|
||||
|
||||
atable = (opt->level == MIB2_IP && opt->name == MIB2_IP_22);
|
||||
|
||||
msg.maxlen = sizeof(buf) - (sizeof(buf) % sizeof(*arp));
|
||||
msg.len = 0;
|
||||
flags = 0;
|
||||
|
||||
do {
|
||||
rc = getmsg(r->fd, NULL, &msg, &flags);
|
||||
|
||||
if (rc != 0 && rc != MOREDATA)
|
||||
return (-1);
|
||||
|
||||
if (!atable)
|
||||
continue;
|
||||
|
||||
arp = (mib2_ipNetToMediaEntry_t *)msg.buf;
|
||||
arpend = (mib2_ipNetToMediaEntry_t *)
|
||||
(msg.buf + msg.len);
|
||||
|
||||
entry.arp_pa.addr_type = ADDR_TYPE_IP;
|
||||
entry.arp_pa.addr_bits = IP_ADDR_BITS;
|
||||
|
||||
entry.arp_ha.addr_type = ADDR_TYPE_ETH;
|
||||
entry.arp_ha.addr_bits = ETH_ADDR_BITS;
|
||||
|
||||
for ( ; arp < arpend; arp++) {
|
||||
entry.arp_pa.addr_ip =
|
||||
arp->ipNetToMediaNetAddress;
|
||||
|
||||
memcpy(&entry.arp_ha.addr_eth,
|
||||
arp->ipNetToMediaPhysAddress.o_bytes,
|
||||
ETH_ADDR_LEN);
|
||||
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
} while (rc == MOREDATA);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#elif defined(HAVE_SYS_MIB_H)
|
||||
#define MAX_ARPENTRIES 512 /* XXX */
|
||||
|
||||
int
|
||||
arp_loop(arp_t *r, arp_handler callback, void *arg)
|
||||
{
|
||||
struct nmparms nm;
|
||||
struct arp_entry entry;
|
||||
mib_ipNetToMediaEnt arpentries[MAX_ARPENTRIES];
|
||||
int fd, i, n, ret;
|
||||
|
||||
if ((fd = open_mib("/dev/ip", O_RDWR, 0 /* XXX */, 0)) < 0)
|
||||
return (-1);
|
||||
|
||||
nm.objid = ID_ipNetToMediaTable;
|
||||
nm.buffer = arpentries;
|
||||
n = sizeof(arpentries);
|
||||
nm.len = &n;
|
||||
|
||||
if (get_mib_info(fd, &nm) < 0) {
|
||||
close_mib(fd);
|
||||
return (-1);
|
||||
}
|
||||
close_mib(fd);
|
||||
|
||||
entry.arp_pa.addr_type = ADDR_TYPE_IP;
|
||||
entry.arp_pa.addr_bits = IP_ADDR_BITS;
|
||||
|
||||
entry.arp_ha.addr_type = ADDR_TYPE_ETH;
|
||||
entry.arp_ha.addr_bits = ETH_ADDR_BITS;
|
||||
|
||||
n /= sizeof(*arpentries);
|
||||
ret = 0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (arpentries[i].Type == INTM_INVALID ||
|
||||
arpentries[i].PhysAddr.o_length != ETH_ADDR_LEN)
|
||||
continue;
|
||||
|
||||
entry.arp_pa.addr_ip = arpentries[i].NetAddr;
|
||||
memcpy(&entry.arp_ha.addr_eth, arpentries[i].PhysAddr.o_bytes,
|
||||
ETH_ADDR_LEN);
|
||||
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
#elif defined(HAVE_NET_RADIX_H)
|
||||
/* XXX - Tru64, others? */
|
||||
#include <netinet/if_ether.h>
|
||||
#include <nlist.h>
|
||||
|
||||
static int
|
||||
_kread(int fd, void *addr, void *buf, int len)
|
||||
{
|
||||
if (lseek(fd, (off_t)addr, SEEK_SET) == (off_t)-1L)
|
||||
return (-1);
|
||||
return (read(fd, buf, len) == len ? 0 : -1);
|
||||
}
|
||||
|
||||
static int
|
||||
_radix_walk(int fd, struct radix_node *rn, arp_handler callback, void *arg)
|
||||
{
|
||||
struct radix_node rnode;
|
||||
struct rtentry rt;
|
||||
struct sockaddr_in sin;
|
||||
struct arptab at;
|
||||
struct arp_entry entry;
|
||||
int ret = 0;
|
||||
again:
|
||||
_kread(fd, rn, &rnode, sizeof(rnode));
|
||||
if (rnode.rn_b < 0) {
|
||||
if (!(rnode.rn_flags & RNF_ROOT)) {
|
||||
_kread(fd, rn, &rt, sizeof(rt));
|
||||
_kread(fd, rt_key(&rt), &sin, sizeof(sin));
|
||||
addr_ston((struct sockaddr *)&sin, &entry.arp_pa);
|
||||
_kread(fd, rt.rt_llinfo, &at, sizeof(at));
|
||||
if (at.at_flags & ATF_COM) {
|
||||
addr_pack(&entry.arp_ha, ADDR_TYPE_ETH,
|
||||
ETH_ADDR_BITS, at.at_hwaddr, ETH_ADDR_LEN);
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
}
|
||||
if ((rn = rnode.rn_dupedkey))
|
||||
goto again;
|
||||
} else {
|
||||
rn = rnode.rn_r;
|
||||
if ((ret = _radix_walk(fd, rnode.rn_l, callback, arg)) != 0)
|
||||
return (ret);
|
||||
if ((ret = _radix_walk(fd, rn, callback, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
int
|
||||
arp_loop(arp_t *r, arp_handler callback, void *arg)
|
||||
{
|
||||
struct ifnet *ifp, ifnet;
|
||||
struct ifnet_arp_cache_head ifarp;
|
||||
struct radix_node_head *head;
|
||||
|
||||
struct nlist nl[2];
|
||||
int fd, ret = 0;
|
||||
|
||||
memset(nl, 0, sizeof(nl));
|
||||
nl[0].n_name = "ifnet";
|
||||
|
||||
if (knlist(nl) < 0 || nl[0].n_type == 0 ||
|
||||
(fd = open("/dev/kmem", O_RDONLY, 0)) < 0)
|
||||
return (-1);
|
||||
|
||||
for (ifp = (struct ifnet *)nl[0].n_value;
|
||||
ifp != NULL; ifp = ifnet.if_next) {
|
||||
_kread(fd, ifp, &ifnet, sizeof(ifnet));
|
||||
if (ifnet.if_arp_cache_head != NULL) {
|
||||
_kread(fd, ifnet.if_arp_cache_head,
|
||||
&ifarp, sizeof(ifarp));
|
||||
/* XXX - only ever one rnh, only ever AF_INET. */
|
||||
if ((ret = _radix_walk(fd, ifarp.arp_cache_head.rnh_treetop,
|
||||
callback, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
close(fd);
|
||||
return (ret);
|
||||
}
|
||||
#else
|
||||
int
|
||||
arp_loop(arp_t *a, arp_handler callback, void *arg)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
|
||||
arp_t *
|
||||
arp_close(arp_t *a)
|
||||
{
|
||||
if (a != NULL) {
|
||||
if (a->fd >= 0)
|
||||
close(a->fd);
|
||||
#ifdef HAVE_ARPREQ_ARP_DEV
|
||||
if (a->intf != NULL)
|
||||
intf_close(a->intf);
|
||||
#endif
|
||||
free(a);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
58
libdnet-stripped/src/arp-none.c
Normal file
58
libdnet-stripped/src/arp-none.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* arp-none.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: arp-none.c,v 1.5 2002/02/02 04:15:57 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
arp_t *
|
||||
arp_open(void)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
arp_add(arp_t *a, const struct arp_entry *entry)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
arp_delete(arp_t *a, const struct arp_entry *entry)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
arp_get(arp_t *a, struct arp_entry *entry)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
arp_loop(arp_t *a, arp_handler callback, void *arg)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
arp_t *
|
||||
arp_close(arp_t *a)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
141
libdnet-stripped/src/arp-win32.c
Normal file
141
libdnet-stripped/src/arp-win32.c
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* arp-win32.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: arp-win32.c,v 1.12 2005/01/23 07:36:54 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <ws2tcpip.h>
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct arp_handle {
|
||||
MIB_IPNETTABLE *iptable;
|
||||
};
|
||||
|
||||
arp_t *
|
||||
arp_open(void)
|
||||
{
|
||||
return (calloc(1, sizeof(arp_t)));
|
||||
}
|
||||
|
||||
int
|
||||
arp_add(arp_t *arp, const struct arp_entry *entry)
|
||||
{
|
||||
MIB_IPFORWARDROW ipfrow;
|
||||
MIB_IPNETROW iprow;
|
||||
|
||||
if (GetBestRoute(entry->arp_pa.addr_ip,
|
||||
IP_ADDR_ANY, &ipfrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
iprow.dwIndex = ipfrow.dwForwardIfIndex;
|
||||
iprow.dwPhysAddrLen = ETH_ADDR_LEN;
|
||||
memcpy(iprow.bPhysAddr, &entry->arp_ha.addr_eth, ETH_ADDR_LEN);
|
||||
iprow.dwAddr = entry->arp_pa.addr_ip;
|
||||
iprow.dwType = 4; /* XXX - static */
|
||||
|
||||
if (CreateIpNetEntry(&iprow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
arp_delete(arp_t *arp, const struct arp_entry *entry)
|
||||
{
|
||||
MIB_IPFORWARDROW ipfrow;
|
||||
MIB_IPNETROW iprow;
|
||||
|
||||
if (GetBestRoute(entry->arp_pa.addr_ip,
|
||||
IP_ADDR_ANY, &ipfrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
memset(&iprow, 0, sizeof(iprow));
|
||||
iprow.dwIndex = ipfrow.dwForwardIfIndex;
|
||||
iprow.dwAddr = entry->arp_pa.addr_ip;
|
||||
|
||||
if (DeleteIpNetEntry(&iprow) != NO_ERROR) {
|
||||
errno = ENXIO;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
_arp_get_entry(const struct arp_entry *entry, void *arg)
|
||||
{
|
||||
struct arp_entry *e = (struct arp_entry *)arg;
|
||||
|
||||
if (addr_cmp(&entry->arp_pa, &e->arp_pa) == 0) {
|
||||
memcpy(&e->arp_ha, &entry->arp_ha, sizeof(e->arp_ha));
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
arp_get(arp_t *arp, struct arp_entry *entry)
|
||||
{
|
||||
if (arp_loop(arp, _arp_get_entry, entry) != 1) {
|
||||
errno = ENXIO;
|
||||
SetLastError(ERROR_NO_DATA);
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
arp_loop(arp_t *arp, arp_handler callback, void *arg)
|
||||
{
|
||||
struct arp_entry entry;
|
||||
ULONG len;
|
||||
int i, ret;
|
||||
|
||||
for (len = sizeof(arp->iptable[0]); ; ) {
|
||||
if (arp->iptable)
|
||||
free(arp->iptable);
|
||||
arp->iptable = malloc(len);
|
||||
ret = GetIpNetTable(arp->iptable, &len, FALSE);
|
||||
if (ret == NO_ERROR)
|
||||
break;
|
||||
else if (ret != ERROR_INSUFFICIENT_BUFFER)
|
||||
return (-1);
|
||||
}
|
||||
entry.arp_pa.addr_type = ADDR_TYPE_IP;
|
||||
entry.arp_pa.addr_bits = IP_ADDR_BITS;
|
||||
|
||||
entry.arp_ha.addr_type = ADDR_TYPE_ETH;
|
||||
entry.arp_ha.addr_bits = ETH_ADDR_BITS;
|
||||
|
||||
for (i = 0; i < (int)arp->iptable->dwNumEntries; i++) {
|
||||
if (arp->iptable->table[i].dwPhysAddrLen != ETH_ADDR_LEN)
|
||||
continue;
|
||||
entry.arp_pa.addr_ip = arp->iptable->table[i].dwAddr;
|
||||
memcpy(&entry.arp_ha.addr_eth,
|
||||
arp->iptable->table[i].bPhysAddr, ETH_ADDR_LEN);
|
||||
|
||||
if ((ret = (*callback)(&entry, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
arp_t *
|
||||
arp_close(arp_t *arp)
|
||||
{
|
||||
if (arp != NULL) {
|
||||
if (arp->iptable != NULL)
|
||||
free(arp->iptable);
|
||||
free(arp);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
456
libdnet-stripped/src/blob.c
Normal file
456
libdnet-stripped/src/blob.c
Normal file
@@ -0,0 +1,456 @@
|
||||
/*
|
||||
* blob.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: blob.c,v 1.4 2002/08/20 05:18:49 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
static void *(*bl_malloc)(size_t) = malloc;
|
||||
static void *(*bl_realloc)(void *, size_t) = realloc;
|
||||
static void (*bl_free)(void *) = free;
|
||||
static int bl_size = BUFSIZ;
|
||||
|
||||
static int fmt_D(int, int, blob_t *, va_list *);
|
||||
static int fmt_H(int, int, blob_t *, va_list *);
|
||||
static int fmt_b(int, int, blob_t *, va_list *);
|
||||
static int fmt_c(int, int, blob_t *, va_list *);
|
||||
static int fmt_d(int, int, blob_t *, va_list *);
|
||||
static int fmt_h(int, int, blob_t *, va_list *);
|
||||
static int fmt_s(int, int, blob_t *, va_list *);
|
||||
|
||||
static void print_hexl(blob_t *);
|
||||
|
||||
static blob_fmt_cb blob_ascii_fmt[] = {
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, fmt_D, NULL, NULL, NULL,
|
||||
fmt_H, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, fmt_b, fmt_c, fmt_d, NULL, NULL, NULL,
|
||||
fmt_h, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, fmt_s, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
struct blob_printer {
|
||||
char *name;
|
||||
void (*print)(blob_t *);
|
||||
} blob_printers[] = {
|
||||
{ "hexl", print_hexl },
|
||||
{ NULL, NULL },
|
||||
};
|
||||
|
||||
blob_t *
|
||||
blob_new(void)
|
||||
{
|
||||
blob_t *b;
|
||||
|
||||
if ((b = bl_malloc(sizeof(*b))) != NULL) {
|
||||
b->off = b->end = 0;
|
||||
b->size = bl_size;
|
||||
if ((b->base = bl_malloc(b->size)) == NULL) {
|
||||
bl_free(b);
|
||||
b = NULL;
|
||||
}
|
||||
}
|
||||
return (b);
|
||||
}
|
||||
|
||||
static int
|
||||
blob_reserve(blob_t *b, int len)
|
||||
{
|
||||
void *p;
|
||||
int nsize;
|
||||
|
||||
if (b->size < b->end + len) {
|
||||
if (b->size == 0)
|
||||
return (-1);
|
||||
|
||||
if ((nsize = b->end + len) > bl_size)
|
||||
nsize = ((nsize / bl_size) + 1) * bl_size;
|
||||
|
||||
if ((p = bl_realloc(b->base, nsize)) == NULL)
|
||||
return (-1);
|
||||
|
||||
b->base = p;
|
||||
b->size = nsize;
|
||||
}
|
||||
b->end += len;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
blob_read(blob_t *b, void *buf, int len)
|
||||
{
|
||||
if (b->end - b->off < len)
|
||||
len = b->end - b->off;
|
||||
|
||||
memcpy(buf, b->base + b->off, len);
|
||||
b->off += len;
|
||||
|
||||
return (len);
|
||||
}
|
||||
|
||||
int
|
||||
blob_write(blob_t *b, const void *buf, int len)
|
||||
{
|
||||
if (b->off + len <= b->end ||
|
||||
blob_reserve(b, b->off + len - b->end) == 0) {
|
||||
memcpy(b->base + b->off, (u_char *)buf, len);
|
||||
b->off += len;
|
||||
return (len);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
blob_insert(blob_t *b, const void *buf, int len)
|
||||
{
|
||||
if (blob_reserve(b, len) == 0 && b->size) {
|
||||
if (b->end - b->off > 0)
|
||||
memmove(b->base + b->off, b->base + b->off + len,
|
||||
b->end - b->off);
|
||||
memcpy(b->base + b->off, buf, len);
|
||||
b->off += len;
|
||||
return (len);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
blob_delete(blob_t *b, void *buf, int len)
|
||||
{
|
||||
if (b->off + len <= b->end && b->size) {
|
||||
if (buf != NULL)
|
||||
memcpy(buf, b->base + b->off, len);
|
||||
memmove(b->base + b->off, b->base + b->off + len,
|
||||
b->end - (b->off + len));
|
||||
b->end -= len;
|
||||
return (len);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
static int
|
||||
blob_fmt(blob_t *b, int pack, const char *fmt, va_list *ap)
|
||||
{
|
||||
blob_fmt_cb fmt_cb;
|
||||
char *p;
|
||||
int len;
|
||||
|
||||
for (p = (char *)fmt; *p != '\0'; p++) {
|
||||
if (*p == '%') {
|
||||
p++;
|
||||
if (isdigit((int)*p)) {
|
||||
len = strtol(p, &p, 10);
|
||||
} else if (*p == '*') {
|
||||
len = va_arg(*ap, int);
|
||||
p++;
|
||||
} else
|
||||
len = 0;
|
||||
|
||||
if ((fmt_cb = blob_ascii_fmt[(int)*p]) == NULL)
|
||||
return (-1);
|
||||
|
||||
if ((*fmt_cb)(pack, len, b, ap) < 0)
|
||||
return (-1);
|
||||
} else {
|
||||
if (pack) {
|
||||
if (b->off + 1 < b->end ||
|
||||
blob_reserve(b, b->off + 1 - b->end) == 0)
|
||||
b->base[b->off++] = *p;
|
||||
else
|
||||
return (-1);
|
||||
} else {
|
||||
if (b->base[b->off++] != *p)
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
blob_pack(blob_t *b, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
return (blob_fmt(b, 1, fmt, &ap));
|
||||
}
|
||||
|
||||
int
|
||||
blob_unpack(blob_t *b, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
return (blob_fmt(b, 0, fmt, &ap));
|
||||
}
|
||||
|
||||
int
|
||||
blob_seek(blob_t *b, int off, int whence)
|
||||
{
|
||||
if (whence == SEEK_CUR)
|
||||
off += b->off;
|
||||
else if (whence == SEEK_END)
|
||||
off += b->end;
|
||||
|
||||
if (off < 0 || off > b->end)
|
||||
return (-1);
|
||||
|
||||
return ((b->off = off));
|
||||
}
|
||||
|
||||
int
|
||||
blob_index(blob_t *b, const void *buf, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = b->off; i <= b->end - len; i++) {
|
||||
if (memcmp(b->base + i, buf, len) == 0)
|
||||
return (i);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
blob_rindex(blob_t *b, const void *buf, int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = b->end - len; i >= 0; i--) {
|
||||
if (memcmp(b->base + i, buf, len) == 0)
|
||||
return (i);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
blob_print(blob_t *b, char *style, int len)
|
||||
{
|
||||
struct blob_printer *bp;
|
||||
|
||||
for (bp = blob_printers; bp->name != NULL; bp++) {
|
||||
if (strcmp(bp->name, style) == 0)
|
||||
bp->print(b);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
blob_sprint(blob_t *b, char *style, int len, char *dst, int size)
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
|
||||
blob_t *
|
||||
blob_free(blob_t *b)
|
||||
{
|
||||
if (b->size)
|
||||
bl_free(b->base);
|
||||
bl_free(b);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
blob_register_alloc(size_t size, void *(bmalloc)(size_t),
|
||||
void (*bfree)(void *), void *(*brealloc)(void *, size_t))
|
||||
{
|
||||
bl_size = size;
|
||||
if (bmalloc != NULL)
|
||||
bl_malloc = bmalloc;
|
||||
if (bfree != NULL)
|
||||
bl_free = bfree;
|
||||
if (brealloc != NULL)
|
||||
bl_realloc = brealloc;
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
blob_register_pack(char c, blob_fmt_cb fmt_cb)
|
||||
{
|
||||
if (blob_ascii_fmt[(int)c] == NULL) {
|
||||
blob_ascii_fmt[(int)c] = fmt_cb;
|
||||
return (0);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_D(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
if (len) return (-1);
|
||||
|
||||
if (pack) {
|
||||
uint32_t n = va_arg(*ap, uint32_t);
|
||||
n = htonl(n);
|
||||
if (blob_write(b, &n, sizeof(n)) < 0)
|
||||
return (-1);
|
||||
} else {
|
||||
uint32_t *n = va_arg(*ap, uint32_t *);
|
||||
if (blob_read(b, n, sizeof(*n)) != sizeof(*n))
|
||||
return (-1);
|
||||
*n = ntohl(*n);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_H(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
if (len) return (-1);
|
||||
|
||||
if (pack) {
|
||||
uint16_t n = va_arg(*ap, int);
|
||||
n = htons(n);
|
||||
if (blob_write(b, &n, sizeof(n)) < 0)
|
||||
return (-1);
|
||||
} else {
|
||||
uint16_t *n = va_arg(*ap, uint16_t *);
|
||||
if (blob_read(b, n, sizeof(*n)) != sizeof(*n))
|
||||
return (-1);
|
||||
*n = ntohs(*n);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_b(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
void *p = va_arg(*ap, void *);
|
||||
|
||||
if (len <= 0) return (-1);
|
||||
|
||||
if (pack)
|
||||
return (blob_write(b, p, len));
|
||||
else
|
||||
return (blob_read(b, p, len));
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_c(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
if (len) return (-1);
|
||||
|
||||
if (pack) {
|
||||
uint8_t n = va_arg(*ap, int);
|
||||
return (blob_write(b, &n, sizeof(n)));
|
||||
} else {
|
||||
uint8_t *n = va_arg(*ap, uint8_t *);
|
||||
return (blob_read(b, n, sizeof(*n)));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_d(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
if (len) return (-1);
|
||||
|
||||
if (pack) {
|
||||
uint32_t n = va_arg(*ap, uint32_t);
|
||||
return (blob_write(b, &n, sizeof(n)));
|
||||
} else {
|
||||
uint32_t *n = va_arg(*ap, uint32_t *);
|
||||
return (blob_read(b, n, sizeof(*n)));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_h(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
if (len) return (-1);
|
||||
|
||||
if (pack) {
|
||||
uint16_t n = va_arg(*ap, int);
|
||||
return (blob_write(b, &n, sizeof(n)));
|
||||
} else {
|
||||
uint16_t *n = va_arg(*ap, uint16_t *);
|
||||
return (blob_read(b, n, sizeof(*n)));
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
fmt_s(int pack, int len, blob_t *b, va_list *ap)
|
||||
{
|
||||
char *p = va_arg(*ap, char *);
|
||||
char c = '\0';
|
||||
int i, end;
|
||||
|
||||
if (pack) {
|
||||
if (len > 0) {
|
||||
if ((c = p[len - 1]) != '\0')
|
||||
p[len - 1] = '\0';
|
||||
} else
|
||||
len = strlen(p) + 1;
|
||||
|
||||
if (blob_write(b, p, len) > 0) {
|
||||
if (c != '\0')
|
||||
p[len - 1] = c;
|
||||
return (len);
|
||||
}
|
||||
} else {
|
||||
if (len <= 0) return (-1);
|
||||
|
||||
if ((end = b->end - b->off) < len)
|
||||
end = len;
|
||||
|
||||
for (i = 0; i < end; i++) {
|
||||
if ((p[i] = b->base[b->off + i]) == '\0') {
|
||||
b->off += i + 1;
|
||||
return (i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
static void
|
||||
print_hexl(blob_t *b)
|
||||
{
|
||||
u_int i, j, jm, len;
|
||||
u_char *p;
|
||||
int c;
|
||||
|
||||
p = b->base + b->off;
|
||||
len = b->end - b->off;
|
||||
|
||||
printf("\n");
|
||||
|
||||
for (i = 0; i < len; i += 0x10) {
|
||||
printf(" %04x: ", (u_int)(i + b->off));
|
||||
jm = len - i;
|
||||
jm = jm > 16 ? 16 : jm;
|
||||
|
||||
for (j = 0; j < jm; j++) {
|
||||
printf((j % 2) ? "%02x " : "%02x", (u_int)p[i + j]);
|
||||
}
|
||||
for (; j < 16; j++) {
|
||||
printf((j % 2) ? " " : " ");
|
||||
}
|
||||
printf(" ");
|
||||
|
||||
for (j = 0; j < jm; j++) {
|
||||
c = p[i + j];
|
||||
printf("%c", isprint(c) ? c : '.');
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
110
libdnet-stripped/src/err.c
Normal file
110
libdnet-stripped/src/err.c
Normal file
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* err.c
|
||||
*
|
||||
* Adapted from OpenBSD libc *err* *warn* code.
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* Copyright (c) 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.
|
||||
*/
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
void
|
||||
err(int eval, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
if (fmt != NULL) {
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, ": ");
|
||||
}
|
||||
va_end(ap);
|
||||
#ifdef _WIN32
|
||||
(void)fprintf(stderr, "error %lu\n", GetLastError());
|
||||
#else
|
||||
(void)fprintf(stderr, "%s\n", strerror(errno));
|
||||
#endif
|
||||
exit(eval);
|
||||
}
|
||||
|
||||
void
|
||||
warn(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
if (fmt != NULL) {
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, ": ");
|
||||
}
|
||||
va_end(ap);
|
||||
#ifdef _WIN32
|
||||
(void)fprintf(stderr, "error %lu\n", GetLastError());
|
||||
#else
|
||||
(void)fprintf(stderr, "%s\n", strerror(errno));
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
errx(int eval, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
if (fmt != NULL)
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, "\n");
|
||||
va_end(ap);
|
||||
exit(eval);
|
||||
}
|
||||
|
||||
void
|
||||
warnx(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
if (fmt != NULL)
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
(void)fprintf(stderr, "\n");
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
168
libdnet-stripped/src/eth-bsd.c
Normal file
168
libdnet-stripped/src/eth-bsd.c
Normal file
@@ -0,0 +1,168 @@
|
||||
/*
|
||||
* eth-bsd.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-bsd.c,v 1.10 2005/01/25 21:30:39 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_ROUTE_RT_MSGHDR)
|
||||
#include <sys/sysctl.h>
|
||||
#include <net/route.h>
|
||||
#include <net/if_dl.h>
|
||||
#endif
|
||||
#include <net/bpf.h>
|
||||
#include <net/if.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct eth_handle {
|
||||
int fd;
|
||||
char device[16];
|
||||
};
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
char file[32];
|
||||
eth_t *e;
|
||||
int i;
|
||||
|
||||
if ((e = calloc(1, sizeof(*e))) != NULL) {
|
||||
for (i = 0; i < 32; i++) {
|
||||
snprintf(file, sizeof(file), "/dev/bpf%d", i);
|
||||
e->fd = open(file, O_WRONLY);
|
||||
if (e->fd != -1 || errno != EBUSY)
|
||||
break;
|
||||
}
|
||||
if (e->fd < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strlcpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
|
||||
|
||||
if (ioctl(e->fd, BIOCSETIF, (char *)&ifr) < 0)
|
||||
return (eth_close(e));
|
||||
#ifdef BIOCSHDRCMPLT
|
||||
i = 1;
|
||||
if (ioctl(e->fd, BIOCSHDRCMPLT, &i) < 0)
|
||||
return (eth_close(e));
|
||||
#endif
|
||||
strlcpy(e->device, device, sizeof(e->device));
|
||||
}
|
||||
return (e);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
return (write(e->fd, buf, len));
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
if (e != NULL) {
|
||||
if (e->fd >= 0)
|
||||
close(e->fd);
|
||||
free(e);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
#if defined(HAVE_SYS_SYSCTL_H) && defined(HAVE_ROUTE_RT_MSGHDR)
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
struct if_msghdr *ifm;
|
||||
struct sockaddr_dl *sdl;
|
||||
struct addr ha;
|
||||
u_char *p, *buf;
|
||||
size_t len;
|
||||
int mib[] = { CTL_NET, AF_ROUTE, 0, AF_LINK, NET_RT_IFLIST, 0 };
|
||||
|
||||
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
if ((buf = malloc(len)) == NULL)
|
||||
return (-1);
|
||||
|
||||
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
for (p = buf; p < buf + len; p += ifm->ifm_msglen) {
|
||||
ifm = (struct if_msghdr *)p;
|
||||
sdl = (struct sockaddr_dl *)(ifm + 1);
|
||||
|
||||
if (ifm->ifm_type != RTM_IFINFO ||
|
||||
(ifm->ifm_addrs & RTA_IFP) == 0)
|
||||
continue;
|
||||
|
||||
if (sdl->sdl_family != AF_LINK || sdl->sdl_nlen == 0 ||
|
||||
memcmp(sdl->sdl_data, e->device, sdl->sdl_nlen) != 0)
|
||||
continue;
|
||||
|
||||
if (addr_ston((struct sockaddr *)sdl, &ha) == 0)
|
||||
break;
|
||||
}
|
||||
free(buf);
|
||||
|
||||
if (p >= buf + len) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
memcpy(ea, &ha.addr_eth, sizeof(*ea));
|
||||
|
||||
return (0);
|
||||
}
|
||||
#else
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(SIOCSIFLLADDR)
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
struct addr ha;
|
||||
|
||||
ha.addr_type = ADDR_TYPE_ETH;
|
||||
ha.addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&ha.addr_eth, ea, ETH_ADDR_LEN);
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strlcpy(ifr.ifr_name, e->device, sizeof(ifr.ifr_name));
|
||||
addr_ntos(&ha, &ifr.ifr_addr);
|
||||
|
||||
return (ioctl(e->fd, SIOCSIFLLADDR, &ifr));
|
||||
}
|
||||
#else
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
287
libdnet-stripped/src/eth-dlpi.c
Normal file
287
libdnet-stripped/src/eth-dlpi.c
Normal file
@@ -0,0 +1,287 @@
|
||||
/*
|
||||
* eth-dlpi.c
|
||||
*
|
||||
* Based on Neal Nuckolls' 1992 "How to Use DLPI" paper.
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-dlpi.c,v 1.19 2005/02/10 16:48:36 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef HAVE_SYS_BUFMOD_H
|
||||
#include <sys/bufmod.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_DLPI_H
|
||||
#include <sys/dlpi.h>
|
||||
#elif defined(HAVE_SYS_DLPIHDR_H)
|
||||
#include <sys/dlpihdr.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_DLPI_EXT_H
|
||||
#include <sys/dlpi_ext.h>
|
||||
#endif
|
||||
#include <sys/stream.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stropts.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#ifndef INFTIM
|
||||
#define INFTIM -1
|
||||
#endif
|
||||
|
||||
struct eth_handle {
|
||||
int fd;
|
||||
int sap_len;
|
||||
};
|
||||
|
||||
static int
|
||||
dlpi_msg(int fd, union DL_primitives *dlp, int rlen, int flags,
|
||||
int ack, int alen, int size)
|
||||
{
|
||||
struct strbuf ctl;
|
||||
|
||||
ctl.maxlen = 0;
|
||||
ctl.len = rlen;
|
||||
ctl.buf = (caddr_t)dlp;
|
||||
|
||||
if (putmsg(fd, &ctl, NULL, flags) < 0)
|
||||
return (-1);
|
||||
|
||||
ctl.maxlen = size;
|
||||
ctl.len = 0;
|
||||
|
||||
flags = 0;
|
||||
|
||||
if (getmsg(fd, &ctl, NULL, &flags) < 0)
|
||||
return (-1);
|
||||
|
||||
if (dlp->dl_primitive != ack || ctl.len < alen)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if defined(DLIOCRAW) || defined(HAVE_SYS_DLPIHDR_H)
|
||||
static int
|
||||
strioctl(int fd, int cmd, int len, char *dp)
|
||||
{
|
||||
struct strioctl str;
|
||||
|
||||
str.ic_cmd = cmd;
|
||||
str.ic_timout = INFTIM;
|
||||
str.ic_len = len;
|
||||
str.ic_dp = dp;
|
||||
|
||||
if (ioctl(fd, I_STR, &str) < 0)
|
||||
return (-1);
|
||||
|
||||
return (str.ic_len);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_DLPIHDR_H
|
||||
/* XXX - OSF1 is nuts */
|
||||
#define ND_GET ('N' << 8 + 0)
|
||||
|
||||
static int
|
||||
eth_match_ppa(eth_t *e, const char *device)
|
||||
{
|
||||
char *p, dev[16], buf[256];
|
||||
int len, ppa;
|
||||
|
||||
strlcpy(buf, "dl_ifnames", sizeof(buf));
|
||||
|
||||
if ((len = strioctl(e->fd, ND_GET, sizeof(buf), buf)) < 0)
|
||||
return (-1);
|
||||
|
||||
for (p = buf; p < buf + len; p += strlen(p) + 1) {
|
||||
ppa = -1;
|
||||
if (sscanf(p, "%s (PPA %d)\n", dev, &ppa) != 2)
|
||||
break;
|
||||
if (strcmp(dev, device) == 0)
|
||||
break;
|
||||
}
|
||||
return (ppa);
|
||||
}
|
||||
#endif
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
union DL_primitives *dlp;
|
||||
uint32_t buf[8192];
|
||||
char *p, dev[16];
|
||||
eth_t *e;
|
||||
int ppa;
|
||||
|
||||
if ((e = calloc(1, sizeof(*e))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
#ifdef HAVE_SYS_DLPIHDR_H
|
||||
if ((e->fd = open("/dev/streams/dlb", O_RDWR)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
if ((ppa = eth_match_ppa(e, device)) < 0) {
|
||||
errno = ESRCH;
|
||||
return (eth_close(e));
|
||||
}
|
||||
#else
|
||||
e->fd = -1;
|
||||
snprintf(dev, sizeof(dev), "/dev/%s", device);
|
||||
if ((p = strpbrk(dev, "0123456789")) == NULL) {
|
||||
errno = EINVAL;
|
||||
return (eth_close(e));
|
||||
}
|
||||
ppa = atoi(p);
|
||||
*p = '\0';
|
||||
|
||||
if ((e->fd = open(dev, O_RDWR)) < 0) {
|
||||
snprintf(dev, sizeof(dev), "/dev/%s", device);
|
||||
if ((e->fd = open(dev, O_RDWR)) < 0)
|
||||
return (eth_close(e));
|
||||
}
|
||||
#endif
|
||||
dlp = (union DL_primitives *)buf;
|
||||
dlp->info_req.dl_primitive = DL_INFO_REQ;
|
||||
|
||||
if (dlpi_msg(e->fd, dlp, DL_INFO_REQ_SIZE, RS_HIPRI,
|
||||
DL_INFO_ACK, DL_INFO_ACK_SIZE, sizeof(buf)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
e->sap_len = dlp->info_ack.dl_sap_length;
|
||||
|
||||
if (dlp->info_ack.dl_provider_style == DL_STYLE2) {
|
||||
dlp->attach_req.dl_primitive = DL_ATTACH_REQ;
|
||||
dlp->attach_req.dl_ppa = ppa;
|
||||
|
||||
if (dlpi_msg(e->fd, dlp, DL_ATTACH_REQ_SIZE, 0,
|
||||
DL_OK_ACK, DL_OK_ACK_SIZE, sizeof(buf)) < 0)
|
||||
return (eth_close(e));
|
||||
}
|
||||
memset(&dlp->bind_req, 0, DL_BIND_REQ_SIZE);
|
||||
dlp->bind_req.dl_primitive = DL_BIND_REQ;
|
||||
#ifdef DL_HP_RAWDLS
|
||||
dlp->bind_req.dl_sap = 24; /* from HP-UX DLPI programmers guide */
|
||||
dlp->bind_req.dl_service_mode = DL_HP_RAWDLS;
|
||||
#else
|
||||
dlp->bind_req.dl_sap = DL_ETHER;
|
||||
dlp->bind_req.dl_service_mode = DL_CLDLS;
|
||||
#endif
|
||||
if (dlpi_msg(e->fd, dlp, DL_BIND_REQ_SIZE, 0,
|
||||
DL_BIND_ACK, DL_BIND_ACK_SIZE, sizeof(buf)) < 0)
|
||||
return (eth_close(e));
|
||||
#ifdef DLIOCRAW
|
||||
if (strioctl(e->fd, DLIOCRAW, 0, NULL) < 0)
|
||||
return (eth_close(e));
|
||||
#endif
|
||||
return (e);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
#if defined(DLIOCRAW)
|
||||
return (write(e->fd, buf, len));
|
||||
#else
|
||||
union DL_primitives *dlp;
|
||||
struct strbuf ctl, data;
|
||||
struct eth_hdr *eth;
|
||||
uint32_t ctlbuf[8192];
|
||||
u_char sap[4] = { 0, 0, 0, 0 };
|
||||
int dlen;
|
||||
|
||||
dlp = (union DL_primitives *)ctlbuf;
|
||||
#ifdef DL_HP_RAWDATA_REQ
|
||||
dlp->dl_primitive = DL_HP_RAWDATA_REQ;
|
||||
dlen = DL_HP_RAWDATA_REQ_SIZE;
|
||||
#else
|
||||
dlp->unitdata_req.dl_primitive = DL_UNITDATA_REQ;
|
||||
dlp->unitdata_req.dl_dest_addr_length = ETH_ADDR_LEN;
|
||||
dlp->unitdata_req.dl_dest_addr_offset = DL_UNITDATA_REQ_SIZE;
|
||||
dlp->unitdata_req.dl_priority.dl_min =
|
||||
dlp->unitdata_req.dl_priority.dl_max = 0;
|
||||
dlen = DL_UNITDATA_REQ_SIZE;
|
||||
#endif
|
||||
eth = (struct eth_hdr *)buf;
|
||||
*(uint16_t *)sap = ntohs(eth->eth_type);
|
||||
|
||||
/* XXX - DLSAP setup logic from ISC DHCP */
|
||||
ctl.maxlen = 0;
|
||||
ctl.len = dlen + ETH_ADDR_LEN + abs(e->sap_len);
|
||||
ctl.buf = (char *)ctlbuf;
|
||||
|
||||
if (e->sap_len >= 0) {
|
||||
memcpy(ctlbuf + dlen, sap, e->sap_len);
|
||||
memcpy(ctlbuf + dlen + e->sap_len,
|
||||
eth->eth_dst.data, ETH_ADDR_LEN);
|
||||
} else {
|
||||
memcpy(ctlbuf + dlen, eth->eth_dst.data, ETH_ADDR_LEN);
|
||||
memcpy(ctlbuf + dlen + ETH_ADDR_LEN, sap, abs(e->sap_len));
|
||||
}
|
||||
data.maxlen = 0;
|
||||
data.len = len;
|
||||
data.buf = (char *)buf;
|
||||
|
||||
if (putmsg(e->fd, &ctl, &data, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
return (len);
|
||||
#endif
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
if (e != NULL) {
|
||||
if (e->fd >= 0)
|
||||
close(e->fd);
|
||||
free(e);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
union DL_primitives *dlp;
|
||||
u_char buf[2048];
|
||||
|
||||
dlp = (union DL_primitives *)buf;
|
||||
dlp->physaddr_req.dl_primitive = DL_PHYS_ADDR_REQ;
|
||||
dlp->physaddr_req.dl_addr_type = DL_CURR_PHYS_ADDR;
|
||||
|
||||
if (dlpi_msg(e->fd, dlp, DL_PHYS_ADDR_REQ_SIZE, 0,
|
||||
DL_PHYS_ADDR_ACK, DL_PHYS_ADDR_ACK_SIZE, sizeof(buf)) < 0)
|
||||
return (-1);
|
||||
|
||||
memcpy(ea, buf + dlp->physaddr_ack.dl_addr_offset, sizeof(*ea));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
union DL_primitives *dlp;
|
||||
u_char buf[2048];
|
||||
|
||||
dlp = (union DL_primitives *)buf;
|
||||
dlp->set_physaddr_req.dl_primitive = DL_SET_PHYS_ADDR_REQ;
|
||||
dlp->set_physaddr_req.dl_addr_length = ETH_ADDR_LEN;
|
||||
dlp->set_physaddr_req.dl_addr_offset = DL_SET_PHYS_ADDR_REQ_SIZE;
|
||||
|
||||
memcpy(buf + DL_SET_PHYS_ADDR_REQ_SIZE, ea, sizeof(*ea));
|
||||
|
||||
return (dlpi_msg(e->fd, dlp, DL_SET_PHYS_ADDR_REQ_SIZE + ETH_ADDR_LEN,
|
||||
0, DL_OK_ACK, DL_OK_ACK_SIZE, sizeof(buf)));
|
||||
}
|
||||
118
libdnet-stripped/src/eth-linux.c
Normal file
118
libdnet-stripped/src/eth-linux.c
Normal file
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* eth-linux.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-linux.c,v 1.8 2005/01/25 21:30:40 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <features.h>
|
||||
#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
|
||||
#include <netpacket/packet.h>
|
||||
#include <net/ethernet.h>
|
||||
#else
|
||||
#include <asm/types.h>
|
||||
#include <linux/if_packet.h>
|
||||
#include <linux/if_ether.h>
|
||||
#endif /* __GLIBC__ */
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct eth_handle {
|
||||
int fd;
|
||||
struct ifreq ifr;
|
||||
struct sockaddr_ll sll;
|
||||
};
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
eth_t *e;
|
||||
int n;
|
||||
|
||||
if ((e = calloc(1, sizeof(*e))) != NULL) {
|
||||
if ((e->fd = socket(PF_PACKET, SOCK_RAW,
|
||||
htons(ETH_P_ALL))) < 0)
|
||||
return (eth_close(e));
|
||||
#ifdef SO_BROADCAST
|
||||
n = 1;
|
||||
if (setsockopt(e->fd, SOL_SOCKET, SO_BROADCAST, &n,
|
||||
sizeof(n)) < 0)
|
||||
return (eth_close(e));
|
||||
#endif
|
||||
strlcpy(e->ifr.ifr_name, device, sizeof(e->ifr.ifr_name));
|
||||
|
||||
if (ioctl(e->fd, SIOCGIFINDEX, &e->ifr) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
e->sll.sll_family = AF_PACKET;
|
||||
e->sll.sll_ifindex = e->ifr.ifr_ifindex;
|
||||
}
|
||||
return (e);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
struct eth_hdr *eth = (struct eth_hdr *)buf;
|
||||
|
||||
e->sll.sll_protocol = eth->eth_type;
|
||||
|
||||
return (sendto(e->fd, buf, len, 0, (struct sockaddr *)&e->sll,
|
||||
sizeof(e->sll)));
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
if (e != NULL) {
|
||||
if (e->fd >= 0)
|
||||
close(e->fd);
|
||||
free(e);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
struct addr ha;
|
||||
|
||||
if (ioctl(e->fd, SIOCGIFHWADDR, &e->ifr) < 0)
|
||||
return (-1);
|
||||
|
||||
if (addr_ston(&e->ifr.ifr_hwaddr, &ha) < 0)
|
||||
return (-1);
|
||||
|
||||
memcpy(ea, &ha.addr_eth, sizeof(*ea));
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
struct addr ha;
|
||||
|
||||
ha.addr_type = ADDR_TYPE_ETH;
|
||||
ha.addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&ha.addr_eth, ea, ETH_ADDR_LEN);
|
||||
|
||||
addr_ntos(&ha, &e->ifr.ifr_hwaddr);
|
||||
|
||||
return (ioctl(e->fd, SIOCSIFHWADDR, &e->ifr));
|
||||
}
|
||||
117
libdnet-stripped/src/eth-ndd.c
Normal file
117
libdnet-stripped/src/eth-ndd.c
Normal file
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* eth-ndd.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-ndd.c,v 1.7 2005/01/25 21:30:40 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ndd_var.h>
|
||||
#include <sys/kinfo.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct eth_handle {
|
||||
char device[16];
|
||||
int fd;
|
||||
};
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
struct sockaddr_ndd_8022 sa;
|
||||
eth_t *e;
|
||||
|
||||
if ((e = calloc(1, sizeof(*e))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((e->fd = socket(AF_NDD, SOCK_DGRAM, NDD_PROT_ETHER)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
sa.sndd_8022_family = AF_NDD;
|
||||
sa.sndd_8022_len = sizeof(sa);
|
||||
sa.sndd_8022_filtertype = NS_ETHERTYPE;
|
||||
sa.sndd_8022_ethertype = ETH_TYPE_IP;
|
||||
sa.sndd_8022_filterlen = sizeof(struct ns_8022);
|
||||
strlcpy(sa.sndd_8022_nddname, device, sizeof(sa.sndd_8022_nddname));
|
||||
|
||||
if (bind(e->fd, (struct sockaddr *)&sa, sizeof(sa)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
if (connect(e->fd, (struct sockaddr *)&sa, sizeof(sa)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
/* XXX - SO_BROADCAST needed? */
|
||||
|
||||
return (e);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
return (write(e->fd, buf, len));
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
if (e != NULL) {
|
||||
if (e->fd >= 0)
|
||||
close(e->fd);
|
||||
free(e);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
struct kinfo_ndd *nddp;
|
||||
int size;
|
||||
void *end;
|
||||
|
||||
if ((size = getkerninfo(KINFO_NDD, 0, 0, 0)) == 0) {
|
||||
errno = ENOENT;
|
||||
return (-1);
|
||||
} else if (size < 0)
|
||||
return (-1);
|
||||
|
||||
if ((nddp = malloc(size)) == NULL)
|
||||
return (-1);
|
||||
|
||||
if (getkerninfo(KINFO_NDD, nddp, &size, 0) < 0) {
|
||||
free(nddp);
|
||||
return (-1);
|
||||
}
|
||||
for (end = (void *)nddp + size; (void *)nddp < end; nddp++) {
|
||||
if (strcmp(nddp->ndd_alias, e->device) == 0 ||
|
||||
strcmp(nddp->ndd_name, e->device) == 0) {
|
||||
memcpy(ea, nddp->ndd_addr, sizeof(*ea));
|
||||
}
|
||||
}
|
||||
free(nddp);
|
||||
|
||||
if ((void *)nddp >= end) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
51
libdnet-stripped/src/eth-none.c
Normal file
51
libdnet-stripped/src/eth-none.c
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* eth-none.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-none.c,v 1.6 2005/01/25 21:30:40 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
87
libdnet-stripped/src/eth-pfilt.c
Normal file
87
libdnet-stripped/src/eth-pfilt.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* eth-pfilt.c
|
||||
*
|
||||
* XXX - requires 'cd dev && ./MAKEDEV pfilt' if not already configured...
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-pfilt.c,v 1.1 2005/02/10 17:06:36 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/pfilt.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct eth_handle {
|
||||
int fd;
|
||||
int sock;
|
||||
char device[16];
|
||||
};
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
struct eth_handle *e;
|
||||
int fd;
|
||||
|
||||
if ((e = calloc(1, sizeof(*e))) != NULL) {
|
||||
strlcpy(e->device, device, sizeof(e->device));
|
||||
if ((e->fd = pfopen(e->device, O_WRONLY)) < 0 ||
|
||||
(e->sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
e = eth_close(e);
|
||||
}
|
||||
return (e);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
struct ifdevea ifd;
|
||||
|
||||
strlcpy(ifd.ifr_name, e->device, sizeof(ifd.ifr_name));
|
||||
if (ioctl(e->sock, SIOCRPHYSADDR, &ifd) < 0)
|
||||
return (-1);
|
||||
memcpy(ea, ifd.current_pa, ETH_ADDR_LEN);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
struct ifdevea ifd;
|
||||
|
||||
strlcpy(ifd.ifr_name, e->device, sizeof(ifd.ifr_name));
|
||||
memcpy(ifd.current_pa, ea, ETH_ADDR_LEN);
|
||||
return (ioctl(e->sock, SIOCSPHYSADDR, &ifd));
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
return (write(e->fd, buf, len));
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
if (e != NULL) {
|
||||
if (e->fd >= 0)
|
||||
close(e->fd);
|
||||
if (e->sock >= 0)
|
||||
close(e->sock);
|
||||
free(e);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
109
libdnet-stripped/src/eth-snoop.c
Normal file
109
libdnet-stripped/src/eth-snoop.c
Normal file
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* eth-snoop.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-snoop.c,v 1.9 2005/01/30 06:01:57 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/raw.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct eth_handle {
|
||||
int fd;
|
||||
struct ifreq ifr;
|
||||
};
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
struct sockaddr_raw sr;
|
||||
eth_t *e;
|
||||
int n;
|
||||
|
||||
if ((e = calloc(1, sizeof(*e))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((e->fd = socket(PF_RAW, SOCK_RAW, RAWPROTO_SNOOP)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
memset(&sr, 0, sizeof(sr));
|
||||
sr.sr_family = AF_RAW;
|
||||
strlcpy(sr.sr_ifname, device, sizeof(sr.sr_ifname));
|
||||
|
||||
if (bind(e->fd, (struct sockaddr *)&sr, sizeof(sr)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
n = 60000;
|
||||
if (setsockopt(e->fd, SOL_SOCKET, SO_SNDBUF, &n, sizeof(n)) < 0)
|
||||
return (eth_close(e));
|
||||
|
||||
strlcpy(e->ifr.ifr_name, device, sizeof(e->ifr.ifr_name));
|
||||
|
||||
return (e);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *e, eth_addr_t *ea)
|
||||
{
|
||||
struct addr ha;
|
||||
|
||||
if (ioctl(e->fd, SIOCGIFADDR, &e->ifr) < 0)
|
||||
return (-1);
|
||||
|
||||
if (addr_ston(&e->ifr.ifr_addr, &ha) < 0)
|
||||
return (-1);
|
||||
|
||||
if (ha.addr_type != ADDR_TYPE_ETH) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
memcpy(ea, &ha.addr_eth, sizeof(*ea));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *e, const eth_addr_t *ea)
|
||||
{
|
||||
struct addr ha;
|
||||
|
||||
ha.addr_type = ADDR_TYPE_ETH;
|
||||
ha.addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&ha.addr_eth, ea, ETH_ADDR_LEN);
|
||||
|
||||
if (addr_ntos(&ha, &e->ifr.ifr_addr) < 0)
|
||||
return (-1);
|
||||
|
||||
return (ioctl(e->fd, SIOCSIFADDR, &e->ifr));
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *e, const void *buf, size_t len)
|
||||
{
|
||||
return (write(e->fd, buf, len));
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *e)
|
||||
{
|
||||
if (e != NULL) {
|
||||
if (e->fd >= 0)
|
||||
close(e->fd);
|
||||
free(e);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
166
libdnet-stripped/src/eth-win32.c
Normal file
166
libdnet-stripped/src/eth-win32.c
Normal file
@@ -0,0 +1,166 @@
|
||||
/*
|
||||
* eth-win32.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: eth-win32.c,v 1.11 2005/02/15 06:37:06 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/* XXX - VC++ 6.0 bogosity */
|
||||
#define sockaddr_storage sockaddr
|
||||
#include <Packet32.h>
|
||||
#undef sockaddr_storage
|
||||
#include <Ntddndis.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct eth_handle {
|
||||
LPADAPTER lpa;
|
||||
LPPACKET pkt;
|
||||
};
|
||||
|
||||
struct adapter {
|
||||
char name[64];
|
||||
char *desc;
|
||||
};
|
||||
|
||||
/* XXX */
|
||||
extern const char *intf_get_desc(intf_t *intf, const char *device);
|
||||
|
||||
eth_t *
|
||||
eth_open(const char *device)
|
||||
{
|
||||
eth_t *eth;
|
||||
struct adapter alist[16];
|
||||
WCHAR *name, wbuf[2048];
|
||||
ULONG wlen;
|
||||
char *desc, *namea;
|
||||
int i, j, alen;
|
||||
OSVERSIONINFO osvi;
|
||||
intf_t *intf;
|
||||
|
||||
if ((intf = intf_open()) == NULL)
|
||||
return (NULL);
|
||||
|
||||
device = intf_get_desc(intf, device);
|
||||
intf_close(intf);
|
||||
|
||||
if (device == NULL)
|
||||
return (NULL);
|
||||
|
||||
alen = sizeof(alist) / sizeof(alist[0]);
|
||||
wlen = sizeof(wbuf) / sizeof(wbuf[0]);
|
||||
|
||||
PacketGetAdapterNames((char *)wbuf, &wlen);
|
||||
|
||||
/* Determine Windows version */
|
||||
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||
GetVersionEx(&osvi);
|
||||
|
||||
if ((osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
|
||||
(osvi.dwMajorVersion >= 4)) {
|
||||
for (name = wbuf, i = 0; *name != '\0' && i < alen; i++) {
|
||||
wcstombs(alist[i].name, name, sizeof(alist[0].name));
|
||||
while (*name++ != '\0')
|
||||
;
|
||||
}
|
||||
for (desc = (char *)name + 2, j = 0; *desc != '\0' && j < alen;
|
||||
j++) {
|
||||
alist[j].desc = desc;
|
||||
while (*desc++ != '\0')
|
||||
;
|
||||
}
|
||||
} else {
|
||||
for (namea = (char *)wbuf, i = 0; *namea != '\0' && i < alen;
|
||||
i++) {
|
||||
strlcpy(alist[i].name, namea, sizeof(alist[0].name));
|
||||
while (*namea++ != '\0')
|
||||
;
|
||||
}
|
||||
for (desc = namea + 1, j = 0; *desc != '\0' && j < alen; j++) {
|
||||
alist[j].desc = desc;
|
||||
while (*desc++ != '\0')
|
||||
;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < j; i++) {
|
||||
if (strcmp(device, alist[i].desc) == 0)
|
||||
break;
|
||||
}
|
||||
if (i == j)
|
||||
return (NULL);
|
||||
|
||||
if ((eth = calloc(1, sizeof(*eth))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((eth->lpa = PacketOpenAdapter(alist[i].name)) == NULL ||
|
||||
eth->lpa->hFile == INVALID_HANDLE_VALUE)
|
||||
return (eth_close(eth));
|
||||
|
||||
PacketSetBuff(eth->lpa, 512000);
|
||||
|
||||
if ((eth->pkt = PacketAllocatePacket()) == NULL)
|
||||
return (eth_close(eth));
|
||||
|
||||
return (eth);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
eth_send(eth_t *eth, const void *buf, size_t len)
|
||||
{
|
||||
PacketInitPacket(eth->pkt, (void *)buf, len);
|
||||
PacketSendPacket(eth->lpa, eth->pkt, TRUE);
|
||||
return (len);
|
||||
}
|
||||
|
||||
eth_t *
|
||||
eth_close(eth_t *eth)
|
||||
{
|
||||
if (eth != NULL) {
|
||||
if (eth->pkt != NULL)
|
||||
PacketFreePacket(eth->pkt);
|
||||
if (eth->lpa != NULL)
|
||||
PacketCloseAdapter(eth->lpa);
|
||||
free(eth);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
eth_get(eth_t *eth, eth_addr_t *ea)
|
||||
{
|
||||
PACKET_OID_DATA *data;
|
||||
u_char buf[512];
|
||||
|
||||
data = (PACKET_OID_DATA *)buf;
|
||||
data->Oid = OID_802_3_CURRENT_ADDRESS;
|
||||
data->Length = ETH_ADDR_LEN;
|
||||
|
||||
if (PacketRequest(eth->lpa, FALSE, data) == TRUE) {
|
||||
memcpy(ea, data->Data, ETH_ADDR_LEN);
|
||||
return (0);
|
||||
}
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
eth_set(eth_t *eth, const eth_addr_t *ea)
|
||||
{
|
||||
PACKET_OID_DATA *data;
|
||||
u_char buf[512];
|
||||
|
||||
data = (PACKET_OID_DATA *)buf;
|
||||
data->Oid = OID_802_3_CURRENT_ADDRESS;
|
||||
memcpy(data->Data, ea, ETH_ADDR_LEN);
|
||||
data->Length = ETH_ADDR_LEN;
|
||||
|
||||
if (PacketRequest(eth->lpa, TRUE, data) == TRUE)
|
||||
return (0);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
227
libdnet-stripped/src/fw-ipchains.c
Normal file
227
libdnet-stripped/src/fw-ipchains.c
Normal file
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* fw-ipchains.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: fw-ipchains.c,v 1.8 2004/05/05 21:25:20 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <netinet/udp.h>
|
||||
#undef __USE_BSD
|
||||
#include <netinet/ip_icmp.h>
|
||||
#include <linux/if.h>
|
||||
#ifdef HAVE_LINUX_IP_FW_H
|
||||
#include <linux/ip_fw.h>
|
||||
#elif defined(HAVE_LINUX_IP_FWCHAINS_H)
|
||||
#include <linux/ip_fwchains.h>
|
||||
#elif defined(HAVE_LINUX_NETFILTER_IPV4_IPCHAINS_CORE_H)
|
||||
#include <linux/netfilter_ipv4/ipchains_core.h>
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#define PROC_IPCHAINS_FILE "/proc/net/ip_fwchains"
|
||||
|
||||
struct fw_handle {
|
||||
int fd;
|
||||
};
|
||||
|
||||
static void
|
||||
fr_to_fwc(const struct fw_rule *fr, struct ip_fwchange *fwc)
|
||||
{
|
||||
memset(fwc, 0, sizeof(*fwc));
|
||||
|
||||
strlcpy(fwc->fwc_rule.ipfw.fw_vianame, fr->fw_device, IFNAMSIZ);
|
||||
|
||||
if (fr->fw_op == FW_OP_ALLOW)
|
||||
strlcpy(fwc->fwc_rule.label, IP_FW_LABEL_ACCEPT,
|
||||
sizeof(fwc->fwc_rule.label));
|
||||
else
|
||||
strlcpy(fwc->fwc_rule.label, IP_FW_LABEL_BLOCK,
|
||||
sizeof(fwc->fwc_rule.label));
|
||||
|
||||
if (fr->fw_dir == FW_DIR_IN)
|
||||
strlcpy(fwc->fwc_label, IP_FW_LABEL_INPUT,
|
||||
sizeof(fwc->fwc_label));
|
||||
else
|
||||
strlcpy(fwc->fwc_label, IP_FW_LABEL_OUTPUT,
|
||||
sizeof(fwc->fwc_label));
|
||||
|
||||
fwc->fwc_rule.ipfw.fw_proto = fr->fw_proto;
|
||||
fwc->fwc_rule.ipfw.fw_src.s_addr = fr->fw_src.addr_ip;
|
||||
fwc->fwc_rule.ipfw.fw_dst.s_addr = fr->fw_dst.addr_ip;
|
||||
addr_btom(fr->fw_src.addr_bits, &fwc->fwc_rule.ipfw.fw_smsk.s_addr,
|
||||
IP_ADDR_LEN);
|
||||
addr_btom(fr->fw_dst.addr_bits, &fwc->fwc_rule.ipfw.fw_dmsk.s_addr,
|
||||
IP_ADDR_LEN);
|
||||
|
||||
/* XXX - ICMP? */
|
||||
fwc->fwc_rule.ipfw.fw_spts[0] = fr->fw_sport[0];
|
||||
fwc->fwc_rule.ipfw.fw_spts[1] = fr->fw_sport[1];
|
||||
fwc->fwc_rule.ipfw.fw_dpts[0] = fr->fw_dport[0];
|
||||
fwc->fwc_rule.ipfw.fw_dpts[1] = fr->fw_dport[1];
|
||||
}
|
||||
|
||||
static void
|
||||
fwc_to_fr(const struct ip_fwchange *fwc, struct fw_rule *fr)
|
||||
{
|
||||
memset(fr, 0, sizeof(*fr));
|
||||
|
||||
strlcpy(fr->fw_device, fwc->fwc_rule.ipfw.fw_vianame,
|
||||
sizeof(fr->fw_device));
|
||||
|
||||
if (strcmp(fwc->fwc_rule.label, IP_FW_LABEL_ACCEPT) == 0)
|
||||
fr->fw_op = FW_OP_ALLOW;
|
||||
else
|
||||
fr->fw_op = FW_OP_BLOCK;
|
||||
|
||||
if (strcmp(fwc->fwc_label, IP_FW_LABEL_INPUT) == 0)
|
||||
fr->fw_dir = FW_DIR_IN;
|
||||
else
|
||||
fr->fw_dir = FW_DIR_OUT;
|
||||
|
||||
fr->fw_proto = fwc->fwc_rule.ipfw.fw_proto;
|
||||
fr->fw_src.addr_type = fr->fw_dst.addr_type = ADDR_TYPE_IP;
|
||||
fr->fw_src.addr_ip = fwc->fwc_rule.ipfw.fw_src.s_addr;
|
||||
fr->fw_dst.addr_ip = fwc->fwc_rule.ipfw.fw_dst.s_addr;
|
||||
addr_mtob(&fwc->fwc_rule.ipfw.fw_smsk.s_addr, IP_ADDR_LEN,
|
||||
&fr->fw_src.addr_bits);
|
||||
addr_mtob(&fwc->fwc_rule.ipfw.fw_dmsk.s_addr, IP_ADDR_LEN,
|
||||
&fr->fw_dst.addr_bits);
|
||||
|
||||
/* XXX - ICMP? */
|
||||
fr->fw_sport[0] = fwc->fwc_rule.ipfw.fw_spts[0];
|
||||
fr->fw_sport[1] = fwc->fwc_rule.ipfw.fw_spts[1];
|
||||
fr->fw_dport[0] = fwc->fwc_rule.ipfw.fw_dpts[0];
|
||||
fr->fw_dport[1] = fwc->fwc_rule.ipfw.fw_dpts[1];
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_open(void)
|
||||
{
|
||||
fw_t *fw;
|
||||
|
||||
if ((fw = calloc(1, sizeof(*fw))) != NULL) {
|
||||
if ((fw->fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
|
||||
return (fw_close(fw));
|
||||
}
|
||||
return (fw);
|
||||
}
|
||||
|
||||
int
|
||||
fw_add(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct ip_fwchange fwc;
|
||||
|
||||
fr_to_fwc(rule, &fwc);
|
||||
|
||||
return (setsockopt(fw->fd, IPPROTO_IP, IP_FW_APPEND,
|
||||
&fwc, sizeof(fwc)));
|
||||
}
|
||||
|
||||
int
|
||||
fw_delete(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct ip_fwchange fwc;
|
||||
|
||||
fr_to_fwc(rule, &fwc);
|
||||
|
||||
return (setsockopt(fw->fd, IPPROTO_IP, IP_FW_DELETE,
|
||||
&fwc, sizeof(fwc)));
|
||||
}
|
||||
|
||||
int
|
||||
fw_loop(fw_t *fw, fw_handler callback, void *arg)
|
||||
{
|
||||
FILE *fp;
|
||||
struct ip_fwchange fwc;
|
||||
struct fw_rule fr;
|
||||
char buf[BUFSIZ];
|
||||
u_int phi, plo, bhi, blo, tand, txor;
|
||||
int ret;
|
||||
|
||||
if ((fp = fopen(PROC_IPCHAINS_FILE, "r")) == NULL)
|
||||
return (-1);
|
||||
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
||||
if (sscanf(buf,
|
||||
"%8s %X/%X->%X/%X %s %hX %hX %hu %u %u %u %u "
|
||||
"%hu-%hu %hu-%hu A%X X%X %hX %u %hu %s\n",
|
||||
fwc.fwc_label,
|
||||
&fwc.fwc_rule.ipfw.fw_src.s_addr,
|
||||
&fwc.fwc_rule.ipfw.fw_smsk.s_addr,
|
||||
&fwc.fwc_rule.ipfw.fw_dst.s_addr,
|
||||
&fwc.fwc_rule.ipfw.fw_dmsk.s_addr,
|
||||
fwc.fwc_rule.ipfw.fw_vianame,
|
||||
&fwc.fwc_rule.ipfw.fw_flg,
|
||||
&fwc.fwc_rule.ipfw.fw_invflg,
|
||||
&fwc.fwc_rule.ipfw.fw_proto,
|
||||
&phi, &plo, &bhi, &blo,
|
||||
&fwc.fwc_rule.ipfw.fw_spts[0],
|
||||
&fwc.fwc_rule.ipfw.fw_spts[1],
|
||||
&fwc.fwc_rule.ipfw.fw_dpts[0],
|
||||
&fwc.fwc_rule.ipfw.fw_dpts[1],
|
||||
&tand, &txor,
|
||||
&fwc.fwc_rule.ipfw.fw_redirpt,
|
||||
&fwc.fwc_rule.ipfw.fw_mark,
|
||||
&fwc.fwc_rule.ipfw.fw_outputsize,
|
||||
fwc.fwc_rule.label) != 23)
|
||||
break;
|
||||
|
||||
if (strcmp(fwc.fwc_rule.label, IP_FW_LABEL_ACCEPT) != 0 &&
|
||||
strcmp(fwc.fwc_rule.label, IP_FW_LABEL_BLOCK) != 0 &&
|
||||
strcmp(fwc.fwc_rule.label, IP_FW_LABEL_REJECT) != 0)
|
||||
continue;
|
||||
if (strcmp(fwc.fwc_label, IP_FW_LABEL_INPUT) != 0 &&
|
||||
strcmp(fwc.fwc_label, IP_FW_LABEL_OUTPUT) != 0)
|
||||
continue;
|
||||
if (strcmp(fwc.fwc_rule.label, "-") == 0)
|
||||
(fwc.fwc_rule.label)[0] = '\0';
|
||||
if (strcmp(fwc.fwc_rule.ipfw.fw_vianame, "-") == 0)
|
||||
(fwc.fwc_rule.ipfw.fw_vianame)[0] = '\0';
|
||||
fwc.fwc_rule.ipfw.fw_src.s_addr =
|
||||
htonl(fwc.fwc_rule.ipfw.fw_src.s_addr);
|
||||
fwc.fwc_rule.ipfw.fw_dst.s_addr =
|
||||
htonl(fwc.fwc_rule.ipfw.fw_dst.s_addr);
|
||||
fwc.fwc_rule.ipfw.fw_smsk.s_addr =
|
||||
htonl(fwc.fwc_rule.ipfw.fw_smsk.s_addr);
|
||||
fwc.fwc_rule.ipfw.fw_dmsk.s_addr =
|
||||
htonl(fwc.fwc_rule.ipfw.fw_dmsk.s_addr);
|
||||
|
||||
fwc_to_fr(&fwc, &fr);
|
||||
|
||||
if ((ret = callback(&fr, arg)) != 0) {
|
||||
fclose(fp);
|
||||
return (ret);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_close(fw_t *fw)
|
||||
{
|
||||
if (fw != NULL) {
|
||||
if (fw->fd >= 0)
|
||||
close(fw->fd);
|
||||
free(fw);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
281
libdnet-stripped/src/fw-ipf.c
Normal file
281
libdnet-stripped/src/fw-ipf.c
Normal file
@@ -0,0 +1,281 @@
|
||||
|
||||
/*
|
||||
* fw-ipf.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: fw-ipf.c,v 1.18 2005/02/16 21:42:53 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#define _NETINET_IP6_H_ /* XXX */
|
||||
#include <netinet/in.h>
|
||||
#define ip_t ipf_ip_t
|
||||
#ifdef HAVE_NETINET_IP_FIL_COMPAT_H
|
||||
# include <netinet/ip_fil_compat.h>
|
||||
#else
|
||||
# include <netinet/ip_compat.h>
|
||||
#endif
|
||||
#include <netinet/ip_fil.h>
|
||||
#undef ip_t
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define KMEM_NAME "/dev/kmem"
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#if !defined(fi_saddr) && !defined(fi_daddr)
|
||||
# define fi_saddr fi_src.s_addr
|
||||
# define fi_daddr fi_dst.s_addr
|
||||
#endif
|
||||
|
||||
struct fw_handle {
|
||||
int fd;
|
||||
int kfd;
|
||||
};
|
||||
|
||||
static void
|
||||
rule_to_ipf(const struct fw_rule *rule, struct frentry *fr)
|
||||
{
|
||||
memset(fr, 0, sizeof(*fr));
|
||||
|
||||
if (*rule->fw_device != '\0') {
|
||||
strlcpy(fr->fr_ifname, rule->fw_device, IFNAMSIZ);
|
||||
strlcpy(fr->fr_oifname, rule->fw_device, IFNAMSIZ);
|
||||
}
|
||||
if (rule->fw_op == FW_OP_ALLOW)
|
||||
fr->fr_flags |= FR_PASS;
|
||||
else
|
||||
fr->fr_flags |= FR_BLOCK;
|
||||
|
||||
if (rule->fw_dir == FW_DIR_IN)
|
||||
fr->fr_flags |= FR_INQUE;
|
||||
else
|
||||
fr->fr_flags |= FR_OUTQUE;
|
||||
|
||||
fr->fr_ip.fi_p = rule->fw_proto;
|
||||
fr->fr_ip.fi_saddr = rule->fw_src.addr_ip;
|
||||
fr->fr_ip.fi_daddr = rule->fw_dst.addr_ip;
|
||||
addr_btom(rule->fw_src.addr_bits, &fr->fr_mip.fi_saddr, IP_ADDR_LEN);
|
||||
addr_btom(rule->fw_dst.addr_bits, &fr->fr_mip.fi_daddr, IP_ADDR_LEN);
|
||||
|
||||
switch (rule->fw_proto) {
|
||||
case IPPROTO_ICMP:
|
||||
fr->fr_icmpm = rule->fw_sport[1] << 8 |
|
||||
(rule->fw_dport[1] & 0xff);
|
||||
fr->fr_icmp = rule->fw_sport[0] << 8 |
|
||||
(rule->fw_dport[0] & 0xff);
|
||||
break;
|
||||
case IPPROTO_TCP:
|
||||
case IPPROTO_UDP:
|
||||
fr->fr_sport = rule->fw_sport[0];
|
||||
if (rule->fw_sport[0] != rule->fw_sport[1]) {
|
||||
fr->fr_scmp = FR_INRANGE;
|
||||
fr->fr_stop = rule->fw_sport[1];
|
||||
} else
|
||||
fr->fr_scmp = FR_EQUAL;
|
||||
|
||||
fr->fr_dport = rule->fw_dport[0];
|
||||
if (rule->fw_dport[0] != rule->fw_dport[1]) {
|
||||
fr->fr_dcmp = FR_INRANGE;
|
||||
fr->fr_dtop = rule->fw_dport[1];
|
||||
} else
|
||||
fr->fr_dcmp = FR_EQUAL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ipf_ports_to_rule(uint8_t cmp, uint16_t port, uint16_t top, uint16_t *range)
|
||||
{
|
||||
switch (cmp) {
|
||||
case FR_EQUAL:
|
||||
range[0] = range[1] = port;
|
||||
break;
|
||||
case FR_NEQUAL:
|
||||
range[0] = port - 1;
|
||||
range[1] = port + 1;
|
||||
break;
|
||||
case FR_LESST:
|
||||
range[0] = 0;
|
||||
range[1] = port - 1;
|
||||
break;
|
||||
case FR_GREATERT:
|
||||
range[0] = port + 1;
|
||||
range[1] = TCP_PORT_MAX;
|
||||
break;
|
||||
case FR_LESSTE:
|
||||
range[0] = 0;
|
||||
range[1] = port;
|
||||
break;
|
||||
case FR_GREATERTE:
|
||||
range[0] = port;
|
||||
range[1] = TCP_PORT_MAX;
|
||||
break;
|
||||
case FR_OUTRANGE:
|
||||
range[0] = port;
|
||||
range[1] = top;
|
||||
break;
|
||||
case FR_INRANGE:
|
||||
range[0] = port;
|
||||
range[1] = top;
|
||||
break;
|
||||
default:
|
||||
range[0] = 0;
|
||||
range[1] = TCP_PORT_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ipf_to_rule(const struct frentry *fr, struct fw_rule *rule)
|
||||
{
|
||||
memset(rule, 0, sizeof(*rule));
|
||||
|
||||
strlcpy(rule->fw_device, fr->fr_ifname, sizeof(rule->fw_device));
|
||||
rule->fw_op = (fr->fr_flags & FR_PASS) ? FW_OP_ALLOW : FW_OP_BLOCK;
|
||||
rule->fw_dir = (fr->fr_flags & FR_INQUE) ? FW_DIR_IN : FW_DIR_OUT;
|
||||
rule->fw_proto = fr->fr_ip.fi_p;
|
||||
|
||||
rule->fw_src.addr_type = rule->fw_dst.addr_type = ADDR_TYPE_IP;
|
||||
rule->fw_src.addr_ip = fr->fr_ip.fi_saddr;
|
||||
rule->fw_dst.addr_ip = fr->fr_ip.fi_daddr;
|
||||
addr_mtob(&fr->fr_mip.fi_saddr, IP_ADDR_LEN,
|
||||
&rule->fw_src.addr_bits);
|
||||
addr_mtob(&fr->fr_mip.fi_daddr, IP_ADDR_LEN,
|
||||
&rule->fw_dst.addr_bits);
|
||||
|
||||
switch (rule->fw_proto) {
|
||||
case IPPROTO_ICMP:
|
||||
rule->fw_sport[0] = ntohs(fr->fr_icmp & fr->fr_icmpm) >> 8;
|
||||
rule->fw_sport[1] = ntohs(fr->fr_icmpm) >> 8;
|
||||
rule->fw_dport[0] = ntohs(fr->fr_icmp & fr->fr_icmpm) & 0xff;
|
||||
rule->fw_dport[1] = ntohs(fr->fr_icmpm) & 0xff;
|
||||
break;
|
||||
case IPPROTO_TCP:
|
||||
case IPPROTO_UDP:
|
||||
ipf_ports_to_rule(fr->fr_scmp, fr->fr_sport,
|
||||
fr->fr_stop, rule->fw_sport);
|
||||
ipf_ports_to_rule(fr->fr_dcmp, fr->fr_dport,
|
||||
fr->fr_dtop, rule->fw_dport);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_open(void)
|
||||
{
|
||||
fw_t *fw;
|
||||
|
||||
if ((fw = calloc(1, sizeof(*fw))) != NULL) {
|
||||
fw->fd = fw->kfd = -1;
|
||||
if ((fw->fd = open(IPL_NAME, O_RDWR, 0)) < 0)
|
||||
return (fw_close(fw));
|
||||
if ((fw->kfd = open(KMEM_NAME, O_RDONLY)) < 0)
|
||||
return (fw_close(fw));
|
||||
}
|
||||
return (fw);
|
||||
}
|
||||
|
||||
int
|
||||
fw_add(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct frentry fr;
|
||||
|
||||
assert(fw != NULL && rule != NULL);
|
||||
|
||||
rule_to_ipf(rule, &fr);
|
||||
|
||||
return (ioctl(fw->fd, SIOCADDFR, &fr));
|
||||
}
|
||||
|
||||
int
|
||||
fw_delete(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct frentry fr;
|
||||
|
||||
assert(fw != NULL && rule != NULL);
|
||||
|
||||
rule_to_ipf(rule, &fr);
|
||||
|
||||
return (ioctl(fw->fd, SIOCDELFR, &fr));
|
||||
}
|
||||
|
||||
static int
|
||||
fw_kcopy(fw_t *fw, u_char *buf, off_t pos, size_t n)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (lseek(fw->kfd, pos, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
while ((i = read(fw->kfd, buf, n)) < n) {
|
||||
if (i <= 0)
|
||||
return (-1);
|
||||
buf += i;
|
||||
n -= i;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fw_loop(fw_t *fw, fw_handler callback, void *arg)
|
||||
{
|
||||
struct friostat fio;
|
||||
struct friostat *fiop = &fio;
|
||||
struct frentry *frp, fr;
|
||||
struct fw_rule rule;
|
||||
int ret;
|
||||
|
||||
memset(&fio, 0, sizeof(fio));
|
||||
#ifdef __OpenBSD__
|
||||
if (ioctl(fw->fd, SIOCGETFS, fiop) < 0)
|
||||
#else
|
||||
if (ioctl(fw->fd, SIOCGETFS, &fiop) < 0) /* XXX - darren! */
|
||||
#endif
|
||||
return (-1);
|
||||
|
||||
for (frp = fio.f_fout[(int)fio.f_active]; frp != NULL;
|
||||
frp = fr.fr_next) {
|
||||
if (fw_kcopy(fw, (u_char *)&fr, (u_long)frp, sizeof(fr)) < 0)
|
||||
return (-1);
|
||||
ipf_to_rule(&fr, &rule);
|
||||
if ((ret = callback(&rule, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
for (frp = fio.f_fin[(int)fio.f_active]; frp != NULL;
|
||||
frp = fr.fr_next) {
|
||||
if (fw_kcopy(fw, (u_char *)&fr, (u_long)frp, sizeof(fr)) < 0)
|
||||
return (-1);
|
||||
ipf_to_rule(&fr, &rule);
|
||||
if ((ret = callback(&rule, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_close(fw_t *fw)
|
||||
{
|
||||
if (fw != NULL) {
|
||||
if (fw->fd >= 0)
|
||||
close(fw->fd);
|
||||
if (fw->kfd >= 0)
|
||||
close(fw->kfd);
|
||||
free(fw);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
324
libdnet-stripped/src/fw-ipfw.c
Normal file
324
libdnet-stripped/src/fw-ipfw.c
Normal file
@@ -0,0 +1,324 @@
|
||||
/*
|
||||
* fw-ipfw.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: fw-ipfw.c,v 1.16 2004/01/14 04:52:10 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip_fw.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct fw_handle {
|
||||
int fd;
|
||||
};
|
||||
|
||||
static void
|
||||
fr_to_ipfw_device(const char *device, char *name, short *unit)
|
||||
{
|
||||
char *p;
|
||||
|
||||
p = strpbrk(device, "0123456789");
|
||||
*unit = atoi(p);
|
||||
strlcpy(name, device, p - device + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
fr_to_ipfw(const struct fw_rule *fr, struct ip_fw *ipfw)
|
||||
{
|
||||
int i;
|
||||
|
||||
memset(ipfw, 0, sizeof(*ipfw));
|
||||
|
||||
if (fr->fw_dir == FW_DIR_IN) {
|
||||
if (*fr->fw_device != '\0') {
|
||||
fr_to_ipfw_device(fr->fw_device,
|
||||
ipfw->fw_in_if.fu_via_if.name,
|
||||
&ipfw->fw_in_if.fu_via_if.unit);
|
||||
ipfw->fw_flg |= IP_FW_F_IIFNAME;
|
||||
}
|
||||
ipfw->fw_flg |= IP_FW_F_IN;
|
||||
} else {
|
||||
if (*fr->fw_device != '\0') {
|
||||
fr_to_ipfw_device(fr->fw_device,
|
||||
ipfw->fw_out_if.fu_via_if.name,
|
||||
&ipfw->fw_out_if.fu_via_if.unit);
|
||||
ipfw->fw_flg |= IP_FW_F_OIFNAME;
|
||||
}
|
||||
ipfw->fw_flg |= IP_FW_F_OUT;
|
||||
}
|
||||
if (fr->fw_op == FW_OP_ALLOW)
|
||||
ipfw->fw_flg |= IP_FW_F_ACCEPT;
|
||||
else
|
||||
ipfw->fw_flg |= IP_FW_F_DENY;
|
||||
|
||||
ipfw->fw_prot = fr->fw_proto;
|
||||
ipfw->fw_src.s_addr = fr->fw_src.addr_ip;
|
||||
ipfw->fw_dst.s_addr = fr->fw_dst.addr_ip;
|
||||
addr_btom(fr->fw_src.addr_bits, &ipfw->fw_smsk.s_addr, IP_ADDR_LEN);
|
||||
addr_btom(fr->fw_dst.addr_bits, &ipfw->fw_dmsk.s_addr, IP_ADDR_LEN);
|
||||
|
||||
switch (fr->fw_proto) {
|
||||
case IP_PROTO_TCP:
|
||||
case IP_PROTO_UDP:
|
||||
i = 0;
|
||||
if (fr->fw_sport[0] != fr->fw_sport[1]) {
|
||||
ipfw->fw_flg |= IP_FW_F_SRNG;
|
||||
ipfw->fw_uar.fw_pts[i++] = fr->fw_sport[0];
|
||||
ipfw->fw_uar.fw_pts[i++] = fr->fw_sport[1];
|
||||
IP_FW_SETNSRCP(ipfw, 2);
|
||||
} else if (fr->fw_sport[0] > 0) {
|
||||
ipfw->fw_uar.fw_pts[i++] = fr->fw_sport[0];
|
||||
IP_FW_SETNSRCP(ipfw, 1);
|
||||
}
|
||||
if (fr->fw_dport[0] != fr->fw_dport[1]) {
|
||||
ipfw->fw_flg |= IP_FW_F_DRNG;
|
||||
ipfw->fw_uar.fw_pts[i++] = fr->fw_dport[0];
|
||||
ipfw->fw_uar.fw_pts[i++] = fr->fw_dport[1];
|
||||
IP_FW_SETNDSTP(ipfw, 2);
|
||||
} else if (fr->fw_dport[0] > 0) {
|
||||
ipfw->fw_uar.fw_pts[i++] = fr->fw_dport[0];
|
||||
IP_FW_SETNDSTP(ipfw, 1);
|
||||
}
|
||||
break;
|
||||
case IP_PROTO_ICMP:
|
||||
if (fr->fw_sport[1]) {
|
||||
ipfw->fw_uar.fw_icmptypes[fr->fw_sport[0] / 32] |=
|
||||
1 << (fr->fw_sport[0] % 32);
|
||||
ipfw->fw_flg |= IP_FW_F_ICMPBIT;
|
||||
}
|
||||
/* XXX - no support for ICMP code. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ipfw_to_fr(const struct ip_fw *ipfw, struct fw_rule *fr)
|
||||
{
|
||||
int i;
|
||||
|
||||
memset(fr, 0, sizeof(*fr));
|
||||
|
||||
if ((ipfw->fw_flg & IP_FW_F_IN) && *ipfw->fw_in_if.fu_via_if.name)
|
||||
snprintf(fr->fw_device, sizeof(fr->fw_device), "%s%d",
|
||||
ipfw->fw_in_if.fu_via_if.name,
|
||||
ipfw->fw_in_if.fu_via_if.unit);
|
||||
else if ((ipfw->fw_flg & IP_FW_F_OUT) &&
|
||||
*ipfw->fw_out_if.fu_via_if.name)
|
||||
snprintf(fr->fw_device, sizeof(fr->fw_device), "%s%d",
|
||||
ipfw->fw_out_if.fu_via_if.name,
|
||||
ipfw->fw_out_if.fu_via_if.unit);
|
||||
|
||||
fr->fw_op = (ipfw->fw_flg & IP_FW_F_ACCEPT) ?
|
||||
FW_OP_ALLOW : FW_OP_BLOCK;
|
||||
fr->fw_dir = (ipfw->fw_flg & IP_FW_F_IN) ? FW_DIR_IN : FW_DIR_OUT;
|
||||
fr->fw_proto = ipfw->fw_prot;
|
||||
|
||||
fr->fw_src.addr_type = fr->fw_dst.addr_type = ADDR_TYPE_IP;
|
||||
fr->fw_src.addr_ip = ipfw->fw_src.s_addr;
|
||||
fr->fw_dst.addr_ip = ipfw->fw_dst.s_addr;
|
||||
addr_mtob(&ipfw->fw_smsk.s_addr, IP_ADDR_LEN, &fr->fw_src.addr_bits);
|
||||
addr_mtob(&ipfw->fw_dmsk.s_addr, IP_ADDR_LEN, &fr->fw_dst.addr_bits);
|
||||
|
||||
switch (fr->fw_proto) {
|
||||
case IP_PROTO_TCP:
|
||||
case IP_PROTO_UDP:
|
||||
if ((ipfw->fw_flg & IP_FW_F_SRNG) &&
|
||||
IP_FW_GETNSRCP(ipfw) == 2) {
|
||||
fr->fw_sport[0] = ipfw->fw_uar.fw_pts[0];
|
||||
fr->fw_sport[1] = ipfw->fw_uar.fw_pts[1];
|
||||
} else if (IP_FW_GETNSRCP(ipfw) == 1) {
|
||||
fr->fw_sport[0] = fr->fw_sport[1] =
|
||||
ipfw->fw_uar.fw_pts[0];
|
||||
} else if (IP_FW_GETNSRCP(ipfw) == 0) {
|
||||
fr->fw_sport[0] = 0;
|
||||
fr->fw_sport[1] = TCP_PORT_MAX;
|
||||
}
|
||||
|
||||
if ((ipfw->fw_flg & IP_FW_F_DRNG) &&
|
||||
IP_FW_GETNDSTP(ipfw) == 2) {
|
||||
i = IP_FW_GETNSRCP(ipfw);
|
||||
fr->fw_dport[0] = ipfw->fw_uar.fw_pts[i];
|
||||
fr->fw_dport[1] = ipfw->fw_uar.fw_pts[i + 1];
|
||||
} else if (IP_FW_GETNDSTP(ipfw) == 1) {
|
||||
i = IP_FW_GETNSRCP(ipfw);
|
||||
fr->fw_dport[0] = fr->fw_dport[1] =
|
||||
ipfw->fw_uar.fw_pts[i];
|
||||
} else if (IP_FW_GETNDSTP(ipfw) == 0) {
|
||||
fr->fw_dport[0] = 0;
|
||||
fr->fw_dport[1] = TCP_PORT_MAX;
|
||||
}
|
||||
break;
|
||||
case IP_PROTO_ICMP:
|
||||
if (ipfw->fw_flg & IP_FW_F_ICMPBIT) {
|
||||
for (i = 0; i < IP_FW_ICMPTYPES_DIM * 32; i++) {
|
||||
if (ipfw->fw_uar.fw_icmptypes[i / 32] &
|
||||
(1U << (i % 32))) {
|
||||
fr->fw_sport[0] = i;
|
||||
fr->fw_sport[1] = 0xff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* XXX - no support for ICMP code. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_open(void)
|
||||
{
|
||||
fw_t *fw;
|
||||
|
||||
if ((fw = calloc(1, sizeof(*fw))) != NULL) {
|
||||
if ((fw->fd = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0)
|
||||
return (fw_close(fw));
|
||||
}
|
||||
return (fw);
|
||||
}
|
||||
|
||||
int
|
||||
fw_add(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct ip_fw ipfw;
|
||||
|
||||
assert(fw != NULL && rule != NULL);
|
||||
|
||||
fr_to_ipfw(rule, &ipfw);
|
||||
|
||||
return (setsockopt(fw->fd, IPPROTO_IP, IP_FW_ADD,
|
||||
&ipfw, sizeof(ipfw)));
|
||||
}
|
||||
|
||||
static int
|
||||
fw_cmp(const struct fw_rule *a, const struct fw_rule *b)
|
||||
{
|
||||
if (strcmp(a->fw_device, b->fw_device) != 0 || a->fw_op != b->fw_op ||
|
||||
a->fw_dir != b->fw_dir || a->fw_proto != b->fw_proto ||
|
||||
addr_cmp(&a->fw_src, &b->fw_src) != 0 ||
|
||||
addr_cmp(&a->fw_dst, &b->fw_dst) != 0 ||
|
||||
memcmp(a->fw_sport, b->fw_sport, sizeof(a->fw_sport)) != 0 ||
|
||||
memcmp(a->fw_dport, b->fw_dport, sizeof(a->fw_dport)) != 0)
|
||||
return (-1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fw_delete(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct ip_fw *ipfw;
|
||||
struct fw_rule fr;
|
||||
int nbytes, nalloc, ret;
|
||||
u_char *buf, *new;
|
||||
|
||||
assert(rule != NULL);
|
||||
|
||||
nbytes = nalloc = sizeof(*ipfw);
|
||||
if ((buf = malloc(nbytes)) == NULL)
|
||||
return (-1);
|
||||
|
||||
while (nbytes >= nalloc) {
|
||||
nalloc = nalloc * 2 + 200;
|
||||
nbytes = nalloc;
|
||||
if ((new = realloc(buf, nbytes)) == NULL) {
|
||||
if (buf)
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
buf = new;
|
||||
if (getsockopt(fw->fd, IPPROTO_IP, IP_FW_GET,
|
||||
buf, &nbytes) < 0) {
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
ret = -1;
|
||||
|
||||
/* XXX - 65535 is the fixed ipfw default rule. */
|
||||
for (ipfw = (struct ip_fw *)buf; ipfw->fw_number < 65535; ipfw++) {
|
||||
ipfw_to_fr(ipfw, &fr);
|
||||
if (fw_cmp(&fr, rule) == 0) {
|
||||
if (setsockopt(fw->fd, IPPROTO_IP, IP_FW_DEL,
|
||||
ipfw, sizeof(*ipfw)) < 0)
|
||||
ret = -2;
|
||||
else
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret == -1)
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fw_loop(fw_t *fw, fw_handler callback, void *arg)
|
||||
{
|
||||
struct ip_fw *ipfw;
|
||||
struct fw_rule fr;
|
||||
int i, cnt, nbytes, nalloc, ret;
|
||||
u_char *buf, *new;
|
||||
|
||||
nbytes = nalloc = sizeof(*ipfw);
|
||||
if ((buf = malloc(nbytes)) == NULL)
|
||||
return (-1);
|
||||
|
||||
while (nbytes >= nalloc) {
|
||||
nalloc = nalloc * 2 + 200;
|
||||
nbytes = nalloc;
|
||||
if ((new = realloc(buf, nbytes)) == NULL) {
|
||||
if (buf)
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
buf = new;
|
||||
if (getsockopt(fw->fd, IPPROTO_IP, IP_FW_GET,
|
||||
buf, &nbytes) < 0) {
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
cnt = nbytes / sizeof(*ipfw);
|
||||
ipfw = (struct ip_fw *)buf;
|
||||
ret = 0;
|
||||
|
||||
for (i = 0; i < cnt; i++) {
|
||||
ipfw_to_fr(&ipfw[i], &fr);
|
||||
if ((ret = callback(&fr, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
free(buf);
|
||||
return (ret);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_close(fw_t *fw)
|
||||
{
|
||||
if (fw != NULL) {
|
||||
if (fw->fd >= 0)
|
||||
close(fw->fd);
|
||||
free(fw);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
49
libdnet-stripped/src/fw-none.c
Normal file
49
libdnet-stripped/src/fw-none.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* fw-none.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: fw-none.c,v 1.4 2002/01/20 21:23:28 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
fw_t *
|
||||
fw_open(void)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
fw_add(fw_t *f, const struct fw_rule *rule)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
fw_delete(fw_t *f, const struct fw_rule *rule)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
fw_loop(fw_t *f, fw_handler callback, void *arg)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_close(fw_t *f)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
315
libdnet-stripped/src/fw-pf.c
Normal file
315
libdnet-stripped/src/fw-pf.c
Normal file
@@ -0,0 +1,315 @@
|
||||
/*
|
||||
* fw-pf.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: fw-pf.c,v 1.20 2005/02/14 20:43:32 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <net/pfvar.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
/*
|
||||
* XXX - cope with moving pf API
|
||||
*/
|
||||
#if defined(DIOCRCLRTABLES)
|
||||
/* XXX - can't isolate the following change:
|
||||
* $OpenBSD: pfvar.h,v 1.112 2002/12/17 12:30:13 mcbride Exp $
|
||||
* so i'll take 1.119's DIOCRCLRTABLES - 12 days of pf unsupported.
|
||||
*/
|
||||
# define HAVE_PF_CHANGE_GET_TICKET 1
|
||||
/* OpenBSD 3.3+ - 3.6 */
|
||||
/* $OpenBSD: pfvar.h,v 1.197 2004/06/14 20:53:27 cedric Exp $ */
|
||||
/* $OpenBSD: pfvar.h,v 1.130 2003/01/09 10:40:45 cedric Exp $ */
|
||||
/* $OpenBSD: pfvar.h,v 1.127 2003/01/05 22:14:23 dhartmei Exp $ */
|
||||
# define PFRA_ADDR(ra) (ra)->addr.v.a.addr.v4.s_addr
|
||||
# define PFRA_MASK(ra) (ra)->addr.v.a.mask.v4.s_addr
|
||||
# define pfioc_changerule pfioc_rule
|
||||
# define oldrule rule
|
||||
# define newrule rule
|
||||
#elif defined(DIOCBEGINADDRS)
|
||||
/* $OpenBSD: pfvar.h,v 1.102 2002/11/23 05:16:58 mcbride Exp $ */
|
||||
# define PFRA_ADDR(ra) (ra)->addr.addr.v4.s_addr
|
||||
# define PFRA_MASK(ra) (ra)->addr.mask.v4.s_addr
|
||||
#elif defined(PFRULE_FRAGMENT)
|
||||
/* OpenBSD 3.2 */
|
||||
/* $OpenBSD: pfvar.h,v 1.68 2002/04/24 18:10:25 dhartmei Exp $ */
|
||||
# define PFRA_ADDR(ra) (ra)->addr.addr.v4.s_addr
|
||||
# define PFRA_MASK(ra) (ra)->mask.v4.s_addr
|
||||
#elif defined (PF_AEQ)
|
||||
/* OpenBSD 3.1 */
|
||||
/* $OpenBSD: pfvar.h,v 1.51 2001/09/15 03:54:40 frantzen Exp $ */
|
||||
# define PFRA_ADDR(ra) (ra)->addr.v4.s_addr
|
||||
# define PFRA_MASK(ra) (ra)->mask.v4.s_addr
|
||||
#else
|
||||
/* OpenBSD 3.0 */
|
||||
# define PFRA_ADDR(ra) (ra)->addr
|
||||
# define PFRA_ADDR(ra) (ra)->mask
|
||||
#endif
|
||||
|
||||
struct fw_handle {
|
||||
int fd;
|
||||
};
|
||||
|
||||
static void
|
||||
fr_to_pr(const struct fw_rule *fr, struct pf_rule *pr)
|
||||
{
|
||||
memset(pr, 0, sizeof(*pr));
|
||||
|
||||
strlcpy(pr->ifname, fr->fw_device, sizeof(pr->ifname));
|
||||
|
||||
pr->action = (fr->fw_op == FW_OP_ALLOW) ? PF_PASS : PF_DROP;
|
||||
pr->direction = (fr->fw_dir == FW_DIR_IN) ? PF_IN : PF_OUT;
|
||||
pr->proto = fr->fw_proto;
|
||||
|
||||
pr->af = AF_INET;
|
||||
PFRA_ADDR(&pr->src) = fr->fw_src.addr_ip;
|
||||
addr_btom(fr->fw_src.addr_bits, &(PFRA_MASK(&pr->src)), IP_ADDR_LEN);
|
||||
|
||||
PFRA_ADDR(&pr->dst) = fr->fw_dst.addr_ip;
|
||||
addr_btom(fr->fw_dst.addr_bits, &(PFRA_MASK(&pr->dst)), IP_ADDR_LEN);
|
||||
|
||||
switch (fr->fw_proto) {
|
||||
case IP_PROTO_ICMP:
|
||||
if (fr->fw_sport[1])
|
||||
pr->type = (u_char)(fr->fw_sport[0] &
|
||||
fr->fw_sport[1]) + 1;
|
||||
if (fr->fw_dport[1])
|
||||
pr->code = (u_char)(fr->fw_dport[0] &
|
||||
fr->fw_dport[1]) + 1;
|
||||
break;
|
||||
case IP_PROTO_TCP:
|
||||
case IP_PROTO_UDP:
|
||||
pr->src.port[0] = htons(fr->fw_sport[0]);
|
||||
pr->src.port[1] = htons(fr->fw_sport[1]);
|
||||
if (pr->src.port[0] == pr->src.port[1]) {
|
||||
pr->src.port_op = PF_OP_EQ;
|
||||
} else
|
||||
pr->src.port_op = PF_OP_IRG;
|
||||
|
||||
pr->dst.port[0] = htons(fr->fw_dport[0]);
|
||||
pr->dst.port[1] = htons(fr->fw_dport[1]);
|
||||
if (pr->dst.port[0] == pr->dst.port[1]) {
|
||||
pr->dst.port_op = PF_OP_EQ;
|
||||
} else
|
||||
pr->dst.port_op = PF_OP_IRG;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
pr_to_fr(const struct pf_rule *pr, struct fw_rule *fr)
|
||||
{
|
||||
memset(fr, 0, sizeof(*fr));
|
||||
|
||||
strlcpy(fr->fw_device, pr->ifname, sizeof(fr->fw_device));
|
||||
|
||||
if (pr->action == PF_DROP)
|
||||
fr->fw_op = FW_OP_BLOCK;
|
||||
else if (pr->action == PF_PASS)
|
||||
fr->fw_op = FW_OP_ALLOW;
|
||||
else
|
||||
return (-1);
|
||||
|
||||
fr->fw_dir = pr->direction == PF_IN ? FW_DIR_IN : FW_DIR_OUT;
|
||||
fr->fw_proto = pr->proto;
|
||||
|
||||
if (pr->af != AF_INET)
|
||||
return (-1);
|
||||
|
||||
fr->fw_src.addr_type = ADDR_TYPE_IP;
|
||||
addr_mtob(&(PFRA_MASK(&pr->src)), IP_ADDR_LEN, &fr->fw_src.addr_bits);
|
||||
fr->fw_src.addr_ip = PFRA_ADDR(&pr->src);
|
||||
|
||||
fr->fw_dst.addr_type = ADDR_TYPE_IP;
|
||||
addr_mtob(&(PFRA_MASK(&pr->dst)), IP_ADDR_LEN, &fr->fw_dst.addr_bits);
|
||||
fr->fw_dst.addr_ip = PFRA_ADDR(&pr->dst);
|
||||
|
||||
switch (fr->fw_proto) {
|
||||
case IP_PROTO_ICMP:
|
||||
if (pr->type) {
|
||||
fr->fw_sport[0] = pr->type - 1;
|
||||
fr->fw_sport[1] = 0xff;
|
||||
}
|
||||
if (pr->code) {
|
||||
fr->fw_dport[0] = pr->code - 1;
|
||||
fr->fw_dport[1] = 0xff;
|
||||
}
|
||||
break;
|
||||
case IP_PROTO_TCP:
|
||||
case IP_PROTO_UDP:
|
||||
fr->fw_sport[0] = ntohs(pr->src.port[0]);
|
||||
fr->fw_sport[1] = ntohs(pr->src.port[1]);
|
||||
if (pr->src.port_op == PF_OP_EQ)
|
||||
fr->fw_sport[1] = fr->fw_sport[0];
|
||||
|
||||
fr->fw_dport[0] = ntohs(pr->dst.port[0]);
|
||||
fr->fw_dport[1] = ntohs(pr->dst.port[1]);
|
||||
if (pr->dst.port_op == PF_OP_EQ)
|
||||
fr->fw_dport[1] = fr->fw_dport[0];
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_PF_CHANGE_GET_TICKET
|
||||
static int
|
||||
_fw_cmp(const struct fw_rule *a, const struct fw_rule *b)
|
||||
{
|
||||
if (strcmp(a->fw_device, b->fw_device) != 0 || a->fw_op != b->fw_op ||
|
||||
a->fw_dir != b->fw_dir || a->fw_proto != b->fw_proto ||
|
||||
addr_cmp(&a->fw_src, &b->fw_src) != 0 ||
|
||||
addr_cmp(&a->fw_dst, &b->fw_dst) != 0 ||
|
||||
memcmp(a->fw_sport, b->fw_sport, sizeof(a->fw_sport)) != 0 ||
|
||||
memcmp(a->fw_dport, b->fw_dport, sizeof(a->fw_dport)) != 0)
|
||||
return (-1);
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
fw_t *
|
||||
fw_open(void)
|
||||
{
|
||||
fw_t *fw;
|
||||
|
||||
if ((fw = calloc(1, sizeof(*fw))) != NULL) {
|
||||
if ((fw->fd = open("/dev/pf", O_RDWR)) < 0)
|
||||
return (fw_close(fw));
|
||||
}
|
||||
return (fw);
|
||||
}
|
||||
|
||||
int
|
||||
fw_add(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct pfioc_changerule pcr;
|
||||
|
||||
assert(fw != NULL && rule != NULL);
|
||||
memset(&pcr, 0, sizeof(pcr));
|
||||
#ifdef HAVE_PF_CHANGE_GET_TICKET
|
||||
{
|
||||
struct fw_rule fr;
|
||||
|
||||
if (ioctl(fw->fd, DIOCGETRULES, &pcr) < 0)
|
||||
return (-1);
|
||||
while ((int)--pcr.nr >= 0) {
|
||||
if (ioctl(fw->fd, DIOCGETRULE, &pcr) == 0 &&
|
||||
pr_to_fr(&pcr.rule, &fr) == 0) {
|
||||
if (_fw_cmp(rule, &fr) == 0) {
|
||||
errno = EEXIST;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef DIOCBEGINADDRS
|
||||
{
|
||||
struct pfioc_pooladdr ppa;
|
||||
|
||||
if (ioctl(fw->fd, DIOCBEGINADDRS, &ppa) < 0)
|
||||
return (-1);
|
||||
pcr.pool_ticket = ppa.ticket;
|
||||
}
|
||||
#endif
|
||||
pcr.action = PF_CHANGE_ADD_TAIL;
|
||||
fr_to_pr(rule, &pcr.newrule);
|
||||
|
||||
return (ioctl(fw->fd, DIOCCHANGERULE, &pcr));
|
||||
}
|
||||
|
||||
int
|
||||
fw_delete(fw_t *fw, const struct fw_rule *rule)
|
||||
{
|
||||
struct pfioc_changerule pcr;
|
||||
|
||||
assert(fw != NULL && rule != NULL);
|
||||
memset(&pcr, 0, sizeof(pcr));
|
||||
#ifdef HAVE_PF_CHANGE_GET_TICKET
|
||||
{
|
||||
struct fw_rule fr;
|
||||
int found = 0;
|
||||
|
||||
if (ioctl(fw->fd, DIOCGETRULES, &pcr) < 0)
|
||||
return (-1);
|
||||
while ((int)--pcr.nr >= 0) {
|
||||
if (ioctl(fw->fd, DIOCGETRULE, &pcr) == 0 &&
|
||||
pr_to_fr(&pcr.rule, &fr) == 0) {
|
||||
if (_fw_cmp(rule, &fr) == 0) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
errno = ENOENT;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef DIOCBEGINADDRS
|
||||
{
|
||||
struct pfioc_pooladdr ppa;
|
||||
|
||||
if (ioctl(fw->fd, DIOCBEGINADDRS, &ppa) < 0)
|
||||
return (-1);
|
||||
pcr.pool_ticket = ppa.ticket;
|
||||
}
|
||||
#endif
|
||||
pcr.action = PF_CHANGE_REMOVE;
|
||||
fr_to_pr(rule, &pcr.oldrule);
|
||||
|
||||
return (ioctl(fw->fd, DIOCCHANGERULE, &pcr));
|
||||
}
|
||||
|
||||
int
|
||||
fw_loop(fw_t *fw, fw_handler callback, void *arg)
|
||||
{
|
||||
struct pfioc_rule pr;
|
||||
struct fw_rule fr;
|
||||
uint32_t n, max;
|
||||
int ret = 0;
|
||||
|
||||
memset(&pr, 0, sizeof(pr));
|
||||
if (ioctl(fw->fd, DIOCGETRULES, &pr) < 0)
|
||||
return (-1);
|
||||
|
||||
for (n = 0, max = pr.nr; n < max; n++) {
|
||||
pr.nr = n;
|
||||
|
||||
if ((ret = ioctl(fw->fd, DIOCGETRULE, &pr)) < 0)
|
||||
break;
|
||||
if (pr_to_fr(&pr.rule, &fr) < 0)
|
||||
continue;
|
||||
if ((ret = callback(&fr, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_close(fw_t *fw)
|
||||
{
|
||||
if (fw != NULL) {
|
||||
if (fw->fd >= 0)
|
||||
close(fw->fd);
|
||||
free(fw);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
444
libdnet-stripped/src/fw-pktfilter.c
Normal file
444
libdnet-stripped/src/fw-pktfilter.c
Normal file
@@ -0,0 +1,444 @@
|
||||
/*
|
||||
* fw-pktfilter.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
* Copyright (c) 2001 Jean-Baptiste Marchand, Herv<72> Schauer Consultants.
|
||||
*
|
||||
* $Id: fw-pktfilter.c,v 1.4 2005/02/15 06:37:06 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#define PKTFILTER_PIPE "\\\\.\\pipe\\PktFltPipe"
|
||||
#define MAX_RULE_LENGTH 256
|
||||
|
||||
#define FILTER_FAILURE 0 /* filter had a syntax error */
|
||||
#define FILTER_SUCCESS 1 /* filter was correctly added */
|
||||
#define FILTER_MESSAGE 2 /* informative message returned to the client */
|
||||
|
||||
char *icmp_types[] = {
|
||||
"echorep", /* 0: echo reply */
|
||||
"", /* 1: unused */
|
||||
"", /* 2: unused */
|
||||
"unreach", /* 3: destination unreachable */
|
||||
"squench", /* 4: source quench */
|
||||
"redir", /* 5: redirect */
|
||||
"", /* 6: unused */
|
||||
"", /* 7: unused */
|
||||
"echo", /* 8: echo request */
|
||||
"router_adv", /* 9: router advertisement */
|
||||
"router_sol", /* 10: router solicitation */
|
||||
"timex", /* 11: time exceeded */
|
||||
"paramprob", /* 12: parameter problem */
|
||||
"timest", /* 13: timestamp request */
|
||||
"timestrep", /* 14: timestamp reply */
|
||||
"inforeq", /* 15: information request */
|
||||
"inforep", /* 16: information reply */
|
||||
"maskreq", /* 17: address mask request */
|
||||
"maskrep", /* 18: address mask reply */
|
||||
NULL
|
||||
};
|
||||
|
||||
struct fw_handle {
|
||||
IP_ADAPTER_INFO *ifinfo;
|
||||
/* XXX - rules cache for delete lookup? */
|
||||
};
|
||||
|
||||
static int
|
||||
parse_addr(char *p, struct addr *a)
|
||||
{
|
||||
if (strcmp(p, "any") == 0)
|
||||
return (addr_aton("0.0.0.0/0", a));
|
||||
return (addr_aton(p, a));
|
||||
}
|
||||
|
||||
static int
|
||||
parse_portspec(char *str, uint16_t *ports)
|
||||
{
|
||||
char *p = strsep(&str, " ");
|
||||
|
||||
if (p[0] == '=') {
|
||||
ports[0] = ports[1] = atoi(strsep(&str, " "));
|
||||
} else if (p[0] == '<') {
|
||||
ports[1] = atoi(strsep(&str, " "));
|
||||
if (p[1] != '=') ports[1]--;
|
||||
} else if (p[0] == '>') {
|
||||
ports[1] = TCP_PORT_MAX;
|
||||
ports[0] = atoi(strsep(&str, " "));
|
||||
if (p[1] != '=') ports[0]++;
|
||||
} else if (p[0] != '\0') {
|
||||
if (strcmp(strsep(&str, " "), "><") != 0)
|
||||
return (-1);
|
||||
ports[0] = atoi(p) + 1;
|
||||
ports[1] = atoi(strsep(&str, " ")) - 1;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
parse_icmpspec(char *str, uint16_t *type, uint16_t *code)
|
||||
{
|
||||
char *p, *e;
|
||||
int i;
|
||||
|
||||
p = strsep(&str, " ");
|
||||
for (i = 0; icmp_types[i] && strcmp(p, icmp_types[i]); i++)
|
||||
;
|
||||
if (icmp_types[i] == NULL) {
|
||||
i = strtol(p, &e, 10);
|
||||
if (*e != '\0')
|
||||
return (-1);
|
||||
}
|
||||
type[0] = i;
|
||||
type[1] = 0xff;
|
||||
|
||||
p = strsep(&str, " ");
|
||||
if (p != NULL && strcmp(p, "code")) {
|
||||
p = strsep(&str, " ");
|
||||
i = strtol(p, &e, 10);
|
||||
if (*e != '\0')
|
||||
return (-1);
|
||||
code[0] = i;
|
||||
code[1] = 0xff;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
<op> <dir> on <device> all
|
||||
<op> <dir> on <device> proto <proto> all
|
||||
<op> <dir> on <device> proto <proto> from <src> [ports] to <dst> [ports]
|
||||
<op> <dir> on <device> proto icmp all [icmp-type <type> [code <code>]]
|
||||
<op> <dir> on <device> proto icmp from <src> to <dst> [icmp-type <type> [code <code>]]
|
||||
*/
|
||||
static int
|
||||
parse_rule(char *str, struct fw_rule *rule)
|
||||
{
|
||||
char *p, *q;
|
||||
|
||||
memset(rule, 0, sizeof(*rule));
|
||||
|
||||
/* action */
|
||||
p = strsep(&str, " ");
|
||||
if (strcmp(p, "block") == 0)
|
||||
rule->fw_op = FW_OP_BLOCK;
|
||||
else if (strcmp(p, "pass") == 0)
|
||||
rule->fw_op = FW_OP_ALLOW;
|
||||
else return (-1);
|
||||
|
||||
/* direction */
|
||||
p = strsep(&str, " ");
|
||||
if (strcmp(p, "in") == 0)
|
||||
rule->fw_dir = FW_DIR_IN;
|
||||
else if (strcmp(p, "out") == 0)
|
||||
rule->fw_dir = FW_DIR_OUT;
|
||||
else return (-1);
|
||||
|
||||
/* device */
|
||||
if (strcmp(strsep(&str, " "), "on") != 0)
|
||||
return (-1);
|
||||
p = strsep(&str, " ");
|
||||
/* XXX - handle bug in pktfltsrv.c */
|
||||
if ((q = strstr(p, "proto")) != NULL)
|
||||
*q = '\0';
|
||||
if (strcmp(p, "all") != 0)
|
||||
strlcpy(rule->fw_device, p, sizeof(rule->fw_device));
|
||||
|
||||
/* proto */
|
||||
p = strsep(&str, " ");
|
||||
/* XXX - handle bug in pktfltsrv.c */
|
||||
if (strcmp(p, "proto") == 0)
|
||||
p = strsep(&str, " ");
|
||||
/* XXX - handle default rules */
|
||||
if (strcmp(p, "all") == 0)
|
||||
return (0);
|
||||
if (strcmp(p, "icmp") == 0)
|
||||
rule->fw_proto = IP_PROTO_ICMP;
|
||||
else if (strcmp(p, "tcp") == 0)
|
||||
rule->fw_proto = IP_PROTO_TCP;
|
||||
else if (strcmp(p, "udp") == 0)
|
||||
rule->fw_proto = IP_PROTO_UDP;
|
||||
else rule->fw_proto = atoi(p);
|
||||
|
||||
/* source */
|
||||
p = strsep(&str, " ");
|
||||
if (strcmp(p, "all") == 0)
|
||||
return (0);
|
||||
if (strcmp(p, "from") != 0)
|
||||
goto icmp_type_code;
|
||||
p = strsep(&str, " ");
|
||||
if (parse_addr(p, &rule->fw_src) < 0)
|
||||
return (-1);
|
||||
|
||||
/* source port */
|
||||
p = strsep(&str, " ");
|
||||
if (strcmp(p, "port") == 0) {
|
||||
if ((p = strstr(str, " to ")) == NULL)
|
||||
return (-1);
|
||||
*p++ = '\0';
|
||||
if (parse_portspec(str, rule->fw_sport) < 0)
|
||||
return (-1);
|
||||
str = p + 3;
|
||||
} else if (strcmp(p, "to") != 0)
|
||||
return (-1);
|
||||
|
||||
/* destination */
|
||||
p = strsep(&str, " ");
|
||||
if (parse_addr(p, &rule->fw_dst) < 0)
|
||||
return (-1);
|
||||
|
||||
/* destination port */
|
||||
p = strsep(&str, " ");
|
||||
if (strcmp(p, "port") == 0)
|
||||
return (parse_portspec(str, rule->fw_dport));
|
||||
|
||||
icmp_type_code:
|
||||
/* icmp-type, code */
|
||||
if (strcmp(p, "icmp-type") == 0) {
|
||||
if (parse_icmpspec(str, rule->fw_sport, rule->fw_dport) < 0)
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
format_rule(const struct fw_rule *rule, char *buf, int len)
|
||||
{
|
||||
char tmp[128];
|
||||
|
||||
strlcpy(buf, (rule->fw_op == FW_OP_ALLOW) ? "pass " : "block ", len);
|
||||
strlcat(buf, (rule->fw_dir == FW_DIR_IN) ? "in " : "out ", len);
|
||||
snprintf(tmp, sizeof(tmp), "on %s ", rule->fw_device);
|
||||
strlcat(buf, tmp, len);
|
||||
if (rule->fw_proto != 0) {
|
||||
snprintf(tmp, sizeof(tmp), "proto %d ", rule->fw_proto);
|
||||
strlcat(buf, tmp, len);
|
||||
}
|
||||
/* source */
|
||||
if (rule->fw_src.addr_type != ADDR_TYPE_NONE) {
|
||||
snprintf(tmp, sizeof(tmp), "from %s ",
|
||||
addr_ntoa(&rule->fw_src));
|
||||
strlcat(buf, tmp, len);
|
||||
} else
|
||||
strlcat(buf, "from any ", len);
|
||||
|
||||
/* sport */
|
||||
if (rule->fw_proto == IP_PROTO_TCP || rule->fw_proto == IP_PROTO_UDP) {
|
||||
if (rule->fw_sport[0] == rule->fw_sport[1])
|
||||
snprintf(tmp, sizeof(tmp), "port = %d ",
|
||||
rule->fw_sport[0]);
|
||||
else
|
||||
snprintf(tmp, sizeof(tmp), "port %d >< %d ",
|
||||
rule->fw_sport[0] - 1, rule->fw_sport[1] + 1);
|
||||
strlcat(buf, tmp, len);
|
||||
}
|
||||
/* destination */
|
||||
if (rule->fw_dst.addr_type != ADDR_TYPE_NONE) {
|
||||
snprintf(tmp, sizeof(tmp), "to %s ",
|
||||
addr_ntoa(&rule->fw_dst));
|
||||
strlcat(buf, tmp, len);
|
||||
} else
|
||||
strlcat(buf, "to any ", len);
|
||||
|
||||
/* dport */
|
||||
if (rule->fw_proto == IP_PROTO_TCP || rule->fw_proto == IP_PROTO_UDP) {
|
||||
if (rule->fw_dport[0] == rule->fw_dport[1])
|
||||
snprintf(tmp, sizeof(tmp), "port = %d",
|
||||
rule->fw_dport[0]);
|
||||
else
|
||||
snprintf(tmp, sizeof(tmp), "port %d >< %d",
|
||||
rule->fw_dport[0] - 1, rule->fw_dport[1] + 1);
|
||||
strlcat(buf, tmp, len);
|
||||
} else if (rule->fw_proto == IP_PROTO_ICMP) {
|
||||
if (rule->fw_sport[1]) {
|
||||
snprintf(tmp, sizeof(tmp), "icmp-type %d",
|
||||
rule->fw_sport[0]);
|
||||
strlcat(buf, tmp, len);
|
||||
if (rule->fw_dport[1]) {
|
||||
snprintf(tmp, sizeof(tmp), " code %d",
|
||||
rule->fw_dport[0]);
|
||||
strlcat(buf, tmp, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (strlen(buf));
|
||||
}
|
||||
|
||||
static char *
|
||||
call_pipe(const char *msg, int len)
|
||||
{
|
||||
HANDLE *pipe;
|
||||
DWORD i;
|
||||
char *p, *reply, status;
|
||||
|
||||
if (!WaitNamedPipe(PKTFILTER_PIPE, NMPWAIT_USE_DEFAULT_WAIT) ||
|
||||
(pipe = CreateFile(PKTFILTER_PIPE, GENERIC_READ | GENERIC_WRITE,
|
||||
0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) {
|
||||
return (NULL);
|
||||
}
|
||||
reply = NULL;
|
||||
|
||||
if (WriteFile(pipe, msg, len, &i, NULL)) {
|
||||
if (ReadFile(pipe, &status, sizeof(status), &i, NULL)) {
|
||||
if (status == FILTER_FAILURE) {
|
||||
ReadFile(pipe, &status, sizeof(status),
|
||||
&i, NULL);
|
||||
} else if (status == FILTER_MESSAGE) {
|
||||
/* get msg length */
|
||||
if (ReadFile(pipe, &len, 4, &i, NULL)) {
|
||||
/* get msg */
|
||||
p = reply = calloc(1, len + 1);
|
||||
if (!ReadFile(pipe, reply, len,
|
||||
&i, NULL)) {
|
||||
free(reply);
|
||||
reply = NULL;
|
||||
}
|
||||
}
|
||||
} else if (status == FILTER_SUCCESS)
|
||||
reply = strdup(""); /* XXX */
|
||||
}
|
||||
}
|
||||
CloseHandle(pipe);
|
||||
return (reply);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_open(void)
|
||||
{
|
||||
fw_t *f;
|
||||
IP_ADAPTER_INFO *ifinfo;
|
||||
ULONG size;
|
||||
|
||||
if ((f = calloc(1, sizeof(*f))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
size = sizeof(*f->ifinfo);
|
||||
f->ifinfo = malloc(size);
|
||||
if (GetAdaptersInfo(f->ifinfo, &size) != ERROR_SUCCESS) {
|
||||
free(f->ifinfo);
|
||||
f->ifinfo = malloc(size);
|
||||
GetAdaptersInfo(f->ifinfo, &size);
|
||||
}
|
||||
/* XXX - normalize interface names. */
|
||||
for (ifinfo = f->ifinfo; ifinfo != NULL; ifinfo = ifinfo->Next) {
|
||||
char *fmt;
|
||||
if (ifinfo->Type == MIB_IF_TYPE_ETHERNET)
|
||||
fmt = "eth";
|
||||
else if (ifinfo->Type == MIB_IF_TYPE_PPP)
|
||||
fmt = "ppp";
|
||||
else if (ifinfo->Type == MIB_IF_TYPE_SLIP)
|
||||
fmt = "sl";
|
||||
else if (ifinfo->Type == MIB_IF_TYPE_LOOPBACK)
|
||||
fmt = "lo";
|
||||
else if (ifinfo->Type == MIB_IF_TYPE_TOKENRING)
|
||||
fmt = "tr";
|
||||
else if (ifinfo->Type == MIB_IF_TYPE_FDDI)
|
||||
fmt = "fd";
|
||||
else
|
||||
fmt = "if";
|
||||
sprintf(ifinfo->AdapterName, "%s%lu", fmt, ifinfo->ComboIndex);
|
||||
}
|
||||
return (f);
|
||||
}
|
||||
|
||||
int
|
||||
fw_add(fw_t *f, const struct fw_rule *rule)
|
||||
{
|
||||
char *p, buf[MAX_RULE_LENGTH];
|
||||
int len;
|
||||
|
||||
len = format_rule(rule, buf, sizeof(buf));
|
||||
|
||||
if ((p = call_pipe(buf, len)) == NULL)
|
||||
return (-1);
|
||||
free(p);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fw_delete(fw_t *f, const struct fw_rule *rule)
|
||||
{
|
||||
struct fw_rule tmp;
|
||||
char *p, *line, *msg, cmd[128], buf[MAX_RULE_LENGTH];
|
||||
int n, ruleno, len;
|
||||
|
||||
format_rule(rule, buf, sizeof(buf));
|
||||
|
||||
len = snprintf(cmd, sizeof(cmd), "List on %s", rule->fw_device);
|
||||
if ((msg = call_pipe(cmd, len)) == NULL)
|
||||
return (-1);
|
||||
|
||||
for (ruleno = 0, p = msg; (line = strsep(&p, "\r\n")) != NULL; ) {
|
||||
if (strncmp(line, "rule ", 5) == 0) {
|
||||
line += 5;
|
||||
n = atoi(strsep(&line, ":"));
|
||||
if (parse_rule(line + 1, &tmp) == 0 &&
|
||||
memcmp(&tmp, rule, sizeof(tmp)) == 0) {
|
||||
ruleno = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
free(msg);
|
||||
if (ruleno == 0) {
|
||||
errno = ENXIO;
|
||||
SetLastError(ERROR_NO_DATA);
|
||||
return (-1);
|
||||
}
|
||||
len = snprintf(cmd, sizeof(cmd), "delete %d on %s",
|
||||
ruleno, rule->fw_device);
|
||||
if ((p = call_pipe(cmd, len)) == NULL)
|
||||
return (-1);
|
||||
free(p);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
fw_loop(fw_t *f, fw_handler callback, void *arg)
|
||||
{
|
||||
struct fw_rule rule;
|
||||
IP_ADAPTER_INFO *ifinfo;
|
||||
char *p, *line, *msg, buf[MAX_RULE_LENGTH];
|
||||
int len, ret;
|
||||
|
||||
for (ret = 0, ifinfo = f->ifinfo; ret == 0 && ifinfo != NULL;
|
||||
ifinfo = ifinfo->Next) {
|
||||
len = snprintf(buf, sizeof(buf), "list on %s",
|
||||
ifinfo->AdapterName);
|
||||
if ((msg = call_pipe(buf, len)) == NULL)
|
||||
return (-1);
|
||||
|
||||
/* parse msg */
|
||||
for (p = msg; (line = strsep(&p, "\r\n")) != NULL; ) {
|
||||
if (*line == '\0' || *line == '#' || isspace(*line))
|
||||
continue;
|
||||
if (parse_rule(line, &rule) == 0) {
|
||||
if ((ret = callback(&rule, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(msg);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
fw_t *
|
||||
fw_close(fw_t *f)
|
||||
{
|
||||
if (f != NULL) {
|
||||
free(f->ifinfo);
|
||||
free(f);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
375
libdnet-stripped/src/intf-win32.c
Normal file
375
libdnet-stripped/src/intf-win32.c
Normal file
@@ -0,0 +1,375 @@
|
||||
/*
|
||||
* intf-win32.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: intf-win32.c,v 1.24 2005/02/15 06:37:06 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct ifcombo {
|
||||
DWORD *idx;
|
||||
int cnt;
|
||||
int max;
|
||||
};
|
||||
|
||||
#define MIB_IF_TYPE_MAX 32 /* XXX - ipifcons.h */
|
||||
|
||||
struct intf_handle {
|
||||
struct ifcombo ifcombo[MIB_IF_TYPE_MAX];
|
||||
MIB_IFTABLE *iftable;
|
||||
MIB_IPADDRTABLE *iptable;
|
||||
};
|
||||
|
||||
static char *
|
||||
_ifcombo_name(int type)
|
||||
{
|
||||
char *name = "net"; /* XXX */
|
||||
|
||||
if (type == MIB_IF_TYPE_ETHERNET) {
|
||||
name = "eth";
|
||||
} else if (type == MIB_IF_TYPE_TOKENRING) {
|
||||
name = "tr";
|
||||
} else if (type == MIB_IF_TYPE_FDDI) {
|
||||
name = "fddi";
|
||||
} else if (type == MIB_IF_TYPE_PPP) {
|
||||
name = "ppp";
|
||||
} else if (type == MIB_IF_TYPE_LOOPBACK) {
|
||||
name = "lo";
|
||||
} else if (type == MIB_IF_TYPE_SLIP) {
|
||||
name = "sl";
|
||||
}
|
||||
return (name);
|
||||
}
|
||||
|
||||
static int
|
||||
_ifcombo_type(const char *device)
|
||||
{
|
||||
int type = INTF_TYPE_OTHER;
|
||||
|
||||
if (strncmp(device, "eth", 3) == 0) {
|
||||
type = INTF_TYPE_ETH;
|
||||
} else if (strncmp(device, "tr", 2) == 0) {
|
||||
type = INTF_TYPE_TOKENRING;
|
||||
} else if (strncmp(device, "fd", 2) == 0) {
|
||||
type = INTF_TYPE_FDDI;
|
||||
} else if (strncmp(device, "ppp", 3) == 0) {
|
||||
type = INTF_TYPE_PPP;
|
||||
} else if (strncmp(device, "lo", 2) == 0) {
|
||||
type = INTF_TYPE_LOOPBACK;
|
||||
} else if (strncmp(device, "sl", 2) == 0) {
|
||||
type = INTF_TYPE_SLIP;
|
||||
}
|
||||
return (type);
|
||||
}
|
||||
|
||||
static void
|
||||
_ifcombo_add(struct ifcombo *ifc, DWORD idx)
|
||||
{
|
||||
if (ifc->cnt == ifc->max) {
|
||||
if (ifc->idx) {
|
||||
ifc->max *= 2;
|
||||
ifc->idx = realloc(ifc->idx,
|
||||
sizeof(ifc->idx[0] * ifc->max));
|
||||
} else {
|
||||
ifc->max = 8;
|
||||
ifc->idx = malloc(sizeof(ifc->idx[0] * ifc->max));
|
||||
}
|
||||
}
|
||||
ifc->idx[ifc->cnt++] = idx;
|
||||
}
|
||||
|
||||
static void
|
||||
_ifrow_to_entry(intf_t *intf, MIB_IFROW *ifrow, struct intf_entry *entry)
|
||||
{
|
||||
struct addr *ap, *lap;
|
||||
int i;
|
||||
|
||||
memset(entry, 0, sizeof(*entry));
|
||||
|
||||
for (i = 0; i < intf->ifcombo[ifrow->dwType].cnt; i++) {
|
||||
if (intf->ifcombo[ifrow->dwType].idx[i] == ifrow->dwIndex)
|
||||
break;
|
||||
}
|
||||
/* XXX - dwType matches MIB-II ifType. */
|
||||
snprintf(entry->intf_name, sizeof(entry->intf_name), "%s%lu",
|
||||
_ifcombo_name(ifrow->dwType), i);
|
||||
entry->intf_type = (uint16_t)ifrow->dwType;
|
||||
|
||||
/* Get interface flags. */
|
||||
entry->intf_flags = 0;
|
||||
if (ifrow->dwAdminStatus == MIB_IF_ADMIN_STATUS_UP)
|
||||
entry->intf_flags |= INTF_FLAG_UP;
|
||||
if (ifrow->dwType == MIB_IF_TYPE_LOOPBACK)
|
||||
entry->intf_flags |= INTF_FLAG_LOOPBACK;
|
||||
else
|
||||
entry->intf_flags |= INTF_FLAG_MULTICAST;
|
||||
|
||||
/* Get interface MTU. */
|
||||
entry->intf_mtu = ifrow->dwMtu;
|
||||
|
||||
/* Get hardware address. */
|
||||
if (ifrow->dwPhysAddrLen == ETH_ADDR_LEN) {
|
||||
entry->intf_link_addr.addr_type = ADDR_TYPE_ETH;
|
||||
entry->intf_link_addr.addr_bits = ETH_ADDR_BITS;
|
||||
memcpy(&entry->intf_link_addr.addr_eth, ifrow->bPhysAddr,
|
||||
ETH_ADDR_LEN);
|
||||
}
|
||||
/* Get addresses. */
|
||||
ap = entry->intf_alias_addrs;
|
||||
lap = ap + ((entry->intf_len - sizeof(*entry)) /
|
||||
sizeof(entry->intf_alias_addrs[0]));
|
||||
for (i = 0; i < (int)intf->iptable->dwNumEntries; i++) {
|
||||
if (intf->iptable->table[i].dwIndex == ifrow->dwIndex &&
|
||||
intf->iptable->table[i].dwAddr != 0) {
|
||||
if (entry->intf_addr.addr_type == ADDR_TYPE_NONE) {
|
||||
/* Set primary address if unset. */
|
||||
entry->intf_addr.addr_type = ADDR_TYPE_IP;
|
||||
entry->intf_addr.addr_ip =
|
||||
intf->iptable->table[i].dwAddr;
|
||||
addr_mtob(&intf->iptable->table[i].dwMask,
|
||||
IP_ADDR_LEN, &entry->intf_addr.addr_bits);
|
||||
} else if (ap < lap) {
|
||||
/* Set aliases. */
|
||||
ap->addr_type = ADDR_TYPE_IP;
|
||||
ap->addr_ip = intf->iptable->table[i].dwAddr;
|
||||
addr_mtob(&intf->iptable->table[i].dwMask,
|
||||
IP_ADDR_LEN, &ap->addr_bits);
|
||||
ap++, entry->intf_alias_num++;
|
||||
}
|
||||
}
|
||||
}
|
||||
entry->intf_len = (u_char *)ap - (u_char *)entry;
|
||||
}
|
||||
|
||||
static int
|
||||
_refresh_tables(intf_t *intf)
|
||||
{
|
||||
MIB_IFROW *ifrow;
|
||||
ULONG len;
|
||||
u_int i, ret;
|
||||
|
||||
/* Get interface table. */
|
||||
for (len = sizeof(intf->iftable[0]); ; ) {
|
||||
if (intf->iftable)
|
||||
free(intf->iftable);
|
||||
intf->iftable = malloc(len);
|
||||
ret = GetIfTable(intf->iftable, &len, FALSE);
|
||||
if (ret == NO_ERROR)
|
||||
break;
|
||||
else if (ret != ERROR_INSUFFICIENT_BUFFER)
|
||||
return (-1);
|
||||
}
|
||||
/* Get IP address table. */
|
||||
for (len = sizeof(intf->iptable[0]); ; ) {
|
||||
if (intf->iptable)
|
||||
free(intf->iptable);
|
||||
intf->iptable = malloc(len);
|
||||
ret = GetIpAddrTable(intf->iptable, &len, FALSE);
|
||||
if (ret == NO_ERROR)
|
||||
break;
|
||||
else if (ret != ERROR_INSUFFICIENT_BUFFER)
|
||||
return (-1);
|
||||
}
|
||||
/*
|
||||
* Map "unfriendly" win32 interface indices to ours.
|
||||
* XXX - like IP_ADAPTER_INFO ComboIndex
|
||||
*/
|
||||
for (i = 0; i < intf->iftable->dwNumEntries; i++) {
|
||||
ifrow = &intf->iftable->table[i];
|
||||
if (ifrow->dwType < MIB_IF_TYPE_MAX) {
|
||||
_ifcombo_add(&intf->ifcombo[ifrow->dwType],
|
||||
ifrow->dwIndex);
|
||||
} else
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
_find_ifindex(intf_t *intf, const char *device)
|
||||
{
|
||||
char *p = (char *)device;
|
||||
int n, type = _ifcombo_type(device);
|
||||
|
||||
while (isalpha(*p)) p++;
|
||||
n = atoi(p);
|
||||
|
||||
return (intf->ifcombo[type].idx[n]);
|
||||
}
|
||||
|
||||
intf_t *
|
||||
intf_open(void)
|
||||
{
|
||||
return (calloc(1, sizeof(intf_t)));
|
||||
}
|
||||
|
||||
int
|
||||
intf_get(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
MIB_IFROW ifrow;
|
||||
|
||||
if (_refresh_tables(intf) < 0)
|
||||
return (-1);
|
||||
|
||||
ifrow.dwIndex = _find_ifindex(intf, entry->intf_name);
|
||||
|
||||
if (GetIfEntry(&ifrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
_ifrow_to_entry(intf, &ifrow, entry);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* XXX - gross hack required by eth-win32:eth_open() */
|
||||
const char *
|
||||
intf_get_desc(intf_t *intf, const char *name)
|
||||
{
|
||||
static char desc[MAXLEN_IFDESCR + 1];
|
||||
MIB_IFROW ifrow;
|
||||
|
||||
if (_refresh_tables(intf) < 0)
|
||||
return (NULL);
|
||||
|
||||
ifrow.dwIndex = _find_ifindex(intf, name);
|
||||
|
||||
if (GetIfEntry(&ifrow) != NO_ERROR)
|
||||
return (NULL);
|
||||
|
||||
strlcpy(desc, ifrow.bDescr, sizeof(desc));
|
||||
|
||||
return (desc);
|
||||
}
|
||||
|
||||
int
|
||||
intf_get_src(intf_t *intf, struct intf_entry *entry, struct addr *src)
|
||||
{
|
||||
MIB_IFROW ifrow;
|
||||
MIB_IPADDRROW *iprow;
|
||||
int i;
|
||||
|
||||
if (src->addr_type != ADDR_TYPE_IP) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
if (_refresh_tables(intf) < 0)
|
||||
return (-1);
|
||||
|
||||
for (i = 0; i < (int)intf->iptable->dwNumEntries; i++) {
|
||||
iprow = &intf->iptable->table[i];
|
||||
if (iprow->dwAddr == src->addr_ip) {
|
||||
ifrow.dwIndex = iprow->dwIndex;
|
||||
if (GetIfEntry(&ifrow) != NO_ERROR)
|
||||
return (-1);
|
||||
_ifrow_to_entry(intf, &ifrow, entry);
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
errno = ENXIO;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
intf_get_dst(intf_t *intf, struct intf_entry *entry, struct addr *dst)
|
||||
{
|
||||
MIB_IFROW ifrow;
|
||||
|
||||
if (dst->addr_type != ADDR_TYPE_IP) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
if (GetBestInterface(dst->addr_ip, &ifrow.dwIndex) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
if (GetIfEntry(&ifrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
if (_refresh_tables(intf) < 0)
|
||||
return (-1);
|
||||
|
||||
_ifrow_to_entry(intf, &ifrow, entry);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
intf_set(intf_t *intf, const struct intf_entry *entry)
|
||||
{
|
||||
/*
|
||||
* XXX - could set interface up/down via SetIfEntry(),
|
||||
* but what about the rest of the configuration? :-(
|
||||
* {Add,Delete}IPAddress for 2000/XP only
|
||||
*/
|
||||
#if 0
|
||||
/* Set interface address. XXX - 2000/XP only? */
|
||||
if (entry->intf_addr.addr_type == ADDR_TYPE_IP) {
|
||||
ULONG ctx = 0, inst = 0;
|
||||
UINT ip, mask;
|
||||
|
||||
memcpy(&ip, &entry->intf_addr.addr_ip, IP_ADDR_LEN);
|
||||
addr_btom(entry->intf_addr.addr_bits, &mask, IP_ADDR_LEN);
|
||||
|
||||
if (AddIPAddress(ip, mask,
|
||||
_find_ifindex(intf, entry->intf_name),
|
||||
&ctx, &inst) != NO_ERROR) {
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
errno = ENOSYS;
|
||||
SetLastError(ERROR_NOT_SUPPORTED);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
intf_loop(intf_t *intf, intf_handler callback, void *arg)
|
||||
{
|
||||
struct intf_entry *entry;
|
||||
u_char ebuf[1024];
|
||||
int i, ret = 0;
|
||||
|
||||
if (_refresh_tables(intf) < 0)
|
||||
return (-1);
|
||||
|
||||
entry = (struct intf_entry *)ebuf;
|
||||
|
||||
for (i = 0; i < (int)intf->iftable->dwNumEntries; i++) {
|
||||
entry->intf_len = sizeof(ebuf);
|
||||
_ifrow_to_entry(intf, &intf->iftable->table[i], entry);
|
||||
if ((ret = (*callback)(entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
intf_t *
|
||||
intf_close(intf_t *intf)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (intf != NULL) {
|
||||
for (i = 0; i < MIB_IF_TYPE_MAX; i++) {
|
||||
if (intf->ifcombo[i].idx)
|
||||
free(intf->ifcombo[i].idx);
|
||||
}
|
||||
if (intf->iftable)
|
||||
free(intf->iftable);
|
||||
if (intf->iptable)
|
||||
free(intf->iptable);
|
||||
free(intf);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
714
libdnet-stripped/src/intf.c
Normal file
714
libdnet-stripped/src/intf.c
Normal file
@@ -0,0 +1,714 @@
|
||||
/*
|
||||
* intf.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: intf.c,v 1.55 2005/02/10 16:57:35 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SOCKIO_H
|
||||
# include <sys/sockio.h>
|
||||
#endif
|
||||
/* XXX - AIX */
|
||||
#ifndef IP_MULTICAST
|
||||
# define IP_MULTICAST
|
||||
#endif
|
||||
#include <net/if.h>
|
||||
#ifdef HAVE_NET_IF_VAR_H
|
||||
# include <net/if_var.h>
|
||||
#endif
|
||||
#undef IP_MULTICAST
|
||||
/* XXX - IPv6 ioctls */
|
||||
#ifdef HAVE_NETINET_IN_VAR_H
|
||||
# include <netinet/in.h>
|
||||
# include <netinet/in_var.h>
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
/* XXX - Tru64 */
|
||||
#if defined(SIOCRIPMTU) && defined(SIOCSIPMTU)
|
||||
# define SIOCGIFMTU SIOCRIPMTU
|
||||
# define SIOCSIFMTU SIOCSIPMTU
|
||||
#endif
|
||||
|
||||
/* XXX - HP-UX */
|
||||
#if defined(SIOCADDIFADDR) && defined(SIOCDELIFADDR)
|
||||
# define SIOCAIFADDR SIOCADDIFADDR
|
||||
# define SIOCDIFADDR SIOCDELIFADDR
|
||||
#endif
|
||||
|
||||
/* XXX - HP-UX, Solaris */
|
||||
#if !defined(ifr_mtu) && defined(ifr_metric)
|
||||
# define ifr_mtu ifr_metric
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
# define NEXTIFR(i) ((struct ifreq *)((u_char *)&i->ifr_addr + \
|
||||
(i->ifr_addr.sa_len ? i->ifr_addr.sa_len : \
|
||||
sizeof(i->ifr_addr))))
|
||||
#else
|
||||
# define NEXTIFR(i) (i + 1)
|
||||
#endif
|
||||
|
||||
/* XXX - superset of ifreq, for portable SIOC{A,D}IFADDR */
|
||||
struct dnet_ifaliasreq {
|
||||
char ifra_name[IFNAMSIZ];
|
||||
struct sockaddr ifra_addr;
|
||||
struct sockaddr ifra_brdaddr;
|
||||
struct sockaddr ifra_mask;
|
||||
int ifra_cookie; /* XXX - IRIX!@#$ */
|
||||
};
|
||||
|
||||
struct intf_handle {
|
||||
int fd;
|
||||
int fd6;
|
||||
struct ifconf ifc;
|
||||
u_char ifcbuf[4192];
|
||||
};
|
||||
|
||||
static int
|
||||
intf_flags_to_iff(u_short flags, int iff)
|
||||
{
|
||||
if (flags & INTF_FLAG_UP)
|
||||
iff |= IFF_UP;
|
||||
else
|
||||
iff &= ~IFF_UP;
|
||||
if (flags & INTF_FLAG_NOARP)
|
||||
iff |= IFF_NOARP;
|
||||
else
|
||||
iff &= ~IFF_NOARP;
|
||||
|
||||
return (iff);
|
||||
}
|
||||
|
||||
static u_int
|
||||
intf_iff_to_flags(int iff)
|
||||
{
|
||||
u_int n = 0;
|
||||
|
||||
if (iff & IFF_UP)
|
||||
n |= INTF_FLAG_UP;
|
||||
if (iff & IFF_LOOPBACK)
|
||||
n |= INTF_FLAG_LOOPBACK;
|
||||
if (iff & IFF_POINTOPOINT)
|
||||
n |= INTF_FLAG_POINTOPOINT;
|
||||
if (iff & IFF_NOARP)
|
||||
n |= INTF_FLAG_NOARP;
|
||||
if (iff & IFF_BROADCAST)
|
||||
n |= INTF_FLAG_BROADCAST;
|
||||
if (iff & IFF_MULTICAST)
|
||||
n |= INTF_FLAG_MULTICAST;
|
||||
|
||||
return (n);
|
||||
}
|
||||
|
||||
intf_t *
|
||||
intf_open(void)
|
||||
{
|
||||
intf_t *intf;
|
||||
|
||||
if ((intf = calloc(1, sizeof(*intf))) != NULL) {
|
||||
intf->fd = intf->fd6 = -1;
|
||||
|
||||
if ((intf->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
return (intf_close(intf));
|
||||
#ifdef SIOCGIFNETMASK_IN6
|
||||
if ((intf->fd6 = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
|
||||
# ifdef EPROTONOSUPPORT
|
||||
if (errno != EPROTONOSUPPORT)
|
||||
# endif
|
||||
return (intf_close(intf));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return (intf);
|
||||
}
|
||||
|
||||
static int
|
||||
_intf_delete_addrs(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
#if defined(SIOCDIFADDR)
|
||||
struct dnet_ifaliasreq ifra;
|
||||
|
||||
memset(&ifra, 0, sizeof(ifra));
|
||||
strlcpy(ifra.ifra_name, entry->intf_name, sizeof(ifra.ifra_name));
|
||||
if (entry->intf_addr.addr_type == ADDR_TYPE_IP) {
|
||||
addr_ntos(&entry->intf_addr, &ifra.ifra_addr);
|
||||
ioctl(intf->fd, SIOCDIFADDR, &ifra);
|
||||
}
|
||||
if (entry->intf_dst_addr.addr_type == ADDR_TYPE_IP) {
|
||||
addr_ntos(&entry->intf_dst_addr, &ifra.ifra_addr);
|
||||
ioctl(intf->fd, SIOCDIFADDR, &ifra);
|
||||
}
|
||||
#elif defined(SIOCLIFREMOVEIF)
|
||||
struct ifreq ifr;
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strlcpy(ifr.ifr_name, entry->intf_name, sizeof(ifr.ifr_name));
|
||||
/* XXX - overloading Solaris lifreq with ifreq */
|
||||
ioctl(intf->fd, SIOCLIFREMOVEIF, &ifr);
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
_intf_delete_aliases(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
int i;
|
||||
#if defined(SIOCDIFADDR) && !defined(__linux__) /* XXX - see Linux below */
|
||||
struct dnet_ifaliasreq ifra;
|
||||
|
||||
memset(&ifra, 0, sizeof(ifra));
|
||||
strlcpy(ifra.ifra_name, entry->intf_name, sizeof(ifra.ifra_name));
|
||||
|
||||
for (i = 0; i < (int)entry->intf_alias_num; i++) {
|
||||
addr_ntos(&entry->intf_alias_addrs[i], &ifra.ifra_addr);
|
||||
ioctl(intf->fd, SIOCDIFADDR, &ifra);
|
||||
}
|
||||
#else
|
||||
struct ifreq ifr;
|
||||
|
||||
for (i = 0; i < entry->intf_alias_num; i++) {
|
||||
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s:%d",
|
||||
entry->intf_name, i + 1);
|
||||
# ifdef SIOCLIFREMOVEIF
|
||||
/* XXX - overloading Solaris lifreq with ifreq */
|
||||
ioctl(intf->fd, SIOCLIFREMOVEIF, &ifr);
|
||||
# else
|
||||
/* XXX - only need to set interface down on Linux */
|
||||
ifr.ifr_flags = 0;
|
||||
ioctl(intf->fd, SIOCSIFFLAGS, &ifr);
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
_intf_add_aliases(intf_t *intf, const struct intf_entry *entry)
|
||||
{
|
||||
int i;
|
||||
#ifdef SIOCAIFADDR
|
||||
struct dnet_ifaliasreq ifra;
|
||||
struct addr bcast;
|
||||
|
||||
memset(&ifra, 0, sizeof(ifra));
|
||||
strlcpy(ifra.ifra_name, entry->intf_name, sizeof(ifra.ifra_name));
|
||||
|
||||
for (i = 0; i < (int)entry->intf_alias_num; i++) {
|
||||
if (entry->intf_alias_addrs[i].addr_type != ADDR_TYPE_IP)
|
||||
continue;
|
||||
|
||||
if (addr_ntos(&entry->intf_alias_addrs[i],
|
||||
&ifra.ifra_addr) < 0)
|
||||
return (-1);
|
||||
addr_bcast(&entry->intf_alias_addrs[i], &bcast);
|
||||
addr_ntos(&bcast, &ifra.ifra_brdaddr);
|
||||
addr_btos(entry->intf_alias_addrs[i].addr_bits,
|
||||
&ifra.ifra_mask);
|
||||
|
||||
if (ioctl(intf->fd, SIOCAIFADDR, &ifra) < 0)
|
||||
return (-1);
|
||||
}
|
||||
#else
|
||||
struct ifreq ifr;
|
||||
int n = 1;
|
||||
|
||||
for (i = 0; i < entry->intf_alias_num; i++) {
|
||||
if (entry->intf_alias_addrs[i].addr_type != ADDR_TYPE_IP)
|
||||
continue;
|
||||
|
||||
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s:%d",
|
||||
entry->intf_name, n++);
|
||||
# ifdef SIOCLIFADDIF
|
||||
if (ioctl(intf->fd, SIOCLIFADDIF, &ifr) < 0)
|
||||
return (-1);
|
||||
# endif
|
||||
if (addr_ntos(&entry->intf_alias_addrs[i], &ifr.ifr_addr) < 0)
|
||||
return (-1);
|
||||
if (ioctl(intf->fd, SIOCSIFADDR, &ifr) < 0)
|
||||
return (-1);
|
||||
}
|
||||
strlcpy(ifr.ifr_name, entry->intf_name, sizeof(ifr.ifr_name));
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
intf_set(intf_t *intf, const struct intf_entry *entry)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
struct intf_entry *orig;
|
||||
struct addr bcast;
|
||||
u_char buf[BUFSIZ];
|
||||
|
||||
orig = (struct intf_entry *)buf;
|
||||
orig->intf_len = sizeof(buf);
|
||||
strcpy(orig->intf_name, entry->intf_name);
|
||||
|
||||
if (intf_get(intf, orig) < 0)
|
||||
return (-1);
|
||||
|
||||
/* Delete any existing aliases. */
|
||||
if (_intf_delete_aliases(intf, orig) < 0)
|
||||
return (-1);
|
||||
|
||||
/* Delete any existing addrs. */
|
||||
if (_intf_delete_addrs(intf, orig) < 0)
|
||||
return (-1);
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strlcpy(ifr.ifr_name, entry->intf_name, sizeof(ifr.ifr_name));
|
||||
|
||||
/* Set interface MTU. */
|
||||
if (entry->intf_mtu != 0) {
|
||||
ifr.ifr_mtu = entry->intf_mtu;
|
||||
if (ioctl(intf->fd, SIOCSIFMTU, &ifr) < 0)
|
||||
return (-1);
|
||||
}
|
||||
/* Set interface address. */
|
||||
if (entry->intf_addr.addr_type == ADDR_TYPE_IP) {
|
||||
#ifdef BSD
|
||||
/* XXX - why must this happen before SIOCSIFADDR? */
|
||||
if (addr_btos(entry->intf_addr.addr_bits,
|
||||
&ifr.ifr_addr) == 0) {
|
||||
if (ioctl(intf->fd, SIOCSIFNETMASK, &ifr) < 0)
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
if (addr_ntos(&entry->intf_addr, &ifr.ifr_addr) < 0)
|
||||
return (-1);
|
||||
if (ioctl(intf->fd, SIOCSIFADDR, &ifr) < 0 && errno != EEXIST)
|
||||
return (-1);
|
||||
|
||||
if (addr_btos(entry->intf_addr.addr_bits, &ifr.ifr_addr) == 0
|
||||
#ifdef __linux__
|
||||
&& entry->intf_addr.addr_ip != 0
|
||||
#endif
|
||||
) {
|
||||
if (ioctl(intf->fd, SIOCSIFNETMASK, &ifr) < 0)
|
||||
return (-1);
|
||||
}
|
||||
if (addr_bcast(&entry->intf_addr, &bcast) == 0) {
|
||||
if (addr_ntos(&bcast, &ifr.ifr_broadaddr) == 0) {
|
||||
/* XXX - ignore error from non-broadcast ifs */
|
||||
ioctl(intf->fd, SIOCSIFBRDADDR, &ifr);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Set link-level address. */
|
||||
if (entry->intf_link_addr.addr_type == ADDR_TYPE_ETH &&
|
||||
addr_cmp(&entry->intf_link_addr, &orig->intf_link_addr) != 0) {
|
||||
#if defined(SIOCSIFHWADDR)
|
||||
if (addr_ntos(&entry->intf_link_addr, &ifr.ifr_hwaddr) < 0)
|
||||
return (-1);
|
||||
if (ioctl(intf->fd, SIOCSIFHWADDR, &ifr) < 0)
|
||||
return (-1);
|
||||
#elif defined (SIOCSIFLLADDR)
|
||||
memcpy(ifr.ifr_addr.sa_data, &entry->intf_link_addr.addr_eth,
|
||||
ETH_ADDR_LEN);
|
||||
ifr.ifr_addr.sa_len = ETH_ADDR_LEN;
|
||||
if (ioctl(intf->fd, SIOCSIFLLADDR, &ifr) < 0)
|
||||
return (-1);
|
||||
#else
|
||||
eth_t *eth;
|
||||
|
||||
if ((eth = eth_open(entry->intf_name)) == NULL)
|
||||
return (-1);
|
||||
if (eth_set(eth, &entry->intf_link_addr.addr_eth) < 0) {
|
||||
eth_close(eth);
|
||||
return (-1);
|
||||
}
|
||||
eth_close(eth);
|
||||
#endif
|
||||
}
|
||||
/* Set point-to-point destination. */
|
||||
if (entry->intf_dst_addr.addr_type == ADDR_TYPE_IP) {
|
||||
if (addr_ntos(&entry->intf_dst_addr, &ifr.ifr_dstaddr) < 0)
|
||||
return (-1);
|
||||
if (ioctl(intf->fd, SIOCSIFDSTADDR, &ifr) < 0 &&
|
||||
errno != EEXIST)
|
||||
return (-1);
|
||||
}
|
||||
/* Add aliases. */
|
||||
if (_intf_add_aliases(intf, entry) < 0)
|
||||
return (-1);
|
||||
|
||||
/* Set interface flags. */
|
||||
if (ioctl(intf->fd, SIOCGIFFLAGS, &ifr) < 0)
|
||||
return (-1);
|
||||
|
||||
ifr.ifr_flags = intf_flags_to_iff(entry->intf_flags, ifr.ifr_flags);
|
||||
|
||||
if (ioctl(intf->fd, SIOCSIFFLAGS, &ifr) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* XXX - this is total crap. how to do this without walking ifnet? */
|
||||
static void
|
||||
_intf_set_type(struct intf_entry *entry)
|
||||
{
|
||||
if ((entry->intf_flags & INTF_FLAG_BROADCAST) != 0)
|
||||
entry->intf_type = INTF_TYPE_ETH;
|
||||
else if ((entry->intf_flags & INTF_FLAG_POINTOPOINT) != 0)
|
||||
entry->intf_type = INTF_TYPE_TUN;
|
||||
else if ((entry->intf_flags & INTF_FLAG_LOOPBACK) != 0)
|
||||
entry->intf_type = INTF_TYPE_LOOPBACK;
|
||||
else
|
||||
entry->intf_type = INTF_TYPE_OTHER;
|
||||
}
|
||||
|
||||
static int
|
||||
_intf_get_noalias(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
|
||||
strlcpy(ifr.ifr_name, entry->intf_name, sizeof(ifr.ifr_name));
|
||||
|
||||
/* Get interface flags. */
|
||||
if (ioctl(intf->fd, SIOCGIFFLAGS, &ifr) < 0)
|
||||
return (-1);
|
||||
|
||||
entry->intf_flags = intf_iff_to_flags(ifr.ifr_flags);
|
||||
_intf_set_type(entry);
|
||||
|
||||
/* Get interface MTU. */
|
||||
if (ioctl(intf->fd, SIOCGIFMTU, &ifr) < 0)
|
||||
return (-1);
|
||||
entry->intf_mtu = ifr.ifr_mtu;
|
||||
|
||||
entry->intf_addr.addr_type = entry->intf_dst_addr.addr_type =
|
||||
entry->intf_link_addr.addr_type = ADDR_TYPE_NONE;
|
||||
|
||||
/* Get primary interface address. */
|
||||
if (ioctl(intf->fd, SIOCGIFADDR, &ifr) == 0) {
|
||||
addr_ston(&ifr.ifr_addr, &entry->intf_addr);
|
||||
if (ioctl(intf->fd, SIOCGIFNETMASK, &ifr) < 0)
|
||||
return (-1);
|
||||
addr_stob(&ifr.ifr_addr, &entry->intf_addr.addr_bits);
|
||||
}
|
||||
/* Get other addresses. */
|
||||
if (entry->intf_type == INTF_TYPE_TUN) {
|
||||
if (ioctl(intf->fd, SIOCGIFDSTADDR, &ifr) == 0) {
|
||||
if (addr_ston(&ifr.ifr_addr,
|
||||
&entry->intf_dst_addr) < 0)
|
||||
return (-1);
|
||||
}
|
||||
} else if (entry->intf_type == INTF_TYPE_ETH) {
|
||||
#if defined(SIOCGIFHWADDR)
|
||||
if (ioctl(intf->fd, SIOCGIFHWADDR, &ifr) < 0)
|
||||
return (-1);
|
||||
if (addr_ston(&ifr.ifr_addr, &entry->intf_link_addr) < 0)
|
||||
return (-1);
|
||||
#elif defined(SIOCRPHYSADDR)
|
||||
/* Tru64 */
|
||||
struct ifdevea *ifd = (struct ifdevea *)𝔦 /* XXX */
|
||||
|
||||
if (ioctl(intf->fd, SIOCRPHYSADDR, ifd) < 0)
|
||||
return (-1);
|
||||
addr_pack(&entry->intf_link_addr, ADDR_TYPE_ETH, ETH_ADDR_BITS,
|
||||
ifd->current_pa, ETH_ADDR_LEN);
|
||||
#else
|
||||
eth_t *eth;
|
||||
|
||||
if ((eth = eth_open(entry->intf_name)) != NULL) {
|
||||
if (!eth_get(eth, &entry->intf_link_addr.addr_eth)) {
|
||||
entry->intf_link_addr.addr_type =
|
||||
ADDR_TYPE_ETH;
|
||||
entry->intf_link_addr.addr_bits =
|
||||
ETH_ADDR_BITS;
|
||||
}
|
||||
eth_close(eth);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifdef SIOCLIFADDR
|
||||
/* XXX - aliases on IRIX don't show up in SIOCGIFCONF */
|
||||
static int
|
||||
_intf_get_aliases(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
struct dnet_ifaliasreq ifra;
|
||||
struct addr *ap, *lap;
|
||||
|
||||
strlcpy(ifra.ifra_name, entry->intf_name, sizeof(ifra.ifra_name));
|
||||
addr_ntos(&entry->intf_addr, &ifra.ifra_addr);
|
||||
addr_btos(entry->intf_addr.addr_bits, &ifra.ifra_mask);
|
||||
memset(&ifra.ifra_brdaddr, 0, sizeof(ifra.ifra_brdaddr));
|
||||
ifra.ifra_cookie = 1;
|
||||
|
||||
ap = entry->intf_alias_addrs;
|
||||
lap = (struct addr *)((u_char *)entry + entry->intf_len);
|
||||
|
||||
while (ioctl(intf->fd, SIOCLIFADDR, &ifra) == 0 &&
|
||||
ifra.ifra_cookie > 0 && (ap + 1) < lap) {
|
||||
if (addr_ston(&ifra.ifra_addr, ap) < 0)
|
||||
break;
|
||||
ap++, entry->intf_alias_num++;
|
||||
}
|
||||
entry->intf_len = (u_char *)ap - (u_char *)entry;
|
||||
|
||||
return (0);
|
||||
}
|
||||
#else
|
||||
static int
|
||||
_intf_get_aliases(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
struct ifreq *ifr, *lifr;
|
||||
struct addr *ap, *lap;
|
||||
char *p;
|
||||
|
||||
if (intf->ifc.ifc_len < (int)sizeof(*ifr)) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
entry->intf_alias_num = 0;
|
||||
ap = entry->intf_alias_addrs;
|
||||
lifr = (struct ifreq *)intf->ifc.ifc_buf +
|
||||
(intf->ifc.ifc_len / sizeof(*lifr));
|
||||
lap = (struct addr *)((u_char *)entry + entry->intf_len);
|
||||
|
||||
/* Get addresses for this interface. */
|
||||
for (ifr = intf->ifc.ifc_req; ifr < lifr && (ap + 1) < lap;
|
||||
ifr = NEXTIFR(ifr)) {
|
||||
/* XXX - Linux, Solaris ifaliases */
|
||||
if ((p = strchr(ifr->ifr_name, ':')) != NULL)
|
||||
*p = '\0';
|
||||
|
||||
if (strcmp(ifr->ifr_name, entry->intf_name) != 0)
|
||||
continue;
|
||||
|
||||
if (addr_ston(&ifr->ifr_addr, ap) < 0)
|
||||
continue;
|
||||
|
||||
/* XXX */
|
||||
if (ap->addr_type == ADDR_TYPE_ETH) {
|
||||
memcpy(&entry->intf_link_addr, ap, sizeof(*ap));
|
||||
continue;
|
||||
} else if (ap->addr_type == ADDR_TYPE_IP) {
|
||||
if (ap->addr_ip == entry->intf_addr.addr_ip ||
|
||||
ap->addr_ip == entry->intf_dst_addr.addr_ip)
|
||||
continue;
|
||||
}
|
||||
#ifdef SIOCGIFNETMASK_IN6
|
||||
else if (ap->addr_type == ADDR_TYPE_IP6 && intf->fd6 != -1) {
|
||||
struct in6_ifreq ifr6;
|
||||
|
||||
/* XXX - sizeof(ifr) < sizeof(ifr6) */
|
||||
memcpy(&ifr6, ifr, sizeof(ifr6));
|
||||
|
||||
if (ioctl(intf->fd6, SIOCGIFNETMASK_IN6, &ifr6) == 0) {
|
||||
addr_stob((struct sockaddr *)&ifr6.ifr_addr,
|
||||
&ap->addr_bits);
|
||||
}
|
||||
else perror("SIOCGIFNETMASK_IN6");
|
||||
}
|
||||
#endif
|
||||
ap++, entry->intf_alias_num++;
|
||||
}
|
||||
entry->intf_len = (u_char *)ap - (u_char *)entry;
|
||||
|
||||
return (0);
|
||||
}
|
||||
#endif /* SIOCLIFADDR */
|
||||
|
||||
int
|
||||
intf_get(intf_t *intf, struct intf_entry *entry)
|
||||
{
|
||||
if (_intf_get_noalias(intf, entry) < 0)
|
||||
return (-1);
|
||||
#ifndef SIOCLIFADDR
|
||||
intf->ifc.ifc_buf = (caddr_t)intf->ifcbuf;
|
||||
intf->ifc.ifc_len = sizeof(intf->ifcbuf);
|
||||
|
||||
if (ioctl(intf->fd, SIOCGIFCONF, &intf->ifc) < 0)
|
||||
return (-1);
|
||||
#endif
|
||||
return (_intf_get_aliases(intf, entry));
|
||||
}
|
||||
|
||||
static int
|
||||
_match_intf_src(const struct intf_entry *entry, void *arg)
|
||||
{
|
||||
struct intf_entry *save = (struct intf_entry *)arg;
|
||||
|
||||
if (entry->intf_addr.addr_type == ADDR_TYPE_IP &&
|
||||
entry->intf_addr.addr_ip == save->intf_addr.addr_ip) {
|
||||
/* XXX - truncated result if entry is too small. */
|
||||
if (save->intf_len < entry->intf_len)
|
||||
memcpy(save, entry, save->intf_len);
|
||||
else
|
||||
memcpy(save, entry, entry->intf_len);
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
intf_get_src(intf_t *intf, struct intf_entry *entry, struct addr *src)
|
||||
{
|
||||
memcpy(&entry->intf_addr, src, sizeof(*src));
|
||||
|
||||
if (intf_loop(intf, _match_intf_src, entry) != 1) {
|
||||
errno = ENXIO;
|
||||
return (-1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
intf_get_dst(intf_t *intf, struct intf_entry *entry, struct addr *dst)
|
||||
{
|
||||
struct sockaddr_in sin;
|
||||
int n;
|
||||
|
||||
if (dst->addr_type != ADDR_TYPE_IP) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
addr_ntos(dst, (struct sockaddr *)&sin);
|
||||
sin.sin_port = htons(666);
|
||||
|
||||
if (connect(intf->fd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
|
||||
return (-1);
|
||||
|
||||
n = sizeof(sin);
|
||||
if (getsockname(intf->fd, (struct sockaddr *)&sin, &n) < 0)
|
||||
return (-1);
|
||||
|
||||
addr_ston((struct sockaddr *)&sin, &entry->intf_addr);
|
||||
|
||||
if (intf_loop(intf, _match_intf_src, entry) != 1)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LINUX_PROCFS
|
||||
#define PROC_DEV_FILE "/proc/net/dev"
|
||||
|
||||
int
|
||||
intf_loop(intf_t *intf, intf_handler callback, void *arg)
|
||||
{
|
||||
FILE *fp;
|
||||
struct intf_entry *entry;
|
||||
char *p, buf[BUFSIZ], ebuf[BUFSIZ];
|
||||
int ret;
|
||||
|
||||
entry = (struct intf_entry *)ebuf;
|
||||
|
||||
if ((fp = fopen(PROC_DEV_FILE, "r")) == NULL)
|
||||
return (-1);
|
||||
|
||||
intf->ifc.ifc_buf = (caddr_t)intf->ifcbuf;
|
||||
intf->ifc.ifc_len = sizeof(intf->ifcbuf);
|
||||
|
||||
if (ioctl(intf->fd, SIOCGIFCONF, &intf->ifc) < 0)
|
||||
return (-1);
|
||||
|
||||
ret = 0;
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
||||
if ((p = strchr(buf, ':')) == NULL)
|
||||
continue;
|
||||
*p = '\0';
|
||||
for (p = buf; *p == ' '; p++)
|
||||
;
|
||||
|
||||
memset(ebuf, 0, sizeof(ebuf));
|
||||
strlcpy(entry->intf_name, p, sizeof(entry->intf_name));
|
||||
entry->intf_len = sizeof(ebuf);
|
||||
|
||||
if (_intf_get_noalias(intf, entry) < 0) {
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
if (_intf_get_aliases(intf, entry) < 0) {
|
||||
ret = -1;
|
||||
break;
|
||||
}
|
||||
if ((ret = (*callback)(entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
if (ferror(fp))
|
||||
ret = -1;
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
#else
|
||||
int
|
||||
intf_loop(intf_t *intf, intf_handler callback, void *arg)
|
||||
{
|
||||
struct intf_entry *entry;
|
||||
struct ifreq *ifr, *lifr, *pifr;
|
||||
char *p, ebuf[BUFSIZ];
|
||||
int ret;
|
||||
|
||||
entry = (struct intf_entry *)ebuf;
|
||||
|
||||
intf->ifc.ifc_buf = (caddr_t)intf->ifcbuf;
|
||||
intf->ifc.ifc_len = sizeof(intf->ifcbuf);
|
||||
|
||||
if (ioctl(intf->fd, SIOCGIFCONF, &intf->ifc) < 0)
|
||||
return (-1);
|
||||
|
||||
pifr = NULL;
|
||||
lifr = (struct ifreq *)&intf->ifc.ifc_buf[intf->ifc.ifc_len];
|
||||
|
||||
for (ifr = intf->ifc.ifc_req; ifr < lifr; ifr = NEXTIFR(ifr)) {
|
||||
/* XXX - Linux, Solaris ifaliases */
|
||||
if ((p = strchr(ifr->ifr_name, ':')) != NULL)
|
||||
*p = '\0';
|
||||
|
||||
if (pifr != NULL && strcmp(ifr->ifr_name, pifr->ifr_name) == 0)
|
||||
continue;
|
||||
|
||||
memset(ebuf, 0, sizeof(ebuf));
|
||||
strlcpy(entry->intf_name, ifr->ifr_name,
|
||||
sizeof(entry->intf_name));
|
||||
entry->intf_len = sizeof(ebuf);
|
||||
|
||||
if (_intf_get_noalias(intf, entry) < 0)
|
||||
return (-1);
|
||||
if (_intf_get_aliases(intf, entry) < 0)
|
||||
return (-1);
|
||||
|
||||
if ((ret = (*callback)(entry, arg)) != 0)
|
||||
return (ret);
|
||||
|
||||
pifr = ifr;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#endif /* !HAVE_LINUX_PROCFS */
|
||||
|
||||
intf_t *
|
||||
intf_close(intf_t *intf)
|
||||
{
|
||||
if (intf != NULL) {
|
||||
if (intf->fd >= 0)
|
||||
close(intf->fd);
|
||||
if (intf->fd6 >= 0)
|
||||
close(intf->fd6);
|
||||
free(intf);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
246
libdnet-stripped/src/ip-cooked.c
Normal file
246
libdnet-stripped/src/ip-cooked.c
Normal file
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
* ip-cooked.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip-cooked.c,v 1.17 2005/01/25 21:30:40 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <netinet/in.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
#include "queue.h"
|
||||
|
||||
struct ip_intf {
|
||||
eth_t *eth;
|
||||
char name[INTF_NAME_LEN];
|
||||
struct addr ha;
|
||||
struct addr pa;
|
||||
int mtu;
|
||||
LIST_ENTRY(ip_intf) next;
|
||||
};
|
||||
|
||||
struct ip_handle {
|
||||
arp_t *arp;
|
||||
intf_t *intf;
|
||||
route_t *route;
|
||||
int fd;
|
||||
struct sockaddr_in sin;
|
||||
|
||||
LIST_HEAD(, ip_intf) ip_intf_list;
|
||||
};
|
||||
|
||||
static int
|
||||
_add_ip_intf(const struct intf_entry *entry, void *arg)
|
||||
{
|
||||
ip_t *ip = (ip_t *)arg;
|
||||
struct ip_intf *ipi;
|
||||
|
||||
if (entry->intf_type == INTF_TYPE_ETH &&
|
||||
(entry->intf_flags & INTF_FLAG_UP) != 0 &&
|
||||
entry->intf_mtu >= ETH_LEN_MIN &&
|
||||
entry->intf_addr.addr_type == ADDR_TYPE_IP &&
|
||||
entry->intf_link_addr.addr_type == ADDR_TYPE_ETH) {
|
||||
|
||||
if ((ipi = calloc(1, sizeof(*ipi))) == NULL)
|
||||
return (-1);
|
||||
|
||||
strlcpy(ipi->name, entry->intf_name, sizeof(ipi->name));
|
||||
memcpy(&ipi->ha, &entry->intf_link_addr, sizeof(ipi->ha));
|
||||
memcpy(&ipi->pa, &entry->intf_addr, sizeof(ipi->pa));
|
||||
ipi->mtu = entry->intf_mtu;
|
||||
|
||||
LIST_INSERT_HEAD(&ip->ip_intf_list, ipi, next);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
ip_t *
|
||||
ip_open(void)
|
||||
{
|
||||
ip_t *ip;
|
||||
|
||||
if ((ip = calloc(1, sizeof(*ip))) != NULL) {
|
||||
ip->fd = -1;
|
||||
|
||||
if ((ip->arp = arp_open()) == NULL ||
|
||||
(ip->intf = intf_open()) == NULL ||
|
||||
(ip->route = route_open()) == NULL)
|
||||
return (ip_close(ip));
|
||||
|
||||
if ((ip->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
return (ip_close(ip));
|
||||
|
||||
memset(&ip->sin, 0, sizeof(ip->sin));
|
||||
ip->sin.sin_family = AF_INET;
|
||||
ip->sin.sin_port = htons(666);
|
||||
|
||||
LIST_INIT(&ip->ip_intf_list);
|
||||
|
||||
if (intf_loop(ip->intf, _add_ip_intf, ip) != 0)
|
||||
return (ip_close(ip));
|
||||
}
|
||||
return (ip);
|
||||
}
|
||||
|
||||
static struct ip_intf *
|
||||
_lookup_ip_intf(ip_t *ip, ip_addr_t dst)
|
||||
{
|
||||
struct ip_intf *ipi;
|
||||
int n;
|
||||
|
||||
ip->sin.sin_addr.s_addr = dst;
|
||||
n = sizeof(ip->sin);
|
||||
|
||||
if (connect(ip->fd, (struct sockaddr *)&ip->sin, n) < 0)
|
||||
return (NULL);
|
||||
|
||||
if (getsockname(ip->fd, (struct sockaddr *)&ip->sin, &n) < 0)
|
||||
return (NULL);
|
||||
|
||||
LIST_FOREACH(ipi, &ip->ip_intf_list, next) {
|
||||
if (ipi->pa.addr_ip == ip->sin.sin_addr.s_addr) {
|
||||
if (ipi->eth == NULL) {
|
||||
if ((ipi->eth = eth_open(ipi->name)) == NULL)
|
||||
return (NULL);
|
||||
}
|
||||
if (ipi != LIST_FIRST(&ip->ip_intf_list)) {
|
||||
LIST_REMOVE(ipi, next);
|
||||
LIST_INSERT_HEAD(&ip->ip_intf_list, ipi, next);
|
||||
}
|
||||
return (ipi);
|
||||
}
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_request_arp(struct ip_intf *ipi, struct addr *dst)
|
||||
{
|
||||
u_char frame[ETH_HDR_LEN + ARP_HDR_LEN + ARP_ETHIP_LEN];
|
||||
|
||||
eth_pack_hdr(frame, ETH_ADDR_BROADCAST, ipi->ha.addr_eth,
|
||||
ETH_TYPE_ARP);
|
||||
arp_pack_hdr_ethip(frame + ETH_HDR_LEN, ARP_OP_REQUEST,
|
||||
ipi->ha.addr_eth, ipi->pa.addr_ip, ETH_ADDR_BROADCAST,
|
||||
dst->addr_ip);
|
||||
|
||||
eth_send(ipi->eth, frame, sizeof(frame));
|
||||
}
|
||||
|
||||
ssize_t
|
||||
ip_send(ip_t *ip, const void *buf, size_t len)
|
||||
{
|
||||
struct ip_hdr *iph;
|
||||
struct ip_intf *ipi;
|
||||
struct arp_entry arpent;
|
||||
struct route_entry rtent;
|
||||
u_char frame[ETH_LEN_MAX];
|
||||
int i, usec;
|
||||
|
||||
iph = (struct ip_hdr *)buf;
|
||||
|
||||
if ((ipi = _lookup_ip_intf(ip, iph->ip_dst)) == NULL) {
|
||||
errno = EHOSTUNREACH;
|
||||
return (-1);
|
||||
}
|
||||
arpent.arp_pa.addr_type = ADDR_TYPE_IP;
|
||||
arpent.arp_pa.addr_bits = IP_ADDR_BITS;
|
||||
arpent.arp_pa.addr_ip = iph->ip_dst;
|
||||
memcpy(&rtent.route_dst, &arpent.arp_pa, sizeof(rtent.route_dst));
|
||||
|
||||
for (i = 0, usec = 10; i < 3; i++, usec *= 100) {
|
||||
if (arp_get(ip->arp, &arpent) == 0)
|
||||
break;
|
||||
|
||||
if (route_get(ip->route, &rtent) == 0 &&
|
||||
rtent.route_gw.addr_ip != ipi->pa.addr_ip) {
|
||||
memcpy(&arpent.arp_pa, &rtent.route_gw,
|
||||
sizeof(arpent.arp_pa));
|
||||
if (arp_get(ip->arp, &arpent) == 0)
|
||||
break;
|
||||
}
|
||||
_request_arp(ipi, &arpent.arp_pa);
|
||||
|
||||
usleep(usec);
|
||||
}
|
||||
if (i == 3)
|
||||
memset(&arpent.arp_ha.addr_eth, 0xff, ETH_ADDR_LEN);
|
||||
|
||||
eth_pack_hdr(frame, arpent.arp_ha.addr_eth,
|
||||
ipi->ha.addr_eth, ETH_TYPE_IP);
|
||||
|
||||
if (len > ipi->mtu) {
|
||||
u_char *p, *start, *end, *ip_data;
|
||||
int ip_hl, fraglen;
|
||||
|
||||
ip_hl = iph->ip_hl << 2;
|
||||
fraglen = ipi->mtu - ip_hl;
|
||||
|
||||
iph = (struct ip_hdr *)(frame + ETH_HDR_LEN);
|
||||
memcpy(iph, buf, ip_hl);
|
||||
ip_data = (u_char *)iph + ip_hl;
|
||||
|
||||
start = (u_char *)buf + ip_hl;
|
||||
end = (u_char *)buf + len;
|
||||
|
||||
for (p = start; p < end; ) {
|
||||
memcpy(ip_data, p, fraglen);
|
||||
|
||||
iph->ip_len = htons(ip_hl + fraglen);
|
||||
iph->ip_off = htons(((p + fraglen < end) ? IP_MF : 0) |
|
||||
((p - start) >> 3));
|
||||
|
||||
ip_checksum(iph, ip_hl + fraglen);
|
||||
|
||||
i = ETH_HDR_LEN + ip_hl + fraglen;
|
||||
if (eth_send(ipi->eth, frame, i) != i)
|
||||
return (-1);
|
||||
p += fraglen;
|
||||
if (end - p < fraglen)
|
||||
fraglen = end - p;
|
||||
}
|
||||
return (len);
|
||||
}
|
||||
memcpy(frame + ETH_HDR_LEN, buf, len);
|
||||
i = ETH_HDR_LEN + len;
|
||||
if (eth_send(ipi->eth, frame, i) != i)
|
||||
return (-1);
|
||||
|
||||
return (len);
|
||||
}
|
||||
|
||||
ip_t *
|
||||
ip_close(ip_t *ip)
|
||||
{
|
||||
struct ip_intf *ipi, *nxt;
|
||||
|
||||
if (ip != NULL) {
|
||||
for (ipi = LIST_FIRST(&ip->ip_intf_list);
|
||||
ipi != LIST_END(&ip->ip_intf_list); ipi = nxt) {
|
||||
nxt = LIST_NEXT(ipi, next);
|
||||
if (ipi->eth != NULL)
|
||||
eth_close(ipi->eth);
|
||||
free(ipi);
|
||||
}
|
||||
if (ip->fd >= 0)
|
||||
close(ip->fd);
|
||||
if (ip->route != NULL)
|
||||
route_close(ip->route);
|
||||
if (ip->intf != NULL)
|
||||
intf_close(ip->intf);
|
||||
if (ip->arp != NULL)
|
||||
arp_close(ip->arp);
|
||||
free(ip);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
182
libdnet-stripped/src/ip-util.c
Normal file
182
libdnet-stripped/src/ip-util.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* ip-util.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip-util.c,v 1.9 2005/02/17 02:55:56 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
ssize_t
|
||||
ip_add_option(void *buf, size_t len, int proto,
|
||||
const void *optbuf, size_t optlen)
|
||||
{
|
||||
struct ip_hdr *ip;
|
||||
struct tcp_hdr *tcp = NULL;
|
||||
u_char *p;
|
||||
int hl, datalen, padlen;
|
||||
|
||||
if (proto != IP_PROTO_IP && proto != IP_PROTO_TCP) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
ip = (struct ip_hdr *)buf;
|
||||
hl = ip->ip_hl << 2;
|
||||
p = (u_char *)buf + hl;
|
||||
|
||||
if (proto == IP_PROTO_TCP) {
|
||||
tcp = (struct tcp_hdr *)p;
|
||||
hl = tcp->th_off << 2;
|
||||
p = (u_char *)tcp + hl;
|
||||
}
|
||||
datalen = ntohs(ip->ip_len) - (p - (u_char *)buf);
|
||||
|
||||
/* Compute padding to next word boundary. */
|
||||
if ((padlen = 4 - (optlen % 4)) == 4)
|
||||
padlen = 0;
|
||||
|
||||
/* XXX - IP_HDR_LEN_MAX == TCP_HDR_LEN_MAX */
|
||||
if (hl + optlen + padlen > IP_HDR_LEN_MAX ||
|
||||
ntohs(ip->ip_len) + optlen + padlen > len) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
/* XXX - IP_OPT_TYPEONLY() == TCP_OPT_TYPEONLY */
|
||||
if (IP_OPT_TYPEONLY(((struct ip_opt *)optbuf)->opt_type))
|
||||
optlen = 1;
|
||||
|
||||
/* Shift any existing data. */
|
||||
if (datalen) {
|
||||
memmove(p + optlen + padlen, p, datalen);
|
||||
}
|
||||
/* XXX - IP_OPT_NOP == TCP_OPT_NOP */
|
||||
if (padlen) {
|
||||
memset(p, IP_OPT_NOP, padlen);
|
||||
p += padlen;
|
||||
}
|
||||
memmove(p, optbuf, optlen);
|
||||
p += optlen;
|
||||
optlen += padlen;
|
||||
|
||||
if (proto == IP_PROTO_IP)
|
||||
ip->ip_hl = (p - (u_char *)ip) >> 2;
|
||||
else if (proto == IP_PROTO_TCP)
|
||||
tcp->th_off = (p - (u_char *)tcp) >> 2;
|
||||
|
||||
ip->ip_len = htons(ntohs(ip->ip_len) + optlen);
|
||||
|
||||
return (optlen);
|
||||
}
|
||||
|
||||
void
|
||||
ip_checksum(void *buf, size_t len)
|
||||
{
|
||||
struct ip_hdr *ip;
|
||||
int hl, off, sum;
|
||||
|
||||
if (len < IP_HDR_LEN)
|
||||
return;
|
||||
|
||||
ip = (struct ip_hdr *)buf;
|
||||
hl = ip->ip_hl << 2;
|
||||
ip->ip_sum = 0;
|
||||
sum = ip_cksum_add(ip, hl, 0);
|
||||
ip->ip_sum = ip_cksum_carry(sum);
|
||||
|
||||
off = htons(ip->ip_off);
|
||||
|
||||
if ((off & IP_OFFMASK) != 0 || (off & IP_MF) != 0)
|
||||
return;
|
||||
|
||||
len -= hl;
|
||||
|
||||
if (ip->ip_p == IP_PROTO_TCP) {
|
||||
struct tcp_hdr *tcp = (struct tcp_hdr *)((u_char *)ip + hl);
|
||||
|
||||
if (len >= TCP_HDR_LEN) {
|
||||
tcp->th_sum = 0;
|
||||
sum = ip_cksum_add(tcp, len, 0) +
|
||||
htons(ip->ip_p + len);
|
||||
sum = ip_cksum_add(&ip->ip_src, 8, sum);
|
||||
tcp->th_sum = ip_cksum_carry(sum);
|
||||
}
|
||||
} else if (ip->ip_p == IP_PROTO_UDP) {
|
||||
struct udp_hdr *udp = (struct udp_hdr *)((u_char *)ip + hl);
|
||||
|
||||
if (len >= UDP_HDR_LEN) {
|
||||
udp->uh_sum = 0;
|
||||
sum = ip_cksum_add(udp, len, 0) +
|
||||
htons(ip->ip_p + len);
|
||||
sum = ip_cksum_add(&ip->ip_src, 8, sum);
|
||||
udp->uh_sum = ip_cksum_carry(sum);
|
||||
if (!udp->uh_sum)
|
||||
udp->uh_sum = 0xffff; /* RFC 768 */
|
||||
}
|
||||
} else if (ip->ip_p == IP_PROTO_ICMP || ip->ip_p == IP_PROTO_IGMP) {
|
||||
struct icmp_hdr *icmp = (struct icmp_hdr *)((u_char *)ip + hl);
|
||||
|
||||
if (len >= ICMP_HDR_LEN) {
|
||||
icmp->icmp_cksum = 0;
|
||||
sum = ip_cksum_add(icmp, len, 0);
|
||||
icmp->icmp_cksum = ip_cksum_carry(sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
ip_cksum_add(const void *buf, size_t len, int cksum)
|
||||
{
|
||||
uint16_t *sp = (uint16_t *)buf;
|
||||
int n, sn;
|
||||
|
||||
sn = len / 2;
|
||||
n = (sn + 15) / 16;
|
||||
|
||||
/* XXX - unroll loop using Duff's device. */
|
||||
switch (sn % 16) {
|
||||
case 0: do {
|
||||
cksum += *sp++;
|
||||
case 15:
|
||||
cksum += *sp++;
|
||||
case 14:
|
||||
cksum += *sp++;
|
||||
case 13:
|
||||
cksum += *sp++;
|
||||
case 12:
|
||||
cksum += *sp++;
|
||||
case 11:
|
||||
cksum += *sp++;
|
||||
case 10:
|
||||
cksum += *sp++;
|
||||
case 9:
|
||||
cksum += *sp++;
|
||||
case 8:
|
||||
cksum += *sp++;
|
||||
case 7:
|
||||
cksum += *sp++;
|
||||
case 6:
|
||||
cksum += *sp++;
|
||||
case 5:
|
||||
cksum += *sp++;
|
||||
case 4:
|
||||
cksum += *sp++;
|
||||
case 3:
|
||||
cksum += *sp++;
|
||||
case 2:
|
||||
cksum += *sp++;
|
||||
case 1:
|
||||
cksum += *sp++;
|
||||
} while (--n > 0);
|
||||
}
|
||||
if (len & 1)
|
||||
cksum += htons(*(u_char *)sp << 8);
|
||||
|
||||
return (cksum);
|
||||
}
|
||||
75
libdnet-stripped/src/ip-win32.c
Normal file
75
libdnet-stripped/src/ip-win32.c
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* ip-win32.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip-win32.c,v 1.5 2005/01/25 21:30:40 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct ip_handle {
|
||||
WSADATA wsdata;
|
||||
SOCKET fd;
|
||||
struct sockaddr_in sin;
|
||||
};
|
||||
|
||||
ip_t *
|
||||
ip_open(void)
|
||||
{
|
||||
BOOL on;
|
||||
ip_t *ip;
|
||||
|
||||
if ((ip = calloc(1, sizeof(*ip))) != NULL) {
|
||||
if (WSAStartup(MAKEWORD(2, 2), &ip->wsdata) != 0) {
|
||||
free(ip);
|
||||
return (NULL);
|
||||
}
|
||||
if ((ip->fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) ==
|
||||
INVALID_SOCKET)
|
||||
return (ip_close(ip));
|
||||
|
||||
on = TRUE;
|
||||
if (setsockopt(ip->fd, IPPROTO_IP, IP_HDRINCL,
|
||||
(const char *)&on, sizeof(on)) == SOCKET_ERROR) {
|
||||
SetLastError(ERROR_NETWORK_ACCESS_DENIED);
|
||||
return (ip_close(ip));
|
||||
}
|
||||
ip->sin.sin_family = AF_INET;
|
||||
ip->sin.sin_port = htons(666);
|
||||
}
|
||||
return (ip);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
ip_send(ip_t *ip, const void *buf, size_t len)
|
||||
{
|
||||
struct ip_hdr *hdr = (struct ip_hdr *)buf;
|
||||
|
||||
ip->sin.sin_addr.s_addr = hdr->ip_src;
|
||||
|
||||
if ((len = sendto(ip->fd, (const char *)buf, len, 0,
|
||||
(struct sockaddr *)&ip->sin, sizeof(ip->sin))) != SOCKET_ERROR)
|
||||
return (len);
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
ip_t *
|
||||
ip_close(ip_t *ip)
|
||||
{
|
||||
if (ip != NULL) {
|
||||
WSACleanup();
|
||||
if (ip->fd != INVALID_SOCKET)
|
||||
closesocket(ip->fd);
|
||||
free(ip);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
103
libdnet-stripped/src/ip.c
Normal file
103
libdnet-stripped/src/ip.c
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* ip.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip.c,v 1.29 2005/01/25 21:30:40 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct ip_handle {
|
||||
int fd;
|
||||
};
|
||||
|
||||
ip_t *
|
||||
ip_open(void)
|
||||
{
|
||||
ip_t *i;
|
||||
int n, len;
|
||||
|
||||
if ((i = calloc(1, sizeof(*i))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((i->fd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
|
||||
return (ip_close(i));
|
||||
#ifdef IP_HDRINCL
|
||||
n = 1;
|
||||
if (setsockopt(i->fd, IPPROTO_IP, IP_HDRINCL, &n, sizeof(n)) < 0)
|
||||
return (ip_close(i));
|
||||
#endif
|
||||
#ifdef SO_SNDBUF
|
||||
len = sizeof(n);
|
||||
if (getsockopt(i->fd, SOL_SOCKET, SO_SNDBUF, &n, &len) < 0)
|
||||
return (ip_close(i));
|
||||
|
||||
for (n += 128; n < 1048576; n += 128) {
|
||||
if (setsockopt(i->fd, SOL_SOCKET, SO_SNDBUF, &n, len) < 0) {
|
||||
if (errno == ENOBUFS)
|
||||
break;
|
||||
return (ip_close(i));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef SO_BROADCAST
|
||||
n = 1;
|
||||
if (setsockopt(i->fd, SOL_SOCKET, SO_BROADCAST, &n, sizeof(n)) < 0)
|
||||
return (ip_close(i));
|
||||
#endif
|
||||
return (i);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
ip_send(ip_t *i, const void *buf, size_t len)
|
||||
{
|
||||
struct ip_hdr *ip;
|
||||
struct sockaddr_in sin;
|
||||
|
||||
ip = (struct ip_hdr *)buf;
|
||||
|
||||
memset(&sin, 0, sizeof(sin));
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
sin.sin_len = sizeof(sin);
|
||||
#endif
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_addr.s_addr = ip->ip_dst;
|
||||
|
||||
#ifdef HAVE_RAWIP_HOST_OFFLEN
|
||||
ip->ip_len = ntohs(ip->ip_len);
|
||||
ip->ip_off = ntohs(ip->ip_off);
|
||||
|
||||
len = sendto(i->fd, buf, len, 0,
|
||||
(struct sockaddr *)&sin, sizeof(sin));
|
||||
|
||||
ip->ip_len = htons(ip->ip_len);
|
||||
ip->ip_off = htons(ip->ip_off);
|
||||
|
||||
return (len);
|
||||
#else
|
||||
return (sendto(i->fd, buf, len, 0,
|
||||
(struct sockaddr *)&sin, sizeof(sin)));
|
||||
#endif
|
||||
}
|
||||
|
||||
ip_t *
|
||||
ip_close(ip_t *i)
|
||||
{
|
||||
if (i != NULL) {
|
||||
if (i->fd >= 0)
|
||||
close(i->fd);
|
||||
free(i);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
72
libdnet-stripped/src/ip6.c
Normal file
72
libdnet-stripped/src/ip6.c
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* ip6.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: ip6.c,v 1.2 2005/01/23 07:36:54 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#define IP6_IS_EXT(n) \
|
||||
((n) == IP_PROTO_HOPOPTS || (n) == IP_PROTO_DSTOPTS || \
|
||||
(n) == IP_PROTO_ROUTING || (n) == IP_PROTO_FRAGMENT)
|
||||
|
||||
void
|
||||
ip6_checksum(void *buf, size_t len)
|
||||
{
|
||||
struct ip6_hdr *ip6 = (struct ip6_hdr *)buf;
|
||||
struct ip6_ext_hdr *ext;
|
||||
u_char *p, nxt;
|
||||
int i, sum;
|
||||
|
||||
nxt = ip6->ip6_nxt;
|
||||
|
||||
for (i = IP6_HDR_LEN; IP6_IS_EXT(nxt); i += (ext->ext_len + 1) << 3) {
|
||||
if (i >= (int)len) return;
|
||||
ext = (struct ip6_ext_hdr *)((u_char *)buf + i);
|
||||
nxt = ext->ext_nxt;
|
||||
}
|
||||
p = (u_char *)buf + i;
|
||||
len -= i;
|
||||
|
||||
if (nxt == IP_PROTO_TCP) {
|
||||
struct tcp_hdr *tcp = (struct tcp_hdr *)p;
|
||||
|
||||
if (len >= TCP_HDR_LEN) {
|
||||
tcp->th_sum = 0;
|
||||
sum = ip_cksum_add(tcp, len, 0) + htons(nxt + len);
|
||||
sum = ip_cksum_add(&ip6->ip6_src, 32, sum);
|
||||
tcp->th_sum = ip_cksum_carry(sum);
|
||||
}
|
||||
} else if (nxt == IP_PROTO_UDP) {
|
||||
struct udp_hdr *udp = (struct udp_hdr *)p;
|
||||
|
||||
if (len >= UDP_HDR_LEN) {
|
||||
udp->uh_sum = 0;
|
||||
sum = ip_cksum_add(udp, len, 0) + htons(nxt + len);
|
||||
sum = ip_cksum_add(&ip6->ip6_src, 32, sum);
|
||||
if ((udp->uh_sum = ip_cksum_carry(sum)) == 0)
|
||||
udp->uh_sum = 0xffff;
|
||||
}
|
||||
} else if (nxt == IP_PROTO_ICMPV6) {
|
||||
struct icmp_hdr *icmp = (struct icmp_hdr *)p;
|
||||
|
||||
if (len >= ICMP_HDR_LEN) {
|
||||
icmp->icmp_cksum = 0;
|
||||
sum = ip_cksum_add(icmp, len, 0) + htons(nxt + len);
|
||||
sum = ip_cksum_add(&ip6->ip6_src, 32, sum);
|
||||
icmp->icmp_cksum = ip_cksum_carry(sum);
|
||||
}
|
||||
} else if (nxt == IP_PROTO_ICMP || nxt == IP_PROTO_IGMP) {
|
||||
struct icmp_hdr *icmp = (struct icmp_hdr *)p;
|
||||
|
||||
if (len >= ICMP_HDR_LEN) {
|
||||
icmp->icmp_cksum = 0;
|
||||
sum = ip_cksum_add(icmp, len, 0);
|
||||
icmp->icmp_cksum = ip_cksum_carry(sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
60
libdnet-stripped/src/memcmp.c
Normal file
60
libdnet-stripped/src/memcmp.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/*-
|
||||
* Copyright (c) 1990 The Regents of the University of California.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* 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 *rcsid = "$OpenBSD: memcmp.c,v 1.2 1996/08/19 08:34:05 tholo Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* Compare memory regions.
|
||||
*/
|
||||
int
|
||||
memcmp(s1, s2, n)
|
||||
const void *s1, *s2;
|
||||
size_t n;
|
||||
{
|
||||
if (n != 0) {
|
||||
register const unsigned char *p1 = s1, *p2 = s2;
|
||||
|
||||
do {
|
||||
if (*p1++ != *p2++)
|
||||
return (*--p1 - *--p2);
|
||||
} while (--n != 0);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
211
libdnet-stripped/src/rand.c
Normal file
211
libdnet-stripped/src/rand.c
Normal file
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* rand.c
|
||||
*
|
||||
* Pseudorandom number generation, based on OpenBSD arc4random().
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
* Copyright (c) 1996 David Mazieres <dm@lcs.mit.edu>
|
||||
*
|
||||
* $Id: rand.c,v 1.15 2005/02/15 06:37:07 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
/* XXX */
|
||||
# undef _WIN32_WINNT
|
||||
# define _WIN32_WINNT 0x0400
|
||||
# include <wincrypt.h>
|
||||
# define inline __inline
|
||||
#else
|
||||
# include <sys/types.h>
|
||||
# include <sys/time.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct rand_handle {
|
||||
uint8_t i;
|
||||
uint8_t j;
|
||||
uint8_t s[256];
|
||||
u_char *tmp;
|
||||
int tmplen;
|
||||
};
|
||||
|
||||
static inline void
|
||||
rand_init(rand_t *rand)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
rand->s[i] = i;
|
||||
rand->i = rand->j = 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
rand_addrandom(rand_t *rand, u_char *buf, int len)
|
||||
{
|
||||
int i;
|
||||
uint8_t si;
|
||||
|
||||
rand->i--;
|
||||
for (i = 0; i < 256; i++) {
|
||||
rand->i = (rand->i + 1);
|
||||
si = rand->s[rand->i];
|
||||
rand->j = (rand->j + si + buf[i % len]);
|
||||
rand->s[rand->i] = rand->s[rand->j];
|
||||
rand->s[rand->j] = si;
|
||||
}
|
||||
rand->j = rand->i;
|
||||
}
|
||||
|
||||
rand_t *
|
||||
rand_open(void)
|
||||
{
|
||||
rand_t *r;
|
||||
u_char seed[256];
|
||||
#ifdef _WIN32
|
||||
HCRYPTPROV hcrypt = 0;
|
||||
|
||||
CryptAcquireContext(&hcrypt, NULL, NULL, PROV_RSA_FULL,
|
||||
CRYPT_VERIFYCONTEXT);
|
||||
CryptGenRandom(hcrypt, sizeof(seed), seed);
|
||||
CryptReleaseContext(hcrypt, 0);
|
||||
#else
|
||||
struct timeval *tv = (struct timeval *)seed;
|
||||
int fd;
|
||||
|
||||
if ((fd = open("/dev/arandom", O_RDONLY)) != -1 ||
|
||||
(fd = open("/dev/urandom", O_RDONLY)) != -1) {
|
||||
read(fd, seed + sizeof(*tv), sizeof(seed) - sizeof(*tv));
|
||||
close(fd);
|
||||
}
|
||||
gettimeofday(tv, NULL);
|
||||
#endif
|
||||
if ((r = malloc(sizeof(*r))) != NULL) {
|
||||
rand_init(r);
|
||||
rand_addrandom(r, seed, 128);
|
||||
rand_addrandom(r, seed + 128, 128);
|
||||
r->tmp = NULL;
|
||||
r->tmplen = 0;
|
||||
}
|
||||
return (r);
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
rand_getbyte(rand_t *r)
|
||||
{
|
||||
uint8_t si, sj;
|
||||
|
||||
r->i = (r->i + 1);
|
||||
si = r->s[r->i];
|
||||
r->j = (r->j + si);
|
||||
sj = r->s[r->j];
|
||||
r->s[r->i] = sj;
|
||||
r->s[r->j] = si;
|
||||
return (r->s[(si + sj) & 0xff]);
|
||||
}
|
||||
|
||||
int
|
||||
rand_get(rand_t *r, void *buf, size_t len)
|
||||
{
|
||||
u_char *p;
|
||||
u_int i;
|
||||
|
||||
for (p = buf, i = 0; i < len; i++) {
|
||||
p[i] = rand_getbyte(r);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
rand_set(rand_t *r, const void *buf, size_t len)
|
||||
{
|
||||
rand_init(r);
|
||||
rand_addrandom(r, (u_char *)buf, len);
|
||||
rand_addrandom(r, (u_char *)buf, len);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
rand_add(rand_t *r, const void *buf, size_t len)
|
||||
{
|
||||
rand_addrandom(r, (u_char *)buf, len);
|
||||
return (0);
|
||||
}
|
||||
|
||||
uint8_t
|
||||
rand_uint8(rand_t *r)
|
||||
{
|
||||
return (rand_getbyte(r));
|
||||
}
|
||||
|
||||
uint16_t
|
||||
rand_uint16(rand_t *r)
|
||||
{
|
||||
uint16_t val;
|
||||
|
||||
val = rand_getbyte(r) << 8;
|
||||
val |= rand_getbyte(r);
|
||||
return (val);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
rand_uint32(rand_t *r)
|
||||
{
|
||||
uint32_t val;
|
||||
|
||||
val = rand_getbyte(r) << 24;
|
||||
val |= rand_getbyte(r) << 16;
|
||||
val |= rand_getbyte(r) << 8;
|
||||
val |= rand_getbyte(r);
|
||||
return (val);
|
||||
}
|
||||
|
||||
int
|
||||
rand_shuffle(rand_t *r, void *base, size_t nmemb, size_t size)
|
||||
{
|
||||
u_char *save, *src, *dst, *start = (u_char *)base;
|
||||
u_int i, j;
|
||||
|
||||
if (nmemb < 2)
|
||||
return (0);
|
||||
|
||||
if ((u_int)r->tmplen < size) {
|
||||
if (r->tmp == NULL) {
|
||||
if ((save = malloc(size)) == NULL)
|
||||
return (-1);
|
||||
} else if ((save = realloc(r->tmp, size)) == NULL)
|
||||
return (-1);
|
||||
|
||||
r->tmp = save;
|
||||
r->tmplen = size;
|
||||
} else
|
||||
save = r->tmp;
|
||||
|
||||
for (i = 0; i < nmemb; i++) {
|
||||
if ((j = rand_uint32(r) % (nmemb - 1)) != i) {
|
||||
src = start + (size * i);
|
||||
dst = start + (size * j);
|
||||
memcpy(save, dst, size);
|
||||
memcpy(dst, src, size);
|
||||
memcpy(src, save, size);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
rand_t *
|
||||
rand_close(rand_t *r)
|
||||
{
|
||||
if (r != NULL) {
|
||||
if (r->tmp != NULL)
|
||||
free(r->tmp);
|
||||
free(r);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
508
libdnet-stripped/src/route-bsd.c
Normal file
508
libdnet-stripped/src/route-bsd.c
Normal file
@@ -0,0 +1,508 @@
|
||||
/*
|
||||
* route-bsd.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
* Copyright (c) 1999 Masaki Hirabaru <masaki@merit.edu>
|
||||
*
|
||||
* $Id: route-bsd.c,v 1.22 2005/02/10 05:18:38 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#ifdef HAVE_SYS_SYSCTL_H
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
#include <sys/stream.h>
|
||||
#include <sys/tihdr.h>
|
||||
#include <sys/tiuser.h>
|
||||
#include <inet/common.h>
|
||||
#include <inet/mib2.h>
|
||||
#include <inet/ip.h>
|
||||
#undef IP_ADDR_LEN
|
||||
#include <stropts.h>
|
||||
#elif defined(HAVE_STREAMS_ROUTE)
|
||||
#include <sys/stream.h>
|
||||
#include <sys/stropts.h>
|
||||
#endif
|
||||
|
||||
#define route_t oroute_t /* XXX - unixware */
|
||||
#include <net/route.h>
|
||||
#undef route_t
|
||||
#include <netinet/in.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#define ROUNDUP(a) \
|
||||
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
|
||||
|
||||
#ifdef HAVE_SOCKADDR_SA_LEN
|
||||
#define NEXTSA(s) \
|
||||
((struct sockaddr *)((u_char *)(s) + ROUNDUP((s)->sa_len)))
|
||||
#else
|
||||
#define NEXTSA(s) \
|
||||
((struct sockaddr *)((u_char *)(s) + ROUNDUP(sizeof(*(s)))))
|
||||
#endif
|
||||
|
||||
struct route_handle {
|
||||
int fd;
|
||||
int seq;
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
int ip_fd;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef DEBUG
|
||||
static void
|
||||
route_msg_print(struct rt_msghdr *rtm)
|
||||
{
|
||||
printf("v: %d type: 0x%x flags: 0x%x addrs: 0x%x pid: %d seq: %d\n",
|
||||
rtm->rtm_version, rtm->rtm_type, rtm->rtm_flags,
|
||||
rtm->rtm_addrs, rtm->rtm_pid, rtm->rtm_seq);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int
|
||||
route_msg(route_t *r, int type, struct addr *dst, struct addr *gw)
|
||||
{
|
||||
struct addr net;
|
||||
struct rt_msghdr *rtm;
|
||||
struct sockaddr *sa;
|
||||
u_char buf[BUFSIZ];
|
||||
pid_t pid;
|
||||
int len;
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
||||
rtm = (struct rt_msghdr *)buf;
|
||||
rtm->rtm_version = RTM_VERSION;
|
||||
if ((rtm->rtm_type = type) != RTM_DELETE)
|
||||
rtm->rtm_flags = RTF_UP;
|
||||
rtm->rtm_addrs = RTA_DST;
|
||||
rtm->rtm_seq = ++r->seq;
|
||||
|
||||
/* Destination */
|
||||
sa = (struct sockaddr *)(rtm + 1);
|
||||
if (addr_net(dst, &net) < 0 || addr_ntos(&net, sa) < 0)
|
||||
return (-1);
|
||||
sa = NEXTSA(sa);
|
||||
|
||||
/* Gateway */
|
||||
if (gw != NULL && type != RTM_GET) {
|
||||
rtm->rtm_flags |= RTF_GATEWAY;
|
||||
rtm->rtm_addrs |= RTA_GATEWAY;
|
||||
if (addr_ntos(gw, sa) < 0)
|
||||
return (-1);
|
||||
sa = NEXTSA(sa);
|
||||
}
|
||||
/* Netmask */
|
||||
if (dst->addr_ip == IP_ADDR_ANY || dst->addr_bits < IP_ADDR_BITS) {
|
||||
rtm->rtm_addrs |= RTA_NETMASK;
|
||||
if (addr_btos(dst->addr_bits, sa) < 0)
|
||||
return (-1);
|
||||
sa = NEXTSA(sa);
|
||||
} else
|
||||
rtm->rtm_flags |= RTF_HOST;
|
||||
|
||||
rtm->rtm_msglen = (u_char *)sa - buf;
|
||||
#ifdef DEBUG
|
||||
route_msg_print(rtm);
|
||||
#endif
|
||||
#ifdef HAVE_STREAMS_ROUTE
|
||||
if (ioctl(r->fd, RTSTR_SEND, rtm) < 0)
|
||||
return (-1);
|
||||
#else
|
||||
if (write(r->fd, buf, rtm->rtm_msglen) < 0)
|
||||
return (-1);
|
||||
|
||||
pid = getpid();
|
||||
|
||||
while (type == RTM_GET && (len = read(r->fd, buf, sizeof(buf))) > 0) {
|
||||
if (len < (int)sizeof(*rtm)) {
|
||||
return (-1);
|
||||
}
|
||||
if (rtm->rtm_type == type && rtm->rtm_pid == pid &&
|
||||
rtm->rtm_seq == r->seq) {
|
||||
if (rtm->rtm_errno) {
|
||||
errno = rtm->rtm_errno;
|
||||
return (-1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (type == RTM_GET && (rtm->rtm_addrs & (RTA_DST|RTA_GATEWAY)) ==
|
||||
(RTA_DST|RTA_GATEWAY)) {
|
||||
sa = (struct sockaddr *)(rtm + 1);
|
||||
sa = NEXTSA(sa);
|
||||
|
||||
if (addr_ston(sa, gw) < 0 || gw->addr_type != ADDR_TYPE_IP) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
route_t *
|
||||
route_open(void)
|
||||
{
|
||||
route_t *r;
|
||||
|
||||
if ((r = calloc(1, sizeof(*r))) != NULL) {
|
||||
r->fd = -1;
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
if ((r->ip_fd = open(IP_DEV_NAME, O_RDWR)) < 0)
|
||||
return (route_close(r));
|
||||
#endif
|
||||
#ifdef HAVE_STREAMS_ROUTE
|
||||
if ((r->fd = open("/dev/route", O_RDWR, 0)) < 0)
|
||||
#else
|
||||
if ((r->fd = socket(PF_ROUTE, SOCK_RAW, AF_INET)) < 0)
|
||||
#endif
|
||||
return (route_close(r));
|
||||
}
|
||||
return (r);
|
||||
}
|
||||
|
||||
int
|
||||
route_add(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
struct route_entry rtent;
|
||||
|
||||
memcpy(&rtent, entry, sizeof(rtent));
|
||||
|
||||
if (route_msg(r, RTM_ADD, &rtent.route_dst, &rtent.route_gw) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
route_delete(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
struct route_entry rtent;
|
||||
|
||||
memcpy(&rtent, entry, sizeof(rtent));
|
||||
|
||||
if (route_get(r, &rtent) < 0)
|
||||
return (-1);
|
||||
|
||||
if (route_msg(r, RTM_DELETE, &rtent.route_dst, &rtent.route_gw) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
route_get(route_t *r, struct route_entry *entry)
|
||||
{
|
||||
if (route_msg(r, RTM_GET, &entry->route_dst, &entry->route_gw) < 0)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if defined(HAVE_SYS_SYSCTL_H) || defined(HAVE_STREAMS_ROUTE)
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
struct rt_msghdr *rtm;
|
||||
struct route_entry entry;
|
||||
struct sockaddr *sa;
|
||||
char *buf, *lim, *next;
|
||||
int ret;
|
||||
#ifdef HAVE_SYS_SYSCTL_H
|
||||
int mib[6] = { CTL_NET, PF_ROUTE, 0, 0 /* XXX */, NET_RT_DUMP, 0 };
|
||||
size_t len;
|
||||
|
||||
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
if (len == 0)
|
||||
return (0);
|
||||
|
||||
if ((buf = malloc(len)) == NULL)
|
||||
return (-1);
|
||||
|
||||
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
lim = buf + len;
|
||||
next = buf;
|
||||
#else /* HAVE_STREAMS_ROUTE */
|
||||
struct rt_giarg giarg, *gp;
|
||||
|
||||
memset(&giarg, 0, sizeof(giarg));
|
||||
giarg.gi_op = KINFO_RT_DUMP;
|
||||
|
||||
if (ioctl(r->fd, RTSTR_GETROUTE, &giarg) < 0)
|
||||
return (-1);
|
||||
|
||||
if ((buf = malloc(giarg.gi_size)) == NULL)
|
||||
return (-1);
|
||||
|
||||
gp = (struct rt_giarg *)buf;
|
||||
gp->gi_size = giarg.gi_size;
|
||||
gp->gi_op = KINFO_RT_DUMP;
|
||||
gp->gi_where = buf;
|
||||
gp->gi_arg = RTF_UP | RTF_GATEWAY;
|
||||
|
||||
if (ioctl(r->fd, RTSTR_GETROUTE, buf) < 0) {
|
||||
free(buf);
|
||||
return (-1);
|
||||
}
|
||||
lim = buf + gp->gi_size;
|
||||
next = buf + sizeof(giarg);
|
||||
#endif
|
||||
for (ret = 0; next < lim; next += rtm->rtm_msglen) {
|
||||
rtm = (struct rt_msghdr *)next;
|
||||
sa = (struct sockaddr *)(rtm + 1);
|
||||
|
||||
if (addr_ston(sa, &entry.route_dst) < 0 ||
|
||||
(rtm->rtm_addrs & RTA_GATEWAY) == 0)
|
||||
continue;
|
||||
|
||||
sa = NEXTSA(sa);
|
||||
|
||||
if (addr_ston(sa, &entry.route_gw) < 0)
|
||||
continue;
|
||||
|
||||
if (entry.route_dst.addr_type != entry.route_gw.addr_type ||
|
||||
(entry.route_dst.addr_type != ADDR_TYPE_IP &&
|
||||
entry.route_dst.addr_type != ADDR_TYPE_IP6))
|
||||
continue;
|
||||
|
||||
if (rtm->rtm_addrs & RTA_NETMASK) {
|
||||
sa = NEXTSA(sa);
|
||||
if (addr_stob(sa, &entry.route_dst.addr_bits) < 0)
|
||||
continue;
|
||||
}
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
free(buf);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
#elif defined(HAVE_STREAMS_MIB2)
|
||||
|
||||
#ifdef IRE_DEFAULT /* This means Solaris 5.6 */
|
||||
/* I'm not sure if they are compatible, though -- masaki */
|
||||
#define IRE_ROUTE IRE_CACHE
|
||||
#define IRE_ROUTE_REDIRECT IRE_HOST_REDIRECT
|
||||
#endif /* IRE_DEFAULT */
|
||||
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
struct route_entry entry;
|
||||
struct sockaddr_in sin;
|
||||
struct strbuf msg;
|
||||
struct T_optmgmt_req *tor;
|
||||
struct T_optmgmt_ack *toa;
|
||||
struct T_error_ack *tea;
|
||||
struct opthdr *opt;
|
||||
mib2_ipRouteEntry_t *rt, *rtend;
|
||||
u_char buf[8192];
|
||||
int flags, rc, rtable, ret;
|
||||
|
||||
tor = (struct T_optmgmt_req *)buf;
|
||||
toa = (struct T_optmgmt_ack *)buf;
|
||||
tea = (struct T_error_ack *)buf;
|
||||
|
||||
tor->PRIM_type = T_OPTMGMT_REQ;
|
||||
tor->OPT_offset = sizeof(*tor);
|
||||
tor->OPT_length = sizeof(*opt);
|
||||
tor->MGMT_flags = T_CURRENT;
|
||||
|
||||
opt = (struct opthdr *)(tor + 1);
|
||||
opt->level = MIB2_IP;
|
||||
opt->name = opt->len = 0;
|
||||
|
||||
msg.maxlen = sizeof(buf);
|
||||
msg.len = sizeof(*tor) + sizeof(*opt);
|
||||
msg.buf = buf;
|
||||
|
||||
if (putmsg(r->ip_fd, &msg, NULL, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
opt = (struct opthdr *)(toa + 1);
|
||||
msg.maxlen = sizeof(buf);
|
||||
|
||||
for (;;) {
|
||||
flags = 0;
|
||||
if ((rc = getmsg(r->ip_fd, &msg, NULL, &flags)) < 0)
|
||||
return (-1);
|
||||
|
||||
/* See if we're finished. */
|
||||
if (rc == 0 &&
|
||||
msg.len >= sizeof(*toa) &&
|
||||
toa->PRIM_type == T_OPTMGMT_ACK &&
|
||||
toa->MGMT_flags == T_SUCCESS && opt->len == 0)
|
||||
break;
|
||||
|
||||
if (msg.len >= sizeof(*tea) && tea->PRIM_type == T_ERROR_ACK)
|
||||
return (-1);
|
||||
|
||||
if (rc != MOREDATA || msg.len < (int)sizeof(*toa) ||
|
||||
toa->PRIM_type != T_OPTMGMT_ACK ||
|
||||
toa->MGMT_flags != T_SUCCESS)
|
||||
return (-1);
|
||||
|
||||
rtable = (opt->level == MIB2_IP && opt->name == MIB2_IP_21);
|
||||
|
||||
msg.maxlen = sizeof(buf) - (sizeof(buf) % sizeof(*rt));
|
||||
msg.len = 0;
|
||||
flags = 0;
|
||||
|
||||
do {
|
||||
rc = getmsg(r->ip_fd, NULL, &msg, &flags);
|
||||
|
||||
if (rc != 0 && rc != MOREDATA)
|
||||
return (-1);
|
||||
|
||||
if (!rtable)
|
||||
continue;
|
||||
|
||||
rt = (mib2_ipRouteEntry_t *)msg.buf;
|
||||
rtend = (mib2_ipRouteEntry_t *)(msg.buf + msg.len);
|
||||
|
||||
sin.sin_family = AF_INET;
|
||||
|
||||
for ( ; rt < rtend; rt++) {
|
||||
if ((rt->ipRouteInfo.re_ire_type &
|
||||
(IRE_BROADCAST|IRE_ROUTE_REDIRECT|
|
||||
IRE_LOCAL|IRE_ROUTE)) != 0 ||
|
||||
rt->ipRouteNextHop == IP_ADDR_ANY)
|
||||
continue;
|
||||
|
||||
sin.sin_addr.s_addr = rt->ipRouteNextHop;
|
||||
addr_ston((struct sockaddr *)&sin,
|
||||
&entry.route_gw);
|
||||
|
||||
sin.sin_addr.s_addr = rt->ipRouteDest;
|
||||
addr_ston((struct sockaddr *)&sin,
|
||||
&entry.route_dst);
|
||||
|
||||
sin.sin_addr.s_addr = rt->ipRouteMask;
|
||||
addr_stob((struct sockaddr *)&sin,
|
||||
&entry.route_dst.addr_bits);
|
||||
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
} while (rc == MOREDATA);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#elif defined(HAVE_NET_RADIX_H)
|
||||
/* XXX - Tru64, others? */
|
||||
#include <nlist.h>
|
||||
|
||||
static int
|
||||
_kread(int fd, void *addr, void *buf, int len)
|
||||
{
|
||||
if (lseek(fd, (off_t)addr, SEEK_SET) == (off_t)-1L)
|
||||
return (-1);
|
||||
return (read(fd, buf, len) == len ? 0 : -1);
|
||||
}
|
||||
|
||||
static int
|
||||
_radix_walk(int fd, struct radix_node *rn, route_handler callback, void *arg)
|
||||
{
|
||||
struct radix_node rnode;
|
||||
struct rtentry rt;
|
||||
struct sockaddr_in sin;
|
||||
struct route_entry entry;
|
||||
int ret = 0;
|
||||
again:
|
||||
_kread(fd, rn, &rnode, sizeof(rnode));
|
||||
if (rnode.rn_b < 0) {
|
||||
if (!(rnode.rn_flags & RNF_ROOT)) {
|
||||
_kread(fd, rn, &rt, sizeof(rt));
|
||||
_kread(fd, rt_key(&rt), &sin, sizeof(sin));
|
||||
addr_ston((struct sockaddr *)&sin, &entry.route_dst);
|
||||
if (!(rt.rt_flags & RTF_HOST)) {
|
||||
_kread(fd, rt_mask(&rt), &sin, sizeof(sin));
|
||||
addr_stob((struct sockaddr *)&sin,
|
||||
&entry.route_dst.addr_bits);
|
||||
}
|
||||
_kread(fd, rt.rt_gateway, &sin, sizeof(sin));
|
||||
addr_ston((struct sockaddr *)&sin, &entry.route_gw);
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
if ((rn = rnode.rn_dupedkey))
|
||||
goto again;
|
||||
} else {
|
||||
rn = rnode.rn_r;
|
||||
if ((ret = _radix_walk(fd, rnode.rn_l, callback, arg)) != 0)
|
||||
return (ret);
|
||||
if ((ret = _radix_walk(fd, rn, callback, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
struct radix_node_head *rnh, head;
|
||||
struct nlist nl[2];
|
||||
int fd, ret = 0;
|
||||
|
||||
memset(nl, 0, sizeof(nl));
|
||||
nl[0].n_name = "radix_node_head";
|
||||
|
||||
if (knlist(nl) < 0 || nl[0].n_type == 0 ||
|
||||
(fd = open("/dev/kmem", O_RDONLY, 0)) < 0)
|
||||
return (-1);
|
||||
|
||||
for (_kread(fd, (void *)nl[0].n_value, &rnh, sizeof(rnh));
|
||||
rnh != NULL; rnh = head.rnh_next) {
|
||||
_kread(fd, rnh, &head, sizeof(head));
|
||||
/* XXX - only IPv4 for now... */
|
||||
if (head.rnh_af == AF_INET) {
|
||||
if ((ret = _radix_walk(fd, head.rnh_treetop,
|
||||
callback, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
close(fd);
|
||||
return (ret);
|
||||
}
|
||||
#else
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
#endif
|
||||
|
||||
route_t *
|
||||
route_close(route_t *r)
|
||||
{
|
||||
if (r != NULL) {
|
||||
#ifdef HAVE_STREAMS_MIB2
|
||||
if (r->ip_fd >= 0)
|
||||
close(r->ip_fd);
|
||||
#endif
|
||||
if (r->fd >= 0)
|
||||
close(r->fd);
|
||||
free(r);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
180
libdnet-stripped/src/route-hpux.c
Normal file
180
libdnet-stripped/src/route-hpux.c
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* route-hpux.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: route-hpux.c,v 1.11 2004/01/14 04:52:11 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/mib.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <net/route.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#define ADDR_ISHOST(a) (((a)->addr_type == ADDR_TYPE_IP && \
|
||||
(a)->addr_bits == IP_ADDR_BITS) || \
|
||||
((a)->addr_type == ADDR_TYPE_IP6 && \
|
||||
(a)->addr_bits == IP6_ADDR_BITS))
|
||||
|
||||
struct route_handle {
|
||||
int fd;
|
||||
};
|
||||
|
||||
route_t *
|
||||
route_open(void)
|
||||
{
|
||||
route_t *r;
|
||||
|
||||
if ((r = calloc(1, sizeof(*r))) != NULL) {
|
||||
if ((r->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
return (route_close(r));
|
||||
}
|
||||
return (r);
|
||||
}
|
||||
|
||||
int
|
||||
route_add(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
struct rtentry rt;
|
||||
struct addr dst;
|
||||
|
||||
memset(&rt, 0, sizeof(rt));
|
||||
rt.rt_flags = RTF_UP | RTF_GATEWAY;
|
||||
|
||||
if (ADDR_ISHOST(&entry->route_dst)) {
|
||||
rt.rt_flags |= RTF_HOST;
|
||||
memcpy(&dst, &entry->route_dst, sizeof(dst));
|
||||
} else
|
||||
addr_net(&entry->route_dst, &dst);
|
||||
|
||||
if (addr_ntos(&dst, &rt.rt_dst) < 0 ||
|
||||
addr_ntos(&entry->route_gw, &rt.rt_gateway) < 0 ||
|
||||
addr_btom(entry->route_dst.addr_bits, &rt.rt_subnetmask,
|
||||
IP_ADDR_LEN) < 0)
|
||||
return (-1);
|
||||
|
||||
return (ioctl(r->fd, SIOCADDRT, &rt));
|
||||
}
|
||||
|
||||
int
|
||||
route_delete(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
struct rtentry rt;
|
||||
struct addr dst;
|
||||
|
||||
memset(&rt, 0, sizeof(rt));
|
||||
rt.rt_flags = RTF_UP;
|
||||
|
||||
if (ADDR_ISHOST(&entry->route_dst)) {
|
||||
rt.rt_flags |= RTF_HOST;
|
||||
memcpy(&dst, &entry->route_dst, sizeof(dst));
|
||||
} else
|
||||
addr_net(&entry->route_dst, &dst);
|
||||
|
||||
if (addr_ntos(&dst, &rt.rt_dst) < 0 ||
|
||||
addr_btom(entry->route_dst.addr_bits, &rt.rt_subnetmask,
|
||||
IP_ADDR_LEN) < 0)
|
||||
return (-1);
|
||||
|
||||
return (ioctl(r->fd, SIOCDELRT, &rt));
|
||||
}
|
||||
|
||||
int
|
||||
route_get(route_t *r, struct route_entry *entry)
|
||||
{
|
||||
struct rtreq rtr;
|
||||
|
||||
memset(&rtr, 0, sizeof(rtr));
|
||||
|
||||
/* XXX - gross hack for default route */
|
||||
if (entry->route_dst.addr_ip == IP_ADDR_ANY) {
|
||||
rtr.rtr_destaddr = htonl(0x60060606);
|
||||
rtr.rtr_subnetmask = 0xffffffff;
|
||||
} else {
|
||||
memcpy(&rtr.rtr_destaddr, &entry->route_dst.addr_ip,
|
||||
IP_ADDR_LEN);
|
||||
if (entry->route_dst.addr_bits < IP_ADDR_BITS)
|
||||
addr_btom(entry->route_dst.addr_bits,
|
||||
&rtr.rtr_subnetmask, IP_ADDR_LEN);
|
||||
}
|
||||
if (ioctl(r->fd, SIOCGRTENTRY, &rtr) < 0)
|
||||
return (-1);
|
||||
|
||||
if (rtr.rtr_gwayaddr == 0) {
|
||||
errno = ESRCH;
|
||||
return (-1);
|
||||
}
|
||||
entry->route_gw.addr_type = ADDR_TYPE_IP;
|
||||
entry->route_gw.addr_bits = IP_ADDR_BITS;
|
||||
memcpy(&entry->route_gw.addr_ip, &rtr.rtr_gwayaddr, IP_ADDR_LEN);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
#define MAX_RTENTRIES 256 /* XXX */
|
||||
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
struct nmparms nm;
|
||||
struct route_entry entry;
|
||||
mib_ipRouteEnt rtentries[MAX_RTENTRIES];
|
||||
int fd, i, n, ret;
|
||||
|
||||
if ((fd = open_mib("/dev/ip", O_RDWR, 0 /* XXX */, 0)) < 0)
|
||||
return (-1);
|
||||
|
||||
nm.objid = ID_ipRouteTable;
|
||||
nm.buffer = rtentries;
|
||||
n = sizeof(rtentries);
|
||||
nm.len = &n;
|
||||
|
||||
if (get_mib_info(fd, &nm) < 0) {
|
||||
close_mib(fd);
|
||||
return (-1);
|
||||
}
|
||||
close_mib(fd);
|
||||
|
||||
entry.route_dst.addr_type = entry.route_gw.addr_type = ADDR_TYPE_IP;
|
||||
entry.route_dst.addr_bits = entry.route_gw.addr_bits = IP_ADDR_BITS;
|
||||
n /= sizeof(*rtentries);
|
||||
ret = 0;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (rtentries[i].Type != NMDIRECT &&
|
||||
rtentries[i].Type != NMREMOTE)
|
||||
continue;
|
||||
|
||||
entry.route_dst.addr_ip = rtentries[i].Dest;
|
||||
addr_mtob(&rtentries[i].Mask, IP_ADDR_LEN,
|
||||
&entry.route_dst.addr_bits);
|
||||
entry.route_gw.addr_ip = rtentries[i].NextHop;
|
||||
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
return (ret);
|
||||
}
|
||||
|
||||
route_t *
|
||||
route_close(route_t *r)
|
||||
{
|
||||
if (r != NULL) {
|
||||
if (r->fd >= 0)
|
||||
close(r->fd);
|
||||
free(r);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
258
libdnet-stripped/src/route-linux.c
Normal file
258
libdnet-stripped/src/route-linux.c
Normal file
@@ -0,0 +1,258 @@
|
||||
/*
|
||||
* route-linux.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: route-linux.c,v 1.15 2005/01/23 07:36:54 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/uio.h>
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
|
||||
#include <net/route.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
#define ADDR_ISHOST(a) (((a)->addr_type == ADDR_TYPE_IP && \
|
||||
(a)->addr_bits == IP_ADDR_BITS) || \
|
||||
((a)->addr_type == ADDR_TYPE_IP6 && \
|
||||
(a)->addr_bits == IP6_ADDR_BITS))
|
||||
|
||||
#define PROC_ROUTE_FILE "/proc/net/route"
|
||||
|
||||
struct route_handle {
|
||||
int fd;
|
||||
int nlfd;
|
||||
};
|
||||
|
||||
route_t *
|
||||
route_open(void)
|
||||
{
|
||||
struct sockaddr_nl snl;
|
||||
route_t *r;
|
||||
|
||||
if ((r = calloc(1, sizeof(*r))) != NULL) {
|
||||
r->fd = r->nlfd = -1;
|
||||
|
||||
if ((r->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
|
||||
return (route_close(r));
|
||||
|
||||
if ((r->nlfd = socket(AF_NETLINK, SOCK_RAW,
|
||||
NETLINK_ROUTE)) < 0)
|
||||
return (route_close(r));
|
||||
|
||||
memset(&snl, 0, sizeof(snl));
|
||||
snl.nl_family = AF_NETLINK;
|
||||
|
||||
if (bind(r->nlfd, (struct sockaddr *)&snl, sizeof(snl)) < 0)
|
||||
return (route_close(r));
|
||||
}
|
||||
return (r);
|
||||
}
|
||||
|
||||
int
|
||||
route_add(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
struct rtentry rt;
|
||||
struct addr dst;
|
||||
|
||||
memset(&rt, 0, sizeof(rt));
|
||||
rt.rt_flags = RTF_UP | RTF_GATEWAY;
|
||||
|
||||
if (ADDR_ISHOST(&entry->route_dst)) {
|
||||
rt.rt_flags |= RTF_HOST;
|
||||
memcpy(&dst, &entry->route_dst, sizeof(dst));
|
||||
} else
|
||||
addr_net(&entry->route_dst, &dst);
|
||||
|
||||
if (addr_ntos(&dst, &rt.rt_dst) < 0 ||
|
||||
addr_ntos(&entry->route_gw, &rt.rt_gateway) < 0 ||
|
||||
addr_btos(entry->route_dst.addr_bits, &rt.rt_genmask) < 0)
|
||||
return (-1);
|
||||
|
||||
return (ioctl(r->fd, SIOCADDRT, &rt));
|
||||
}
|
||||
|
||||
int
|
||||
route_delete(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
struct rtentry rt;
|
||||
struct addr dst;
|
||||
|
||||
memset(&rt, 0, sizeof(rt));
|
||||
rt.rt_flags = RTF_UP;
|
||||
|
||||
if (ADDR_ISHOST(&entry->route_dst)) {
|
||||
rt.rt_flags |= RTF_HOST;
|
||||
memcpy(&dst, &entry->route_dst, sizeof(dst));
|
||||
} else
|
||||
addr_net(&entry->route_dst, &dst);
|
||||
|
||||
if (addr_ntos(&dst, &rt.rt_dst) < 0 ||
|
||||
addr_btos(entry->route_dst.addr_bits, &rt.rt_genmask) < 0)
|
||||
return (-1);
|
||||
|
||||
return (ioctl(r->fd, SIOCDELRT, &rt));
|
||||
}
|
||||
|
||||
int
|
||||
route_get(route_t *r, struct route_entry *entry)
|
||||
{
|
||||
static int seq;
|
||||
struct nlmsghdr *nmsg;
|
||||
struct rtmsg *rmsg;
|
||||
struct rtattr *rta;
|
||||
struct sockaddr_nl snl;
|
||||
struct iovec iov;
|
||||
struct msghdr msg;
|
||||
u_char buf[512];
|
||||
int i;
|
||||
|
||||
if (entry->route_dst.addr_type != ADDR_TYPE_IP) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
memset(buf, 0, sizeof(buf));
|
||||
|
||||
nmsg = (struct nlmsghdr *)buf;
|
||||
nmsg->nlmsg_len = NLMSG_LENGTH(sizeof(*nmsg)) +
|
||||
RTA_LENGTH(IP_ADDR_LEN);
|
||||
nmsg->nlmsg_flags = NLM_F_REQUEST;
|
||||
nmsg->nlmsg_type = RTM_GETROUTE;
|
||||
nmsg->nlmsg_seq = ++seq;
|
||||
|
||||
rmsg = (struct rtmsg *)(nmsg + 1);
|
||||
rmsg->rtm_family = AF_INET;
|
||||
rmsg->rtm_dst_len = entry->route_dst.addr_bits;
|
||||
|
||||
rta = RTM_RTA(rmsg);
|
||||
rta->rta_type = RTA_DST;
|
||||
rta->rta_len = RTA_LENGTH(IP_ADDR_LEN);
|
||||
|
||||
/* XXX - gross hack for default route */
|
||||
if (entry->route_dst.addr_ip == IP_ADDR_ANY) {
|
||||
i = htonl(0x60060606);
|
||||
memcpy(RTA_DATA(rta), &i, IP_ADDR_LEN);
|
||||
} else
|
||||
memcpy(RTA_DATA(rta), &entry->route_dst.addr_ip, IP_ADDR_LEN);
|
||||
|
||||
memset(&snl, 0, sizeof(snl));
|
||||
snl.nl_family = AF_NETLINK;
|
||||
|
||||
iov.iov_base = nmsg;
|
||||
iov.iov_len = nmsg->nlmsg_len;
|
||||
|
||||
memset(&msg, 0, sizeof(msg));
|
||||
msg.msg_name = &snl;
|
||||
msg.msg_namelen = sizeof(snl);
|
||||
msg.msg_iov = &iov;
|
||||
msg.msg_iovlen = 1;
|
||||
|
||||
if (sendmsg(r->nlfd, &msg, 0) < 0)
|
||||
return (-1);
|
||||
|
||||
iov.iov_base = buf;
|
||||
iov.iov_len = sizeof(buf);
|
||||
|
||||
if ((i = recvmsg(r->nlfd, &msg, 0)) <= 0)
|
||||
return (-1);
|
||||
|
||||
if (nmsg->nlmsg_len < (int)sizeof(*nmsg) || nmsg->nlmsg_len > i ||
|
||||
nmsg->nlmsg_seq != seq) {
|
||||
errno = EINVAL;
|
||||
return (-1);
|
||||
}
|
||||
if (nmsg->nlmsg_type == NLMSG_ERROR)
|
||||
return (-1);
|
||||
|
||||
i -= NLMSG_LENGTH(sizeof(*nmsg));
|
||||
|
||||
while (RTA_OK(rta, i)) {
|
||||
if (rta->rta_type == RTA_GATEWAY) {
|
||||
entry->route_gw.addr_type = ADDR_TYPE_IP;
|
||||
memcpy(&entry->route_gw.addr_ip,
|
||||
RTA_DATA(rta), IP_ADDR_LEN);
|
||||
entry->route_gw.addr_bits = IP_ADDR_BITS;
|
||||
return (0);
|
||||
}
|
||||
rta = RTA_NEXT(rta, i);
|
||||
}
|
||||
errno = ESRCH;
|
||||
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[BUFSIZ], ifbuf[16];
|
||||
int i, iflags, refcnt, use, metric, mss, win, irtt, ret;
|
||||
struct route_entry entry;
|
||||
uint32_t mask;
|
||||
|
||||
entry.route_dst.addr_type = entry.route_gw.addr_type = ADDR_TYPE_IP;
|
||||
entry.route_dst.addr_bits = entry.route_gw.addr_bits = IP_ADDR_BITS;
|
||||
|
||||
if ((fp = fopen(PROC_ROUTE_FILE, "r")) == NULL)
|
||||
return (-1);
|
||||
|
||||
ret = 0;
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
||||
i = sscanf(buf,
|
||||
"%16s %X %X %X %d %d %d %X %d %d %d\n",
|
||||
ifbuf, &entry.route_dst.addr_ip, &entry.route_gw.addr_ip,
|
||||
&iflags, &refcnt, &use, &metric, &mask, &mss, &win, &irtt);
|
||||
|
||||
if (i < 10 || !(iflags & RTF_UP))
|
||||
continue;
|
||||
|
||||
if (entry.route_gw.addr_ip == IP_ADDR_ANY)
|
||||
continue;
|
||||
|
||||
entry.route_dst.addr_type = entry.route_gw.addr_type =
|
||||
ADDR_TYPE_IP;
|
||||
|
||||
if (addr_mtob(&mask, IP_ADDR_LEN,
|
||||
&entry.route_dst.addr_bits) < 0)
|
||||
continue;
|
||||
|
||||
if ((ret = callback(&entry, arg)) != 0)
|
||||
break;
|
||||
}
|
||||
if (ferror(fp)) {
|
||||
fclose(fp);
|
||||
return (-1);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
route_t *
|
||||
route_close(route_t *r)
|
||||
{
|
||||
if (r != NULL) {
|
||||
if (r->fd >= 0)
|
||||
close(r->fd);
|
||||
if (r->nlfd >= 0)
|
||||
close(r->nlfd);
|
||||
free(r);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
58
libdnet-stripped/src/route-none.c
Normal file
58
libdnet-stripped/src/route-none.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* route-none.c
|
||||
*
|
||||
* Copyright (c) 2000 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: route-none.c,v 1.5 2002/02/04 03:59:45 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
route_t *
|
||||
route_open(void)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
int
|
||||
route_add(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
route_delete(route_t *r, const struct route_entry *entry)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
route_get(route_t *r, struct route_entry *entry)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return (-1);
|
||||
}
|
||||
|
||||
route_t *
|
||||
route_close(route_t *r)
|
||||
{
|
||||
return (NULL);
|
||||
}
|
||||
157
libdnet-stripped/src/route-win32.c
Normal file
157
libdnet-stripped/src/route-win32.c
Normal file
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* route-win32.c
|
||||
*
|
||||
* Copyright (c) 2002 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: route-win32.c,v 1.12 2005/02/15 07:11:32 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <ws2tcpip.h>
|
||||
#include <iphlpapi.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct route_handle {
|
||||
MIB_IPFORWARDTABLE *ipftable;
|
||||
};
|
||||
|
||||
route_t *
|
||||
route_open(void)
|
||||
{
|
||||
return (calloc(1, sizeof(route_t)));
|
||||
}
|
||||
|
||||
int
|
||||
route_add(route_t *route, const struct route_entry *entry)
|
||||
{
|
||||
MIB_IPFORWARDROW ipfrow;
|
||||
struct addr net;
|
||||
|
||||
memset(&ipfrow, 0, sizeof(ipfrow));
|
||||
|
||||
if (GetBestInterface(entry->route_gw.addr_ip,
|
||||
&ipfrow.dwForwardIfIndex) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
if (addr_net(&entry->route_dst, &net) < 0 ||
|
||||
net.addr_type != ADDR_TYPE_IP)
|
||||
return (-1);
|
||||
|
||||
ipfrow.dwForwardDest = net.addr_ip;
|
||||
addr_btom(entry->route_dst.addr_bits,
|
||||
&ipfrow.dwForwardMask, IP_ADDR_LEN);
|
||||
ipfrow.dwForwardNextHop = entry->route_gw.addr_ip;
|
||||
ipfrow.dwForwardType = 4; /* XXX - next hop != final dest */
|
||||
ipfrow.dwForwardProto = 3; /* XXX - MIB_PROTO_NETMGMT */
|
||||
|
||||
if (CreateIpForwardEntry(&ipfrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
route_delete(route_t *route, const struct route_entry *entry)
|
||||
{
|
||||
MIB_IPFORWARDROW ipfrow;
|
||||
DWORD mask;
|
||||
|
||||
if (entry->route_dst.addr_type != ADDR_TYPE_IP ||
|
||||
GetBestRoute(entry->route_dst.addr_ip,
|
||||
IP_ADDR_ANY, &ipfrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
addr_btom(entry->route_dst.addr_bits, &mask, IP_ADDR_LEN);
|
||||
|
||||
if (ipfrow.dwForwardDest != entry->route_dst.addr_ip ||
|
||||
ipfrow.dwForwardMask != mask) {
|
||||
errno = ENXIO;
|
||||
SetLastError(ERROR_NO_DATA);
|
||||
return (-1);
|
||||
}
|
||||
if (DeleteIpForwardEntry(&ipfrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
route_get(route_t *route, struct route_entry *entry)
|
||||
{
|
||||
MIB_IPFORWARDROW ipfrow;
|
||||
DWORD mask;
|
||||
|
||||
if (entry->route_dst.addr_type != ADDR_TYPE_IP ||
|
||||
GetBestRoute(entry->route_dst.addr_ip,
|
||||
IP_ADDR_ANY, &ipfrow) != NO_ERROR)
|
||||
return (-1);
|
||||
|
||||
if (ipfrow.dwForwardProto == 2 && /* XXX - MIB_IPPROTO_LOCAL */
|
||||
(ipfrow.dwForwardNextHop|IP_CLASSA_NET) !=
|
||||
(IP_ADDR_LOOPBACK|IP_CLASSA_NET) &&
|
||||
!IP_LOCAL_GROUP(ipfrow.dwForwardNextHop)) {
|
||||
errno = ENXIO;
|
||||
SetLastError(ERROR_NO_DATA);
|
||||
return (-1);
|
||||
}
|
||||
addr_btom(entry->route_dst.addr_bits, &mask, IP_ADDR_LEN);
|
||||
|
||||
entry->route_gw.addr_type = ADDR_TYPE_IP;
|
||||
entry->route_gw.addr_bits = IP_ADDR_BITS;
|
||||
entry->route_gw.addr_ip = ipfrow.dwForwardNextHop;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
route_loop(route_t *r, route_handler callback, void *arg)
|
||||
{
|
||||
struct route_entry entry;
|
||||
ULONG len;
|
||||
int i, ret;
|
||||
|
||||
for (len = sizeof(r->ipftable[0]); ; ) {
|
||||
if (r->ipftable)
|
||||
free(r->ipftable);
|
||||
r->ipftable = malloc(len);
|
||||
ret = GetIpForwardTable(r->ipftable, &len, FALSE);
|
||||
if (ret == NO_ERROR)
|
||||
break;
|
||||
else if (ret != ERROR_INSUFFICIENT_BUFFER)
|
||||
return (-1);
|
||||
}
|
||||
entry.route_dst.addr_type = ADDR_TYPE_IP;
|
||||
entry.route_dst.addr_bits = IP_ADDR_BITS;
|
||||
|
||||
entry.route_gw.addr_type = ADDR_TYPE_IP;
|
||||
entry.route_gw.addr_bits = IP_ADDR_BITS;
|
||||
|
||||
for (i = 0; i < (int)r->ipftable->dwNumEntries; i++) {
|
||||
entry.route_dst.addr_ip = r->ipftable->table[i].dwForwardDest;
|
||||
addr_mtob(&r->ipftable->table[i].dwForwardMask, IP_ADDR_LEN,
|
||||
&entry.route_dst.addr_bits);
|
||||
entry.route_gw.addr_ip =
|
||||
r->ipftable->table[i].dwForwardNextHop;
|
||||
|
||||
if ((ret = (*callback)(&entry, arg)) != 0)
|
||||
return (ret);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
route_t *
|
||||
route_close(route_t *r)
|
||||
{
|
||||
if (r != NULL) {
|
||||
if (r->ipftable != NULL)
|
||||
free(r->ipftable);
|
||||
free(r);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
73
libdnet-stripped/src/strlcat.c
Normal file
73
libdnet-stripped/src/strlcat.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/* $OpenBSD: strlcat.c,v 1.8 2001/05/13 15:40:15 deraadt Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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 AUTHOR 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 *rcsid = "$OpenBSD: strlcat.c,v 1.8 2001/05/13 15:40:15 deraadt Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* Appends src to string dst of size siz (unlike strncat, siz is the
|
||||
* full size of dst, not space left). At most siz-1 characters
|
||||
* will be copied. Always NUL terminates (unless siz <= strlen(dst)).
|
||||
* Returns strlen(src) + MIN(siz, strlen(initial dst)).
|
||||
* If retval >= siz, truncation occurred.
|
||||
*/
|
||||
size_t
|
||||
strlcat(dst, src, siz)
|
||||
char *dst;
|
||||
const char *src;
|
||||
size_t siz;
|
||||
{
|
||||
register char *d = dst;
|
||||
register const char *s = src;
|
||||
register size_t n = siz;
|
||||
size_t dlen;
|
||||
|
||||
/* Find the end of dst and adjust bytes left but don't go past end */
|
||||
while (n-- != 0 && *d != '\0')
|
||||
d++;
|
||||
dlen = d - dst;
|
||||
n = siz - dlen;
|
||||
|
||||
if (n == 0)
|
||||
return(dlen + strlen(s));
|
||||
while (*s != '\0') {
|
||||
if (n != 1) {
|
||||
*d++ = *s;
|
||||
n--;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
*d = '\0';
|
||||
|
||||
return(dlen + (s - src)); /* count does not include NUL */
|
||||
}
|
||||
69
libdnet-stripped/src/strlcpy.c
Normal file
69
libdnet-stripped/src/strlcpy.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/* $OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``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 AUTHOR 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 *rcsid = "$OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* Copy src to string dst of size siz. At most siz-1 characters
|
||||
* will be copied. Always NUL terminates (unless siz == 0).
|
||||
* Returns strlen(src); if retval >= siz, truncation occurred.
|
||||
*/
|
||||
size_t
|
||||
strlcpy(dst, src, siz)
|
||||
char *dst;
|
||||
const char *src;
|
||||
size_t siz;
|
||||
{
|
||||
register char *d = dst;
|
||||
register const char *s = src;
|
||||
register size_t n = siz;
|
||||
|
||||
/* Copy as many bytes as will fit */
|
||||
if (n != 0 && --n != 0) {
|
||||
do {
|
||||
if ((*d++ = *s++) == 0)
|
||||
break;
|
||||
} while (--n != 0);
|
||||
}
|
||||
|
||||
/* Not enough room in dst, add NUL and traverse rest of src */
|
||||
if (n == 0) {
|
||||
if (siz != 0)
|
||||
*d = '\0'; /* NUL-terminate dst */
|
||||
while (*s++)
|
||||
;
|
||||
}
|
||||
|
||||
return(s - src - 1); /* count does not include NUL */
|
||||
}
|
||||
85
libdnet-stripped/src/strsep.c
Normal file
85
libdnet-stripped/src/strsep.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/* $OpenBSD: strsep.c,v 1.3 1997/08/20 04:28:14 millert Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93";
|
||||
#else
|
||||
static char *rcsid = "$OpenBSD: strsep.c,v 1.3 1997/08/20 04:28:14 millert Exp $";
|
||||
#endif
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
/*
|
||||
* Get next token from string *stringp, where tokens are possibly-empty
|
||||
* strings separated by characters from delim.
|
||||
*
|
||||
* Writes NULs into the string at *stringp to end tokens.
|
||||
* delim need not remain constant from call to call.
|
||||
* On return, *stringp points past the last NUL written (if there might
|
||||
* be further tokens), or is NULL (if there are definitely no more tokens).
|
||||
*
|
||||
* If *stringp is NULL, strsep returns NULL.
|
||||
*/
|
||||
char *
|
||||
strsep(stringp, delim)
|
||||
register char **stringp;
|
||||
register const char *delim;
|
||||
{
|
||||
register char *s;
|
||||
register const char *spanp;
|
||||
register int c, sc;
|
||||
char *tok;
|
||||
|
||||
if ((s = *stringp) == NULL)
|
||||
return (NULL);
|
||||
for (tok = s;;) {
|
||||
c = *s++;
|
||||
spanp = delim;
|
||||
do {
|
||||
if ((sc = *spanp++) == c) {
|
||||
if (c == 0)
|
||||
s = NULL;
|
||||
else
|
||||
s[-1] = 0;
|
||||
*stringp = s;
|
||||
return (tok);
|
||||
}
|
||||
} while (sc != 0);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
||||
146
libdnet-stripped/src/tun-bsd.c
Normal file
146
libdnet-stripped/src/tun-bsd.c
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* tun-bsd.c
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: tun-bsd.c,v 1.3 2005/02/10 23:50:04 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/uio.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct tun {
|
||||
int fd;
|
||||
intf_t *intf;
|
||||
struct intf_entry save;
|
||||
};
|
||||
|
||||
#define MAX_DEVS 16 /* XXX - max number of tunnel devices */
|
||||
|
||||
tun_t *
|
||||
tun_open(struct addr *src, struct addr *dst, int mtu)
|
||||
{
|
||||
struct intf_entry ifent;
|
||||
tun_t *tun;
|
||||
char dev[128];
|
||||
int i;
|
||||
|
||||
if (src->addr_type != ADDR_TYPE_IP || dst->addr_type != ADDR_TYPE_IP ||
|
||||
src->addr_bits != IP_ADDR_BITS || dst->addr_bits != IP_ADDR_BITS) {
|
||||
errno = EINVAL;
|
||||
return (NULL);
|
||||
}
|
||||
if ((tun = calloc(1, sizeof(*tun))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((tun->intf = intf_open()) == NULL)
|
||||
return (tun_close(tun));
|
||||
|
||||
memset(&ifent, 0, sizeof(ifent));
|
||||
ifent.intf_len = sizeof(ifent);
|
||||
|
||||
for (i = 0; i < MAX_DEVS; i++) {
|
||||
snprintf(dev, sizeof(dev), "/dev/tun%d", i);
|
||||
strlcpy(ifent.intf_name, dev + 5, sizeof(ifent.intf_name));
|
||||
tun->save = ifent;
|
||||
|
||||
if ((tun->fd = open(dev, O_RDWR, 0)) != -1 &&
|
||||
intf_get(tun->intf, &tun->save) == 0) {
|
||||
route_t *r;
|
||||
struct route_entry entry;
|
||||
|
||||
ifent.intf_flags = INTF_FLAG_UP|INTF_FLAG_POINTOPOINT;
|
||||
ifent.intf_addr = *src;
|
||||
ifent.intf_dst_addr = *dst;
|
||||
ifent.intf_mtu = mtu;
|
||||
|
||||
if (intf_set(tun->intf, &ifent) < 0)
|
||||
tun = tun_close(tun);
|
||||
|
||||
/* XXX - try to ensure our route got set */
|
||||
if ((r = route_open()) != NULL) {
|
||||
entry.route_dst = *dst;
|
||||
entry.route_gw = *src;
|
||||
route_add(r, &entry);
|
||||
route_close(r);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == MAX_DEVS)
|
||||
tun = tun_close(tun);
|
||||
return (tun);
|
||||
}
|
||||
|
||||
const char *
|
||||
tun_name(tun_t *tun)
|
||||
{
|
||||
return (tun->save.intf_name);
|
||||
}
|
||||
|
||||
int
|
||||
tun_fileno(tun_t *tun)
|
||||
{
|
||||
return (tun->fd);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
tun_send(tun_t *tun, const void *buf, size_t size)
|
||||
{
|
||||
#ifdef __OpenBSD__
|
||||
struct iovec iov[2];
|
||||
uint32_t af = htonl(AF_INET);
|
||||
|
||||
iov[0].iov_base = ⁡
|
||||
iov[0].iov_len = sizeof(af);
|
||||
iov[1].iov_base = (void *)buf;
|
||||
iov[1].iov_len = size;
|
||||
|
||||
return (writev(tun->fd, iov, 2));
|
||||
#else
|
||||
return (write(tun->fd, buf, size));
|
||||
#endif
|
||||
}
|
||||
|
||||
ssize_t
|
||||
tun_recv(tun_t *tun, void *buf, size_t size)
|
||||
{
|
||||
#ifdef __OpenBSD__
|
||||
struct iovec iov[2];
|
||||
uint32_t af;
|
||||
|
||||
iov[0].iov_base = ⁡
|
||||
iov[0].iov_len = sizeof(af);
|
||||
iov[1].iov_base = (void *)buf;
|
||||
iov[1].iov_len = size;
|
||||
|
||||
return (readv(tun->fd, iov, 2) - sizeof(af));
|
||||
#else
|
||||
return (read(tun->fd, buf, size));
|
||||
#endif
|
||||
}
|
||||
|
||||
tun_t *
|
||||
tun_close(tun_t *tun)
|
||||
{
|
||||
if (tun->fd > 0)
|
||||
close(tun->fd);
|
||||
if (tun->intf != NULL) {
|
||||
/* Restore interface configuration on close. */
|
||||
intf_set(tun->intf, &tun->save);
|
||||
intf_close(tun->intf);
|
||||
}
|
||||
free(tun);
|
||||
return (NULL);
|
||||
}
|
||||
114
libdnet-stripped/src/tun-linux.c
Normal file
114
libdnet-stripped/src/tun-linux.c
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* tun-linux.c
|
||||
*
|
||||
* Universal TUN/TAP driver, in Linux 2.4+
|
||||
* /usr/src/linux/Documentation/networking/tuntap.txt
|
||||
*
|
||||
* Copyright (c) 2001 Dug Song <dugsong@monkey.org>
|
||||
*
|
||||
* $Id: tun-linux.c,v 1.3 2005/02/10 20:18:01 dugsong Exp $
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <linux/if.h>
|
||||
#include <linux/if_tun.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "dnet.h"
|
||||
|
||||
struct tun {
|
||||
int fd;
|
||||
intf_t *intf;
|
||||
struct ifreq ifr;
|
||||
};
|
||||
|
||||
tun_t *
|
||||
tun_open(struct addr *src, struct addr *dst, int mtu)
|
||||
{
|
||||
tun_t *tun;
|
||||
struct intf_entry ifent;
|
||||
|
||||
if ((tun = calloc(1, sizeof(*tun))) == NULL)
|
||||
return (NULL);
|
||||
|
||||
if ((tun->fd = open("/dev/net/tun", O_RDWR, 0)) < 0 ||
|
||||
(tun->intf = intf_open()) == NULL)
|
||||
return (tun_close(tun));
|
||||
|
||||
tun->ifr.ifr_flags = IFF_TUN;
|
||||
|
||||
if (ioctl(tun->fd, TUNSETIFF, (void *) &tun->ifr) < 0)
|
||||
return (tun_close(tun));
|
||||
|
||||
memset(&ifent, 0, sizeof(ifent));
|
||||
strlcpy(ifent.intf_name, tun->ifr.ifr_name, sizeof(ifent.intf_name));
|
||||
ifent.intf_flags = INTF_FLAG_UP|INTF_FLAG_POINTOPOINT;
|
||||
ifent.intf_addr = *src;
|
||||
ifent.intf_dst_addr = *dst;
|
||||
ifent.intf_mtu = mtu;
|
||||
|
||||
if (intf_set(tun->intf, &ifent) < 0)
|
||||
return (tun_close(tun));
|
||||
|
||||
return (tun);
|
||||
}
|
||||
|
||||
const char *
|
||||
tun_name(tun_t *tun)
|
||||
{
|
||||
return (tun->ifr.ifr_name);
|
||||
}
|
||||
|
||||
int
|
||||
tun_fileno(tun_t *tun)
|
||||
{
|
||||
return (tun->fd);
|
||||
}
|
||||
|
||||
ssize_t
|
||||
tun_send(tun_t *tun, const void *buf, size_t size)
|
||||
{
|
||||
struct iovec iov[2];
|
||||
uint32_t type = ETH_TYPE_IP;
|
||||
|
||||
iov[0].iov_base = &type;
|
||||
iov[0].iov_len = sizeof(type);
|
||||
iov[1].iov_base = (void *)buf;
|
||||
iov[1].iov_len = size;
|
||||
|
||||
return (writev(tun->fd, iov, 2));
|
||||
}
|
||||
|
||||
ssize_t
|
||||
tun_recv(tun_t *tun, void *buf, size_t size)
|
||||
{
|
||||
struct iovec iov[2];
|
||||
uint32_t type;
|
||||
|
||||
iov[0].iov_base = &type;
|
||||
iov[0].iov_len = sizeof(type);
|
||||
iov[1].iov_base = (void *)buf;
|
||||
iov[1].iov_len = size;
|
||||
|
||||
return (readv(tun->fd, iov, 2) - sizeof(type));
|
||||
}
|
||||
|
||||
tun_t *
|
||||
tun_close(tun_t *tun)
|
||||
{
|
||||
if (tun->fd > 0)
|
||||
close(tun->fd);
|
||||
if (tun->intf != NULL)
|
||||
intf_close(tun->intf);
|
||||
free(tun);
|
||||
return (NULL);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user