Browse Source

Import upstream version 3.4.3

Aaron Turner 15 years ago
parent
commit
6dd271a201
100 changed files with 12568 additions and 1743 deletions
  1. BIN
      ._configure.ac
  2. 4 2
      Makefile.am
  3. 140 59
      Makefile.in
  4. 202 117
      aclocal.m4
  5. 23 4
      config/config.guess
  6. 14 5
      config/config.sub
  7. 634 435
      configure
  8. 305 294
      configure.ac
  9. BIN
      docs/._CHANGELOG
  10. 14 1
      docs/CHANGELOG
  11. 5 1
      docs/CREDIT
  12. 32 10
      docs/Makefile.in
  13. 50 22
      lib/Makefile.in
  14. 82 36
      libopts/Makefile.in
  15. 7357 0
      m4/libtool.m4
  16. 368 0
      m4/ltoptions.m4
  17. 123 0
      m4/ltsugar.m4
  18. 23 0
      m4/ltversion.m4
  19. 92 0
      m4/lt~obsolete.m4
  20. 32 10
      scripts/Makefile.in
  21. BIN
      src/._Makefile.am
  22. BIN
      src/._bridge.c
  23. BIN
      src/._send_packets.c
  24. BIN
      src/._tcpbridge.c
  25. BIN
      src/._tcpbridge.h
  26. BIN
      src/._tcpprep.c
  27. BIN
      src/._tcpreplay_opts.def
  28. BIN
      src/._tree.c
  29. 1 1
      src/Makefile.am
  30. 246 138
      src/Makefile.in
  31. 18 4
      src/bridge.c
  32. BIN
      src/common/._fakepoll.c
  33. BIN
      src/common/._fakepoll.h
  34. BIN
      src/common/._sendpacket.c
  35. 51 23
      src/common/Makefile.in
  36. 242 67
      src/common/cidr.c
  37. 10 1
      src/common/cidr.h
  38. 3 1
      src/common/err.h
  39. 266 11
      src/common/get.c
  40. 14 2
      src/common/get.h
  41. 1 1
      src/common/svn_version.c
  42. 74 10
      src/common/xX.c
  43. 3 2
      src/common/xX.h
  44. 3 0
      src/defines.h
  45. 3 0
      src/defines.h.in
  46. BIN
      src/fragroute/._argv.c
  47. BIN
      src/fragroute/._mod_ip_chaff.c
  48. BIN
      src/fragroute/._mod_ip_tos.c
  49. BIN
      src/fragroute/._mod_ip_ttl.c
  50. BIN
      src/fragroute/._mod_order.c
  51. BIN
      src/fragroute/._mod_print.c
  52. BIN
      src/fragroute/._mod_tcp_chaff.c
  53. BIN
      src/fragroute/._randutil.c
  54. 3 2
      src/fragroute/Makefile.am
  55. 142 65
      src/fragroute/Makefile.in
  56. 3 1
      src/fragroute/fragroute.c
  57. 147 0
      src/fragroute/iputil.c
  58. 13 0
      src/fragroute/iputil.h
  59. 5 1
      src/fragroute/mod.c
  60. 196 0
      src/fragroute/mod_ip6_opt.c
  61. 83 0
      src/fragroute/mod_ip6_qos.c
  62. 16 4
      src/fragroute/mod_ip_chaff.c
  63. 146 2
      src/fragroute/mod_ip_frag.c
  64. 12 2
      src/fragroute/mod_ip_opt.c
  65. 5 1
      src/fragroute/mod_ip_tos.c
  66. 7 1
      src/fragroute/mod_ip_ttl.c
  67. 132 12
      src/fragroute/mod_print.c
  68. 36 16
      src/fragroute/mod_tcp_chaff.c
  69. 11 5
      src/fragroute/mod_tcp_opt.c
  70. 39 8
      src/fragroute/mod_tcp_seg.c
  71. 35 3
      src/fragroute/pkt.c
  72. 3 1
      src/fragroute/pkt.h
  73. 4 2
      src/send_packets.c
  74. 59 21
      src/tcpbridge.1
  75. 211 66
      src/tcpbridge_opts.c
  76. 53 47
      src/tcpbridge_opts.h
  77. BIN
      src/tcpedit/._edit_packet.c
  78. BIN
      src/tcpedit/._parse_args.c
  79. BIN
      src/tcpedit/._tcpedit-int.h
  80. BIN
      src/tcpedit/._tcpedit.c
  81. BIN
      src/tcpedit/._tcpedit.h
  82. BIN
      src/tcpedit/._tcpedit_opts.def
  83. BIN
      src/tcpedit/._tcpedit_stub.def
  84. 77 49
      src/tcpedit/Makefile.in
  85. 21 2
      src/tcpedit/checksum.c
  86. 280 25
      src/tcpedit/edit_packet.c
  87. 13 3
      src/tcpedit/edit_packet.h
  88. 5 1
      src/tcpedit/parse_args.c
  89. BIN
      src/tcpedit/plugins/dlt_en10mb/._en10mb.c
  90. BIN
      src/tcpedit/plugins/dlt_en10mb/._en10mb_opts.def
  91. 34 9
      src/tcpedit/portmap.c
  92. 3 2
      src/tcpedit/portmap.h
  93. 9 3
      src/tcpedit/tcpedit-int.h
  94. 74 9
      src/tcpedit/tcpedit.c
  95. 51 19
      src/tcpedit/tcpedit_opts.def
  96. 33 27
      src/tcpedit/tcpedit_stub.h
  97. 21 12
      src/tcpprep.1
  98. 139 53
      src/tcpprep.c
  99. 12 12
      src/tcpprep_opts.c
  100. 0 0
      src/tcpprep_opts.def

BIN
._configure.ac


+ 4 - 2
Makefile.am

@@ -1,7 +1,7 @@
 # $Id$
 AUTOMAKE_OPTIONS = foreign
 
-ACLOCAL_AMFLAGS = -I m4
+ACLOCAL_AMFLAGS = -I m4 -I libopts/m4
 
 if NEED_LIBOPTS
 SUBDIRS = scripts lib $(LIBOPTS_DIR) src
@@ -64,4 +64,6 @@ DISTCLEANFILES = .tm_project.cache stamp-h1 *.tar.*
 
 MAINTAINERCLEANFILES = Makefile.in configure *.bak
 
-EXTRA_DIST = doxygen.cfg.in autogen.sh
+EXTRA_DIST = doxygen.cfg.in autogen.sh \
+	m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 \
+	m4/ltversion.m4 m4/lt~obsolete.m4

+ 140 - 59
Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -15,8 +16,9 @@
 @SET_MAKE@
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -49,6 +51,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES = doxygen.cfg
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -60,15 +63,43 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	ps-recursive uninstall-recursive
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir dist dist-all distcheck
 ETAGS = etags
 CTAGS = ctags
 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); }; }
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
@@ -219,7 +250,7 @@ top_srcdir = @top_srcdir@
 
 # $Id$
 AUTOMAKE_OPTIONS = foreign
-ACLOCAL_AMFLAGS = -I m4
+ACLOCAL_AMFLAGS = -I m4 -I libopts/m4
 @NEED_LIBOPTS_FALSE@SUBDIRS = scripts lib src
 @NEED_LIBOPTS_TRUE@SUBDIRS = scripts lib $(LIBOPTS_DIR) src
 DIST_SUBDIRS = scripts lib libopts src docs test
@@ -228,7 +259,10 @@ TEST_DIR = $(top_builddir)/test
 MOSTLYCLEANFILES = tcpreplay.spec *~
 DISTCLEANFILES = .tm_project.cache stamp-h1 *.tar.*
 MAINTAINERCLEANFILES = Makefile.in configure *.bak
-EXTRA_DIST = doxygen.cfg.in autogen.sh
+EXTRA_DIST = doxygen.cfg.in autogen.sh \
+	m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 \
+	m4/ltversion.m4 m4/lt~obsolete.m4
+
 all: all-recursive
 
 .SUFFIXES:
@@ -238,15 +272,15 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	@for dep in $?; do \
 	  case '$(am__configure_deps)' in \
 	    *$$dep*) \
-	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
-	      cd $(srcdir) && $(AUTOMAKE) --foreign  \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
 		&& exit 0; \
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign  Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -262,9 +296,10 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC
 	$(SHELL) ./config.status --recheck
 
 $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
-	cd $(srcdir) && $(AUTOCONF)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
 $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
-	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
 doxygen.cfg: $(top_builddir)/config.status $(srcdir)/doxygen.cfg.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 
@@ -301,7 +336,7 @@ $(RECURSIVE_TARGETS):
 	  else \
 	    local_target="$$target"; \
 	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
 	  || eval $$failcom; \
 	done; \
 	if test "$$dot_seen" = "no"; then \
@@ -335,16 +370,16 @@ $(RECURSIVE_CLEAN_TARGETS):
 	  else \
 	    local_target="$$target"; \
 	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
 	  || eval $$failcom; \
 	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
 	done
 ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -359,7 +394,7 @@ tags: TAGS
 
 TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
 	  include_option=--etags-include; \
@@ -371,7 +406,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
@@ -380,36 +415,41 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
 	$(am__remove_distdir)
-	test -d $(distdir) || mkdir $(distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	list='$(DISTFILES)'; \
@@ -425,29 +465,44 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	@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 && \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
 	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
 		am__remove_distdir=: \
 		am__skip_length_check=: \
+		am__skip_mode_fix=: \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
@@ -455,11 +510,12 @@ distdir: $(DISTFILES)
 	$(MAKE) $(AM_MAKEFLAGS) \
 	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
 	  dist-hook
-	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	-test -n "$(am__skip_mode_fix)" \
+	|| 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 $(install_sh) -c -m a+r {} {} \; \
-	|| chmod -R a+r $(distdir)
+	|| chmod -R a+r "$(distdir)"
 dist-gzip: distdir
 	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
 	$(am__remove_distdir)
@@ -472,6 +528,10 @@ dist-lzma: distdir
 	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
 	$(am__remove_distdir)
 
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
 dist-tarZ: distdir
 	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
 	$(am__remove_distdir)
@@ -500,6 +560,8 @@ distcheck: dist
 	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
 	*.tar.lzma*) \
 	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
 	*.tar.Z*) \
 	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
 	*.shar.gz*) \
@@ -511,9 +573,11 @@ distcheck: dist
 	mkdir $(distdir)/_build
 	mkdir $(distdir)/_inst
 	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
 	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
 	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-	  && cd $(distdir)/_build \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
 	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
 	    $(DISTCHECK_CONFIGURE_FLAGS) \
 	  && $(MAKE) $(AM_MAKEFLAGS) \
@@ -535,13 +599,15 @@ distcheck: dist
 	  && rm -rf "$$dc_destdir" \
 	  && $(MAKE) $(AM_MAKEFLAGS) dist \
 	  && rm -rf $(DIST_ARCHIVES) \
-	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
 	$(am__remove_distdir)
 	@(echo "$(distdir) archives ready for distribution: "; \
 	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
 	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-	@cd $(distuninstallcheck_dir) \
+	@$(am__cd) '$(distuninstallcheck_dir)' \
 	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
 	   || { echo "ERROR: files left after uninstall:" ; \
 	        if test -n "$(DESTDIR)"; then \
@@ -584,6 +650,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 	-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
@@ -606,6 +673,8 @@ dvi-am:
 
 html: html-recursive
 
+html-am:
+
 info: info-recursive
 
 info-am:
@@ -614,18 +683,28 @@ install-data-am:
 
 install-dvi: install-dvi-recursive
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-recursive
 
+install-html-am:
+
 install-info: install-info-recursive
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-recursive
 
+install-pdf-am:
+
 install-ps: install-ps-recursive
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -648,24 +727,25 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
-	install-strip
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am am--refresh check check-am clean clean-generic \
 	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-	dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-zip \
-	distcheck distclean distclean-generic distclean-libtool \
-	distclean-local distclean-tags distcleancheck distdir \
-	distuninstallcheck dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	installdirs-am maintainer-clean maintainer-clean-generic \
-	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-	ps ps-am tags tags-recursive uninstall uninstall-am
+	dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \
+	dist-zip distcheck distclean distclean-generic \
+	distclean-libtool distclean-local distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
 
 .PHONY: manpages docs test man2html
 
@@ -709,6 +789,7 @@ doxygen: version
 
 ncc:
 	CC=ncc make
+
 # 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:

+ 202 - 117
aclocal.m4

@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
+# generated automatically by aclocal 1.11 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
 # This file 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.
@@ -7977,10 +7977,10 @@ m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.10'
+[am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.10.2], [],
+m4_if([$1], [1.11], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -7996,7 +7996,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.10.2])dnl
+[AM_AUTOMAKE_VERSION([1.11])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@@ -8056,14 +8056,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
 # Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 8
+# serial 9
 
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
@@ -8076,6 +8076,7 @@ AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
 _AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
 if $2; then
   $1_TRUE=
   $1_FALSE='#'
@@ -8089,14 +8090,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
 # Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 9
+# serial 10
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -8153,6 +8154,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
   if test "$am_compiler_list" = ""; then
      am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
   fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
   for depmode in $am_compiler_list; do
     # Setup a source with many dependencies, because some compilers
     # like to wrap large dependency lists on column 80 (with \), and
@@ -8170,7 +8181,17 @@ AC_CACHE_CHECK([dependency style of $depcc],
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
     case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
     nosideeffect)
       # after this tag, mechanisms are not by side-effect, so they'll
       # only be used when explicitly requested
@@ -8180,19 +8201,23 @@ AC_CACHE_CHECK([dependency style of $depcc],
 	break
       fi
       ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
     none) break ;;
     esac
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.
     if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       source=sub/conftest.c object=$am__obj \
        depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
          >/dev/null 2>conftest.err &&
        grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
        grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
        ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
       # icc doesn't choke on unknown options, it will just issue warnings
       # or remarks (even with -Werror).  So we grep stderr for any message
@@ -8256,59 +8281,61 @@ _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 4
+#serial 5
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[# Autoconf 2.62 quotes --file arguments for eval, but not when files
-# are listed without --file.  Let's play safe and only enable the eval
-# if we detect the quoting.
-case $CONFIG_FILES in
-*\'*) eval set x "$CONFIG_FILES" ;;
-*)   set x $CONFIG_FILES ;;
-esac
-shift
-for mf
-do
-  # Strip MF so we end up with the name of the file.
-  mf=`echo "$mf" | sed -e 's/:.*$//'`
-  # Check whether this is an Automake generated Makefile or not.
-  # We used to match only the files named `Makefile.in', but
-  # some people rename them; so instead we look at the file content.
-  # Grep'ing the first line is not enough: some people post-process
-  # each Makefile.in and add a new line on top of each file to say so.
-  # Grep'ing the whole file is not good either: AIX grep has a line
-  # limit of 2048, but all sed's we know have understand at least 4000.
-  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-    dirpart=`AS_DIRNAME("$mf")`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`AS_DIRNAME(["$file"])`
-    AS_MKDIR_P([$dirpart/$fdir])
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
   done
-done
+}
 ])# _AM_OUTPUT_DEPENDENCY_COMMANDS
 
 
@@ -8368,13 +8395,13 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
 # Do all the work for Automake.                             -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008 Free Software Foundation, Inc.
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 13
+# serial 16
 
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
@@ -8391,7 +8418,7 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.60])dnl
+[AC_PREREQ([2.62])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -8442,8 +8469,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf)
 AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
 AM_MISSING_PROG(AUTOHEADER, autoheader)
 AM_MISSING_PROG(MAKEINFO, makeinfo)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
 AC_REQUIRE([AM_PROG_MKDIR_P])dnl
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
@@ -8451,24 +8478,37 @@ AC_REQUIRE([AC_PROG_AWK])dnl
 AC_REQUIRE([AC_PROG_MAKE_SET])dnl
 AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-	      		     [_AM_PROG_TAR([v7])])])
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-                  [_AM_DEPENDENCIES(OBJC)],
-                  [define([AC_PROG_OBJC],
-                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
 ])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
 
 # When config.status generates a header, we must update the stamp-h file.
 # This file resides in the same directory as the config header
@@ -8491,7 +8531,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -8502,7 +8542,14 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
 AC_SUBST(install_sh)])
 
 # Copyright (C) 2003, 2005  Free Software Foundation, Inc.
@@ -8529,27 +8576,38 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 4
+# serial 5
 
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless `enable' is passed literally.
+# For symmetry, `disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
 AC_DEFUN([AM_MAINTAINER_MODE],
-[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
-  dnl maintainer-mode is disabled by default
-  AC_ARG_ENABLE(maintainer-mode,
-[  --enable-maintainer-mode  enable make rules and dependencies not useful
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+[  --][am_maintainer_other][-maintainer-mode  am_maintainer_other make rules and dependencies not useful
 			  (and sometimes confusing) to the casual installer],
-      USE_MAINTAINER_MODE=$enableval,
-      USE_MAINTAINER_MODE=no)
+      [USE_MAINTAINER_MODE=$enableval],
+      [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
   AC_MSG_RESULT([$USE_MAINTAINER_MODE])
-  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
   MAINT=$MAINTAINER_MODE_TRUE
-  AC_SUBST(MAINT)dnl
+  AC_SUBST([MAINT])dnl
 ]
 )
 
@@ -8557,13 +8615,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
 
 # Check to see how 'make' treats includes.	            -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 3
+# serial 4
 
 # AM_MAKE_INCLUDE()
 # -----------------
@@ -8572,7 +8630,7 @@ AC_DEFUN([AM_MAKE_INCLUDE],
 [am_make=${MAKE-make}
 cat > confinc << 'END'
 am__doit:
-	@echo done
+	@echo this is the am__doit target
 .PHONY: am__doit
 END
 # If we don't find an include directive, just comment out the code.
@@ -8582,24 +8640,24 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
 # Now try BSD make style include.
 if test "$am__include" = "#"; then
    echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
 AC_SUBST([am__include])
 AC_SUBST([am__quote])
@@ -8644,14 +8702,14 @@ m4_define([AC_PROG_CC],
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 5
+# serial 6
 
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
@@ -8668,7 +8726,14 @@ AC_SUBST($1)])
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
 # Use eval to expand $SHELL
 if eval "$MISSING --run true"; then
   am_missing_run="$MISSING --run "
@@ -8739,14 +8804,14 @@ AC_DEFUN([_AM_IF_OPTION],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
 # Free Software Foundation, Inc.
 #
 # This file 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.
 
-# serial 4
+# serial 5
 
 # AM_SANITY_CHECK
 # ---------------
@@ -8755,16 +8820,29 @@ AC_DEFUN([AM_SANITY_CHECK],
 # Just in case
 sleep 1
 echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
 # Do `set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
    if test "$[*]" = "X"; then
       # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
+      set X `ls -t "$srcdir/configure" conftest.file`
    fi
    rm -f conftest.file
    if test "$[*]" != "X $srcdir/configure conftest.file" \
@@ -8817,18 +8895,25 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
 #
 # This file 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.
 
+# serial 2
+
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
 # This macro is traced by Automake.
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
 # Check how to create a tarball.                            -*- Autoconf -*-
 
 # Copyright (C) 2004, 2005  Free Software Foundation, Inc.

+ 23 - 4
config/config.guess

@@ -4,7 +4,7 @@
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
 #   Free Software Foundation, Inc.
 
-timestamp='2008-11-15'
+timestamp='2009-04-27'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -324,6 +324,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	case `/usr/bin/uname -p` in
 	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
+    s390x:SunOS:*:*)
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
 	exit ;;
@@ -337,7 +340,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
 	# This test works for both compilers.
 	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-	    if echo '\n#ifdef __amd64\nIS_64BIT_ARCH\n#endif' | \
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
 		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
@@ -1115,8 +1118,11 @@ EOF
     pc:*:*:*)
 	# Left here for compatibility:
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i386.
-	echo i386-pc-msdosdjgpp
+        # the processor, so we play safe by assuming i586.
+	# Note: whatever this is, it MUST be the same as what config.sub
+	# prints for the "djgpp" host, or else GDB configury will decide that
+	# this is a cross-build.
+	echo i586-pc-msdosdjgpp
         exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
@@ -1154,6 +1160,16 @@ EOF
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
           && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+	OS_REL='.3'
+	test -r /etc/.relid \
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
 	exit ;;
@@ -1340,6 +1356,9 @@ EOF
     i*86:rdos:*:*)
 	echo ${UNAME_MACHINE}-pc-rdos
 	exit ;;
+    i*86:AROS:*:*)
+	echo ${UNAME_MACHINE}-pc-aros
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2

+ 14 - 5
config/config.sub

@@ -4,7 +4,7 @@
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
 #   Free Software Foundation, Inc.
 
-timestamp='2008-09-08'
+timestamp='2009-04-17'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -122,6 +122,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
   uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -249,6 +250,7 @@ case $basic_machine in
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| i370 | i860 | i960 | ia64 \
 	| ip2k | iq2000 \
+	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
 	| maxq | mb | microblaze | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
@@ -270,6 +272,7 @@ case $basic_machine in
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
+	| moxie \
 	| mt \
 	| msp430 \
 	| nios | nios2 \
@@ -279,7 +282,7 @@ case $basic_machine in
 	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
 	| pyramid \
 	| score \
-	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -331,6 +334,7 @@ case $basic_machine in
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| i*86-* | i860-* | i960-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
 	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
@@ -362,7 +366,7 @@ case $basic_machine in
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
 	| pyramid-* \
 	| romp-* | rs6000-* \
-	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
@@ -443,6 +447,10 @@ case $basic_machine in
 		basic_machine=m68k-apollo
 		os=-bsd
 		;;
+	aros)
+		basic_machine=i386-pc
+		os=-aros
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -1182,7 +1190,7 @@ case $basic_machine in
 	we32k)
 		basic_machine=we32k-att
 		;;
-	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		;;
 	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
@@ -1254,8 +1262,9 @@ case $os in
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -kopensolaris* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* \
+	      | -aos* | -aros* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \

File diff suppressed because it is too large
+ 634 - 435
configure


+ 305 - 294
configure.ac

@@ -1,5 +1,5 @@
 
-dnl $Id: configure.ac 2196 2009-02-04 21:18:09Z aturner $
+dnl $Id: configure.ac 2371 2009-06-23 15:54:04Z aturner $
 
 AC_INIT(tcpreplay)
 AC_CONFIG_SRCDIR(src/tcpreplay.c)
@@ -17,7 +17,7 @@ AC_CONFIG_MACRO_DIR([m4])
 dnl Set version info here!
 MAJOR_VERSION=3
 MINOR_VERSION=4
-MICRO_VERSION=1
+MICRO_VERSION=3
 TCPREPLAY_VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION
 
 dnl Release is only used for the RPM spec file
@@ -42,11 +42,11 @@ AC_SUBST(target)
 have_cygwin=no
 AC_MSG_CHECKING([for cygwin development environment])
 if test `echo $target | grep -c cygwin` -gt 0 ; then
-   	AC_DEFINE([HAVE_WIN32], [1], [Windows/Cygwin])
-   	AC_MSG_RESULT(yes)
-	have_cygwin=yes
+    AC_DEFINE([HAVE_WIN32], [1], [Windows/Cygwin])
+    AC_MSG_RESULT(yes)
+    have_cygwin=yes
 else
-   AC_MSG_RESULT(no)
+    AC_MSG_RESULT(no)
 fi
 
 
@@ -74,20 +74,20 @@ AC_PATH_PROG(GROFF, groff)
 dnl check autogen version
 AUTOGEN_VERSION=unknown
 if test -n "${AUTOGEN}" ; then
-	AC_MSG_CHECKING(for autogen version >= 5.9.x)
-	${AUTOGEN} -v >autogen.version
-	AUTOGEN_VERSION=`cat autogen.version | ${SED} 's|.*\([[0-9\.]]\{5,\}\).*|\1|'`
-	AUTOGEN_MAJOR=`echo ${AUTOGEN_VERSION} | ${CUT} -d '.' -f 1`
-	AUTOGEN_MINOR=`echo ${AUTOGEN_VERSION} | ${CUT} -d '.' -f 2`
-	if ( test ${AUTOGEN_MAJOR} -eq 5 && test ${AUTOGEN_MINOR} -lt 9 ) || test ${AUTOGEN_MAJOR} -lt 5 ; then
-		AC_MSG_RESULT(no)
-		AC_MSG_WARN([${AUTOGEN} is too old (${AUTOGEN_VERSION}) for building from SVN.  Please upgrade to 5.9.x)])
-	else
-		AC_MSG_RESULT(yes)
-	fi
-	rm -f autogen.version
-	
-	dnl Compare the installed version with the maintainer version if building from SVN and not using system libopts
+    AC_MSG_CHECKING(for autogen version >= 5.9.x)
+    ${AUTOGEN} -v >autogen.version
+    AUTOGEN_VERSION=`cat autogen.version | ${SED} 's|.*\([[0-9\.]]\{5,\}\).*|\1|'`
+    AUTOGEN_MAJOR=`echo ${AUTOGEN_VERSION} | ${CUT} -d '.' -f 1`
+    AUTOGEN_MINOR=`echo ${AUTOGEN_VERSION} | ${CUT} -d '.' -f 2`
+    if ( test ${AUTOGEN_MAJOR} -eq 5 && test ${AUTOGEN_MINOR} -lt 9 ) || test ${AUTOGEN_MAJOR} -lt 5 ; then
+        AC_MSG_RESULT(no)
+        AC_MSG_WARN([${AUTOGEN} is too old (${AUTOGEN_VERSION}) for building from SVN.  Please upgrade to 5.9.x)])
+    else
+        AC_MSG_RESULT(yes)
+    fi
+    rm -f autogen.version
+
+    dnl Compare the installed version with the maintainer version if building from SVN and not using system libopts
     if test ! -f src/tcpreplay_opts.c && test "x$enable_local_libopts" = "xyes" ; then
         if test $MAINTAINER_AUTOGEN_VERSION != $AUTOGEN_VERSION ; then
             AC_MSG_ERROR([Your version of autogen ($AUTOGEN_VERSION) != libopts tear off ($MAINTAINER_AUTOGEN_VERSION)  Either install the correct version or specify --disable-local-libopts])
@@ -95,7 +95,7 @@ if test -n "${AUTOGEN}" ; then
     fi
 else
     if test ! -f src/tcpreplay_opts.c ; then
-    	AC_MSG_ERROR([Please install GNU autogen >= 5.9.x if you are building from SVN])
+        AC_MSG_ERROR([Please install GNU autogen >= 5.9.x if you are building from SVN])
     fi
 fi
 AC_DEFINE([AUTOGEN_VERSION], [${AUTOGEN_VERSION}], [What version of autogen is installed on this system])
@@ -206,12 +206,12 @@ AC_ARG_ENABLE(debug,
     AC_HELP_STRING([--enable-debug], [Enable debugging code and support for the -d option]),
     [ if test x$enableval = xyes; then
         debug=yes
-	CFLAGS="${USER_CFLAGS} -ggdb -std=gnu99 -Wall $wextra $wfatal_errors $wno_variadic_macros"
+        CFLAGS="${USER_CFLAGS} -ggdb -std=gnu99 -Wall $wextra $wfatal_errors $wno_variadic_macros"
 # We may also want to add:
 #         -Wformat-security -Wswitch-default -Wunused-paramter -Wpadded"
-         AC_SUBST(debug_flag)
-         AC_DEFINE([DEBUG], [1], [Enable debuging code and support for the -d option]) 
-      fi])
+        AC_SUBST(debug_flag)
+        AC_DEFINE([DEBUG], [1], [Enable debuging code and support for the -d option]) 
+    fi])
 
 
 AC_ARG_ENABLE(dmalloc,
@@ -279,24 +279,24 @@ fi
 
 
 AC_ARG_ENABLE(force-bpf,
-	AC_HELP_STRING([--enable-force-bpf], [Force using BPF for sending packets]),
-	[ AC_DEFINE([FORCE_INJECT_BPF], [1], [Force using BPF for sending packet])])
+    AC_HELP_STRING([--enable-force-bpf], [Force using BPF for sending packets]),
+    [ AC_DEFINE([FORCE_INJECT_BPF], [1], [Force using BPF for sending packet])])
 
 AC_ARG_ENABLE(force-pf, 
-	AC_HELP_STRING([--enable-force-pf], [Force using Linux's PF_PACKET for sending packets]),
-	[ AC_DEFINE([FORCE_INJECT_PF], [1], [Force using Linux's PF_PACKET for sending packets])])
+    AC_HELP_STRING([--enable-force-pf], [Force using Linux's PF_PACKET for sending packets]),
+    [ AC_DEFINE([FORCE_INJECT_PF], [1], [Force using Linux's PF_PACKET for sending packets])])
 
 AC_ARG_ENABLE(force-libdnet,
-	AC_HELP_STRING([--enable-force-libdnet], [Force using libdnet for sending packets]),
-	[ AC_DEFINE([FORCE_INJECT_LIBDNET], [1], [Force using libdnet for sending packets])])
-		
+    AC_HELP_STRING([--enable-force-libdnet], [Force using libdnet for sending packets]),
+    [ AC_DEFINE([FORCE_INJECT_LIBDNET], [1], [Force using libdnet for sending packets])])
+
 AC_ARG_ENABLE(force-inject,
-	AC_HELP_STRING([--enable-force-inject], [Force using libpcap's pcap_inject() for sending packets]),
-	[ AC_DEFINE([FORCE_INJECT_PCAP_INJECT],[1], [Force using libpcap's pcap_inject() for sending packets])])
+    AC_HELP_STRING([--enable-force-inject], [Force using libpcap's pcap_inject() for sending packets]),
+    [ AC_DEFINE([FORCE_INJECT_PCAP_INJECT],[1], [Force using libpcap's pcap_inject() for sending packets])])
 
 AC_ARG_ENABLE(force-sendpacket,
-	AC_HELP_STRING([--enable-force-sendpacket], [Force using libpcap's pcap_sendpacket() for sending packets]),
-	[ AC_DEFINE([FORCE_INJECT_PCAP_SENDPACKET], [1], [Force using libpcap's pcap_sendpacket() for sending packets])])
+    AC_HELP_STRING([--enable-force-sendpacket], [Force using libpcap's pcap_sendpacket() for sending packets]),
+    [ AC_DEFINE([FORCE_INJECT_PCAP_SENDPACKET], [1], [Force using libpcap's pcap_sendpacket() for sending packets])])
 
 dnl Dynamic link libraries
 dynamic_link=no
@@ -323,7 +323,7 @@ AC_CHECK_FUNC(inet_ntop,
     inet_ntop=no)
 
 if test "$inet_ntop" = "no" -a "$inet_pton" = "no" ; then
-	AC_MSG_ERROR([We need either inet_ntop or inet_pton])
+    AC_MSG_ERROR([We need either inet_ntop or inet_pton])
 fi
 
 AC_CHECK_FUNC(inet_addr, 
@@ -345,41 +345,38 @@ AC_ARG_WITH(libpcap,
     AC_HELP_STRING([--with-libpcap=DIR], [Use libpcap in DIR]),
     [trypcapdir=$withval])
 
-	for testdir in $trypcapdir /usr/local /opt/local /usr /wpdpack ; do 
-    	if test -f "${testdir}/include/pcap.h" -a $foundpcap = no ; then
-        	LPCAPINC="${testdir}/include/pcap.h"
-	        LPCAPINCDIR="${testdir}/include"
-	        if test $dynamic_link = yes; then
-				if test -f "${testdir}/lib64/libpcap${shrext_cmds}" ; then
-		            LPCAPLIB="-L${testdir}/lib64 -lpcap"
-				elif test -f "${testdir}/lib/libpcap${shrext_cmds}" ; then
-					LPCAPLIB="-L${testdir}/lib -lpcap"
-				else
-					AC_ERROR([Unable to find libpcap in ${testdir}])
-				fi
-	        elif test -f "${testdir}/lib64/libpcap.${libext}" ; then
-	            LPCAPLIB="${testdir}/lib64/libpcap.${libext}"
-	        elif test -f "${testdir}/lib/libpcap.${libext}" ; then
-	            LPCAPLIB="${testdir}/lib/libpcap.${libext}"
-	        elif test -f "${testdir}/lib/libwpcap.${libext}" ; then
-	            LPCAPLIB="${testdir}/lib/libwpcap.${libext}"
-				AC_DEFINE([HAVE_WINPCAP], [1], [Do we have WinPcap?])
-		 	else
-				AC_ERROR([Unable to find matching library for header file in ${testdir}])
-			fi
-        	foundpcap=$testdir
-     	fi
-	done
-
-	if test $foundpcap = no ; then
-		AC_MSG_RESULT(no)
-		AC_ERROR(libpcap not found)
-	else
-		AC_MSG_RESULT($foundpcap)
-	fi
+for testdir in $trypcapdir /usr/local /opt/local /usr /wpdpack ; do 
+    if test -f "${testdir}/include/pcap.h" -a $foundpcap = no ; then
+        LPCAPINC="${testdir}/include/pcap.h"
+        LPCAPINCDIR="${testdir}/include"
+        if test $dynamic_link = yes; then
+            if test -f "${testdir}/lib64/libpcap${shrext_cmds}" ; then
+                LPCAPLIB="-L${testdir}/lib64 -lpcap"
+            elif test -f "${testdir}/lib/libpcap${shrext_cmds}" ; then
+                LPCAPLIB="-L${testdir}/lib -lpcap"
+            else
+                AC_ERROR([Unable to find libpcap in ${testdir}])
+            fi
+        elif test -f "${testdir}/lib64/libpcap.${libext}" ; then
+            LPCAPLIB="${testdir}/lib64/libpcap.${libext}"
+        elif test -f "${testdir}/lib/libpcap.${libext}" ; then
+            LPCAPLIB="${testdir}/lib/libpcap.${libext}"
+        elif test -f "${testdir}/lib/libwpcap.${libext}" ; then
+            LPCAPLIB="${testdir}/lib/libwpcap.${libext}"
+            AC_DEFINE([HAVE_WINPCAP], [1], [Do we have WinPcap?])
+        else
+            AC_ERROR([Unable to find matching library for header file in ${testdir}])
+        fi
+        foundpcap=$testdir
+    fi
+done
 
-AC_SUBST(LPCAPINC)
-AC_SUBST(LPCAPLIB)
+if test $foundpcap = no ; then
+    AC_MSG_RESULT(no)
+    AC_ERROR(libpcap not found)
+else
+    AC_MSG_RESULT($foundpcap)
+fi
 
 dnl Checks to see what version of libpcap we've got
 OLDLIBS="$LIBS"
@@ -387,6 +384,16 @@ OLDCFLAGS="$CFLAGS -I$LPCAPINCDIR"
 LIBS="$LPCAPLIB"
 CFLAGS="$CFLAGS -I$LPCAPINCDIR"
 
+# Does libpcap require libnl?
+AC_SEARCH_LIBS([pcap_close], [pcap],
+    LPCAPLIB="$LIBS",
+    AC_ERROR([Unable to link libpcap in ${foundpcap}]),
+    -lnl)
+
+AC_SUBST(LPCAPINC)
+AC_SUBST(LPCAPLIB)
+
+
 dnl Check to see what version of libpcap
 dnl this code has been reduced a lot, but probably still could be
 dnl reduced quite a bit more if we chose too
@@ -415,6 +422,7 @@ AC_RUN_IFELSE(AC_LANG_PROGRAM([[
     libpcap_version_096=yes
 ])
 
+libpcap_ver8=no
 AC_RUN_IFELSE(AC_LANG_PROGRAM([[
 #include <string.h>
 #include <stdlib.h>
@@ -428,11 +436,11 @@ AC_RUN_IFELSE(AC_LANG_PROGRAM([[
  * or one otherwise
  */
     if (strncmp(pcap_lib_version(), PCAP_TEST, 3) >= 0)
-            exit(0);
+        exit(0);
 
     /* winpcap? */
     if (strncmp(pcap_lib_version(), "WinPcap", 7) == 0)
-	    exit(0);
+        exit(0);
 
     exit(1);
 ]]), [
@@ -441,6 +449,7 @@ AC_RUN_IFELSE(AC_LANG_PROGRAM([[
     libpcap_ver8=no
 ])
 
+libpcap_ver7=no
 AC_RUN_IFELSE(AC_LANG_PROGRAM([[
 #include <string.h>
 #include <stdlib.h>
@@ -457,7 +466,7 @@ extern const char pcap_version[[]]; /* double up since autoconf escapes things *
 
     if (strncmp(pcap_version, PCAP_TEST, 5) >= 0)
             exit(0);
-    
+
     exit(1);
 ]]), [
     libpcap_ver7=yes
@@ -465,9 +474,9 @@ extern const char pcap_version[[]]; /* double up since autoconf escapes things *
     libpcap_ver7=no
 ])
 
-if test $libpcap_ver8 = yes ; then
+if test x$libpcap_ver8 = xyes ; then
     AC_MSG_RESULT(>= 0.8.0)
-elif test $libpcap_ver7 = yes ; then
+elif test x$libpcap_ver7 = xyes ; then
     AC_MSG_RESULT(>= 0.7.2)
 else 
     AC_MSG_ERROR([Libpcap versions < 0.7.2 are not supported
@@ -475,11 +484,11 @@ else
 fi
 
 libpcap_version=unknown
-if test $libpcap_version_096 = yes ; then
+if test x$libpcap_version_096 = xyes ; then
     libpcap_version=">= 0.9.6"
-elif test $libpcap_ver8 = yes ; then
+elif test x$libpcap_ver8 = xyes ; then
     libpcap_version=">= 0.8.0"
-elif test $libcap_ver7 = yes ; then
+elif test x$libcap_ver7 = xyes ; then
     libpcap_version=">= 0.7.0"
 fi
 
@@ -493,7 +502,7 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 ]],[[
     pcap_t *p;
     char *errbuf;
-    
+
     pcap_setnonblock(p, 1, errbuf);
     exit(0);
 ]]), [
@@ -570,10 +579,10 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 #include <string.h>
 #include "$LPCAPINC"
 ]],[[
-	pcap_dumper_t *dump;
-	pcap_t *pcap;
-	FILE *foo;
-	dump = pcap_dump_fopen(pcap, foo);
+    pcap_dumper_t *dump;
+    pcap_t *pcap;
+    FILE *foo;
+    dump = pcap_dump_fopen(pcap, foo);
 ]]),[
     have_pcap_dump_fopen=yes
     AC_MSG_RESULT(yes)
@@ -586,7 +595,7 @@ if test $have_pcap_dump_fopen = yes ; then
     AC_DEFINE([HAVE_PCAP_DUMP_FOPEN], [1], 
               [Does libpcap have pcap_dump_fopen?])
 else
-	AC_MSG_NOTICE([--verbose mode requires libpcap >= 0.9.0])
+    AC_MSG_NOTICE([--verbose mode requires libpcap >= 0.9.0])
 fi
 
 have_pcap_inject=no
@@ -598,8 +607,8 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 #include <string.h>
 #include "$LPCAPINC"
 ]],[[
-	pcap_t *pcap;
-	char *buf;
+    pcap_t *pcap;
+    char *buf;
     pcap_inject(pcap, (void *)buf, 0);
 ]]),[
     have_pcap_inject=yes
@@ -610,7 +619,7 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 ])
 
 if test $have_pcap_inject = yes ; then
-	AC_DEFINE([HAVE_PCAP_INJECT], [1], [Does libpcap have pcap_inject?])
+    AC_DEFINE([HAVE_PCAP_INJECT], [1], [Does libpcap have pcap_inject?])
 fi
 
 have_pcap_sendpacket=no
@@ -622,8 +631,8 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 #include <string.h>
 #include "$LPCAPINC"
 ]],[[
-	pcap_t *pcap;
-	u_char *buf;
+    pcap_t *pcap;
+    u_char *buf;
     pcap_sendpacket(pcap, buf, 0);
 ]]),[
     have_pcap_sendpacket=yes
@@ -634,7 +643,7 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 ])
 
 if test $have_pcap_sendpacket = yes ; then
-	AC_DEFINE([HAVE_PCAP_SENDPACKET], [1], [Does libpcap have pcap_sendpacket?])
+    AC_DEFINE([HAVE_PCAP_SENDPACKET], [1], [Does libpcap have pcap_sendpacket?])
 fi
 
 have_pcap_breakloop=no
@@ -645,7 +654,7 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 #include <string.h>
 #include "$LPCAPINC"
 ]],[[
-	pcap_t *pcap;
+    pcap_t *pcap;
     pcap_sendpacket(pcap);
 ]]),[
     have_pcap_breakloop=yes
@@ -656,7 +665,7 @@ AC_LINK_IFELSE(AC_LANG_PROGRAM([[
 ])
 
 if test $have_pcap_breakloop = yes ; then
-	AC_DEFINE([HAVE_PCAP_BREAKLOOP], [1], [Does libpcap have pcap_breakloop?])
+    AC_DEFINE([HAVE_PCAP_BREAKLOOP], [1], [Does libpcap have pcap_breakloop?])
 fi
 
 
@@ -670,12 +679,12 @@ AC_TRY_COMPILE([
 #include "$LPCAPINC"
 extern char pcap_version[];
 ],[
-	printf("%s", pcap_version);
+    printf("%s", pcap_version);
 ],[
-	AC_DEFINE([HAVE_PCAP_VERSION],[1], [Does libpcap have pcap_version[]])
-	AC_MSG_RESULT(yes)
+    AC_DEFINE([HAVE_PCAP_VERSION],[1], [Does libpcap have pcap_version[]])
+    AC_MSG_RESULT(yes)
 ],[
-	AC_MSG_RESULT(no)
+    AC_MSG_RESULT(no)
 ])
 
 
@@ -686,16 +695,16 @@ if test x$foundpcap != xno -a x$have_pcap_sendpacket = xyes ; then
     # if we have pcap_sendpacket() then we can build tcpbridge on non-BPF systems
     if test x$have_bpf = xno; then
         AC_DEFINE(ENABLE_TCPBRIDGE, [1], [Compile tcpbridge])
-    	enable_tcpbridge=yes
-    	AC_MSG_NOTICE([Building tcpbridge])
-    	
+        enable_tcpbridge=yes
+        AC_MSG_NOTICE([Building tcpbridge])
+
     # BPF systems need to also have pcap_setnonblock()
     elif test x$have_pcap_setnonblock = xyes ; then
         AC_DEFINE(ENABLE_TCPBRIDGE, [1], [Compile tcpbridge])
-    	enable_tcpbridge=yes
-    	AC_MSG_NOTICE([Building tcpbridge])    
+        enable_tcpbridge=yes
+        AC_MSG_NOTICE([Building tcpbridge])
     else
-    	AC_MSG_WARN([Unable to build tcpbridge.  Try installing latest libpcap!])
+        AC_MSG_WARN([Unable to build tcpbridge.  Try installing latest libpcap!])
     fi
 fi
 AM_CONDITIONAL(COMPILE_TCPBRIDGE, [test x$enable_tcpbridge = xyes ])
@@ -711,15 +720,15 @@ AC_TRY_COMPILE([
 #include <net/ethernet.h>     /* the L2 protocols */
 #include <netinet/in.h>       /* htons */
 ],[
-	int pf_socket;
-	pf_socket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
+    int pf_socket;
+    pf_socket = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
 ],[
-	AC_DEFINE([HAVE_PF_PACKET], [1],
-		[Do we have Linux PF_PACKET socket support?])
-	AC_MSG_RESULT(yes)
-	have_pf=yes
+    AC_DEFINE([HAVE_PF_PACKET], [1],
+            [Do we have Linux PF_PACKET socket support?])
+    AC_MSG_RESULT(yes)
+    have_pf=yes
 ],[
-	AC_MSG_RESULT(no)
+    AC_MSG_RESULT(no)
 ])
 
 have_bpf=no
@@ -739,29 +748,29 @@ AC_TRY_RUN([
 
 int 
 main(int argc, char *argv[]) {
-	int fd;
-	
-	fd = open("/dev/bpf0", O_RDONLY, 0);
-	
-	/* if we opened it, we're good */
-	if (fd > 1)
-		exit(0);
-		
-	/* if we got EBUSY or permission denied it exists, so we're good */
-	if (fd < 0 && (errno == EBUSY || errno == 13))
-		exit(0);
-		
-	/* else suck, no good */
+    int fd;
+
+    fd = open("/dev/bpf0", O_RDONLY, 0);
+
+    /* if we opened it, we're good */
+    if (fd > 1)
+        exit(0);
+
+    /* if we got EBUSY or permission denied it exists, so we're good */
+    if (fd < 0 && (errno == EBUSY || errno == 13))
+        exit(0);
+
+    /* else suck, no good */
     exit(-1);
 }],
-	[
+[
     AC_DEFINE([HAVE_BPF], [1], 
-              [Do we have BPF device support?])
-	AC_MSG_RESULT(yes)
-	have_bpf=yes
-	],[
-	AC_MSG_RESULT(no)
-	])
+            [Do we have BPF device support?])
+    AC_MSG_RESULT(yes)
+    have_bpf=yes
+],[
+    AC_MSG_RESULT(no)
+])
 
 
 dnl ##################################################
@@ -774,32 +783,32 @@ enable_fragroute=no
 trydnetdir=/usr/local
 
 if test $have_cygwin == no ; then
-	AC_MSG_CHECKING(for libdnet)
-	AC_ARG_WITH(libdnet,
-	    AC_HELP_STRING([--with-libdnet=DIR], [Use libdnet in DIR]),
-	    [trydnetdir=$withval])
- 
-	for testdir in $trydnetdir /usr/local /opt/local /usr ; do 
-	   	if test -x ${testdir}/bin/dnet-config -a $founddnet = no ; then
-	           LDNETINC="`$testdir/bin/dnet-config --cflags`"
-	           LDNETLIB="`$testdir/bin/dnet-config --libs`"
-	           libdnet_version="`$testdir/bin/dnet-config --version`"
-	       	founddnet=$testdir
-	    	fi
-	done
-
-	if test $founddnet = no ; then
-		AC_MSG_RESULT(no)
-		AC_MSG_WARN([libdnet not found, disabling fragroute feature])
-	else
-		AC_MSG_RESULT($founddnet)
-		enable_fragroute=yes
-		have_libdnet=yes
-	    AC_DEFINE([HAVE_LIBDNET], [1], [Do we have libdnet?])
-	fi
+    AC_MSG_CHECKING(for libdnet)
+    AC_ARG_WITH(libdnet,
+        AC_HELP_STRING([--with-libdnet=DIR], [Use libdnet in DIR]),
+        [trydnetdir=$withval])
+
+    for testdir in $trydnetdir /usr/local /opt/local /usr ; do 
+        if test -x ${testdir}/bin/dnet-config -a $founddnet = no ; then
+            LDNETINC="`$testdir/bin/dnet-config --cflags`"
+            LDNETLIB="`$testdir/bin/dnet-config --libs`"
+            libdnet_version="`$testdir/bin/dnet-config --version`"
+            founddnet=$testdir
+        fi
+    done
+
+    if test $founddnet = no ; then
+        AC_MSG_RESULT(no)
+        AC_MSG_WARN([libdnet not found, disabling fragroute feature])
+    else
+        AC_MSG_RESULT($founddnet)
+        enable_fragroute=yes
+        have_libdnet=yes
+        AC_DEFINE([HAVE_LIBDNET], [1], [Do we have libdnet?])
+    fi
 
 else
-	AC_MSG_NOTICE([Skipping libdnet check under Cygwin for compatibility reasons])
+    AC_MSG_NOTICE([Skipping libdnet check under Cygwin for compatibility reasons])
 fi
 
 
@@ -815,8 +824,8 @@ fi
 
 dnl Make sure we have a valid packet injection mechanisim
 if test $have_bpf = no -a $have_pcap_inject = no -a $have_pcap_sendpacket = no \
-	-a $have_libdnet = no -a $have_pf = no ; then
-	AC_MSG_ERROR([Unable to find a supported method to send packets.  Please upgrade your libpcap or enable libdnet])
+    -a $have_libdnet = no -a $have_pf = no ; then
+    AC_MSG_ERROR([Unable to find a supported method to send packets.  Please upgrade your libpcap or enable libdnet])
 fi
 
 dnl Older versions of libpcap are missing some DLT types
@@ -826,7 +835,7 @@ AC_TRY_COMPILE([#include "$LPCAPINC"],
                [ int foo;
                  foo = DLT_LINUX_SLL ],
                 [ AC_DEFINE([HAVE_DLT_LINUX_SLL], [1], 
-					[Does pcap.h include a header with DLT_LINUX_SLL?])
+                            [Does pcap.h include a header with DLT_LINUX_SLL?])
                   AC_MSG_RESULT(yes)
                 ], 
                 AC_MSG_RESULT(no)
@@ -837,7 +846,7 @@ AC_TRY_COMPILE([#include "$LPCAPINC"],
                [ int foo;
                  foo = DLT_C_HDLC ],
                 [ AC_DEFINE([HAVE_DLT_C_HDLC], [1], 
-					[Does pcap.h include a header with DLT_C_HDLC?])
+                            [Does pcap.h include a header with DLT_C_HDLC?])
                   AC_MSG_RESULT(yes)
                 ],
                 AC_MSG_RESULT(no)   
@@ -862,29 +871,29 @@ AC_TRY_COMPILE([#include <sys/types.h>
 
 foundbpfheader=no
 AC_MSG_CHECKING(for libpcap bpf header)
-	for testfile in $LPCAPINCDIR/pcap/bpf.h $LPCAPINCDIR/pcap-bpf.h ; do
-    	if test -f "${testfile}" -a $foundbpfheader = no ; then
-			AC_TRY_COMPILE([
-				#include <sys/types.h>
-				#include <sys/time.h>
-				#include <stdint.h>
-				#include "$testfile"],
-			[
-				int foo;
-				foo = BPF_MAJOR_VERSION;
-			],
-			[
-				foundbpfheader=yes
-				PCAP_BPF_H_FILE=$testfile
-				AC_SUBST(PCAP_BPF_H_FILE)
-				AC_DEFINE([INCLUDE_PCAP_BPF_HEADER], [1],
-					[What is the path (if any) to the libpcap bpf header file?])
-				AC_MSG_RESULT($testfile)
-			],
-				AC_MSG_RESULT(no)
-			)
-		fi
-	done
+for testfile in $LPCAPINCDIR/pcap/bpf.h $LPCAPINCDIR/pcap-bpf.h ; do
+    if test -f "${testfile}" -a $foundbpfheader = no ; then
+        AC_TRY_COMPILE([
+            #include <sys/types.h>
+            #include <sys/time.h>
+            #include <stdint.h>
+            #include "$testfile"],
+            [
+                int foo;
+                foo = BPF_MAJOR_VERSION;
+            ],
+            [
+                foundbpfheader=yes
+                PCAP_BPF_H_FILE=$testfile
+                AC_SUBST(PCAP_BPF_H_FILE)
+                AC_DEFINE([INCLUDE_PCAP_BPF_HEADER], [1],
+                        [What is the path (if any) to the libpcap bpf header file?])
+                AC_MSG_RESULT($testfile)
+            ],
+            AC_MSG_RESULT(no)
+            )
+    fi
+done
 dnl restore LIBS & CFLAGS
 LIBS="$OLDLIBS"
 CFLAGS="$OLDCFLAGS"
@@ -899,12 +908,12 @@ AC_ARG_WITH(pcapnav-config,
     AC_HELP_STRING([--with-pcapnav-config=FILE], [Use given pcapnav-config]),
     [ AC_MSG_CHECKING(for pcapnav-config)
     if test -x $withval ; then
-	pcncfg=$withval
-	AC_MSG_RESULT($pcncfg)
+        pcncfg=$withval
+        AC_MSG_RESULT($pcncfg)
     elif test x$withval = xno ; then
-	AC_MSG_RESULT(no)
-	else
-	AC_MSG_RESULT([Can't find pcapnav-config: disabling offset jump feature])
+        AC_MSG_RESULT(no)
+    else
+        AC_MSG_RESULT([Can't find pcapnav-config: disabling offset jump feature])
     fi ],
     [ AC_PATH_PROG(pcncfg,[pcapnav-config], [no] ) ]
 )
@@ -921,8 +930,8 @@ if test $pcncfg != no ; then
 dnl Check to see what version of libpcapnav
 dnl this code has been reduced a lot, but probably still could be
 dnl reduced quite a bit more if we chose too
-        AC_MSG_CHECKING(for libpcapnav version)
-        AC_TRY_RUN([
+    AC_MSG_CHECKING(for libpcapnav version)
+    AC_TRY_RUN([
 #include <string.h>
 #define PCAPNAV_TEST "0.4"
 /* 
@@ -934,20 +943,20 @@ dnl reduced quite a bit more if we chose too
 int
 main (int argc, char *argv[])
 {
-	if (strncmp(PCAPNAV_VERSION, PCAPNAV_TEST, 3) >= 0)
-		exit(0);
-	exit(1);
-}],
-     	libpcapnav_ver=yes
-       	AC_MSG_RESULT(>= 0.4),
-       	libpcapnav_ver=no
-       	AC_MSG_RESULT(< 0.4),
-       	libpcapnav_ver=no
-       	)
+    if (strncmp(PCAPNAV_VERSION, PCAPNAV_TEST, 3) >= 0)
+        exit(0);
+    exit(1);
+}           ],
+            libpcapnav_ver=yes
+            AC_MSG_RESULT(>= 0.4),
+            libpcapnav_ver=no
+            AC_MSG_RESULT(< 0.4),
+            libpcapnav_ver=no
+    )
 
 
 if test x$libpcapnav_ver = xno ; then
-     	AC_MSG_WARN([Libpcapnav versions < 0.4 are not supported.
+    AC_MSG_WARN([Libpcapnav versions < 0.4 are not supported.
     Please upgrade to version 0.4 or better.
     Disabling offset jump feature.])
 else
@@ -972,52 +981,54 @@ AC_CACHE_VAL(unaligned_cv_fail,
                 ;;
 
         *)
-                cat >conftest.c <<EOF
-		#include <sys/types.h>
-		#include <sys/wait.h>
-		#include <stdio.h>
-                unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
-                main() {
-                unsigned int i;
-                pid_t pid;
-                int status;
-                /* avoid "core dumped" message */
-                pid = fork();
-                if (pid <  0)
-                        exit(2);
-                if (pid > 0) {
-                        /* parent */
-                        pid = waitpid(pid, &status, 0);
-                        if (pid < 0)
-                                exit(3);
-                        exit(!WIFEXITED(status));
-                }
-                /* child */
-                i = *(unsigned int *)&a[[1]];
-                printf("%d\n", i);
-                exit(0);
-                }
+        cat >conftest.c <<EOF
+        #include <sys/types.h>
+        #include <sys/wait.h>
+        #include <stdio.h>
+        unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
+        main() {
+            unsigned int i;
+            pid_t pid;
+            int status;
+            /* avoid "core dumped" message */
+            pid = fork();
+            if (pid <  0)
+                exit(2);
+            if (pid > 0) {
+                /* parent */
+                pid = waitpid(pid, &status, 0);
+                if (pid < 0)
+                        exit(3);
+                exit(!WIFEXITED(status));
+            }
+            /* child */
+            i = *(unsigned int *)&a[[1]];
+            printf("%d\n", i);
+            exit(0);
+        }
 EOF
-                ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
-                    conftest.c $LIBS >/dev/null 2>&1
-                if test ! -x conftest ; then
-                        dnl failed to compile for some reason
-                        unaligned_cv_fail=yes
-                else
-                        ./conftest >conftest.out
-                        if test ! -s conftest.out ; then
-                                unaligned_cv_fail=yes
-                        else
-                                unaligned_cv_fail=no
-                        fi
-                fi
-                rm -f conftest* core core.conftest
-                ;;
-        esac])
-    AC_MSG_RESULT($unaligned_cv_fail)
-    if test $unaligned_cv_fail = yes ; then
-            AC_DEFINE([FORCE_ALIGN], [1], [Are we strictly aligned?])
-    fi
+        ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
+            conftest.c $LIBS >/dev/null 2>&1
+        if test ! -x conftest ; then
+            dnl failed to compile for some reason
+            unaligned_cv_fail=yes
+        else
+            ./conftest >conftest.out
+            if test ! -s conftest.out ; then
+                unaligned_cv_fail=yes
+            else
+                unaligned_cv_fail=no
+            fi
+        fi
+        rm -f conftest* core core.conftest
+        ;;
+
+        esac
+    ])
+AC_MSG_RESULT($unaligned_cv_fail)
+if test $unaligned_cv_fail = yes ; then
+    AC_DEFINE([FORCE_ALIGN], [1], [Are we strictly aligned?])
+fi
 
 dnl ##################################################
 dnl # Check for tcpdump.
@@ -1033,7 +1044,7 @@ AC_ARG_WITH(tcpdump,
           AC_MSG_RESULT([Error: $withval does not exist or is not executable])
       fi ],
     [ AC_PATH_PROG(tcpdump_path, tcpdump, "no", [$PATH:/usr/sbin:/sbin:/usr/local/sbin]) ])
-           
+
 
 if test "$tcpdump_path" = "no"; then
     AC_MSG_WARN([Unable to find tcpdump.  Please specify --with-tcpdump.
@@ -1046,16 +1057,16 @@ fi
 
 AM_CONDITIONAL([ENABLE_TCPDUMP], test "$tcpdump_path" != "no" -a x$have_pcap_dump_fopen = xyes)
 if test x$tcpdump_path != xno -a x$have_pcap_dump_fopen = xyes ; then
-	AC_DEFINE([ENABLE_VERBOSE], [1], [Do we have tcpdump and pcap_dump_fopen()?])
+    AC_DEFINE([ENABLE_VERBOSE], [1], [Do we have tcpdump and pcap_dump_fopen()?])
 else
-	AC_MSG_WARN([Your version of libpcap is too old for --verbose support])
+    AC_MSG_WARN([Your version of libpcap is too old for --verbose support])
 fi
 
 dnl No 'make test' when cross compile
 
 AC_MSG_CHECKING(for 'make test' profile)
 if test "$host" != "$build" ; then
-	AC_MSG_WARN(Unable to do tests when cross-compiling)
+    AC_MSG_WARN(Unable to do tests when cross-compiling)
 fi
 
 dnl Allows user to choose which nic to use for testing purposes
@@ -1073,35 +1084,35 @@ disable_pcap_findalldevs=no
 osx_frameworks=no
 dnl these need to be dynamic based on OS
 case $host in
-	*-*-linux*)
-	nic1=eth0
-	nic2=eth0
-	AC_MSG_RESULT(Linux)
-	;;
-
-	*-*-solaris*)
-	nic1=hme0
-	nic2=hme0
-	AC_MSG_RESULT(Solaris)
-	;;
-
-	*-*-sunos*)
-	nic1=hme0
-	nic2=hme0
-	AC_MSG_RESULT(SunOS)
-	;;
-
-	*-apple-darwin*)
-	nic1=en0
-	nic2=en0
-	if test x$libpcap_version_096 = xno ; then
-    	disable_pcap_findalldevs=yes
+    *-*-linux*)
+    nic1=eth0
+    nic2=eth0
+    AC_MSG_RESULT(Linux)
+    ;;
+
+    *-*-solaris*)
+    nic1=hme0
+    nic2=hme0
+    AC_MSG_RESULT(Solaris)
+    ;;
+
+    *-*-sunos*)
+    nic1=hme0
+    nic2=hme0
+    AC_MSG_RESULT(SunOS)
+    ;;
+
+    *-apple-darwin*)
+    nic1=en0
+    nic2=en0
+    if test x$libpcap_version_096 = xno ; then
+        disable_pcap_findalldevs=yes
     fi
     AC_DEFINE([HAVE_ABSOLUTE_TIME], [1], [Have OS X UpTime()/AbsoluteTime high-precision timing])
     osx_frameworks=yes
     AC_DEFINE([HAVE_DARWIN], [1], [Building Apple/Darwin])
-	AC_MSG_RESULT(Apple OS X)
-	;;
+    AC_MSG_RESULT(Apple OS X)
+    ;;
 
     *-*-openbsd*)
     nic1=xl0
@@ -1109,17 +1120,17 @@ case $host in
     AC_MSG_RESULT(OpenBSD)
     ;;
 
-	*-*-cygwin)
-	AC_MSG_RESULT(Win32/Cygwin)
-	nic1=%0
-	nic2=%0
-	;;
-	
-	*)
-	AC_MSG_RESULT([$host is unknown!  Using first non-loopback interface])
-	nic1=%0
-	nic2=%0
-	;;
+    *-*-cygwin)
+    AC_MSG_RESULT(Win32/Cygwin)
+    nic1=%0
+    nic2=%0
+    ;;
+
+    *)
+    AC_MSG_RESULT([$host is unknown!  Using first non-loopback interface])
+    nic1=%0
+    nic2=%0
+    ;;
 esac])
 
 AM_CONDITIONAL([ENABLE_OSX_FRAMEWORKS], test "$osx_frameworks" == "yes")
@@ -1136,10 +1147,10 @@ AC_SUBST(nic2)
 
 AC_MSG_CHECKING([if it's ok to use pcap_findalldevs()])
 if test x$disable_pcap_findalldevs = xno ; then
-	AC_DEFINE([ENABLE_PCAP_FINDALLDEVS], [1], [Enable use of pcap_findalldevs()])
-	AC_MSG_RESULT(yes)
+    AC_DEFINE([ENABLE_PCAP_FINDALLDEVS], [1], [Enable use of pcap_findalldevs()])
+    AC_MSG_RESULT(yes)
 else
-	AC_MSG_RESULT(no)
+    AC_MSG_RESULT(no)
 fi
 
 dnl tcpreplay has (so far) been relying on leading-edge autogen.
@@ -1201,14 +1212,14 @@ pcap_sendpacket:            ${have_pcap_sendpacket} **
 
 
 case $host in
-	*-apple-darwin*)
-	AC_MSG_WARN([Apple OS X versions prior to 10.5 (Leopard) has a serious problem!
+    *-apple-darwin*)
+    AC_MSG_WARN([Apple OS X versions prior to 10.5 (Leopard) has a serious problem!
 Please see: http://tcpreplay.synfin.net/trac/ticket/142 for more details])
-	;;
-	
-	*-*-cygwin)
-	AC_MSG_WARN([Windows/Cygwin support is still somewhat experimental. 
+    ;;
+
+    *-*-cygwin)
+        AC_MSG_WARN([Windows/Cygwin support is still somewhat experimental. 
 Please report any bugs!	http://tcpreplay.synfin.net/trac/newticket])
-	;;
+    ;;
 esac
 

BIN
docs/._CHANGELOG


+ 14 - 1
docs/CHANGELOG

@@ -1,4 +1,17 @@
-$Id: CHANGELOG 2215 2009-02-18 04:46:51Z aturner $
+$Id: CHANGELOG 2374 2009-06-25 18:41:18Z aturner $
+
+06/25/09: Version 3.4.3
+    - Link libnl when newer versions of libpcap require it (#397)
+    - Ship m4 directory (#398)
+    - Upgrade to latest autotools scripts (#400)
+    - Fix error message when running autogen.sh (#401)
+
+05/20/2009: Version 3.4.2
+    - Added extensive IPv6 support to tcprewrite & tcpreplay-edit (#11)
+    - Add IPv6 fragroute support (#388)
+    - Add IPv6 decoding support to tcpprep (#11)
+    - Fix compile time error in err.h (#390)
+    - Add --endpoints support in tcpreplay-edit (#393)
 
 02/18/2009: Version 3.4.1
     - Sendpacket method did not match documentation (#361)

+ 5 - 1
docs/CREDIT

@@ -1,4 +1,4 @@
-$Id: CREDIT 2101 2009-01-04 22:42:57Z aturner $ 
+$Id: CREDIT 2308 2009-05-06 19:05:38Z aturner $ 
 
 tcpreplay and it's associated utilities (tcpprep, tcprewrite and flowreplay)
 were designed and written by Aaron Turner.
@@ -53,3 +53,7 @@ Jim West <jim_west@agilent.com>
 
 Bojan Smojver <bojan@rexursive.com>
    - For maintaining the RPM package and helping with portability issues
+
+Stas Grabois <sagig@radware.com>
+    - For his efforts to add IPv6 support to tcpprep and the tcpedit engine
+    - For adding IPv6 support to fragroute

+ 32 - 10
docs/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -15,8 +16,9 @@
 @SET_MAKE@
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -42,6 +44,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -203,9 +206,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  docs/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  docs/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu docs/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -223,6 +226,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -252,13 +256,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -286,6 +294,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -305,6 +314,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -313,18 +324,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -394,6 +415,7 @@ clean-docs: clean
 
 maintainer-clean-local: clean-docs
 	-rm -f web/*.html
+
 # 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:

+ 50 - 22
lib/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -17,8 +18,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -45,6 +47,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
 ARFLAGS = cru
 libstrl_a_AR = $(AR) $(ARFLAGS)
@@ -54,6 +57,7 @@ libstrl_a_OBJECTS = $(am_libstrl_a_OBJECTS)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -230,9 +234,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  lib/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  lib/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu lib/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -250,6 +254,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 clean-noinstLIBRARIES:
 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
@@ -269,21 +274,21 @@ distclean-compile:
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
@@ -306,7 +311,7 @@ tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -314,29 +319,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -357,13 +367,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -392,6 +406,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -414,6 +429,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -422,18 +439,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -471,6 +498,7 @@ uninstall-am:
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags uninstall uninstall-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:

+ 82 - 36
libopts/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -16,8 +17,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -43,14 +45,29 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_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__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
 am__installdirs = "$(DESTDIR)$(libdir)"
-libLTLIBRARIES_INSTALL = $(INSTALL)
 LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 libopts_la_LIBADD =
 am_libopts_la_OBJECTS = libopts_la-libopts.lo
@@ -63,6 +80,7 @@ libopts_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -258,9 +276,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  libopts/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  libopts/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libopts/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu libopts/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -278,23 +296,28 @@ $(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
+$(am__aclocal_m4_deps):
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
 	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
 	  if test -f $$p; then \
-	    f=$(am__strip_dir) \
-	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+	    list2="$$list2 $$p"; \
 	  else :; fi; \
-	done
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
 
 uninstall-libLTLIBRARIES:
 	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  p=$(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
 	done
 
 clean-libLTLIBRARIES:
@@ -327,31 +350,31 @@ distclean-compile:
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
 
 libopts_la-libopts.lo: libopts.c
-@am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libopts_la-libopts.lo -MD -MP -MF $(DEPDIR)/libopts_la-libopts.Tpo -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libopts_la-libopts.Tpo $(DEPDIR)/libopts_la-libopts.Plo
+@am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libopts_la-libopts.lo -MD -MP -MF $(DEPDIR)/libopts_la-libopts.Tpo -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libopts_la-libopts.Tpo $(DEPDIR)/libopts_la-libopts.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='libopts.c' object='libopts_la-libopts.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c
+@am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -371,7 +394,7 @@ tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -379,29 +402,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -422,13 +450,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -459,6 +491,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -481,6 +514,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -489,18 +524,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am: install-libLTLIBRARIES
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -539,6 +584,7 @@ uninstall-am: uninstall-libLTLIBRARIES
 	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
 	tags uninstall uninstall-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:

File diff suppressed because it is too large
+ 7357 - 0
m4/libtool.m4


+ 368 - 0
m4/ltoptions.m4

@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+  		   [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])

+ 123 - 0
m4/ltsugar.m4

@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])

+ 23 - 0
m4/ltversion.m4

@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file 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.
+
+# Generated from ltversion.in.
+
+# serial 3012 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6])
+m4_define([LT_PACKAGE_REVISION], [1.3012])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6'
+macro_revision='1.3012'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])

+ 92 - 0
m4/lt~obsolete.m4

@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file 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.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],		[AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])

+ 32 - 10
scripts/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -15,8 +16,9 @@
 @SET_MAKE@
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -42,6 +44,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -202,9 +205,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  scripts/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  scripts/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu scripts/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -222,6 +225,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 mostlyclean-libtool:
 	-rm -f *.lo
@@ -251,13 +255,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -285,6 +293,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -304,6 +313,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -312,18 +323,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -357,6 +378,7 @@ uninstall-am:
 	maintainer-clean-generic mostlyclean mostlyclean-generic \
 	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-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:

BIN
src/._Makefile.am


BIN
src/._bridge.c


BIN
src/._send_packets.c


BIN
src/._tcpbridge.c


BIN
src/._tcpbridge.h


BIN
src/._tcpprep.c


BIN
src/._tcpreplay_opts.def


BIN
src/._tree.c


+ 1 - 1
src/Makefile.am

@@ -48,7 +48,7 @@ bin_PROGRAMS += tcpbridge
 man_MANS += tcpbridge.1
 endif
 
-tcpreplay_edit_CFLAGS = $(LIBOPTS_CFLAGS) -I.. $(LNAV_CFLAGS) @LDNETINC@ -DTCPREPLAY -DTCPREPLAY_EDIT
+tcpreplay_edit_CFLAGS = $(LIBOPTS_CFLAGS) -I.. $(LNAV_CFLAGS) @LDNETINC@ -DTCPREPLAY -DTCPREPLAY_EDIT -DHAVE_CACHEFILE_SUPPORT
 tcpreplay_edit_LDADD = ./tcpedit/libtcpedit.a ./common/libcommon.a $(LIBSTRL) @LPCAPLIB@ @LDNETLIB@ $(LIBOPTS_LDADD)
 tcpreplay_edit_SOURCES = tcpreplay_edit_opts.c send_packets.c signal_handler.c tcpreplay.c sleep.c
 tcpreplay_edit_OBJECTS: tcpreplay_opts.h

+ 246 - 138
src/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -17,8 +18,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -50,9 +52,9 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = defines.h
+CONFIG_CLEAN_VPATH_FILES =
 @COMPILE_TCPBRIDGE_TRUE@am__EXEEXT_1 = tcpbridge$(EXEEXT)
 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS)
 am_tcpbridge_OBJECTS = tcpbridge-tcpbridge_opts.$(OBJEXT) \
 	tcpbridge-tcpbridge.$(OBJEXT) tcpbridge-bridge.$(OBJEXT) \
@@ -110,6 +112,7 @@ tcprewrite_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
 DEFAULT_INCLUDES = -I.@am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -131,16 +134,65 @@ RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
 	install-pdf-recursive install-ps-recursive install-recursive \
 	installcheck-recursive installdirs-recursive pdf-recursive \
 	ps-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 = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
 man1dir = $(mandir)/man1
 NROFF = nroff
 MANS = $(man_MANS)
 HEADERS = $(noinst_HEADERS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
   distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = common tcpedit fragroute
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AR = @AR@
@@ -299,7 +351,7 @@ opts_list = -L tcpedit
 man_MANS = tcpreplay.1 tcpprep.1 tcprewrite.1 tcpreplay-edit.1 \
 	$(am__append_2)
 EXTRA_DIST = tcpreplay.1 tcpprep.1 tcprewrite.1 tcpbridge.1 tcpreplay-edit.1
-tcpreplay_edit_CFLAGS = $(LIBOPTS_CFLAGS) -I.. $(LNAV_CFLAGS) @LDNETINC@ -DTCPREPLAY -DTCPREPLAY_EDIT
+tcpreplay_edit_CFLAGS = $(LIBOPTS_CFLAGS) -I.. $(LNAV_CFLAGS) @LDNETINC@ -DTCPREPLAY -DTCPREPLAY_EDIT -DHAVE_CACHEFILE_SUPPORT
 tcpreplay_edit_LDADD = ./tcpedit/libtcpedit.a ./common/libcommon.a $(LIBSTRL) @LPCAPLIB@ @LDNETLIB@ $(LIBOPTS_LDADD)
 tcpreplay_edit_SOURCES = tcpreplay_edit_opts.c send_packets.c signal_handler.c tcpreplay.c sleep.c
 tcpreplay_CFLAGS = $(LIBOPTS_CFLAGS) -I.. $(LNAV_CFLAGS) @LDNETINC@ -DTCPREPLAY
@@ -352,9 +404,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -372,6 +424,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 config.h: stamp-h1
 	@if test ! -f $@; then \
@@ -383,7 +436,7 @@ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
 	@rm -f stamp-h1
 	cd $(top_builddir) && $(SHELL) ./config.status src/config.h
 $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
-	cd $(top_srcdir) && $(AUTOHEADER)
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
 	rm -f stamp-h1
 	touch $@
 
@@ -394,31 +447,46 @@ defines.h: $(top_builddir)/config.status $(srcdir)/defines.h.in
 install-binPROGRAMS: $(bin_PROGRAMS)
 	@$(NORMAL_INSTALL)
 	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	     || test -f $$p1 \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-	  else :; fi; \
-	done
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p || test -f $$p1; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
 
 uninstall-binPROGRAMS:
 	@$(NORMAL_UNINSTALL)
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
-	done
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
 clean-binPROGRAMS:
-	@list='$(bin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  echo " rm -f $$p $$f"; \
-	  rm -f $$p $$f ; \
-	done
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 tcpbridge$(EXEEXT): $(tcpbridge_OBJECTS) $(tcpbridge_DEPENDENCIES) 
 	@rm -f tcpbridge$(EXEEXT)
 	$(tcpbridge_LINK) $(tcpbridge_OBJECTS) $(tcpbridge_LDADD) $(LIBS)
@@ -464,301 +532,301 @@ distclean-compile:
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
 
 tcpbridge-tcpbridge_opts.o: tcpbridge_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-tcpbridge_opts.o -MD -MP -MF $(DEPDIR)/tcpbridge-tcpbridge_opts.Tpo -c -o tcpbridge-tcpbridge_opts.o `test -f 'tcpbridge_opts.c' || echo '$(srcdir)/'`tcpbridge_opts.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-tcpbridge_opts.Tpo $(DEPDIR)/tcpbridge-tcpbridge_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-tcpbridge_opts.Tpo $(DEPDIR)/tcpbridge-tcpbridge_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpbridge_opts.c' object='tcpbridge-tcpbridge_opts.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-tcpbridge_opts.o `test -f 'tcpbridge_opts.c' || echo '$(srcdir)/'`tcpbridge_opts.c
 
 tcpbridge-tcpbridge_opts.obj: tcpbridge_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-tcpbridge_opts.obj -MD -MP -MF $(DEPDIR)/tcpbridge-tcpbridge_opts.Tpo -c -o tcpbridge-tcpbridge_opts.obj `if test -f 'tcpbridge_opts.c'; then $(CYGPATH_W) 'tcpbridge_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpbridge_opts.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-tcpbridge_opts.Tpo $(DEPDIR)/tcpbridge-tcpbridge_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-tcpbridge_opts.Tpo $(DEPDIR)/tcpbridge-tcpbridge_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpbridge_opts.c' object='tcpbridge-tcpbridge_opts.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-tcpbridge_opts.obj `if test -f 'tcpbridge_opts.c'; then $(CYGPATH_W) 'tcpbridge_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpbridge_opts.c'; fi`
 
 tcpbridge-tcpbridge.o: tcpbridge.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-tcpbridge.o -MD -MP -MF $(DEPDIR)/tcpbridge-tcpbridge.Tpo -c -o tcpbridge-tcpbridge.o `test -f 'tcpbridge.c' || echo '$(srcdir)/'`tcpbridge.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-tcpbridge.Tpo $(DEPDIR)/tcpbridge-tcpbridge.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-tcpbridge.Tpo $(DEPDIR)/tcpbridge-tcpbridge.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpbridge.c' object='tcpbridge-tcpbridge.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-tcpbridge.o `test -f 'tcpbridge.c' || echo '$(srcdir)/'`tcpbridge.c
 
 tcpbridge-tcpbridge.obj: tcpbridge.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-tcpbridge.obj -MD -MP -MF $(DEPDIR)/tcpbridge-tcpbridge.Tpo -c -o tcpbridge-tcpbridge.obj `if test -f 'tcpbridge.c'; then $(CYGPATH_W) 'tcpbridge.c'; else $(CYGPATH_W) '$(srcdir)/tcpbridge.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-tcpbridge.Tpo $(DEPDIR)/tcpbridge-tcpbridge.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-tcpbridge.Tpo $(DEPDIR)/tcpbridge-tcpbridge.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpbridge.c' object='tcpbridge-tcpbridge.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-tcpbridge.obj `if test -f 'tcpbridge.c'; then $(CYGPATH_W) 'tcpbridge.c'; else $(CYGPATH_W) '$(srcdir)/tcpbridge.c'; fi`
 
 tcpbridge-bridge.o: bridge.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-bridge.o -MD -MP -MF $(DEPDIR)/tcpbridge-bridge.Tpo -c -o tcpbridge-bridge.o `test -f 'bridge.c' || echo '$(srcdir)/'`bridge.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-bridge.Tpo $(DEPDIR)/tcpbridge-bridge.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-bridge.Tpo $(DEPDIR)/tcpbridge-bridge.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bridge.c' object='tcpbridge-bridge.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-bridge.o `test -f 'bridge.c' || echo '$(srcdir)/'`bridge.c
 
 tcpbridge-bridge.obj: bridge.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-bridge.obj -MD -MP -MF $(DEPDIR)/tcpbridge-bridge.Tpo -c -o tcpbridge-bridge.obj `if test -f 'bridge.c'; then $(CYGPATH_W) 'bridge.c'; else $(CYGPATH_W) '$(srcdir)/bridge.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-bridge.Tpo $(DEPDIR)/tcpbridge-bridge.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-bridge.Tpo $(DEPDIR)/tcpbridge-bridge.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bridge.c' object='tcpbridge-bridge.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-bridge.obj `if test -f 'bridge.c'; then $(CYGPATH_W) 'bridge.c'; else $(CYGPATH_W) '$(srcdir)/bridge.c'; fi`
 
 tcpbridge-send_packets.o: send_packets.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-send_packets.o -MD -MP -MF $(DEPDIR)/tcpbridge-send_packets.Tpo -c -o tcpbridge-send_packets.o `test -f 'send_packets.c' || echo '$(srcdir)/'`send_packets.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-send_packets.Tpo $(DEPDIR)/tcpbridge-send_packets.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-send_packets.Tpo $(DEPDIR)/tcpbridge-send_packets.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='send_packets.c' object='tcpbridge-send_packets.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-send_packets.o `test -f 'send_packets.c' || echo '$(srcdir)/'`send_packets.c
 
 tcpbridge-send_packets.obj: send_packets.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-send_packets.obj -MD -MP -MF $(DEPDIR)/tcpbridge-send_packets.Tpo -c -o tcpbridge-send_packets.obj `if test -f 'send_packets.c'; then $(CYGPATH_W) 'send_packets.c'; else $(CYGPATH_W) '$(srcdir)/send_packets.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-send_packets.Tpo $(DEPDIR)/tcpbridge-send_packets.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-send_packets.Tpo $(DEPDIR)/tcpbridge-send_packets.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='send_packets.c' object='tcpbridge-send_packets.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-send_packets.obj `if test -f 'send_packets.c'; then $(CYGPATH_W) 'send_packets.c'; else $(CYGPATH_W) '$(srcdir)/send_packets.c'; fi`
 
 tcpbridge-sleep.o: sleep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-sleep.o -MD -MP -MF $(DEPDIR)/tcpbridge-sleep.Tpo -c -o tcpbridge-sleep.o `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-sleep.Tpo $(DEPDIR)/tcpbridge-sleep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-sleep.Tpo $(DEPDIR)/tcpbridge-sleep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sleep.c' object='tcpbridge-sleep.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-sleep.o `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
 
 tcpbridge-sleep.obj: sleep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -MT tcpbridge-sleep.obj -MD -MP -MF $(DEPDIR)/tcpbridge-sleep.Tpo -c -o tcpbridge-sleep.obj `if test -f 'sleep.c'; then $(CYGPATH_W) 'sleep.c'; else $(CYGPATH_W) '$(srcdir)/sleep.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpbridge-sleep.Tpo $(DEPDIR)/tcpbridge-sleep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpbridge-sleep.Tpo $(DEPDIR)/tcpbridge-sleep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sleep.c' object='tcpbridge-sleep.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpbridge_CFLAGS) $(CFLAGS) -c -o tcpbridge-sleep.obj `if test -f 'sleep.c'; then $(CYGPATH_W) 'sleep.c'; else $(CYGPATH_W) '$(srcdir)/sleep.c'; fi`
 
 tcpprep-tcpprep_opts.o: tcpprep_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -MT tcpprep-tcpprep_opts.o -MD -MP -MF $(DEPDIR)/tcpprep-tcpprep_opts.Tpo -c -o tcpprep-tcpprep_opts.o `test -f 'tcpprep_opts.c' || echo '$(srcdir)/'`tcpprep_opts.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpprep-tcpprep_opts.Tpo $(DEPDIR)/tcpprep-tcpprep_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpprep-tcpprep_opts.Tpo $(DEPDIR)/tcpprep-tcpprep_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpprep_opts.c' object='tcpprep-tcpprep_opts.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -c -o tcpprep-tcpprep_opts.o `test -f 'tcpprep_opts.c' || echo '$(srcdir)/'`tcpprep_opts.c
 
 tcpprep-tcpprep_opts.obj: tcpprep_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -MT tcpprep-tcpprep_opts.obj -MD -MP -MF $(DEPDIR)/tcpprep-tcpprep_opts.Tpo -c -o tcpprep-tcpprep_opts.obj `if test -f 'tcpprep_opts.c'; then $(CYGPATH_W) 'tcpprep_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpprep_opts.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpprep-tcpprep_opts.Tpo $(DEPDIR)/tcpprep-tcpprep_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpprep-tcpprep_opts.Tpo $(DEPDIR)/tcpprep-tcpprep_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpprep_opts.c' object='tcpprep-tcpprep_opts.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -c -o tcpprep-tcpprep_opts.obj `if test -f 'tcpprep_opts.c'; then $(CYGPATH_W) 'tcpprep_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpprep_opts.c'; fi`
 
 tcpprep-tcpprep.o: tcpprep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -MT tcpprep-tcpprep.o -MD -MP -MF $(DEPDIR)/tcpprep-tcpprep.Tpo -c -o tcpprep-tcpprep.o `test -f 'tcpprep.c' || echo '$(srcdir)/'`tcpprep.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpprep-tcpprep.Tpo $(DEPDIR)/tcpprep-tcpprep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpprep-tcpprep.Tpo $(DEPDIR)/tcpprep-tcpprep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpprep.c' object='tcpprep-tcpprep.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -c -o tcpprep-tcpprep.o `test -f 'tcpprep.c' || echo '$(srcdir)/'`tcpprep.c
 
 tcpprep-tcpprep.obj: tcpprep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -MT tcpprep-tcpprep.obj -MD -MP -MF $(DEPDIR)/tcpprep-tcpprep.Tpo -c -o tcpprep-tcpprep.obj `if test -f 'tcpprep.c'; then $(CYGPATH_W) 'tcpprep.c'; else $(CYGPATH_W) '$(srcdir)/tcpprep.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpprep-tcpprep.Tpo $(DEPDIR)/tcpprep-tcpprep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpprep-tcpprep.Tpo $(DEPDIR)/tcpprep-tcpprep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpprep.c' object='tcpprep-tcpprep.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -c -o tcpprep-tcpprep.obj `if test -f 'tcpprep.c'; then $(CYGPATH_W) 'tcpprep.c'; else $(CYGPATH_W) '$(srcdir)/tcpprep.c'; fi`
 
 tcpprep-tree.o: tree.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -MT tcpprep-tree.o -MD -MP -MF $(DEPDIR)/tcpprep-tree.Tpo -c -o tcpprep-tree.o `test -f 'tree.c' || echo '$(srcdir)/'`tree.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpprep-tree.Tpo $(DEPDIR)/tcpprep-tree.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpprep-tree.Tpo $(DEPDIR)/tcpprep-tree.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tree.c' object='tcpprep-tree.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -c -o tcpprep-tree.o `test -f 'tree.c' || echo '$(srcdir)/'`tree.c
 
 tcpprep-tree.obj: tree.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -MT tcpprep-tree.obj -MD -MP -MF $(DEPDIR)/tcpprep-tree.Tpo -c -o tcpprep-tree.obj `if test -f 'tree.c'; then $(CYGPATH_W) 'tree.c'; else $(CYGPATH_W) '$(srcdir)/tree.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpprep-tree.Tpo $(DEPDIR)/tcpprep-tree.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpprep-tree.Tpo $(DEPDIR)/tcpprep-tree.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tree.c' object='tcpprep-tree.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpprep_CFLAGS) $(CFLAGS) -c -o tcpprep-tree.obj `if test -f 'tree.c'; then $(CYGPATH_W) 'tree.c'; else $(CYGPATH_W) '$(srcdir)/tree.c'; fi`
 
 tcpreplay-tcpreplay_opts.o: tcpreplay_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-tcpreplay_opts.o -MD -MP -MF $(DEPDIR)/tcpreplay-tcpreplay_opts.Tpo -c -o tcpreplay-tcpreplay_opts.o `test -f 'tcpreplay_opts.c' || echo '$(srcdir)/'`tcpreplay_opts.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-tcpreplay_opts.Tpo $(DEPDIR)/tcpreplay-tcpreplay_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-tcpreplay_opts.Tpo $(DEPDIR)/tcpreplay-tcpreplay_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay_opts.c' object='tcpreplay-tcpreplay_opts.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-tcpreplay_opts.o `test -f 'tcpreplay_opts.c' || echo '$(srcdir)/'`tcpreplay_opts.c
 
 tcpreplay-tcpreplay_opts.obj: tcpreplay_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-tcpreplay_opts.obj -MD -MP -MF $(DEPDIR)/tcpreplay-tcpreplay_opts.Tpo -c -o tcpreplay-tcpreplay_opts.obj `if test -f 'tcpreplay_opts.c'; then $(CYGPATH_W) 'tcpreplay_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay_opts.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-tcpreplay_opts.Tpo $(DEPDIR)/tcpreplay-tcpreplay_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-tcpreplay_opts.Tpo $(DEPDIR)/tcpreplay-tcpreplay_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay_opts.c' object='tcpreplay-tcpreplay_opts.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-tcpreplay_opts.obj `if test -f 'tcpreplay_opts.c'; then $(CYGPATH_W) 'tcpreplay_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay_opts.c'; fi`
 
 tcpreplay-send_packets.o: send_packets.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-send_packets.o -MD -MP -MF $(DEPDIR)/tcpreplay-send_packets.Tpo -c -o tcpreplay-send_packets.o `test -f 'send_packets.c' || echo '$(srcdir)/'`send_packets.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-send_packets.Tpo $(DEPDIR)/tcpreplay-send_packets.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-send_packets.Tpo $(DEPDIR)/tcpreplay-send_packets.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='send_packets.c' object='tcpreplay-send_packets.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-send_packets.o `test -f 'send_packets.c' || echo '$(srcdir)/'`send_packets.c
 
 tcpreplay-send_packets.obj: send_packets.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-send_packets.obj -MD -MP -MF $(DEPDIR)/tcpreplay-send_packets.Tpo -c -o tcpreplay-send_packets.obj `if test -f 'send_packets.c'; then $(CYGPATH_W) 'send_packets.c'; else $(CYGPATH_W) '$(srcdir)/send_packets.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-send_packets.Tpo $(DEPDIR)/tcpreplay-send_packets.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-send_packets.Tpo $(DEPDIR)/tcpreplay-send_packets.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='send_packets.c' object='tcpreplay-send_packets.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-send_packets.obj `if test -f 'send_packets.c'; then $(CYGPATH_W) 'send_packets.c'; else $(CYGPATH_W) '$(srcdir)/send_packets.c'; fi`
 
 tcpreplay-signal_handler.o: signal_handler.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-signal_handler.o -MD -MP -MF $(DEPDIR)/tcpreplay-signal_handler.Tpo -c -o tcpreplay-signal_handler.o `test -f 'signal_handler.c' || echo '$(srcdir)/'`signal_handler.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-signal_handler.Tpo $(DEPDIR)/tcpreplay-signal_handler.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-signal_handler.Tpo $(DEPDIR)/tcpreplay-signal_handler.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='signal_handler.c' object='tcpreplay-signal_handler.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-signal_handler.o `test -f 'signal_handler.c' || echo '$(srcdir)/'`signal_handler.c
 
 tcpreplay-signal_handler.obj: signal_handler.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-signal_handler.obj -MD -MP -MF $(DEPDIR)/tcpreplay-signal_handler.Tpo -c -o tcpreplay-signal_handler.obj `if test -f 'signal_handler.c'; then $(CYGPATH_W) 'signal_handler.c'; else $(CYGPATH_W) '$(srcdir)/signal_handler.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-signal_handler.Tpo $(DEPDIR)/tcpreplay-signal_handler.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-signal_handler.Tpo $(DEPDIR)/tcpreplay-signal_handler.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='signal_handler.c' object='tcpreplay-signal_handler.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-signal_handler.obj `if test -f 'signal_handler.c'; then $(CYGPATH_W) 'signal_handler.c'; else $(CYGPATH_W) '$(srcdir)/signal_handler.c'; fi`
 
 tcpreplay-tcpreplay.o: tcpreplay.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-tcpreplay.o -MD -MP -MF $(DEPDIR)/tcpreplay-tcpreplay.Tpo -c -o tcpreplay-tcpreplay.o `test -f 'tcpreplay.c' || echo '$(srcdir)/'`tcpreplay.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-tcpreplay.Tpo $(DEPDIR)/tcpreplay-tcpreplay.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-tcpreplay.Tpo $(DEPDIR)/tcpreplay-tcpreplay.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay.c' object='tcpreplay-tcpreplay.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-tcpreplay.o `test -f 'tcpreplay.c' || echo '$(srcdir)/'`tcpreplay.c
 
 tcpreplay-tcpreplay.obj: tcpreplay.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-tcpreplay.obj -MD -MP -MF $(DEPDIR)/tcpreplay-tcpreplay.Tpo -c -o tcpreplay-tcpreplay.obj `if test -f 'tcpreplay.c'; then $(CYGPATH_W) 'tcpreplay.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-tcpreplay.Tpo $(DEPDIR)/tcpreplay-tcpreplay.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-tcpreplay.Tpo $(DEPDIR)/tcpreplay-tcpreplay.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay.c' object='tcpreplay-tcpreplay.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-tcpreplay.obj `if test -f 'tcpreplay.c'; then $(CYGPATH_W) 'tcpreplay.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay.c'; fi`
 
 tcpreplay-sleep.o: sleep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-sleep.o -MD -MP -MF $(DEPDIR)/tcpreplay-sleep.Tpo -c -o tcpreplay-sleep.o `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-sleep.Tpo $(DEPDIR)/tcpreplay-sleep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-sleep.Tpo $(DEPDIR)/tcpreplay-sleep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sleep.c' object='tcpreplay-sleep.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-sleep.o `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
 
 tcpreplay-sleep.obj: sleep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -MT tcpreplay-sleep.obj -MD -MP -MF $(DEPDIR)/tcpreplay-sleep.Tpo -c -o tcpreplay-sleep.obj `if test -f 'sleep.c'; then $(CYGPATH_W) 'sleep.c'; else $(CYGPATH_W) '$(srcdir)/sleep.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay-sleep.Tpo $(DEPDIR)/tcpreplay-sleep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay-sleep.Tpo $(DEPDIR)/tcpreplay-sleep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sleep.c' object='tcpreplay-sleep.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_CFLAGS) $(CFLAGS) -c -o tcpreplay-sleep.obj `if test -f 'sleep.c'; then $(CYGPATH_W) 'sleep.c'; else $(CYGPATH_W) '$(srcdir)/sleep.c'; fi`
 
 tcpreplay_edit-tcpreplay_edit_opts.o: tcpreplay_edit_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-tcpreplay_edit_opts.o -MD -MP -MF $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Tpo -c -o tcpreplay_edit-tcpreplay_edit_opts.o `test -f 'tcpreplay_edit_opts.c' || echo '$(srcdir)/'`tcpreplay_edit_opts.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay_edit_opts.c' object='tcpreplay_edit-tcpreplay_edit_opts.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-tcpreplay_edit_opts.o `test -f 'tcpreplay_edit_opts.c' || echo '$(srcdir)/'`tcpreplay_edit_opts.c
 
 tcpreplay_edit-tcpreplay_edit_opts.obj: tcpreplay_edit_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-tcpreplay_edit_opts.obj -MD -MP -MF $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Tpo -c -o tcpreplay_edit-tcpreplay_edit_opts.obj `if test -f 'tcpreplay_edit_opts.c'; then $(CYGPATH_W) 'tcpreplay_edit_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay_edit_opts.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay_edit_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay_edit_opts.c' object='tcpreplay_edit-tcpreplay_edit_opts.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-tcpreplay_edit_opts.obj `if test -f 'tcpreplay_edit_opts.c'; then $(CYGPATH_W) 'tcpreplay_edit_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay_edit_opts.c'; fi`
 
 tcpreplay_edit-send_packets.o: send_packets.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-send_packets.o -MD -MP -MF $(DEPDIR)/tcpreplay_edit-send_packets.Tpo -c -o tcpreplay_edit-send_packets.o `test -f 'send_packets.c' || echo '$(srcdir)/'`send_packets.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-send_packets.Tpo $(DEPDIR)/tcpreplay_edit-send_packets.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-send_packets.Tpo $(DEPDIR)/tcpreplay_edit-send_packets.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='send_packets.c' object='tcpreplay_edit-send_packets.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-send_packets.o `test -f 'send_packets.c' || echo '$(srcdir)/'`send_packets.c
 
 tcpreplay_edit-send_packets.obj: send_packets.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-send_packets.obj -MD -MP -MF $(DEPDIR)/tcpreplay_edit-send_packets.Tpo -c -o tcpreplay_edit-send_packets.obj `if test -f 'send_packets.c'; then $(CYGPATH_W) 'send_packets.c'; else $(CYGPATH_W) '$(srcdir)/send_packets.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-send_packets.Tpo $(DEPDIR)/tcpreplay_edit-send_packets.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-send_packets.Tpo $(DEPDIR)/tcpreplay_edit-send_packets.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='send_packets.c' object='tcpreplay_edit-send_packets.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-send_packets.obj `if test -f 'send_packets.c'; then $(CYGPATH_W) 'send_packets.c'; else $(CYGPATH_W) '$(srcdir)/send_packets.c'; fi`
 
 tcpreplay_edit-signal_handler.o: signal_handler.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-signal_handler.o -MD -MP -MF $(DEPDIR)/tcpreplay_edit-signal_handler.Tpo -c -o tcpreplay_edit-signal_handler.o `test -f 'signal_handler.c' || echo '$(srcdir)/'`signal_handler.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-signal_handler.Tpo $(DEPDIR)/tcpreplay_edit-signal_handler.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-signal_handler.Tpo $(DEPDIR)/tcpreplay_edit-signal_handler.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='signal_handler.c' object='tcpreplay_edit-signal_handler.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-signal_handler.o `test -f 'signal_handler.c' || echo '$(srcdir)/'`signal_handler.c
 
 tcpreplay_edit-signal_handler.obj: signal_handler.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-signal_handler.obj -MD -MP -MF $(DEPDIR)/tcpreplay_edit-signal_handler.Tpo -c -o tcpreplay_edit-signal_handler.obj `if test -f 'signal_handler.c'; then $(CYGPATH_W) 'signal_handler.c'; else $(CYGPATH_W) '$(srcdir)/signal_handler.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-signal_handler.Tpo $(DEPDIR)/tcpreplay_edit-signal_handler.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-signal_handler.Tpo $(DEPDIR)/tcpreplay_edit-signal_handler.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='signal_handler.c' object='tcpreplay_edit-signal_handler.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-signal_handler.obj `if test -f 'signal_handler.c'; then $(CYGPATH_W) 'signal_handler.c'; else $(CYGPATH_W) '$(srcdir)/signal_handler.c'; fi`
 
 tcpreplay_edit-tcpreplay.o: tcpreplay.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-tcpreplay.o -MD -MP -MF $(DEPDIR)/tcpreplay_edit-tcpreplay.Tpo -c -o tcpreplay_edit-tcpreplay.o `test -f 'tcpreplay.c' || echo '$(srcdir)/'`tcpreplay.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-tcpreplay.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-tcpreplay.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay.c' object='tcpreplay_edit-tcpreplay.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-tcpreplay.o `test -f 'tcpreplay.c' || echo '$(srcdir)/'`tcpreplay.c
 
 tcpreplay_edit-tcpreplay.obj: tcpreplay.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-tcpreplay.obj -MD -MP -MF $(DEPDIR)/tcpreplay_edit-tcpreplay.Tpo -c -o tcpreplay_edit-tcpreplay.obj `if test -f 'tcpreplay.c'; then $(CYGPATH_W) 'tcpreplay.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-tcpreplay.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-tcpreplay.Tpo $(DEPDIR)/tcpreplay_edit-tcpreplay.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcpreplay.c' object='tcpreplay_edit-tcpreplay.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-tcpreplay.obj `if test -f 'tcpreplay.c'; then $(CYGPATH_W) 'tcpreplay.c'; else $(CYGPATH_W) '$(srcdir)/tcpreplay.c'; fi`
 
 tcpreplay_edit-sleep.o: sleep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-sleep.o -MD -MP -MF $(DEPDIR)/tcpreplay_edit-sleep.Tpo -c -o tcpreplay_edit-sleep.o `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-sleep.Tpo $(DEPDIR)/tcpreplay_edit-sleep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-sleep.Tpo $(DEPDIR)/tcpreplay_edit-sleep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sleep.c' object='tcpreplay_edit-sleep.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-sleep.o `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
 
 tcpreplay_edit-sleep.obj: sleep.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -MT tcpreplay_edit-sleep.obj -MD -MP -MF $(DEPDIR)/tcpreplay_edit-sleep.Tpo -c -o tcpreplay_edit-sleep.obj `if test -f 'sleep.c'; then $(CYGPATH_W) 'sleep.c'; else $(CYGPATH_W) '$(srcdir)/sleep.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcpreplay_edit-sleep.Tpo $(DEPDIR)/tcpreplay_edit-sleep.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcpreplay_edit-sleep.Tpo $(DEPDIR)/tcpreplay_edit-sleep.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='sleep.c' object='tcpreplay_edit-sleep.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcpreplay_edit_CFLAGS) $(CFLAGS) -c -o tcpreplay_edit-sleep.obj `if test -f 'sleep.c'; then $(CYGPATH_W) 'sleep.c'; else $(CYGPATH_W) '$(srcdir)/sleep.c'; fi`
 
 tcprewrite-tcprewrite_opts.o: tcprewrite_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -MT tcprewrite-tcprewrite_opts.o -MD -MP -MF $(DEPDIR)/tcprewrite-tcprewrite_opts.Tpo -c -o tcprewrite-tcprewrite_opts.o `test -f 'tcprewrite_opts.c' || echo '$(srcdir)/'`tcprewrite_opts.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcprewrite-tcprewrite_opts.Tpo $(DEPDIR)/tcprewrite-tcprewrite_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcprewrite-tcprewrite_opts.Tpo $(DEPDIR)/tcprewrite-tcprewrite_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcprewrite_opts.c' object='tcprewrite-tcprewrite_opts.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -c -o tcprewrite-tcprewrite_opts.o `test -f 'tcprewrite_opts.c' || echo '$(srcdir)/'`tcprewrite_opts.c
 
 tcprewrite-tcprewrite_opts.obj: tcprewrite_opts.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -MT tcprewrite-tcprewrite_opts.obj -MD -MP -MF $(DEPDIR)/tcprewrite-tcprewrite_opts.Tpo -c -o tcprewrite-tcprewrite_opts.obj `if test -f 'tcprewrite_opts.c'; then $(CYGPATH_W) 'tcprewrite_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcprewrite_opts.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcprewrite-tcprewrite_opts.Tpo $(DEPDIR)/tcprewrite-tcprewrite_opts.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcprewrite-tcprewrite_opts.Tpo $(DEPDIR)/tcprewrite-tcprewrite_opts.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcprewrite_opts.c' object='tcprewrite-tcprewrite_opts.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -c -o tcprewrite-tcprewrite_opts.obj `if test -f 'tcprewrite_opts.c'; then $(CYGPATH_W) 'tcprewrite_opts.c'; else $(CYGPATH_W) '$(srcdir)/tcprewrite_opts.c'; fi`
 
 tcprewrite-tcprewrite.o: tcprewrite.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -MT tcprewrite-tcprewrite.o -MD -MP -MF $(DEPDIR)/tcprewrite-tcprewrite.Tpo -c -o tcprewrite-tcprewrite.o `test -f 'tcprewrite.c' || echo '$(srcdir)/'`tcprewrite.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcprewrite-tcprewrite.Tpo $(DEPDIR)/tcprewrite-tcprewrite.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcprewrite-tcprewrite.Tpo $(DEPDIR)/tcprewrite-tcprewrite.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcprewrite.c' object='tcprewrite-tcprewrite.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -c -o tcprewrite-tcprewrite.o `test -f 'tcprewrite.c' || echo '$(srcdir)/'`tcprewrite.c
 
 tcprewrite-tcprewrite.obj: tcprewrite.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -MT tcprewrite-tcprewrite.obj -MD -MP -MF $(DEPDIR)/tcprewrite-tcprewrite.Tpo -c -o tcprewrite-tcprewrite.obj `if test -f 'tcprewrite.c'; then $(CYGPATH_W) 'tcprewrite.c'; else $(CYGPATH_W) '$(srcdir)/tcprewrite.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/tcprewrite-tcprewrite.Tpo $(DEPDIR)/tcprewrite-tcprewrite.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/tcprewrite-tcprewrite.Tpo $(DEPDIR)/tcprewrite-tcprewrite.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='tcprewrite.c' object='tcprewrite-tcprewrite.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tcprewrite_CFLAGS) $(CFLAGS) -c -o tcprewrite-tcprewrite.obj `if test -f 'tcprewrite.c'; then $(CYGPATH_W) 'tcprewrite.c'; else $(CYGPATH_W) '$(srcdir)/tcprewrite.c'; fi`
@@ -768,51 +836,44 @@ mostlyclean-libtool:
 
 clean-libtool:
 	-rm -rf .libs _libs
-install-man1: $(man1_MANS) $(man_MANS)
+install-man1: $(man_MANS)
 	@$(NORMAL_INSTALL)
 	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
 	done; \
-	for i in $$list; do \
-	  if test -f $$i; then file=$$i; \
-	  else file=$(srcdir)/$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
 uninstall-man1:
 	@$(NORMAL_UNINSTALL)
-	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.1*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    1*) ;; \
-	    *) ext='1' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
-	done
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	test -z "$$files" || { \
+	  echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+	  cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
 
 # This directory's subdirectories are mostly independent; you can cd
 # into them and run `make' without going through this Makefile.
@@ -838,7 +899,7 @@ $(RECURSIVE_TARGETS):
 	  else \
 	    local_target="$$target"; \
 	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
 	  || eval $$failcom; \
 	done; \
 	if test "$$dot_seen" = "no"; then \
@@ -872,16 +933,16 @@ $(RECURSIVE_CLEAN_TARGETS):
 	  else \
 	    local_target="$$target"; \
 	  fi; \
-	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
 	  || eval $$failcom; \
 	done && test -z "$$fail"
 tags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
 	done
 ctags-recursive:
 	list='$(SUBDIRS)'; for subdir in $$list; do \
-	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
 	done
 
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -896,7 +957,7 @@ tags: TAGS
 
 TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
 	  include_option=--etags-include; \
@@ -908,7 +969,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 	list='$(SUBDIRS)'; for subdir in $$list; do \
 	  if test "$$subdir" = .; then :; else \
 	    test ! -f $$subdir/TAGS || \
-	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
 	  fi; \
 	done; \
 	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
@@ -917,34 +978,52 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
+	@list='$(MANS)'; if test -n "$$list"; then \
+	  list=`for p in $$list; do \
+	    if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	    if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+	  if test -n "$$list" && \
+	    grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+	    echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+	    grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+	    echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+	    echo "       typically \`make maintainer-clean' will remove them" >&2; \
+	    exit 1; \
+	  else :; fi; \
+	else :; fi
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	list='$(DISTFILES)'; \
@@ -960,29 +1039,44 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
-	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	@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 && \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
 	      $(MAKE) $(AM_MAKEFLAGS) \
-	        top_distdir="$$top_distdir" \
-	        distdir="$$distdir/$$subdir" \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
 		am__remove_distdir=: \
 		am__skip_length_check=: \
+		am__skip_mode_fix=: \
 	        distdir) \
 	      || exit 1; \
 	  fi; \
@@ -1016,6 +1110,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -1037,6 +1132,8 @@ dvi-am:
 
 html: html-recursive
 
+html-am:
+
 info: info-recursive
 
 info-am:
@@ -1045,18 +1142,28 @@ install-data-am: install-man
 
 install-dvi: install-dvi-recursive
 
+install-dvi-am:
+
 install-exec-am: install-binPROGRAMS
 
 install-html: install-html-recursive
 
+install-html-am:
+
 install-info: install-info-recursive
 
+install-info-am:
+
 install-man: install-man1
 
 install-pdf: install-pdf-recursive
 
+install-pdf-am:
+
 install-ps: install-ps-recursive
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
@@ -1081,8 +1188,8 @@ uninstall-am: uninstall-binPROGRAMS uninstall-man
 
 uninstall-man: uninstall-man1
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
-	install-strip
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+	ctags-recursive install-am install-strip tags-recursive
 
 .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
 	all all-am check check-am clean clean-binPROGRAMS \
@@ -1144,6 +1251,7 @@ tcpbridge_OBJECTS: tcpbridge_opts.h
 tcpbridge_opts.h: tcpbridge_opts.c
 tcpbridge_opts.c: tcpbridge_opts.def tcpedit/tcpedit_opts.def
 	@AUTOGEN@ $(opts_list) tcpbridge_opts.def
+
 # 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:

+ 18 - 4
src/bridge.c

@@ -1,4 +1,4 @@
-/* $Id: bridge.c 2195 2009-02-04 21:17:45Z aturner $ */
+/* $Id: bridge.c 2281 2009-05-02 23:01:29Z aturner $ */
 
 /*
  * Copyright (c) 2001-2005 Aaron Turner.
@@ -362,6 +362,7 @@ live_callback(struct live_data_t *livedata, struct pcap_pkthdr *pkthdr,
               const u_char * nextpkt)
 {
     ipv4_hdr_t *ip_hdr = NULL;
+    ipv6_hdr_t *ip6_hdr = NULL;
     pcap_t *send = NULL;
     static u_char *pktdata = NULL;     /* full packet buffer */
     int cache_mode, retcode;
@@ -442,13 +443,26 @@ live_callback(struct live_data_t *livedata, struct pcap_pkthdr *pkthdr,
     
     /* should we skip this packet based on CIDR match? */
     if (l2proto == ETHERTYPE_IP) {
-        dbg(3, "Packet is IP");
+        dbg(3, "Packet is IPv4");
         ip_hdr = (ipv4_hdr_t *)tcpedit_l3data(livedata->tcpedit, BEFORE_PROCESS, pktdata, pkthdr->len);
 
         /* look for include or exclude CIDR match */
         if (livedata->options->xX.cidr != NULL) {
-            if (!process_xX_by_cidr(livedata->options->xX.mode, livedata->options->xX.cidr, ip_hdr)) {
-                dbg(2, "Skipping packet due to CIDR match");
+            if (!process_xX_by_cidr_ipv4(livedata->options->xX.mode, livedata->options->xX.cidr, ip_hdr)) {
+                dbg(2, "Skipping IPv4 packet due to CIDR match");
+                return (1);
+            }
+        }
+
+    }
+    else if (l2proto == ETHERTYPE_IP6) {
+        dbg(3, "Packet is IPv6");
+        ip6_hdr = (ipv6_hdr_t *)tcpedit_l3data(livedata->tcpedit, BEFORE_PROCESS, pktdata, pkthdr->len);
+
+        /* look for include or exclude CIDR match */
+        if (livedata->options->xX.cidr != NULL) {
+            if (!process_xX_by_cidr_ipv6(livedata->options->xX.mode, livedata->options->xX.cidr, ip6_hdr)) {
+                dbg(2, "Skipping IPv6 packet due to CIDR match");
                 return (1);
             }
         }

BIN
src/common/._fakepoll.c


BIN
src/common/._fakepoll.h


BIN
src/common/._sendpacket.c


+ 51 - 23
src/common/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -17,8 +18,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -46,6 +48,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
 ARFLAGS = cru
 libcommon_a_AR = $(AR) $(ARFLAGS)
@@ -66,6 +69,7 @@ libcommon_a_OBJECTS = $(am_libcommon_a_OBJECTS)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -255,9 +259,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/common/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/common/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/common/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/common/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -275,6 +279,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 clean-noinstLIBRARIES:
 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
@@ -312,21 +317,21 @@ distclean-compile:
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
@@ -349,7 +354,7 @@ tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -357,29 +362,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -400,13 +410,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -437,6 +451,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -460,6 +475,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -468,18 +485,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -502,7 +529,7 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 	clean-libtool clean-noinstLIBRARIES ctags distclean \
@@ -525,6 +552,7 @@ svn_version.c:
 	$(ECHO) 'const char *svn_version(void) {'  >> svn_version.c
 	$(ECHO) '	return SVN_Version;'			>> svn_version.c
 	$(ECHO) '}' 			      				>> svn_version.c
+
 # 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:

+ 242 - 67
src/common/cidr.c

@@ -1,4 +1,4 @@
-/* $Id: cidr.c 2074 2008-11-09 08:42:24Z aturner $ */
+/* $Id: cidr.c 2284 2009-05-03 07:24:10Z aturner $ */
 
 /*
  * Copyright (c) 2001-2004 Aaron Turner.
@@ -64,8 +64,7 @@ print_cidr(tcpr_cidr_t * mycidr)
     cidr_ptr = mycidr;
     while (cidr_ptr != NULL) {
         /* print it */
-        fprintf(stderr, "%s/%d, ",
-                get_addr2name4(cidr_ptr->network, RESOLVE),
+        fprintf(stderr, "%s/%d, ", get_cidr2name(cidr_ptr, RESOLVE),
                 cidr_ptr->masklen);
 
         /* go to the next */
@@ -106,13 +105,11 @@ add_cidr(tcpr_cidr_t ** cidrdata, tcpr_cidr_t ** newcidr)
 
     if (*cidrdata == NULL) {
         *cidrdata = *newcidr;
-    }
-    else {
+    } else {
         cidr_ptr = *cidrdata;
 
-        while (cidr_ptr->next != NULL) {
+        while (cidr_ptr->next != NULL)
             cidr_ptr = cidr_ptr->next;
-        }
 
         cidr_ptr->next = *newcidr;
     }
@@ -137,8 +134,7 @@ ip2cidr(const unsigned long ip, const int masklen)
     if (masklen < 10) {
         snprintf(mask, 1, "%d", masklen);
         strncat((char *)network, mask, 1);
-    }
-    else {
+    } else {
         snprintf(mask, 2, "%d", masklen);
         strncat((char *)network, mask, 2);
     }
@@ -192,52 +188,90 @@ cidr2cidr(char *cidr)
     unsigned int octets[4];     /* used in sscanf */
     tcpr_cidr_t *newcidr;
     char networkip[16], tempoctet[4], ebuf[EBUF_SIZE];
+    int family;
+    char* p;
 
     assert(cidr);
     assert(strlen(cidr) <= EBUF_SIZE);
 
     newcidr = new_cidr();
 
+    for (p = cidr; *p; ++p) {
+        if (*p == '#') {
+            *p = ':';
+        } else if (*p == ']') {
+            *p = 0;
+            break;
+        }
+    }
+
     /*
      * scan it, and make sure it scanned correctly, also copy over the
      * masklen
      */
     count = sscanf(cidr, "%u.%u.%u.%u/%d", &octets[0], &octets[1],
-                   &octets[2], &octets[3], &newcidr->masklen);
+        &octets[2], &octets[3], &newcidr->masklen);
+
     if (count == 4) {
         newcidr->masklen = 32;
-    } else if (count != 5) {
-        goto error;
-    }
-
-    /* masklen better be 0 =< masklen <= 32 */
-    if (newcidr->masklen > 32)
-        goto error;
+        family = AF_INET;
+    } else if (count == 5) {
+        family = AF_INET;
+    } else {
+        p = strstr(cidr, "/");
+        if (p) {
+            *p = 0;
+            ++p;
+            count = sscanf(p, "%d", &newcidr->masklen);
+        } else {
+            newcidr->masklen = 128;
+        }
 
-    /* copy in the ip address */
-    memset(networkip, '\0', 16);
-    for (count = 0; count < 4; count++) {
-        if (octets[count] > 255)
+        if (newcidr->masklen < 0 || newcidr->masklen > 128)
             goto error;
 
-        snprintf(tempoctet, sizeof(octets[count]), "%d", octets[count]);
-        strcat(networkip, tempoctet);
-        /* we don't want a '.' at the end of the last octet */
-        if (count < 3)
-            strcat(networkip, ".");
+        if (get_name2addr6(cidr, RESOLVE, &newcidr->u.network6) > 0) {
+            family = AF_INET6;
+        } else {
+            goto error;
+        }
     }
 
-    /* copy over the network address and return */
+    if (family == AF_INET) {
+        /* masklen better be 0 =< masklen <= 32 */
+        if (newcidr->masklen > 32)
+            goto error;
+
+        /* copy in the ip address */
+        memset(networkip, '\0', 16);
+        for (count = 0; count < 4; count++) {
+            if (octets[count] > 255)
+                goto error;
+
+            snprintf(tempoctet, sizeof(octets[count]), "%d", octets[count]);
+            strcat(networkip, tempoctet);
+            /* we don't want a '.' at the end of the last octet */
+            if (count < 3)
+                strcat(networkip, ".");
+        }
+
+        /* copy over the network address and return */
 #ifdef HAVE_INET_ATON
-    inet_aton(networkip, (struct in_addr *)&newcidr->network);
+        inet_aton(networkip, (struct in_addr *)&newcidr->u.network);
 #elif HAVE_INET_ADDR
-    newcidr->network = inet_addr(networkip);
+        newcidr->network = inet_addr(networkip);
 #endif
+    } else if (family == AF_INET6) {
+        /* Everything's done */
+    } else {
+        goto error;
+    }
 
+    newcidr->family = family;
     return (newcidr);
 
     /* we only get here on error parsing input */
-  error:
+error:
     memset(ebuf, '\0', EBUF_SIZE);
     strcpy(ebuf, "Unable to parse as a vaild CIDR: ");
     strlcat(ebuf, cidr, EBUF_SIZE);
@@ -245,6 +279,22 @@ cidr2cidr(char *cidr)
     return NULL;
 }
 
+static void 
+mask_cidr6(char **cidrin, char* delim)
+{
+    char *p;
+
+    if (**cidrin == '[' && *delim == ':') {
+        ++*cidrin;
+        /* make strtok happy */
+        for (p = *cidrin; *p && *p != ']'; ++p) {
+            if (*p == ':') {
+                *p = '#';
+            }
+        }
+    }
+}
+
 /**
  * parses a list of tcpr_cidr_t's input from the user which should be in the form
  * of x.x.x.x/y,x.x.x.x/y...
@@ -258,6 +308,8 @@ parse_cidr(tcpr_cidr_t ** cidrdata, char *cidrin, char *delim)
     char *network = NULL;
     char *token = NULL;
 
+    mask_cidr6(&cidrin, delim);
+
     /* first itteration of input using strtok */
     network = strtok_r(cidrin, delim, &token);
 
@@ -266,6 +318,9 @@ parse_cidr(tcpr_cidr_t ** cidrdata, char *cidrin, char *delim)
 
     /* do the same with the rest of the input */
     while (1) {
+        if (token)
+            mask_cidr6(&token, delim);
+
         network = strtok_r(NULL, delim, &token);
         /* if that was the last CIDR, then kickout */
         if (network == NULL)
@@ -288,29 +343,56 @@ parse_cidr(tcpr_cidr_t ** cidrdata, char *cidrin, char *delim)
 int
 parse_endpoints(tcpr_cidrmap_t ** cidrmap1, tcpr_cidrmap_t ** cidrmap2, const char *optarg)
 {
-#define NEWMAP_LEN 32
+#define NEWMAP_LEN (INET6_ADDRSTRLEN * 2)
     char *map = NULL, newmap[NEWMAP_LEN];
     char *token = NULL;
     char *string;
+    char *p;
 
     string = safe_strdup(optarg);
 
-    memset(newmap, '\0', NEWMAP_LEN);
-    map = strtok_r(string, ":", &token);
+    if (*string == '[') {
+        /* ipv6 mode */
+        memset(newmap, '\0', NEWMAP_LEN);
+        p = strstr(string, "]:[");
+        if (!p)
+            return 0;
+            
+        *p = 0;
+        strlcpy(newmap, "[::/0]:", NEWMAP_LEN);
+        strlcat(newmap, string, NEWMAP_LEN);
+        strlcat(newmap, "]", NEWMAP_LEN);
+        
+        if (! parse_cidr_map(cidrmap1, newmap))
+            return 0;
+
+        /* do again with the second IP */
+        memset(newmap, '\0', NEWMAP_LEN);
+        strlcpy(newmap, "[::/0]:", NEWMAP_LEN);
+        strlcat(newmap, p + 2, NEWMAP_LEN);
 
-    strlcpy(newmap, "0.0.0.0/0:", NEWMAP_LEN);
-    strlcat(newmap, map, NEWMAP_LEN);
-    if (! parse_cidr_map(cidrmap1, newmap))
-        return 0;
+        if (! parse_cidr_map(cidrmap2, newmap))
+            return 0;
+
+    } else {
+        /* ipv4 mode */
+        memset(newmap, '\0', NEWMAP_LEN);
+        map = strtok_r(string, ":", &token);
+
+        strlcpy(newmap, "0.0.0.0/0:", NEWMAP_LEN);
+        strlcat(newmap, map, NEWMAP_LEN);
+        if (! parse_cidr_map(cidrmap1, newmap))
+            return 0;
     
-    /* do again with the second IP */
-    memset(newmap, '\0', NEWMAP_LEN);
-    map = strtok_r(NULL, ":", &token);
+        /* do again with the second IP */
+        memset(newmap, '\0', NEWMAP_LEN);
+        map = strtok_r(NULL, ":", &token);
     
-    strlcpy(newmap, "0.0.0.0/0:", NEWMAP_LEN);
-    strlcat(newmap, map, NEWMAP_LEN);
-    if (! parse_cidr_map(cidrmap2, newmap))
-        return 0;
+        strlcpy(newmap, "0.0.0.0/0:", NEWMAP_LEN);
+        strlcat(newmap, map, NEWMAP_LEN);
+        if (! parse_cidr_map(cidrmap2, newmap))
+            return 0;
+    }
     
     safe_free(string);
     return 1; /* success */
@@ -320,6 +402,7 @@ parse_endpoints(tcpr_cidrmap_t ** cidrmap1, tcpr_cidrmap_t ** cidrmap2, const ch
 /**
  * parses a list of tcpr_cidrmap_t's input from the user which should be in the form
  * of x.x.x.x/y:x.x.x.x/y,...
+ * IPv6 syntax: [addr/y]:[addr/y],...
  * returns 1 for success, or returns 0 on failure
  * since we use strtok to process optarg, it gets zeroed out.
  */
@@ -369,8 +452,8 @@ parse_cidr_map(tcpr_cidrmap_t **cidrmap, const char *optarg)
         ptr->from = cidr;
         ptr->to = cidr->next;
         ptr->from->next = NULL;
-
     }
+    
     safe_free(string);
     return 1; /* success */
 }
@@ -388,8 +471,11 @@ ip_in_cidr(const tcpr_cidr_t * mycidr, const unsigned long ip)
     char netstr[20];
 #endif
     
+    if (mycidr->family != AF_INET)
+        return 0;
+
     /* always return 1 if 0.0.0.0/0 */
-    if (mycidr->masklen == 0 && mycidr->network == 0)
+    if (mycidr->masklen == 0 && mycidr->u.network == 0)
         return 1;
 
     mask = ~0;                  /* turn on all the bits */
@@ -400,12 +486,12 @@ ip_in_cidr(const tcpr_cidr_t * mycidr, const unsigned long ip)
     /* apply the mask to the network and ip */
     ipaddr = ntohl(ip) & mask;
 
-    network = htonl(mycidr->network) & mask;
+    network = htonl(mycidr->u.network) & mask;
 
 
 #ifdef DEBUG
     /* copy this for debug purposes, since it's not re-entrant */
-    strlcpy(netstr, get_addr2name4(htonl(mycidr->network), RESOLVE), 20);
+    strlcpy(netstr, get_addr2name4(htonl(mycidr->u.network), RESOLVE), 20);
 #endif
 
     /* if they're the same, then ip is in network */
@@ -415,8 +501,7 @@ ip_in_cidr(const tcpr_cidr_t * mycidr, const unsigned long ip)
             get_addr2name4(ip, RESOLVE), netstr, mycidr->masklen);
 #endif
         ret = 1;
-    }
-    else {
+    } else {
 #ifdef DEBUG
         dbgx(1, "The ip %s is not inside of %s/%d",
             get_addr2name4(ip, RESOLVE), netstr, mycidr->masklen);
@@ -427,6 +512,70 @@ ip_in_cidr(const tcpr_cidr_t * mycidr, const unsigned long ip)
 
 }
 
+static int
+ip6_addr_is_unspec(const struct tcpr_in6_addr *addr)
+{
+    return addr->tcpr_s6_addr32[0] == 0 && addr->tcpr_s6_addr32[1] == 0 &&
+      addr->tcpr_s6_addr32[2] == 0 && addr->tcpr_s6_addr32[3] == 0;
+}
+
+int
+ip6_in_cidr(const tcpr_cidr_t * mycidr, const struct tcpr_in6_addr *addr)
+{
+    int ret = 0;
+#ifdef DEBUG
+    char netstr[INET6_ADDRSTRLEN];
+#endif
+    int i, j, k;
+
+    if (mycidr->family != AF_INET6)
+        return 0;
+
+    /* always return 1 if ::/0 */
+    if (mycidr->masklen == 0 && ip6_addr_is_unspec(addr))
+        return 1;
+
+    j = mycidr->masklen / 8;
+
+    for (i = 0; i < j; i++) {
+        if (addr->tcpr_s6_addr[i] != mycidr->u.network6.tcpr_s6_addr[i]) {
+            ret = 0;
+            goto out;
+        }
+    }
+    
+    if ((k = mycidr->masklen % 8) == 0) {
+        ret = 1;
+        goto out;
+    }
+
+    k = ~0 << (8 - k);
+    i = addr->tcpr_s6_addr[j] & k;
+    j = mycidr->u.network6.tcpr_s6_addr[j] & k;
+    ret = i == j;
+out:
+
+#ifdef DEBUG
+    /* copy this for debug purposes, since it's not re-entrant */
+    strlcpy(netstr, get_addr2name6(&mycidr->u.network6, RESOLVE), INET6_ADDRSTRLEN);
+#endif
+
+    /* if they're the same, then ip is in network */
+    if (ret) {
+#ifdef DEBUG
+        dbgx(1, "The ip %s is inside of %s/%d",
+            get_addr2name6(addr, RESOLVE), netstr, mycidr->masklen);
+#endif
+    } else {
+#ifdef DEBUG
+        dbgx(1, "The ip %s is not inside of %s/%d",
+            get_addr2name6(addr, RESOLVE), netstr, mycidr->masklen);
+#endif
+    }
+    return ret;
+
+}
+
 
 /**
  * iterates over cidrdata to find if a given ip matches
@@ -441,10 +590,9 @@ check_ip_cidr(tcpr_cidr_t * cidrdata, const unsigned long ip)
     /* if we have no cidrdata, of course it isn't in there 
      * this actually should happen occasionally, so don't put an assert here
      */
-    if (cidrdata == NULL) {
+    if (cidrdata == NULL)
         return 1;
-    }
-
+        
     mycidr = cidrdata;
 
     /* loop through cidr */
@@ -455,11 +603,11 @@ check_ip_cidr(tcpr_cidr_t * cidrdata, const unsigned long ip)
             dbgx(3, "Found %s in cidr", get_addr2name4(ip, RESOLVE));
             return 1;
         }
+        
         /* check for next record */
         if (mycidr->next != NULL) {
             mycidr = mycidr->next;
-        }
-        else {
+        } else {
             break;
         }
     }
@@ -469,6 +617,42 @@ check_ip_cidr(tcpr_cidr_t * cidrdata, const unsigned long ip)
     return 0;
 }
 
+int
+check_ip6_cidr(tcpr_cidr_t * cidrdata, const struct tcpr_in6_addr *addr)
+{
+    tcpr_cidr_t *mycidr;
+
+    /* if we have no cidrdata, of course it isn't in there
+     * this actually should happen occasionally, so don't put an assert here
+     */
+    if (cidrdata == NULL) {
+        return 1;
+    }
+
+    mycidr = cidrdata;
+
+    /* loop through cidr */
+    while (1) {
+
+        /* if match, return 1 */
+        if (ip6_in_cidr(mycidr, addr)) {
+            dbgx(3, "Found %s in cidr", get_addr2name6(addr, RESOLVE));
+            return 1;
+        }
+        
+        /* check for next record */
+        if (mycidr->next != NULL) {
+            mycidr = mycidr->next;
+        } else {
+            break;
+        }
+    }
+
+    /* if we get here, no match */
+    dbgx(3, "Didn't find %s in cidr", get_addr2name6(addr, RESOLVE));
+    return 0;
+}
+
 
 /**
  * cidr2ip takes a tcpr_cidr_t and a delimiter
@@ -488,9 +672,9 @@ cidr2iplist(tcpr_cidr_t * cidr, char delim)
      * # of IP's = 2^(32-masklen)
      */
     numips = 2;
-    for (int i = 2; i <= (32 - cidr->masklen); i++) {
+    for (int i = 2; i <= (32 - cidr->masklen); i++)
         numips *= 2;
-    }
+
     size = 16 * numips;
 
     list = (char *)safe_malloc(size);
@@ -498,7 +682,7 @@ cidr2iplist(tcpr_cidr_t * cidr, char delim)
     memset(list, 0, size);
 
     /* first and last should not include network or broadcast */
-    first = ntohl(cidr->network) + 1;
+    first = ntohl(cidr->u.network) + 1;
     last = first + numips - 3;
 
     dbgx(1, "First: %u\t\tLast: %u", first, last);
@@ -518,12 +702,3 @@ cidr2iplist(tcpr_cidr_t * cidr, char delim)
 
     return list;
 }
-
-/*
- Local Variables:
- mode:c
- indent-tabs-mode:nil
- c-basic-offset:4
- End:
-*/
-

+ 10 - 1
src/common/cidr.h

@@ -1,4 +1,4 @@
-/* $Id: cidr.h 1846 2007-04-27 23:28:06Z aturner $ */
+/* $Id: cidr.h 2284 2009-05-03 07:24:10Z aturner $ */
 
 /*
  * Copyright (c) 2001-2004 Aaron Turner.
@@ -36,7 +36,11 @@
 #define __CIDR_H__
 
 struct tcpr_cidr_s {
+    int family;                 /* AF_INET or AF_INET6 */
+    union {
     u_int32_t network;
+        struct tcpr_in6_addr network6;
+    } u;
     int masklen;
     struct tcpr_cidr_s *next;
 };
@@ -52,6 +56,7 @@ typedef struct tcpr_cidrmap_s tcpr_cidrmap_t;
 
 int ip_in_cidr(const tcpr_cidr_t *, const unsigned long);
 int check_ip_cidr(tcpr_cidr_t *, const unsigned long);
+int check_ip6_cidr(tcpr_cidr_t *, const struct tcpr_in6_addr *addr);
 int parse_cidr(tcpr_cidr_t **, char *, char *delim);
 int parse_cidr_map(tcpr_cidrmap_t **, const char *);
 int parse_endpoints(tcpr_cidrmap_t **, tcpr_cidrmap_t **, const char *);
@@ -62,6 +67,10 @@ tcpr_cidrmap_t *new_cidr_map(void);
 void destroy_cidr(tcpr_cidr_t *);
 void print_cidr(tcpr_cidr_t *);
 char *cidr2iplist(tcpr_cidr_t *, char);
+
+int ip6_in_cidr(const tcpr_cidr_t * mycidr, const struct tcpr_in6_addr *addr);
+int check_ip6_cidr(tcpr_cidr_t *, const struct tcpr_in6_addr *addr);
+
 #endif
 
 /*

+ 3 - 1
src/common/err.h

@@ -1,4 +1,4 @@
-/* $Id: err.h 2100 2009-01-04 22:03:48Z aturner $ */
+/* $Id: err.h 2328 2009-05-09 04:51:35Z aturner $ */
 
 /*
  * err.h
@@ -46,6 +46,8 @@
 #ifndef _ERR_H_
 #define _ERR_H_
 
+#include <stdlib.h>
+
 #ifdef DEBUG
 extern int debug;
 #endif

+ 266 - 11
src/common/get.c

@@ -1,4 +1,4 @@
-/* $Id: get.c 2096 2009-01-04 20:48:34Z aturner $ */
+/* $Id: get.c 2335 2009-05-11 22:16:37Z aturner $ */
 
 /*
  * Copyright (c) 2001-2005 Aaron Turner.
@@ -52,6 +52,7 @@ extern int debug;
 extern const char pcap_version[];
 #endif
 
+
 /**
  * Depending on what version of libpcap/WinPcap there are different ways to get the
  * version of the libpcap/WinPcap library.  This presents a unified way to get that
@@ -243,11 +244,62 @@ get_ipv4(const u_char *pktdata, int datalen, int datalink, u_char **newbuff)
     return ip_hdr;
 }
 
+const u_char *
+get_ipv6(const u_char *pktdata, int datalen, int datalink, u_char **newbuff)
+{
+    const u_char *ip6_hdr = NULL;
+    int l2_len = 0;
+    u_int16_t proto;
+
+    assert(pktdata);
+    assert(datalen);
+    assert(*newbuff);
+
+    l2_len = get_l2len(pktdata, datalen, datalink);
+
+    /* sanity... datalen must be > l2_len + IP header len*/
+    if (l2_len + TCPR_IPV6_H > datalen) {
+        dbg(1, "get_ipv6(): Layer 2 len > total packet len, hence no IPv6 header");
+        return NULL;
+    }
+
+    proto = get_l2protocol(pktdata, datalen, datalink);
+
+    if (proto != ETHERTYPE_IP6)
+        return NULL;
+
+#ifdef FORCE_ALIGN
+    /*
+     * copy layer 3 and up to our temp packet buffer
+     * for now on, we have to edit the packetbuff because
+     * just before we send the packet, we copy the packetbuff
+     * back onto the pkt.data + l2len buffer
+     * we do all this work to prevent byte alignment issues
+     */
+    if (l2_len % 4) {
+        ip6_hdr = *newbuff;
+        memcpy(ip6_hdr, (pktdata + l2_len), (datalen - l2_len));
+    } else {
+
+        /* we don't have to do a memcpy if l2_len lands on a boundry */
+        ip6_hdr = (pktdata + l2_len);
+    }
+#else
+    /*
+     * on non-strict byte align systems, don't need to memcpy(),
+     * just point to l2len bytes into the existing buffer
+     */
+    ip6_hdr = (pktdata + l2_len);
+#endif
+
+    return ip6_hdr;
+}
+
 /**
- * returns a pointer to the layer 4 header which is just beyond the IP header
+ * returns a pointer to the layer 4 header which is just beyond the IPv4 header
  */
 void *
-get_layer4(const ipv4_hdr_t * ip_hdr)
+get_layer4_v4(const ipv4_hdr_t *ip_hdr)
 {
     void *ptr;
 
@@ -258,6 +310,166 @@ get_layer4(const ipv4_hdr_t * ip_hdr)
 }
 
 /**
+ * returns a pointer to the layer 4 header which is just beyond the IPv6 header
+ * and any exension headers or NULL when there is none as in the case of
+ * v6 Frag or ESP header.  Function is recursive.
+ */
+void *
+get_layer4_v6(const ipv6_hdr_t *ip6_hdr)
+{
+    struct tcpr_ipv6_ext_hdr_base *next, *exthdr;
+    u_int8_t proto;
+    
+    assert(ip6_hdr);
+    
+    /* jump to the end of the IPv6 header */ 
+    next = (struct tcpr_ipv6_ext_hdr_base *)((u_char *)ip6_hdr + TCPR_IPV6_H);    
+    proto = ip6_hdr->ip_nh;
+    
+    while (TRUE) {
+        dbgx(3, "Processing proto: 0x%hx", proto);
+        
+        switch (proto) {        
+        /* recurse due to v6-in-v6, need to recast next as an IPv6 Header */
+        case TCPR_IPV6_NH_IPV6:
+            dbg(3, "recursing due to v6-in-v6");
+            return get_layer4_v6((ipv6_hdr_t *)next);
+            break;
+        
+        /* loop again */            
+        case TCPR_IPV6_NH_AH:
+        case TCPR_IPV6_NH_ROUTING:
+        case TCPR_IPV6_NH_DESTOPTS:
+        case TCPR_IPV6_NH_HBH:
+            dbgx(3, "Going deeper due to extension header 0x%02X", proto);
+            exthdr = get_ipv6_next(next);
+            proto = exthdr->ip_nh;
+            next = exthdr;
+            break;
+            
+        /*
+         * Can't handle.  Unparsable IPv6 fragment/encrypted data
+         */
+        case TCPR_IPV6_NH_FRAGMENT:
+        case TCPR_IPV6_NH_ESP:
+            return NULL;
+            break;
+
+        /*
+         * no further processing, either TCP, UDP, ICMP, etc...
+         */
+        default:
+            if (proto != ip6_hdr->ip_nh) {
+                dbgx(3, "Returning byte offset of this ext header: %u", IPV6_EXTLEN_TO_BYTES(next->ip_len));
+                return (void *)((u_char *)next + IPV6_EXTLEN_TO_BYTES(next->ip_len));
+            } else {
+                dbgx(3, "%s", "Returning end of IPv6 Header");
+                return next;
+            }
+            break;
+        } /* switch */
+    } /* while */
+}
+
+
+/**
+ * returns the next payload or header of the current extention header
+ * returns NULL for none/ESP.
+ */
+void *
+get_ipv6_next(struct tcpr_ipv6_ext_hdr_base *exthdr)
+{
+    int len = 0;
+
+    assert(exthdr);
+
+    dbgx(3, "Jumping to next IPv6 header.  Processing 0x%02x", exthdr->ip_nh);
+    switch (exthdr->ip_nh) {
+    /* no further processing */
+    case TCPR_IPV6_NH_NO_NEXT:
+    case TCPR_IPV6_NH_ESP:
+        dbg(3, "No-Next or ESP... can't go any further...");
+        return NULL;
+        break;
+
+    /* 
+     * fragment header is fixed size 
+     * FIXME: Frag header has further ext headers (has a ip_nh field)
+     * but I don't support it because there's never a full L4 + payload beyond.
+     */
+    case TCPR_IPV6_NH_FRAGMENT:
+        dbg(3, "Looks like were a fragment header. Returning some frag'd data.");
+        return (void *)((u_char *)exthdr + sizeof(struct tcpr_ipv6_frag_hdr));
+        break;
+
+    /* all the rest require us to go deeper using the ip_len field */
+    case TCPR_IPV6_NH_IPV6:
+    case TCPR_IPV6_NH_ROUTING:
+    case TCPR_IPV6_NH_DESTOPTS:
+    case TCPR_IPV6_NH_HBH:
+    case TCPR_IPV6_NH_AH:
+        len = IPV6_EXTLEN_TO_BYTES(exthdr->ip_len);
+        dbgx(3, "Looks like we're an ext header (0x%hhx).  Jumping %u bytes to the next", exthdr->ip_nh, len);
+        return (void *)((u_char *)exthdr + len);
+        break;
+        
+    default:
+        dbg(3, "Must not be a v6 extension header... returning self");
+        return (void *)exthdr;
+        break;
+    }
+}
+
+/**
+ * returns the protocol of the actual layer4 header by processing through
+ * the extension headers
+ */
+u_int8_t 
+get_ipv6_l4proto(const ipv6_hdr_t *ip6_hdr)
+{
+    u_char *ptr = (u_char *)ip6_hdr + TCPR_IPV6_H; /* jump to the end of the IPv6 header */
+    u_int8_t proto;
+    struct tcpr_ipv6_ext_hdr_base *exthdr = NULL;
+    
+    proto = ip6_hdr->ip_nh;
+    assert(ip6_hdr);
+        
+    while (TRUE) {
+        dbgx(3, "Processing next proto 0x%02X", proto);
+        switch (proto) {
+            /* no further processing for IPV6 types with nothing beyond them */
+            case TCPR_IPV6_NH_FRAGMENT:
+            case TCPR_IPV6_NH_ESP:
+                dbg(3, "No-Next or ESP... can't go any further...");
+                return proto;
+                break;
+        
+            /* recurse */
+            case TCPR_IPV6_NH_IPV6:
+                dbg(3, "Recursing due to v6 in v6");
+                return get_ipv6_l4proto((ipv6_hdr_t *)ptr);
+                break;
+
+            /* loop again */            
+            case TCPR_IPV6_NH_AH:
+            case TCPR_IPV6_NH_ROUTING:
+            case TCPR_IPV6_NH_DESTOPTS:
+            case TCPR_IPV6_NH_HBH:
+                dbgx(3, "Jumping to next extension header (0x%hhx)", proto);
+                exthdr = get_ipv6_next((struct tcpr_ipv6_ext_hdr_base *)ptr);
+                proto = exthdr->ip_nh;
+                ptr = (u_char *)exthdr;
+                break;
+                
+            /* should be TCP, UDP or the like */
+            default:
+                dbgx(3, "Selecting next L4 Proto as: 0x%02x", proto);
+                return proto;
+        }
+    }    
+}
+
+/**
  * get_name2addr4()
  * stolen from LIBNET since I didn't want to have to deal with 
  * passing a libnet_t around.  Returns 0xFFFFFFFF (255.255.255.255)
@@ -335,6 +547,19 @@ get_name2addr4(const char *hostname, u_int8_t dnslookup)
     }
 }
 
+int
+get_name2addr6(const char *hostname, u_int8_t dnslookup, struct tcpr_in6_addr *addr)
+{
+    (void)dnslookup;
+
+#ifdef HAVE_INET_PTON
+    return inet_pton(AF_INET6, hostname, addr);
+#else
+#error "Unable to support get_name2addr6."
+#endif
+    return -1;
+}
+
 /**
  * Generic wrapper around inet_ntop() and inet_ntoa() depending on whichever
  * is available on your system
@@ -358,7 +583,7 @@ get_addr2name4(const u_int32_t ip, u_int8_t dnslookup)
     }
     return new_string;
 #elif defined HAVE_INET_NTOA
-    return inet_pton(&addr);
+    return inet_ntoa(&addr);
 #else
 #error "Unable to support get_addr2name4."
 #endif
@@ -368,11 +593,41 @@ get_addr2name4(const u_int32_t ip, u_int8_t dnslookup)
     }
     return new_string;
 }
-/*
- Local Variables:
- mode:c
- indent-tabs-mode:nil
- c-basic-offset:4
- End:
-*/
 
+const char *
+get_addr2name6(const struct tcpr_in6_addr *addr, u_int8_t dnslookup)
+{
+    static char *new_string = NULL;
+
+    if (new_string == NULL)
+        new_string = (char *)safe_malloc(255);
+
+    new_string[0] = '\0';
+
+#ifdef HAVE_INET_NTOP
+    if (inet_ntop(AF_INET6, addr, new_string, 255) == NULL) {
+        warn("Unable to convert addr to a string");
+        strlcpy(new_string, "", sizeof(new_string));
+    }
+    return new_string;
+#else
+#error "Unable to support get_addr2name6."
+#endif
+
+    if (dnslookup != DNS_DONT_RESOLVE) {
+        warn("Sorry, we don't support name resolution.");
+    }
+    return new_string;
+}
+
+const char *
+get_cidr2name(const tcpr_cidr_t *cidr_ptr, u_int8_t dnslookup)
+{
+    if (cidr_ptr->family == AF_INET) {
+        return get_addr2name4(cidr_ptr->u.network, dnslookup);
+    } else if (cidr_ptr->family == AF_INET6) {
+        return get_addr2name6(&cidr_ptr->u.network6, dnslookup);
+    } else {
+        return NULL;
+    }
+}

+ 14 - 2
src/common/get.h

@@ -1,4 +1,4 @@
-/* $Id: get.h 1757 2007-03-22 05:38:56Z aturner $ */
+/* $Id: get.h 2287 2009-05-03 19:31:14Z aturner $ */
 
 /*
  * Copyright (c) 2001-2005 Aaron Turner.
@@ -43,14 +43,26 @@ int get_l2len(const u_char *pktdata, const int datalen, const int datalink);
 
 u_int16_t get_l2protocol(const u_char *pktdata, const int datalen, const int datalink);
 
-void *get_layer4(const ipv4_hdr_t * ip_hdr);
+void *get_layer4_v4(const ipv4_hdr_t *ip_hdr);
+void *get_layer4_v6(const ipv6_hdr_t *ip_hdr);
+
+u_int8_t get_ipv6_l4proto(const ipv6_hdr_t *ip6_hdr);
+void *get_ipv6_next(struct tcpr_ipv6_ext_hdr_base *exthdr);
 
 const u_char *get_ipv4(const u_char *pktdata, int datalen, int datalink, u_char **newbuff);
+const u_char *get_ipv6(const u_char *pktdata, int datalen, int datalink, u_char **newbuff);
 
 u_int32_t get_name2addr4(const char *hostname, u_int8_t dnslookup);
 const char *get_addr2name4(const u_int32_t ip, u_int8_t dnslookup);
+const char *get_addr2name6(const struct tcpr_in6_addr *addr, u_int8_t dnslookup);
 const char *get_pcap_version(void);
 
+int get_name2addr6(const char *hostname, u_int8_t dnslookup, struct tcpr_in6_addr *addr);
+
+
+const char *get_cidr2name(const tcpr_cidr_t *cidr_ptr, u_int8_t dnslookup);
+
+
 #endif
 
 /*

+ 1 - 1
src/common/svn_version.c

@@ -1,4 +1,4 @@
-const char SVN_Version[] = "2229";
+const char SVN_Version[] = "2375";
 const char *svn_version(void) {
 	return SVN_Version;
 }

+ 74 - 10
src/common/xX.c

@@ -1,4 +1,4 @@
-/* $Id: xX.c 2074 2008-11-09 08:42:24Z aturner $ */
+/* $Id: xX.c 2285 2009-05-03 07:27:38Z aturner $ */
 
 /*
  * Copyright (c) 2001-2004 Aaron Turner.
@@ -41,6 +41,7 @@
 #include "config.h"
 #include "defines.h"
 #include "common.h"
+#include <stdlib.h>
 
 /**
  * returns the include_exclude_mode on success placing the CIDR or LIST in mybuf
@@ -61,18 +62,21 @@ parse_xX_str(tcpr_xX_t *xX, char *str, tcpr_bpf_t *bpf)
         if (!parse_cidr(&(xX->cidr), str, ","))
             return xXError;
         break;
+
     case 'D':                  /* dst ip */
         str = str + 2;
         out = xXDest;
         if (!parse_cidr(&(xX->cidr), str, ","))
             return xXError;
         break;
+
     case 'E':                  /* either ip */
         str = str + 2;
         out = xXEither;
         if (!parse_cidr(&(xX->cidr), str, ","))
             return xXError;
         break;
+        
     case 'F':                  /* bpf filter */
         str = str + 2;
         out = xXBPF;
@@ -83,12 +87,14 @@ parse_xX_str(tcpr_xX_t *xX, char *str, tcpr_bpf_t *bpf)
          * to compile the BPF once we open the pcap file
          */
         break;
+        
     case 'P':                  /* packet id */
         str = str + 2;
         out = xXPacket;
         if (!parse_list(&(xX->list), str))
             return xXError;
         break;
+
     case 'S':                  /* source ip */
         str = str + 2;
         out = xXSource;
@@ -96,7 +102,6 @@ parse_xX_str(tcpr_xX_t *xX, char *str, tcpr_bpf_t *bpf)
             return xXError;
         break;
 
-
     default:
         errx(-1, "Invalid -%c option: %c", xX->mode, *str);
         break;
@@ -120,7 +125,7 @@ parse_xX_str(tcpr_xX_t *xX, char *str, tcpr_bpf_t *bpf)
  * and return 1 if we should send the packet or 0 if not
  */
 int
-process_xX_by_cidr(int mode, tcpr_cidr_t * cidr, ipv4_hdr_t * ip_hdr)
+process_xX_by_cidr_ipv4(int mode, tcpr_cidr_t * cidr, ipv4_hdr_t * ip_hdr)
 {
 
     if (mode & xXExclude) {
@@ -132,12 +137,15 @@ process_xX_by_cidr(int mode, tcpr_cidr_t * cidr, ipv4_hdr_t * ip_hdr)
              */
             return check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ? DONT_SEND : SEND;
             break;
+
         case xXDest:
             return check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr)  ? DONT_SEND : SEND;
+
         case xXBoth:
             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr)  &&
                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? DONT_SEND : SEND;
             break;
+
         case xXEither:
             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr)  ||
                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? DONT_SEND : SEND;
@@ -150,13 +158,16 @@ process_xX_by_cidr(int mode, tcpr_cidr_t * cidr, ipv4_hdr_t * ip_hdr)
         case xXSource:
             return check_ip_cidr(cidr, ip_hdr->ip_src.s_addr)  ? SEND : DONT_SEND;
             break;
+
         case xXDest:
             return check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr)  ? SEND : DONT_SEND;
             break;
+
         case xXBoth:
             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr)  &&
                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? SEND : DONT_SEND;
             break;
+
         case xXEither:
             return (check_ip_cidr(cidr, ip_hdr->ip_dst.s_addr)  ||
                     check_ip_cidr(cidr, ip_hdr->ip_src.s_addr) ) ? SEND : DONT_SEND;
@@ -175,11 +186,64 @@ process_xX_by_cidr(int mode, tcpr_cidr_t * cidr, ipv4_hdr_t * ip_hdr)
 
 }
 
-/*
- Local Variables:
- mode:c
- indent-tabs-mode:nil
- c-basic-offset:4
- End:
-*/
+int
+process_xX_by_cidr_ipv6(int mode, tcpr_cidr_t * cidr, ipv6_hdr_t * ip6_hdr)
+{
 
+    if (mode & xXExclude) {
+        /* Exclude mode */
+        switch (mode ^ xXExclude) {
+        case xXSource:
+            /* note: check_ip_cidr() returns TCPR_DIR_C2S for true, TCPR_DIR_S2C for false
+             * and NOT true/false or 1/0, etc!
+             */
+            return check_ip6_cidr(cidr, &ip6_hdr->ip_src) ? DONT_SEND : SEND;
+            break;
+
+        case xXDest:
+            return check_ip6_cidr(cidr, &ip6_hdr->ip_dst)  ? DONT_SEND : SEND;
+
+        case xXBoth:
+            return (check_ip6_cidr(cidr, &ip6_hdr->ip_dst)  &&
+                    check_ip6_cidr(cidr, &ip6_hdr->ip_src) ) ? DONT_SEND : SEND;
+            break;
+
+        case xXEither:
+            return (check_ip6_cidr(cidr, &ip6_hdr->ip_dst)  ||
+                    check_ip6_cidr(cidr, &ip6_hdr->ip_src) ) ? DONT_SEND : SEND;
+            break;
+        }
+    }
+    else {
+        /* Include Mode */
+        switch (mode) {
+        case xXSource:
+            return check_ip6_cidr(cidr, &ip6_hdr->ip_src)  ? SEND : DONT_SEND;
+            break;
+
+        case xXDest:
+            return check_ip6_cidr(cidr, &ip6_hdr->ip_dst)  ? SEND : DONT_SEND;
+            break;
+
+        case xXBoth:
+            return (check_ip6_cidr(cidr, &ip6_hdr->ip_dst)  &&
+                    check_ip6_cidr(cidr, &ip6_hdr->ip_src) ) ? SEND : DONT_SEND;
+            break;
+
+        case xXEither:
+            return (check_ip6_cidr(cidr, &ip6_hdr->ip_dst)  ||
+                    check_ip6_cidr(cidr, &ip6_hdr->ip_src) ) ? SEND : DONT_SEND;
+            break;
+        }
+    }
+
+    /* total failure */
+    if (mode &xXExclude) {
+        warn("Unable to determine action in CIDR filter mode.  Default: Don't Send.");
+        return DONT_SEND;
+    } else {
+        warn("Unable to determine action in CIDR filter mode.  Default: Send.");
+        return SEND;
+    }
+
+}

+ 3 - 2
src/common/xX.h

@@ -1,4 +1,4 @@
-/* $Id: xX.h 1757 2007-03-22 05:38:56Z aturner $ */
+/* $Id: xX.h 2285 2009-05-03 07:27:38Z aturner $ */
 
 /*
  * Copyright (c) 2001-2004 Aaron Turner.
@@ -38,7 +38,8 @@
  */
 
 int parse_xX_str(tcpr_xX_t *xX, char *str, tcpr_bpf_t *bpf);
-int process_xX_by_cidr(int, tcpr_cidr_t *, ipv4_hdr_t *);
+int process_xX_by_cidr_ipv4(int, tcpr_cidr_t *, ipv4_hdr_t *);
+int process_xX_by_cidr_ipv6(int, tcpr_cidr_t *, ipv6_hdr_t *);
 
 /*
  * Include/Exclude (xXmode) values

+ 3 - 0
src/defines.h

@@ -210,6 +210,9 @@ enum tcpprep_mode {
 #endif
 #endif
 
+/* convert IPv6 Extention Header Len value to bytes */
+#define IPV6_EXTLEN_TO_BYTES(x) ((x * 4) + 8)
+
 #ifndef HAVE_UINT8_T
 typedef u_int8_t uint8_t
 typedef u_int16_t uint16_t

+ 3 - 0
src/defines.h.in

@@ -210,6 +210,9 @@ enum tcpprep_mode {
 #endif
 #endif
 
+/* convert IPv6 Extention Header Len value to bytes */
+#define IPV6_EXTLEN_TO_BYTES(x) ((x * 4) + 8)
+
 #ifndef HAVE_UINT8_T
 typedef u_int8_t uint8_t
 typedef u_int16_t uint16_t

BIN
src/fragroute/._argv.c


BIN
src/fragroute/._mod_ip_chaff.c


BIN
src/fragroute/._mod_ip_tos.c


BIN
src/fragroute/._mod_ip_ttl.c


BIN
src/fragroute/._mod_order.c


BIN
src/fragroute/._mod_print.c


BIN
src/fragroute/._mod_tcp_chaff.c


BIN
src/fragroute/._randutil.c


+ 3 - 2
src/fragroute/Makefile.am

@@ -3,14 +3,15 @@ libfragroute_a_SOURCES = fragroute.c bget.c mod.c pkt.c argv.c \
 						 randutil.c mod_delay.c mod_drop.c mod_dup.c \
 						 mod_echo.c mod_ip_chaff.c mod_ip_frag.c mod_ip_opt.c \
 						 mod_ip_ttl.c mod_ip_tos.c mod_order.c mod_print.c \
-						 mod_tcp_chaff.c mod_tcp_opt.c mod_tcp_seg.c
+						 mod_tcp_chaff.c mod_tcp_opt.c mod_tcp_seg.c \
+						 iputil.c mod_ip6_opt.c mod_ip6_qos.c
 
 
 libfragroute_a_CFLAGS = -I.. -I../.. @LDNETINC@
 
 # libfragroute_a_LIBS = @LDNETLIB@
 
-noinst_HEADERS = bget.h mod.h pkt.h randutil.h fragroute.h argv.h \
+noinst_HEADERS = bget.h mod.h pkt.h randutil.h iputil.h fragroute.h argv.h \
 				 LICENSE README
 
 MOSTLYCLEANFILES = *~

+ 142 - 65
src/fragroute/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -17,8 +18,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -45,6 +47,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
 ARFLAGS = cru
 libfragroute_a_AR = $(AR) $(ARFLAGS)
@@ -66,11 +69,15 @@ am_libfragroute_a_OBJECTS = libfragroute_a-fragroute.$(OBJEXT) \
 	libfragroute_a-mod_print.$(OBJEXT) \
 	libfragroute_a-mod_tcp_chaff.$(OBJEXT) \
 	libfragroute_a-mod_tcp_opt.$(OBJEXT) \
-	libfragroute_a-mod_tcp_seg.$(OBJEXT)
+	libfragroute_a-mod_tcp_seg.$(OBJEXT) \
+	libfragroute_a-iputil.$(OBJEXT) \
+	libfragroute_a-mod_ip6_opt.$(OBJEXT) \
+	libfragroute_a-mod_ip6_qos.$(OBJEXT)
 libfragroute_a_OBJECTS = $(am_libfragroute_a_OBJECTS)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -234,12 +241,13 @@ libfragroute_a_SOURCES = fragroute.c bget.c mod.c pkt.c argv.c \
 						 randutil.c mod_delay.c mod_drop.c mod_dup.c \
 						 mod_echo.c mod_ip_chaff.c mod_ip_frag.c mod_ip_opt.c \
 						 mod_ip_ttl.c mod_ip_tos.c mod_order.c mod_print.c \
-						 mod_tcp_chaff.c mod_tcp_opt.c mod_tcp_seg.c
+						 mod_tcp_chaff.c mod_tcp_opt.c mod_tcp_seg.c \
+						 iputil.c mod_ip6_opt.c mod_ip6_qos.c
 
 libfragroute_a_CFLAGS = -I.. -I../.. @LDNETINC@
 
 # libfragroute_a_LIBS = @LDNETLIB@
-noinst_HEADERS = bget.h mod.h pkt.h randutil.h fragroute.h argv.h \
+noinst_HEADERS = bget.h mod.h pkt.h randutil.h iputil.h fragroute.h argv.h \
 				 LICENSE README
 
 MOSTLYCLEANFILES = *~
@@ -257,9 +265,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/fragroute/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/fragroute/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/fragroute/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/fragroute/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -277,6 +285,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 clean-noinstLIBRARIES:
 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
@@ -294,11 +303,14 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-argv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-bget.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-fragroute.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-iputil.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_delay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_drop.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_dup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_echo.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_ip6_opt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_ip6_qos.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_ip_chaff.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_ip_frag.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libfragroute_a-mod_ip_opt.Po@am__quote@
@@ -314,305 +326,347 @@ distclean-compile:
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
 
 libfragroute_a-fragroute.o: fragroute.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-fragroute.o -MD -MP -MF $(DEPDIR)/libfragroute_a-fragroute.Tpo -c -o libfragroute_a-fragroute.o `test -f 'fragroute.c' || echo '$(srcdir)/'`fragroute.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-fragroute.Tpo $(DEPDIR)/libfragroute_a-fragroute.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-fragroute.Tpo $(DEPDIR)/libfragroute_a-fragroute.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fragroute.c' object='libfragroute_a-fragroute.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-fragroute.o `test -f 'fragroute.c' || echo '$(srcdir)/'`fragroute.c
 
 libfragroute_a-fragroute.obj: fragroute.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-fragroute.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-fragroute.Tpo -c -o libfragroute_a-fragroute.obj `if test -f 'fragroute.c'; then $(CYGPATH_W) 'fragroute.c'; else $(CYGPATH_W) '$(srcdir)/fragroute.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-fragroute.Tpo $(DEPDIR)/libfragroute_a-fragroute.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-fragroute.Tpo $(DEPDIR)/libfragroute_a-fragroute.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fragroute.c' object='libfragroute_a-fragroute.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-fragroute.obj `if test -f 'fragroute.c'; then $(CYGPATH_W) 'fragroute.c'; else $(CYGPATH_W) '$(srcdir)/fragroute.c'; fi`
 
 libfragroute_a-bget.o: bget.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-bget.o -MD -MP -MF $(DEPDIR)/libfragroute_a-bget.Tpo -c -o libfragroute_a-bget.o `test -f 'bget.c' || echo '$(srcdir)/'`bget.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-bget.Tpo $(DEPDIR)/libfragroute_a-bget.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-bget.Tpo $(DEPDIR)/libfragroute_a-bget.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bget.c' object='libfragroute_a-bget.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-bget.o `test -f 'bget.c' || echo '$(srcdir)/'`bget.c
 
 libfragroute_a-bget.obj: bget.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-bget.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-bget.Tpo -c -o libfragroute_a-bget.obj `if test -f 'bget.c'; then $(CYGPATH_W) 'bget.c'; else $(CYGPATH_W) '$(srcdir)/bget.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-bget.Tpo $(DEPDIR)/libfragroute_a-bget.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-bget.Tpo $(DEPDIR)/libfragroute_a-bget.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bget.c' object='libfragroute_a-bget.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-bget.obj `if test -f 'bget.c'; then $(CYGPATH_W) 'bget.c'; else $(CYGPATH_W) '$(srcdir)/bget.c'; fi`
 
 libfragroute_a-mod.o: mod.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod.Tpo -c -o libfragroute_a-mod.o `test -f 'mod.c' || echo '$(srcdir)/'`mod.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod.Tpo $(DEPDIR)/libfragroute_a-mod.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod.Tpo $(DEPDIR)/libfragroute_a-mod.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod.c' object='libfragroute_a-mod.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod.o `test -f 'mod.c' || echo '$(srcdir)/'`mod.c
 
 libfragroute_a-mod.obj: mod.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod.Tpo -c -o libfragroute_a-mod.obj `if test -f 'mod.c'; then $(CYGPATH_W) 'mod.c'; else $(CYGPATH_W) '$(srcdir)/mod.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod.Tpo $(DEPDIR)/libfragroute_a-mod.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod.Tpo $(DEPDIR)/libfragroute_a-mod.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod.c' object='libfragroute_a-mod.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod.obj `if test -f 'mod.c'; then $(CYGPATH_W) 'mod.c'; else $(CYGPATH_W) '$(srcdir)/mod.c'; fi`
 
 libfragroute_a-pkt.o: pkt.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-pkt.o -MD -MP -MF $(DEPDIR)/libfragroute_a-pkt.Tpo -c -o libfragroute_a-pkt.o `test -f 'pkt.c' || echo '$(srcdir)/'`pkt.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-pkt.Tpo $(DEPDIR)/libfragroute_a-pkt.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-pkt.Tpo $(DEPDIR)/libfragroute_a-pkt.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pkt.c' object='libfragroute_a-pkt.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-pkt.o `test -f 'pkt.c' || echo '$(srcdir)/'`pkt.c
 
 libfragroute_a-pkt.obj: pkt.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-pkt.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-pkt.Tpo -c -o libfragroute_a-pkt.obj `if test -f 'pkt.c'; then $(CYGPATH_W) 'pkt.c'; else $(CYGPATH_W) '$(srcdir)/pkt.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-pkt.Tpo $(DEPDIR)/libfragroute_a-pkt.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-pkt.Tpo $(DEPDIR)/libfragroute_a-pkt.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pkt.c' object='libfragroute_a-pkt.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-pkt.obj `if test -f 'pkt.c'; then $(CYGPATH_W) 'pkt.c'; else $(CYGPATH_W) '$(srcdir)/pkt.c'; fi`
 
 libfragroute_a-argv.o: argv.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-argv.o -MD -MP -MF $(DEPDIR)/libfragroute_a-argv.Tpo -c -o libfragroute_a-argv.o `test -f 'argv.c' || echo '$(srcdir)/'`argv.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-argv.Tpo $(DEPDIR)/libfragroute_a-argv.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-argv.Tpo $(DEPDIR)/libfragroute_a-argv.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='argv.c' object='libfragroute_a-argv.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-argv.o `test -f 'argv.c' || echo '$(srcdir)/'`argv.c
 
 libfragroute_a-argv.obj: argv.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-argv.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-argv.Tpo -c -o libfragroute_a-argv.obj `if test -f 'argv.c'; then $(CYGPATH_W) 'argv.c'; else $(CYGPATH_W) '$(srcdir)/argv.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-argv.Tpo $(DEPDIR)/libfragroute_a-argv.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-argv.Tpo $(DEPDIR)/libfragroute_a-argv.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='argv.c' object='libfragroute_a-argv.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-argv.obj `if test -f 'argv.c'; then $(CYGPATH_W) 'argv.c'; else $(CYGPATH_W) '$(srcdir)/argv.c'; fi`
 
 libfragroute_a-randutil.o: randutil.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-randutil.o -MD -MP -MF $(DEPDIR)/libfragroute_a-randutil.Tpo -c -o libfragroute_a-randutil.o `test -f 'randutil.c' || echo '$(srcdir)/'`randutil.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-randutil.Tpo $(DEPDIR)/libfragroute_a-randutil.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-randutil.Tpo $(DEPDIR)/libfragroute_a-randutil.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='randutil.c' object='libfragroute_a-randutil.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-randutil.o `test -f 'randutil.c' || echo '$(srcdir)/'`randutil.c
 
 libfragroute_a-randutil.obj: randutil.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-randutil.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-randutil.Tpo -c -o libfragroute_a-randutil.obj `if test -f 'randutil.c'; then $(CYGPATH_W) 'randutil.c'; else $(CYGPATH_W) '$(srcdir)/randutil.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-randutil.Tpo $(DEPDIR)/libfragroute_a-randutil.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-randutil.Tpo $(DEPDIR)/libfragroute_a-randutil.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='randutil.c' object='libfragroute_a-randutil.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-randutil.obj `if test -f 'randutil.c'; then $(CYGPATH_W) 'randutil.c'; else $(CYGPATH_W) '$(srcdir)/randutil.c'; fi`
 
 libfragroute_a-mod_delay.o: mod_delay.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_delay.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_delay.Tpo -c -o libfragroute_a-mod_delay.o `test -f 'mod_delay.c' || echo '$(srcdir)/'`mod_delay.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_delay.Tpo $(DEPDIR)/libfragroute_a-mod_delay.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_delay.Tpo $(DEPDIR)/libfragroute_a-mod_delay.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_delay.c' object='libfragroute_a-mod_delay.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_delay.o `test -f 'mod_delay.c' || echo '$(srcdir)/'`mod_delay.c
 
 libfragroute_a-mod_delay.obj: mod_delay.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_delay.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_delay.Tpo -c -o libfragroute_a-mod_delay.obj `if test -f 'mod_delay.c'; then $(CYGPATH_W) 'mod_delay.c'; else $(CYGPATH_W) '$(srcdir)/mod_delay.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_delay.Tpo $(DEPDIR)/libfragroute_a-mod_delay.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_delay.Tpo $(DEPDIR)/libfragroute_a-mod_delay.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_delay.c' object='libfragroute_a-mod_delay.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_delay.obj `if test -f 'mod_delay.c'; then $(CYGPATH_W) 'mod_delay.c'; else $(CYGPATH_W) '$(srcdir)/mod_delay.c'; fi`
 
 libfragroute_a-mod_drop.o: mod_drop.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_drop.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_drop.Tpo -c -o libfragroute_a-mod_drop.o `test -f 'mod_drop.c' || echo '$(srcdir)/'`mod_drop.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_drop.Tpo $(DEPDIR)/libfragroute_a-mod_drop.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_drop.Tpo $(DEPDIR)/libfragroute_a-mod_drop.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_drop.c' object='libfragroute_a-mod_drop.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_drop.o `test -f 'mod_drop.c' || echo '$(srcdir)/'`mod_drop.c
 
 libfragroute_a-mod_drop.obj: mod_drop.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_drop.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_drop.Tpo -c -o libfragroute_a-mod_drop.obj `if test -f 'mod_drop.c'; then $(CYGPATH_W) 'mod_drop.c'; else $(CYGPATH_W) '$(srcdir)/mod_drop.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_drop.Tpo $(DEPDIR)/libfragroute_a-mod_drop.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_drop.Tpo $(DEPDIR)/libfragroute_a-mod_drop.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_drop.c' object='libfragroute_a-mod_drop.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_drop.obj `if test -f 'mod_drop.c'; then $(CYGPATH_W) 'mod_drop.c'; else $(CYGPATH_W) '$(srcdir)/mod_drop.c'; fi`
 
 libfragroute_a-mod_dup.o: mod_dup.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_dup.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_dup.Tpo -c -o libfragroute_a-mod_dup.o `test -f 'mod_dup.c' || echo '$(srcdir)/'`mod_dup.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_dup.Tpo $(DEPDIR)/libfragroute_a-mod_dup.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_dup.Tpo $(DEPDIR)/libfragroute_a-mod_dup.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_dup.c' object='libfragroute_a-mod_dup.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_dup.o `test -f 'mod_dup.c' || echo '$(srcdir)/'`mod_dup.c
 
 libfragroute_a-mod_dup.obj: mod_dup.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_dup.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_dup.Tpo -c -o libfragroute_a-mod_dup.obj `if test -f 'mod_dup.c'; then $(CYGPATH_W) 'mod_dup.c'; else $(CYGPATH_W) '$(srcdir)/mod_dup.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_dup.Tpo $(DEPDIR)/libfragroute_a-mod_dup.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_dup.Tpo $(DEPDIR)/libfragroute_a-mod_dup.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_dup.c' object='libfragroute_a-mod_dup.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_dup.obj `if test -f 'mod_dup.c'; then $(CYGPATH_W) 'mod_dup.c'; else $(CYGPATH_W) '$(srcdir)/mod_dup.c'; fi`
 
 libfragroute_a-mod_echo.o: mod_echo.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_echo.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_echo.Tpo -c -o libfragroute_a-mod_echo.o `test -f 'mod_echo.c' || echo '$(srcdir)/'`mod_echo.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_echo.Tpo $(DEPDIR)/libfragroute_a-mod_echo.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_echo.Tpo $(DEPDIR)/libfragroute_a-mod_echo.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_echo.c' object='libfragroute_a-mod_echo.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_echo.o `test -f 'mod_echo.c' || echo '$(srcdir)/'`mod_echo.c
 
 libfragroute_a-mod_echo.obj: mod_echo.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_echo.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_echo.Tpo -c -o libfragroute_a-mod_echo.obj `if test -f 'mod_echo.c'; then $(CYGPATH_W) 'mod_echo.c'; else $(CYGPATH_W) '$(srcdir)/mod_echo.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_echo.Tpo $(DEPDIR)/libfragroute_a-mod_echo.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_echo.Tpo $(DEPDIR)/libfragroute_a-mod_echo.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_echo.c' object='libfragroute_a-mod_echo.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_echo.obj `if test -f 'mod_echo.c'; then $(CYGPATH_W) 'mod_echo.c'; else $(CYGPATH_W) '$(srcdir)/mod_echo.c'; fi`
 
 libfragroute_a-mod_ip_chaff.o: mod_ip_chaff.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_chaff.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_chaff.Tpo -c -o libfragroute_a-mod_ip_chaff.o `test -f 'mod_ip_chaff.c' || echo '$(srcdir)/'`mod_ip_chaff.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_ip_chaff.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_ip_chaff.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_chaff.c' object='libfragroute_a-mod_ip_chaff.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_chaff.o `test -f 'mod_ip_chaff.c' || echo '$(srcdir)/'`mod_ip_chaff.c
 
 libfragroute_a-mod_ip_chaff.obj: mod_ip_chaff.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_chaff.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_chaff.Tpo -c -o libfragroute_a-mod_ip_chaff.obj `if test -f 'mod_ip_chaff.c'; then $(CYGPATH_W) 'mod_ip_chaff.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_chaff.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_ip_chaff.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_ip_chaff.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_chaff.c' object='libfragroute_a-mod_ip_chaff.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_chaff.obj `if test -f 'mod_ip_chaff.c'; then $(CYGPATH_W) 'mod_ip_chaff.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_chaff.c'; fi`
 
 libfragroute_a-mod_ip_frag.o: mod_ip_frag.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_frag.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_frag.Tpo -c -o libfragroute_a-mod_ip_frag.o `test -f 'mod_ip_frag.c' || echo '$(srcdir)/'`mod_ip_frag.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_frag.Tpo $(DEPDIR)/libfragroute_a-mod_ip_frag.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_frag.Tpo $(DEPDIR)/libfragroute_a-mod_ip_frag.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_frag.c' object='libfragroute_a-mod_ip_frag.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_frag.o `test -f 'mod_ip_frag.c' || echo '$(srcdir)/'`mod_ip_frag.c
 
 libfragroute_a-mod_ip_frag.obj: mod_ip_frag.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_frag.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_frag.Tpo -c -o libfragroute_a-mod_ip_frag.obj `if test -f 'mod_ip_frag.c'; then $(CYGPATH_W) 'mod_ip_frag.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_frag.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_frag.Tpo $(DEPDIR)/libfragroute_a-mod_ip_frag.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_frag.Tpo $(DEPDIR)/libfragroute_a-mod_ip_frag.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_frag.c' object='libfragroute_a-mod_ip_frag.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_frag.obj `if test -f 'mod_ip_frag.c'; then $(CYGPATH_W) 'mod_ip_frag.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_frag.c'; fi`
 
 libfragroute_a-mod_ip_opt.o: mod_ip_opt.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_opt.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_opt.Tpo -c -o libfragroute_a-mod_ip_opt.o `test -f 'mod_ip_opt.c' || echo '$(srcdir)/'`mod_ip_opt.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_opt.Tpo $(DEPDIR)/libfragroute_a-mod_ip_opt.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_opt.Tpo $(DEPDIR)/libfragroute_a-mod_ip_opt.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_opt.c' object='libfragroute_a-mod_ip_opt.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_opt.o `test -f 'mod_ip_opt.c' || echo '$(srcdir)/'`mod_ip_opt.c
 
 libfragroute_a-mod_ip_opt.obj: mod_ip_opt.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_opt.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_opt.Tpo -c -o libfragroute_a-mod_ip_opt.obj `if test -f 'mod_ip_opt.c'; then $(CYGPATH_W) 'mod_ip_opt.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_opt.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_opt.Tpo $(DEPDIR)/libfragroute_a-mod_ip_opt.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_opt.Tpo $(DEPDIR)/libfragroute_a-mod_ip_opt.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_opt.c' object='libfragroute_a-mod_ip_opt.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_opt.obj `if test -f 'mod_ip_opt.c'; then $(CYGPATH_W) 'mod_ip_opt.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_opt.c'; fi`
 
 libfragroute_a-mod_ip_ttl.o: mod_ip_ttl.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_ttl.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_ttl.Tpo -c -o libfragroute_a-mod_ip_ttl.o `test -f 'mod_ip_ttl.c' || echo '$(srcdir)/'`mod_ip_ttl.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_ttl.Tpo $(DEPDIR)/libfragroute_a-mod_ip_ttl.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_ttl.Tpo $(DEPDIR)/libfragroute_a-mod_ip_ttl.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_ttl.c' object='libfragroute_a-mod_ip_ttl.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_ttl.o `test -f 'mod_ip_ttl.c' || echo '$(srcdir)/'`mod_ip_ttl.c
 
 libfragroute_a-mod_ip_ttl.obj: mod_ip_ttl.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_ttl.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_ttl.Tpo -c -o libfragroute_a-mod_ip_ttl.obj `if test -f 'mod_ip_ttl.c'; then $(CYGPATH_W) 'mod_ip_ttl.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_ttl.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_ttl.Tpo $(DEPDIR)/libfragroute_a-mod_ip_ttl.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_ttl.Tpo $(DEPDIR)/libfragroute_a-mod_ip_ttl.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_ttl.c' object='libfragroute_a-mod_ip_ttl.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_ttl.obj `if test -f 'mod_ip_ttl.c'; then $(CYGPATH_W) 'mod_ip_ttl.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_ttl.c'; fi`
 
 libfragroute_a-mod_ip_tos.o: mod_ip_tos.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_tos.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_tos.Tpo -c -o libfragroute_a-mod_ip_tos.o `test -f 'mod_ip_tos.c' || echo '$(srcdir)/'`mod_ip_tos.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_tos.Tpo $(DEPDIR)/libfragroute_a-mod_ip_tos.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_tos.Tpo $(DEPDIR)/libfragroute_a-mod_ip_tos.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_tos.c' object='libfragroute_a-mod_ip_tos.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_tos.o `test -f 'mod_ip_tos.c' || echo '$(srcdir)/'`mod_ip_tos.c
 
 libfragroute_a-mod_ip_tos.obj: mod_ip_tos.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip_tos.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip_tos.Tpo -c -o libfragroute_a-mod_ip_tos.obj `if test -f 'mod_ip_tos.c'; then $(CYGPATH_W) 'mod_ip_tos.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_tos.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_ip_tos.Tpo $(DEPDIR)/libfragroute_a-mod_ip_tos.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip_tos.Tpo $(DEPDIR)/libfragroute_a-mod_ip_tos.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip_tos.c' object='libfragroute_a-mod_ip_tos.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip_tos.obj `if test -f 'mod_ip_tos.c'; then $(CYGPATH_W) 'mod_ip_tos.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip_tos.c'; fi`
 
 libfragroute_a-mod_order.o: mod_order.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_order.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_order.Tpo -c -o libfragroute_a-mod_order.o `test -f 'mod_order.c' || echo '$(srcdir)/'`mod_order.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_order.Tpo $(DEPDIR)/libfragroute_a-mod_order.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_order.Tpo $(DEPDIR)/libfragroute_a-mod_order.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_order.c' object='libfragroute_a-mod_order.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_order.o `test -f 'mod_order.c' || echo '$(srcdir)/'`mod_order.c
 
 libfragroute_a-mod_order.obj: mod_order.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_order.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_order.Tpo -c -o libfragroute_a-mod_order.obj `if test -f 'mod_order.c'; then $(CYGPATH_W) 'mod_order.c'; else $(CYGPATH_W) '$(srcdir)/mod_order.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_order.Tpo $(DEPDIR)/libfragroute_a-mod_order.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_order.Tpo $(DEPDIR)/libfragroute_a-mod_order.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_order.c' object='libfragroute_a-mod_order.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_order.obj `if test -f 'mod_order.c'; then $(CYGPATH_W) 'mod_order.c'; else $(CYGPATH_W) '$(srcdir)/mod_order.c'; fi`
 
 libfragroute_a-mod_print.o: mod_print.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_print.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_print.Tpo -c -o libfragroute_a-mod_print.o `test -f 'mod_print.c' || echo '$(srcdir)/'`mod_print.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_print.Tpo $(DEPDIR)/libfragroute_a-mod_print.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_print.Tpo $(DEPDIR)/libfragroute_a-mod_print.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_print.c' object='libfragroute_a-mod_print.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_print.o `test -f 'mod_print.c' || echo '$(srcdir)/'`mod_print.c
 
 libfragroute_a-mod_print.obj: mod_print.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_print.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_print.Tpo -c -o libfragroute_a-mod_print.obj `if test -f 'mod_print.c'; then $(CYGPATH_W) 'mod_print.c'; else $(CYGPATH_W) '$(srcdir)/mod_print.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_print.Tpo $(DEPDIR)/libfragroute_a-mod_print.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_print.Tpo $(DEPDIR)/libfragroute_a-mod_print.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_print.c' object='libfragroute_a-mod_print.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_print.obj `if test -f 'mod_print.c'; then $(CYGPATH_W) 'mod_print.c'; else $(CYGPATH_W) '$(srcdir)/mod_print.c'; fi`
 
 libfragroute_a-mod_tcp_chaff.o: mod_tcp_chaff.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_tcp_chaff.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Tpo -c -o libfragroute_a-mod_tcp_chaff.o `test -f 'mod_tcp_chaff.c' || echo '$(srcdir)/'`mod_tcp_chaff.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_tcp_chaff.c' object='libfragroute_a-mod_tcp_chaff.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_tcp_chaff.o `test -f 'mod_tcp_chaff.c' || echo '$(srcdir)/'`mod_tcp_chaff.c
 
 libfragroute_a-mod_tcp_chaff.obj: mod_tcp_chaff.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_tcp_chaff.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Tpo -c -o libfragroute_a-mod_tcp_chaff.obj `if test -f 'mod_tcp_chaff.c'; then $(CYGPATH_W) 'mod_tcp_chaff.c'; else $(CYGPATH_W) '$(srcdir)/mod_tcp_chaff.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_chaff.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_tcp_chaff.c' object='libfragroute_a-mod_tcp_chaff.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_tcp_chaff.obj `if test -f 'mod_tcp_chaff.c'; then $(CYGPATH_W) 'mod_tcp_chaff.c'; else $(CYGPATH_W) '$(srcdir)/mod_tcp_chaff.c'; fi`
 
 libfragroute_a-mod_tcp_opt.o: mod_tcp_opt.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_tcp_opt.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_tcp_opt.Tpo -c -o libfragroute_a-mod_tcp_opt.o `test -f 'mod_tcp_opt.c' || echo '$(srcdir)/'`mod_tcp_opt.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_tcp_opt.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_opt.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_tcp_opt.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_opt.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_tcp_opt.c' object='libfragroute_a-mod_tcp_opt.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_tcp_opt.o `test -f 'mod_tcp_opt.c' || echo '$(srcdir)/'`mod_tcp_opt.c
 
 libfragroute_a-mod_tcp_opt.obj: mod_tcp_opt.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_tcp_opt.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_tcp_opt.Tpo -c -o libfragroute_a-mod_tcp_opt.obj `if test -f 'mod_tcp_opt.c'; then $(CYGPATH_W) 'mod_tcp_opt.c'; else $(CYGPATH_W) '$(srcdir)/mod_tcp_opt.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_tcp_opt.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_opt.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_tcp_opt.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_opt.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_tcp_opt.c' object='libfragroute_a-mod_tcp_opt.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_tcp_opt.obj `if test -f 'mod_tcp_opt.c'; then $(CYGPATH_W) 'mod_tcp_opt.c'; else $(CYGPATH_W) '$(srcdir)/mod_tcp_opt.c'; fi`
 
 libfragroute_a-mod_tcp_seg.o: mod_tcp_seg.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_tcp_seg.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_tcp_seg.Tpo -c -o libfragroute_a-mod_tcp_seg.o `test -f 'mod_tcp_seg.c' || echo '$(srcdir)/'`mod_tcp_seg.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_tcp_seg.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_seg.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_tcp_seg.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_seg.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_tcp_seg.c' object='libfragroute_a-mod_tcp_seg.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_tcp_seg.o `test -f 'mod_tcp_seg.c' || echo '$(srcdir)/'`mod_tcp_seg.c
 
 libfragroute_a-mod_tcp_seg.obj: mod_tcp_seg.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_tcp_seg.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_tcp_seg.Tpo -c -o libfragroute_a-mod_tcp_seg.obj `if test -f 'mod_tcp_seg.c'; then $(CYGPATH_W) 'mod_tcp_seg.c'; else $(CYGPATH_W) '$(srcdir)/mod_tcp_seg.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/libfragroute_a-mod_tcp_seg.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_seg.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_tcp_seg.Tpo $(DEPDIR)/libfragroute_a-mod_tcp_seg.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_tcp_seg.c' object='libfragroute_a-mod_tcp_seg.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_tcp_seg.obj `if test -f 'mod_tcp_seg.c'; then $(CYGPATH_W) 'mod_tcp_seg.c'; else $(CYGPATH_W) '$(srcdir)/mod_tcp_seg.c'; fi`
 
+libfragroute_a-iputil.o: iputil.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-iputil.o -MD -MP -MF $(DEPDIR)/libfragroute_a-iputil.Tpo -c -o libfragroute_a-iputil.o `test -f 'iputil.c' || echo '$(srcdir)/'`iputil.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-iputil.Tpo $(DEPDIR)/libfragroute_a-iputil.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='iputil.c' object='libfragroute_a-iputil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-iputil.o `test -f 'iputil.c' || echo '$(srcdir)/'`iputil.c
+
+libfragroute_a-iputil.obj: iputil.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-iputil.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-iputil.Tpo -c -o libfragroute_a-iputil.obj `if test -f 'iputil.c'; then $(CYGPATH_W) 'iputil.c'; else $(CYGPATH_W) '$(srcdir)/iputil.c'; fi`
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-iputil.Tpo $(DEPDIR)/libfragroute_a-iputil.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='iputil.c' object='libfragroute_a-iputil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-iputil.obj `if test -f 'iputil.c'; then $(CYGPATH_W) 'iputil.c'; else $(CYGPATH_W) '$(srcdir)/iputil.c'; fi`
+
+libfragroute_a-mod_ip6_opt.o: mod_ip6_opt.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip6_opt.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip6_opt.Tpo -c -o libfragroute_a-mod_ip6_opt.o `test -f 'mod_ip6_opt.c' || echo '$(srcdir)/'`mod_ip6_opt.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip6_opt.Tpo $(DEPDIR)/libfragroute_a-mod_ip6_opt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip6_opt.c' object='libfragroute_a-mod_ip6_opt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip6_opt.o `test -f 'mod_ip6_opt.c' || echo '$(srcdir)/'`mod_ip6_opt.c
+
+libfragroute_a-mod_ip6_opt.obj: mod_ip6_opt.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip6_opt.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip6_opt.Tpo -c -o libfragroute_a-mod_ip6_opt.obj `if test -f 'mod_ip6_opt.c'; then $(CYGPATH_W) 'mod_ip6_opt.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip6_opt.c'; fi`
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip6_opt.Tpo $(DEPDIR)/libfragroute_a-mod_ip6_opt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip6_opt.c' object='libfragroute_a-mod_ip6_opt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip6_opt.obj `if test -f 'mod_ip6_opt.c'; then $(CYGPATH_W) 'mod_ip6_opt.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip6_opt.c'; fi`
+
+libfragroute_a-mod_ip6_qos.o: mod_ip6_qos.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip6_qos.o -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip6_qos.Tpo -c -o libfragroute_a-mod_ip6_qos.o `test -f 'mod_ip6_qos.c' || echo '$(srcdir)/'`mod_ip6_qos.c
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip6_qos.Tpo $(DEPDIR)/libfragroute_a-mod_ip6_qos.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip6_qos.c' object='libfragroute_a-mod_ip6_qos.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip6_qos.o `test -f 'mod_ip6_qos.c' || echo '$(srcdir)/'`mod_ip6_qos.c
+
+libfragroute_a-mod_ip6_qos.obj: mod_ip6_qos.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -MT libfragroute_a-mod_ip6_qos.obj -MD -MP -MF $(DEPDIR)/libfragroute_a-mod_ip6_qos.Tpo -c -o libfragroute_a-mod_ip6_qos.obj `if test -f 'mod_ip6_qos.c'; then $(CYGPATH_W) 'mod_ip6_qos.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip6_qos.c'; fi`
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/libfragroute_a-mod_ip6_qos.Tpo $(DEPDIR)/libfragroute_a-mod_ip6_qos.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_ip6_qos.c' object='libfragroute_a-mod_ip6_qos.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libfragroute_a_CFLAGS) $(CFLAGS) -c -o libfragroute_a-mod_ip6_qos.obj `if test -f 'mod_ip6_qos.c'; then $(CYGPATH_W) 'mod_ip6_qos.c'; else $(CYGPATH_W) '$(srcdir)/mod_ip6_qos.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -631,7 +685,7 @@ tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -639,29 +693,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -682,13 +741,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -717,6 +780,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -739,6 +803,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -747,18 +813,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -796,6 +872,7 @@ uninstall-am:
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags uninstall uninstall-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:

+ 3 - 1
src/fragroute/fragroute.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  * Copyright (c) 2007-2008 Aaron Turner.
- * $Id: fragroute.c 2110 2009-01-08 00:22:22Z aturner $
+ * $Id: fragroute.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -69,7 +69,9 @@ fragroute_process(fragroute_t *ctx, void *buf, size_t len)
 		strcpy(ctx->errbuf, "skipping non-IP packet");
 		return -1;
 	}
+	if (pkt->pkt_eth && htons(pkt->pkt_eth->eth_type) == ETH_TYPE_IP) {
 	ip_checksum(pkt->pkt_ip, len);
+	}
 
 	TAILQ_INIT(ctx->pktq);
 	TAILQ_INSERT_TAIL(ctx->pktq, pkt, pkt_next);

+ 147 - 0
src/fragroute/iputil.c

@@ -0,0 +1,147 @@
+#include "config.h"
+#include "defines.h"
+#include "common.h"
+#include "iputil.h"
+#include <dnet.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+static ssize_t
+inet_add_option_6(void *buf, size_t len, int proto, const void *optbuf, size_t optlen);
+
+ssize_t
+inet_add_option(uint16_t eth_type, void *buf, size_t len,
+                int proto, const void *optbuf, size_t optlen)
+{
+    if (eth_type == ETH_TYPE_IP) {
+        return ip_add_option(buf, len, proto, optbuf, optlen);
+    } else if (eth_type == ETH_TYPE_IPV6) {
+        return inet_add_option_6(buf, len, proto, optbuf, optlen);
+    } else {
+        errno = EINVAL;
+        return -1;
+    }
+}
+
+/*
+ * IPv6 version of libdnet's ip_add_option():
+ */
+ssize_t
+inet_add_option_6(void *buf, size_t len, int proto, const void *optbuf, size_t optlen)
+{
+    struct ip6_hdr *ip6;
+    struct tcp_hdr *tcp = NULL;
+    u_char *p;
+    int hl, datalen, padlen;
+
+    if (proto != IP_PROTO_TCP) {
+        errno = EINVAL;
+        return (-1);
+    }
+
+    ip6 = (struct ip6_hdr *)buf;
+    p = (u_char *)buf + IP6_HDR_LEN;
+
+    tcp = (struct tcp_hdr *)p;
+    hl = tcp->th_off << 2;
+    p = (u_char *)tcp + hl;
+
+    datalen = ntohs(ip6->ip6_plen) + IP6_HDR_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(ip6->ip6_plen) + IP6_HDR_LEN + optlen + padlen > len) {
+        errno = EINVAL;
+        return (-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;
+
+    tcp->th_off = (p - (u_char *)tcp) >> 2;
+
+    ip6->ip6_plen = htons(ntohs(ip6->ip6_plen) + optlen);
+
+    return (optlen);
+}
+
+
+void
+inet_checksum(uint16_t eth_type, void *buf, size_t len)
+{
+    if (eth_type == ETH_TYPE_IP) {
+        return ip_checksum(buf, len);
+    } else if (eth_type == ETH_TYPE_IPV6) {
+        return ip6_checksum(buf, len);
+    }
+}
+
+int
+raw_ip_opt_parse(int argc, char *argv[], uint8_t *opt_type, uint8_t *opt_len,
+        uint8_t *buff, int buff_len)
+{
+    int i, j;
+
+    if (sscanf(argv[0], "%hhx", opt_type) != 1) {
+        warn("invalid opt_type");
+        return -1;
+    }
+    if (sscanf(argv[1], "%hhx", opt_len) != 1) {
+        warn("invalid opt_len");
+        return -1;
+    }
+    j = 0;
+    for (i = 2; i < argc && j < buff_len; ++i, ++j) {
+        if (sscanf(argv[i], "%hhx", &buff[j]) != 1) {
+            warn("invalid opt_data");
+            return -1;
+        }
+    }
+    if (*opt_len != j + 2) {
+        warnx("invalid opt->len (%d) doesn't match data length (%d)",
+                *opt_len, j);
+        return -1;
+    }
+    return 0;
+}
+
+int
+raw_ip6_opt_parse(int argc, char *argv[], uint8_t *proto, int *len,
+        uint8_t *buff, int buff_len)
+{
+    int i, j;
+
+    if (sscanf(argv[0], "%hhx", proto) != 1) {
+        warn("invalid protocol");
+        return -1;
+    }
+
+    j = 0;
+    for (i = 1; i < argc && j < buff_len; ++i, ++j) {
+        if (sscanf(argv[i], "%hhx", &buff[j]) != 1) {
+            warn("invalid opt_data");
+            return -1;
+        }
+    }
+    *len = j;
+    if ((j + 2) % 8 != 0) {
+        warnx("(opt_len (%d) + 2) %% 8 != 0", j);
+        return -1;
+    }
+    return 0;
+}

+ 13 - 0
src/fragroute/iputil.h

@@ -0,0 +1,13 @@
+#ifndef IPUTIL_H
+#define IPUTIL_H
+
+ssize_t inet_add_option(uint16_t eth_type, void *buf, size_t len,
+                int proto, const void *optbuf, size_t optlen);
+void    inet_checksum(uint16_t eth_type, void *buf, size_t len);
+
+int raw_ip_opt_parse(int argc, char *argv[], uint8_t *type, uint8_t *len,
+        uint8_t *buff, int buff_len);
+int raw_ip6_opt_parse(int argc, char *argv[], uint8_t *proto, int *len,
+        uint8_t *buff, int buff_len);
+
+#endif /* IPUTIL_H */

+ 5 - 1
src/fragroute/mod.c

@@ -4,7 +4,7 @@
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  * Copyright (c) 2007-2008 Aaron Turner.
  *
- * $Id: mod.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: mod.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -39,6 +39,8 @@ extern struct mod	 mod_ip_frag;
 extern struct mod	 mod_ip_opt;
 extern struct mod	 mod_ip_ttl;
 extern struct mod	 mod_ip_tos;
+extern struct mod	 mod_ip6_qos;
+extern struct mod	 mod_ip6_opt;
 extern struct mod	 mod_order;
 extern struct mod	 mod_print;
 extern struct mod	 mod_tcp_chaff;
@@ -55,6 +57,8 @@ static struct mod *mods[] = {
 	&mod_ip_opt,
 	&mod_ip_ttl,
 	&mod_ip_tos,
+	&mod_ip6_qos,
+	&mod_ip6_opt,
 	&mod_order,
 	&mod_print,
 	&mod_tcp_chaff,

+ 196 - 0
src/fragroute/mod_ip6_opt.c

@@ -0,0 +1,196 @@
+/*
+ * mod_ip6_opt.c
+ *
+ * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
+ *
+ */
+
+#include "config.h"
+
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pkt.h"
+#include "mod.h"
+#include "iputil.h"
+
+#define MAX_ADDRS 32
+
+#define OPT6_TYPE_ROUTE	 1
+#define OPT6_TYPE_RAW	 2
+
+struct ip6_opt_data_route
+{
+	int segments;
+	struct addr addr[MAX_ADDRS];
+};
+
+struct ip6_opt_data_raw
+{
+	int len;
+	uint8_t proto;
+	uint8_t data8[512];
+};
+
+struct ip6_opt_data
+{
+	int type;
+	union
+	{
+		struct ip6_opt_data_route route;
+		struct ip6_opt_data_raw raw;
+	} u;
+};
+
+void *
+ip6_opt_close(void *d)
+{
+	if (d != NULL)
+		free(d);
+	return (NULL);
+}
+
+void *
+ip6_opt_open(int argc, char *argv[])
+{
+	struct ip6_opt_data *opt;
+	int i, j;
+
+	if (argc < 4)
+		return (NULL);
+
+	if ((opt = calloc(1, sizeof(*opt))) == NULL)
+		return (NULL);
+
+	if (strcasecmp(argv[1], "route") == 0) {
+		opt->type = OPT6_TYPE_ROUTE;
+
+		if ((opt->u.route.segments = atoi(argv[2])) < 1 ||
+				opt->u.route.segments > MAX_ADDRS) {
+			warnx("<segments> must be >= 1");
+			return (ip6_opt_close(opt));
+		}
+
+		i = 0;
+		j = 3;
+
+		if (opt->u.route.segments + 3 != argc) {
+			return (ip6_opt_close(opt));
+		}
+
+		for (; j < argc; i++, j++) {
+			if (addr_aton(argv[j], &opt->u.route.addr[i]) < 0 ||
+					opt->u.route.addr[i].addr_type != ADDR_TYPE_IP6) {
+				return (ip6_opt_close(opt));
+			}
+		}
+	} else if (strcasecmp(argv[1], "raw") == 0) {
+		opt->type = OPT6_TYPE_RAW;
+
+		if (raw_ip6_opt_parse(argc - 2, &argv[2],
+					&opt->u.raw.proto, &opt->u.raw.len,
+					&opt->u.raw.data8[2], sizeof(opt->u.raw.data8) - 2) != 0)
+			return (ip6_opt_close(opt));
+		opt->u.raw.len += 2;
+		opt->u.raw.data8[0] = 0;
+		opt->u.raw.data8[1] = opt->u.raw.len / 8;
+	} else {
+		return (ip6_opt_close(opt));
+	}
+
+	return (opt);
+}
+
+int
+ip6_opt_apply(void *d, struct pktq *pktq)
+{
+	struct ip6_opt_data *opt = (struct ip6_opt_data *)d;
+	struct __ip6_ext_data_routing* route;
+	struct ip6_ext_hdr* ext;
+	int offset, len;
+	struct pkt *pkt;
+	uint8_t nxt, iph_nxt;
+	uint8_t* p;
+	int i;
+
+	TAILQ_FOREACH(pkt, pktq, pkt_next) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type != ETH_TYPE_IPV6) {
+			continue;
+		}
+
+		nxt = pkt->pkt_ip6->ip6_nxt;
+		ext = (struct ip6_ext_hdr*)(((u_char*)pkt->pkt_ip6) + IP6_HDR_LEN);
+
+		if (opt->type == OPT6_TYPE_ROUTE) {
+			offset = 8 + IP6_ADDR_LEN * opt->u.route.segments;
+			memmove(((u_char*)ext) + offset, ext, pkt->pkt_end - (u_char*)ext);
+
+			pkt->pkt_end += offset;
+			pkt->pkt_ip_data += offset;
+
+			len = (IP6_ADDR_LEN / 8) * opt->u.route.segments;
+
+			route = (struct __ip6_ext_data_routing*)ext;
+
+			ext->ext_data.routing.type = 0;
+			ext->ext_data.routing.segleft = opt->u.route.segments;
+			((uint32_t*)ext)[1] = 0; /* reserved */
+
+			iph_nxt = IP_PROTO_ROUTING;
+
+			p = (uint8_t*)(ext) + 8;
+
+			for (i = 0; i < opt->u.route.segments; ++i, p += IP6_ADDR_LEN) {
+				memcpy(p, opt->u.route.addr[i].addr_data8, IP6_ADDR_LEN);
+			}
+
+		} else if (opt->type == OPT6_TYPE_RAW) {
+			offset = opt->u.raw.len;
+			memmove(((u_char*)ext) + offset, ext, pkt->pkt_end - (u_char*)ext);
+
+			pkt->pkt_end += offset;
+			pkt->pkt_ip_data += offset;
+
+			iph_nxt = opt->u.raw.proto;
+
+			p = (uint8_t*)ext;
+			memcpy(p, opt->u.raw.data8, opt->u.raw.len);
+
+#if 0
+			printf("len: %d, data %02x %02x %02x %02x %02x %02x %02x %02x\n",
+					opt->u.raw.len, opt->u.raw.data8[0], opt->u.raw.data8[1],
+					opt->u.raw.data8[2], opt->u.raw.data8[3],
+					opt->u.raw.data8[4], opt->u.raw.data8[5],
+					opt->u.raw.data8[6], opt->u.raw.data8[7]);
+#endif
+
+			len = (opt->u.raw.len - 8) / 8;
+
+		} else {
+			continue;
+		}
+
+		ext->ext_nxt = nxt;
+		ext->ext_len = len;
+
+		pkt->pkt_ip6->ip6_nxt = iph_nxt;
+		pkt->pkt_ip6->ip6_plen = htons(htons(pkt->pkt_ip6->ip6_plen) + offset);
+
+		/* XXX: do we need it? */
+		pkt_decorate(pkt);
+		/* ip6_checksum(pkt->pkt_ip, pkt->pkt_end - pkt->pkt_eth_data); */
+	}
+	return (0);
+}
+
+struct mod mod_ip6_opt = {
+	"ip6_opt",					/* name */
+	"ip6_opt [route <segments> <ip6-addr> ...] | [raw <type> <byte stream>]",		/* usage */
+	ip6_opt_open,					/* open */
+	ip6_opt_apply,					/* apply */
+	ip6_opt_close					/* close */
+};

+ 83 - 0
src/fragroute/mod_ip6_qos.c

@@ -0,0 +1,83 @@
+/*
+ * mod_ip6_qos.c
+ *
+ * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
+ *
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "argv.h"
+#include "mod.h"
+#include "pkt.h"
+
+struct ip6_qos_data
+{
+	int	ip6_tc;
+	int	ip6_fl;
+};
+
+static void *
+ip6_qos_close(void *d)
+{
+	if (d != NULL)
+		free(d);
+	return (NULL);
+}
+
+static void *
+ip6_qos_open(int argc, char *argv[])
+{
+	struct ip6_qos_data *data;
+
+	if (argc != 3) {
+		return NULL;
+	}
+
+	if ((data = calloc(1, sizeof(*data))) == NULL)
+		return (NULL);
+
+	if (sscanf(argv[1], "%x", &data->ip6_tc) != 1 ||
+			data->ip6_tc < 0 || data->ip6_tc > 255)
+		return (ip6_qos_close(data));
+
+	if (sscanf(argv[2], "%x", &data->ip6_fl) != 1 ||
+			data->ip6_fl < 0 || data->ip6_fl > 0x100000)
+		return (ip6_qos_close(data));
+
+	printf("init: %x\n", data->ip6_fl);
+
+	return (data);
+}
+
+static int
+ip6_qos_apply(void *d, struct pktq *pktq)
+{
+	struct ip6_qos_data *data = (struct ip6_qos_data *)d;
+	struct pkt *pkt;
+
+	TAILQ_FOREACH(pkt, pktq, pkt_next) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type == ETH_TYPE_IPV6) {
+			if (data->ip6_tc || data->ip6_fl) {
+				pkt->pkt_ip6->ip6_flow = htonl((uint32_t)data->ip6_tc << 20 |
+						data->ip6_fl);
+				pkt->pkt_ip6->ip6_vfc = (IP6_VERSION | (data->ip6_tc >> 4));
+			}
+		}
+	}
+	return (0);
+}
+
+struct mod mod_ip6_qos = {
+	"ip6_qos",			/* name */
+	"ip6_qos <tc> <fl>",			/* usage */
+	ip6_qos_open,			/* open */
+	ip6_qos_apply,			/* apply */
+	ip6_qos_close			/* close */
+};

+ 16 - 4
src/fragroute/mod_ip_chaff.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_ip_chaff.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: mod_ip_chaff.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -71,9 +71,11 @@ ip_chaff_apply(void *d, struct pktq *pktq)
 	struct pkt *pkt, *new, *next;
 	struct ip_opt opt;
 	int i;
+	uint16_t eth_type;
 	
 	for (pkt = TAILQ_FIRST(pktq); pkt != TAILQ_END(pktq); pkt = next) {
 		next = TAILQ_NEXT(pkt, pkt_next);
+		eth_type = htons(pkt->pkt_eth->eth_type);
 		
 		if (pkt->pkt_ip_data == NULL)
 			continue;
@@ -85,10 +87,13 @@ ip_chaff_apply(void *d, struct pktq *pktq)
 		switch (data->type) {
 		case CHAFF_TYPE_DUP:
 			new->pkt_ts.tv_usec = 1;
+			if (eth_type == ETH_TYPE_IP) {
 			ip_checksum(new->pkt_ip, new->pkt_ip_data -
 			    new->pkt_eth_data);
+			}
 			break;
 		case CHAFF_TYPE_OPT:
+			if (eth_type == ETH_TYPE_IP) {
 			opt.opt_type = 0x42;
 			opt.opt_len = IP_OPT_LEN;
 			i = ip_add_option(new->pkt_ip,
@@ -100,15 +105,22 @@ ip_chaff_apply(void *d, struct pktq *pktq)
 			new->pkt_end += i;
 			ip_checksum(new->pkt_ip, new->pkt_ip_data -
 			    new->pkt_eth_data);
-			break;
+			} else if (eth_type == ETH_TYPE_IPV6) {
+				continue;
+			}
 		case CHAFF_TYPE_TTL:
+			if (eth_type == ETH_TYPE_IP) {
 			new->pkt_ip->ip_ttl = data->ttl;
 			ip_checksum(new->pkt_ip, new->pkt_ip_data -
 			    new->pkt_eth_data);
+			} else if (eth_type == ETH_TYPE_IPV6) {
+			    pkt->pkt_ip6->ip6_hlim = data->ttl;
+			}
+
 			break;
 		}
-		/* Minimal random reordering. */
-		if ((pkt->pkt_ip->ip_sum & 1) == 0)
+		/* Minimal random reordering - for ipv4 and ipv6 */
+		if ((new->pkt_ip_data[0] & 1) == 0)
 			TAILQ_INSERT_BEFORE(pkt, new, pkt_next);
 		else
 			TAILQ_INSERT_AFTER(pktq, pkt, new, pkt_next);

+ 146 - 2
src/fragroute/mod_ip_frag.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_ip_frag.c 2191 2009-02-01 21:34:27Z aturner $
+ * $Id: mod_ip_frag.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -25,10 +25,18 @@
 #define FAVOR_OLD	1
 #define FAVOR_NEW	2
 
-static struct ip_frag_data {
+static int
+ip_frag_apply_ipv4(void *d, struct pktq *pktq);
+
+static int
+ip_frag_apply_ipv6(void *d, struct pktq *pktq);
+
+static struct ip_frag_data
+{
 	rand_t	*rnd;
 	int	 size;
 	int	 overlap;
+	uint32_t ident;
 } ip_frag_data;
 
 void *
@@ -64,12 +72,35 @@ ip_frag_open(int argc, char *argv[])
 		else
 			return (ip_frag_close(&ip_frag_data));
 	}
+
+	ip_frag_data.ident = rand_uint32(ip_frag_data.rnd);
+
 	return (&ip_frag_data);
 }
 
 int
 ip_frag_apply(void *d, struct pktq *pktq)
 {
+	struct pkt *pkt;
+
+	/* Select eth protocol via first packet in que: */
+	pkt = TAILQ_FIRST(pktq);
+	if (pkt != TAILQ_END(pktq)) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type == ETH_TYPE_IP) {
+			ip_frag_apply_ipv4(d, pktq);
+		} else if (eth_type == ETH_TYPE_IPV6) {
+			ip_frag_apply_ipv6(d, pktq);
+		}
+		return 0;
+	}
+	return 0;
+}
+
+static int
+ip_frag_apply_ipv4(void *d, struct pktq *pktq)
+{
 	struct pkt *pkt, *new, *next, tmp;
 	int hl, fraglen, off;
 	u_char *p, *p1, *p2;
@@ -109,6 +140,7 @@ ip_frag_apply(void *d, struct pktq *pktq)
 		
 		for (p = pkt->pkt_ip_data; p < pkt->pkt_end; ) {
 			new = pkt_new();
+			memcpy(new->pkt_eth, pkt->pkt_eth, (u_char*)pkt->pkt_eth_data - (u_char*)pkt->pkt_eth);
 			memcpy(new->pkt_ip, pkt->pkt_ip, hl);
 			new->pkt_ip_data = new->pkt_eth_data + hl;
 			
@@ -163,6 +195,118 @@ ip_frag_apply(void *d, struct pktq *pktq)
 	return (0);
 }
 
+
+static int
+ip_frag_apply_ipv6(void *d, struct pktq *pktq)
+{
+	struct pkt *pkt, *new, *next, tmp;
+	struct ip6_ext_hdr *ext;
+	int hl, fraglen, off;
+	u_char *p, *p1, *p2;
+	uint8_t next_hdr;
+
+	ip_frag_data.ident++;
+
+	for (pkt = TAILQ_FIRST(pktq); pkt != TAILQ_END(pktq); pkt = next) {
+		next = TAILQ_NEXT(pkt, pkt_next);
+
+		if (pkt->pkt_ip == NULL || pkt->pkt_ip_data == NULL)
+			continue;
+
+		hl = IP6_HDR_LEN;
+
+		/*
+		 * Preserve transport protocol header in first frag,
+		 * to bypass filters that block `short' fragments.
+		 */
+		switch (pkt->pkt_ip->ip_p) {
+		case IP_PROTO_ICMP:
+			fraglen = MAX(ICMP_LEN_MIN, ip_frag_data.size);
+			break;
+		case IP_PROTO_UDP:
+			fraglen = MAX(UDP_HDR_LEN, ip_frag_data.size);
+			break;
+		case IP_PROTO_TCP:
+			fraglen = MAX(pkt->pkt_tcp->th_off << 2,
+			    ip_frag_data.size);
+			break;
+		default:
+			fraglen = ip_frag_data.size;
+			break;
+		}
+		if (fraglen & 7)
+			fraglen = (fraglen & ~7) + 8;
+
+		if (pkt->pkt_end - pkt->pkt_ip_data < fraglen)
+			continue;
+
+		next_hdr = pkt->pkt_ip6->ip6_nxt;
+
+		for (p = pkt->pkt_ip_data; p < pkt->pkt_end; ) {
+			new = pkt_new();
+			memcpy(new->pkt_eth, pkt->pkt_eth, (u_char*)pkt->pkt_eth_data - (u_char*)pkt->pkt_eth);
+			memcpy(new->pkt_ip, pkt->pkt_ip, hl);
+			ext = (struct ip6_ext_hdr *)((u_char*)new->pkt_eth_data + hl);
+			new->pkt_ip_data = (u_char *)(ext) + 2 + 
+				sizeof(struct ip6_ext_data_fragment);
+			new->pkt_ip6->ip6_nxt = IP_PROTO_FRAGMENT;
+
+			ext->ext_nxt = next_hdr;
+			ext->ext_len = 0; /* ip6 fragf reserved */
+			ext->ext_data.fragment.ident = ip_frag_data.ident;
+
+
+			p1 = p, p2 = NULL;
+			off = (p - pkt->pkt_ip_data) >> 3;
+
+			if (ip_frag_data.overlap != 0 && (off & 1) != 0 &&
+			    p + (fraglen << 1) < pkt->pkt_end) {
+				rand_strset(ip_frag_data.rnd, tmp.pkt_buf,
+				    fraglen);
+				if (ip_frag_data.overlap == FAVOR_OLD) {
+					p1 = p + fraglen;
+					p2 = tmp.pkt_buf;
+				} else if (ip_frag_data.overlap == FAVOR_NEW) {
+					p1 = tmp.pkt_buf;
+					p2 = p + fraglen;
+				}
+				ext->ext_data.fragment.offlg = 
+					htons((off /*+ (fraglen >> 3)*/) << 3) | IP6_MORE_FRAG;
+			} else {
+				ext->ext_data.fragment.offlg = htons(off << 3) |
+						((p + fraglen < pkt->pkt_end) ? IP6_MORE_FRAG : 0);
+			}
+			new->pkt_ip6->ip6_plen = htons(fraglen + 8);
+
+			memcpy(new->pkt_ip_data, p1, fraglen);
+			new->pkt_end = new->pkt_ip_data + fraglen;
+			TAILQ_INSERT_BEFORE(pkt, new, pkt_next);
+
+			if (p2 != NULL) {
+				new = pkt_dup(new);
+				new->pkt_ts.tv_usec = 1;
+
+				ext->ext_data.fragment.offlg = htons(off << 3) | IP6_MORE_FRAG;
+				new->pkt_ip6->ip6_plen = htons((fraglen << 1) + 8);
+
+				memcpy(new->pkt_ip_data, p, fraglen);
+				memcpy(new->pkt_ip_data + fraglen, p2, fraglen);
+				new->pkt_end = new->pkt_ip_data + (fraglen << 1);
+				TAILQ_INSERT_BEFORE(pkt, new, pkt_next);
+				p += (fraglen << 1);
+			} else {
+				p += fraglen;
+			}
+
+			if ((fraglen = pkt->pkt_end - p) > ip_frag_data.size)
+				fraglen = ip_frag_data.size;
+		}
+		TAILQ_REMOVE(pktq, pkt, pkt_next);
+		pkt_free(pkt);
+	}
+	return 0;
+}
+
 struct mod mod_ip_frag = {
 	"ip_frag",				/* name */
 	"ip_frag <size> [old|new]",		/* usage */

+ 12 - 2
src/fragroute/mod_ip_opt.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_ip_opt.c 2191 2009-02-01 21:34:27Z aturner $
+ * $Id: mod_ip_opt.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -16,6 +16,7 @@
 
 #include "pkt.h"
 #include "mod.h"
+#include "iputil.h"
 
 void *
 ip_opt_close(void *d)
@@ -42,6 +43,11 @@ ip_opt_open(int argc, char *argv[])
 		opt->opt_type = IP_OPT_LSRR;
 	} else if (strcasecmp(argv[1], "ssrr") == 0) {
 		opt->opt_type = IP_OPT_SSRR;
+	} else if (strcasecmp(argv[1], "raw") == 0) {
+		if (raw_ip_opt_parse(argc - 2, &argv[2], &opt->opt_type, &opt->opt_len,
+					&opt->opt_data.data8[0], sizeof(opt->opt_data.data8)) != 0)
+			return (ip_opt_close(opt));
+		return opt;
 	} else
 		return (ip_opt_close(opt));
 	
@@ -70,6 +76,9 @@ ip_opt_apply(void *d, struct pktq *pktq)
 	size_t len;
 
 	TAILQ_FOREACH(pkt, pktq, pkt_next) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type == ETH_TYPE_IP) {
 		len = ip_add_option(pkt->pkt_ip, PKT_BUF_LEN - ETH_HDR_LEN,
 		    IP_PROTO_IP, opt, opt->opt_len);
 
@@ -80,12 +89,13 @@ ip_opt_apply(void *d, struct pktq *pktq)
 			    pkt->pkt_end - pkt->pkt_eth_data);
 		}
 	}
+	}
 	return (0);
 }
 
 struct mod mod_ip_opt = {
 	"ip_opt",					/* name */
-	"ip_opt lsrr|ssrr <ptr> <ip-addr> ...",		/* usage */
+	"ip_opt [lsrr|ssrr <ptr> <ip-addr> ...] | [raw <byte stream>]",		/* usage */
 	ip_opt_open,					/* open */
 	ip_opt_apply,					/* apply */
 	ip_opt_close					/* close */

+ 5 - 1
src/fragroute/mod_ip_tos.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_ip_tos.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: mod_ip_tos.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -53,10 +53,14 @@ ip_tos_apply(void *d, struct pktq *pktq)
 	struct pkt *pkt;
 
 	TAILQ_FOREACH(pkt, pktq, pkt_next) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type == ETH_TYPE_IP) {
 		pkt->pkt_ip->ip_tos = data->tos;
 		/* XXX - do incremental checksum */
 		ip_checksum(pkt->pkt_ip, pkt->pkt_ip_data - pkt->pkt_eth_data);
 	}
+	}
 	return (0);
 }
 

+ 7 - 1
src/fragroute/mod_ip_ttl.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_ip_ttl.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: mod_ip_ttl.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -53,6 +53,9 @@ ip_ttl_apply(void *d, struct pktq *pktq)
 	int ttldec;
 
 	TAILQ_FOREACH(pkt, pktq, pkt_next) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type == ETH_TYPE_IP) {
 		ttldec = pkt->pkt_ip->ip_ttl - data->ttl;
 		pkt->pkt_ip->ip_ttl = data->ttl;
 		
@@ -60,6 +63,9 @@ ip_ttl_apply(void *d, struct pktq *pktq)
 			pkt->pkt_ip->ip_sum += htons(ttldec << 8) + 1;
 		else
 			pkt->pkt_ip->ip_sum += htons(ttldec << 8);
+		} else if (eth_type == ETH_TYPE_IPV6) {
+			pkt->pkt_ip6->ip6_hlim = data->ttl;
+		}
 	}
 	return (0);
 }

+ 132 - 12
src/fragroute/mod_print.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_print.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: mod_print.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -15,6 +15,10 @@
 #include "mod.h"
 #include "pkt.h"
 
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN 46
+#endif
+
 #define EXTRACT_16BITS(p)	((uint16_t)ntohs(*(uint16_t *)(p)))
 #define EXTRACT_32BITS(p)	((uint32_t)ntohl(*(uint32_t *)(p)))
 
@@ -34,20 +38,49 @@ _print_icmp(u_char *p, int length)
 	printf(" icmp: type %d code %d", icmp->icmp_type, icmp->icmp_code);
 }
 
+static void
+_print_icmp6(u_char *p, int length)
+{
+	struct ip6_hdr *ip6;
+	struct icmp_hdr *icmp;
+
+	ip6 = (struct ip6_hdr *)p;
+	icmp = (struct icmp_hdr *)(p + IP6_HDR_LEN);
+
+	/* XXX - truncation? */
+	printf("%s > %s:", ip6_ntoa(&ip6->ip6_src), ip6_ntoa(&ip6->ip6_dst));
+	printf(" icmp: type %hhu code %hhu", icmp->icmp_type, icmp->icmp_code);
+}
+
 void
-_print_tcp(unsigned char *p, int length)
+_print_tcp(int family, unsigned char *p, int length)
 {
-	struct ip_hdr *ip;
 	struct tcp_hdr *tcp;
 	u_short sport, dport, win, urp;
 	u_long seq, ack;
 	int len, tcp_hl;
 	register char ch;
 	
+	char src[INET6_ADDRSTRLEN], dst[INET6_ADDRSTRLEN];
+
+	if (family == AF_INET6) {
+			struct ip6_hdr *ip6 = (struct ip6_hdr *)p;
+			tcp = (struct tcp_hdr *)(p + IP6_HDR_LEN);
+			len = length;
+
+			ip6_ntop(&ip6->ip6_src, src, sizeof(src));
+			ip6_ntop(&ip6->ip6_dst, dst, sizeof(dst));
+	} else {
+			struct ip_hdr *ip;
+
 	ip = (struct ip_hdr *)p;
 	tcp = (struct tcp_hdr *)(p + (ip->ip_hl * 4));
 	len = length - (ip->ip_hl * 4);
 	
+			ip_ntop(&ip->ip_src, src, sizeof(src));
+			ip_ntop(&ip->ip_dst, dst, sizeof(dst));
+	}
+
 	if (len < TCP_HDR_LEN) {
 		printf("truncated-tcp %d", len);
 		return;
@@ -60,8 +93,7 @@ _print_tcp(unsigned char *p, int length)
 	urp = ntohs(tcp->th_urp);
 	tcp_hl = tcp->th_off * 4;
 	
-	printf("%s.%d > %s.%d: ", ip_ntoa(&ip->ip_src), sport,
-	    ip_ntoa(&ip->ip_dst), dport);
+	printf("%s.%d > %s.%d: ", src, sport, dst, dport);
 	
 	if (tcp->th_flags & (TH_SYN|TH_FIN|TH_RST|TH_PUSH)) {
 		if (tcp->th_flags & TH_SYN)	putchar('S');
@@ -218,22 +250,53 @@ _print_tcp(unsigned char *p, int length)
 }
 
 static void
-_print_udp(u_char *p, int length)
+_print_udp(int family, u_char *p, int length)
 {
-	struct ip_hdr *ip;
 	struct udp_hdr *udp;
+	char src[INET6_ADDRSTRLEN], dst[INET6_ADDRSTRLEN];
+
+	if (family == AF_INET6) {
+			struct ip6_hdr *ip6 = (struct ip6_hdr *)p;
+			udp = (struct udp_hdr *)(p + IP6_HDR_LEN);
+
+			ip6_ntop(&ip6->ip6_src, src, sizeof(src));
+			ip6_ntop(&ip6->ip6_dst, dst, sizeof(dst));
+	} else {
+			struct ip_hdr *ip;
 	
 	ip = (struct ip_hdr *)p;
 	udp = (struct udp_hdr *)(p + (ip->ip_hl * 4));
 
-	/* XXX - truncation? */
-	printf("%s.%d > %s.%d:", ip_ntoa(&ip->ip_src), ntohs(udp->uh_sport),
-	    ip_ntoa(&ip->ip_dst), ntohs(udp->uh_dport));
+			ip_ntop(&ip->ip_src, src, sizeof(src));
+			ip_ntop(&ip->ip_dst, dst, sizeof(dst));
+	}
 	
+	/* XXX - truncation? */
+	printf("%s.%d > %s.%d:", src, ntohs(udp->uh_sport),
+		dst, ntohs(udp->uh_dport));
 	printf(" udp %d", ntohs(udp->uh_ulen) - UDP_HDR_LEN);
 }
 
 static void
+_print_frag6(u_char *p, int length)
+{
+	struct ip6_hdr *ip6;
+	struct ip6_ext_hdr *ext;
+	int off;
+
+	ip6 = (struct ip6_hdr *)p;
+	ext = (struct ip6_ext_hdr *)(p + IP6_HDR_LEN);
+
+	off = htons(ext->ext_data.fragment.offlg & IP6_OFF_MASK);
+
+	printf("%s > %s:", ip6_ntoa(&ip6->ip6_src), ip6_ntoa(&ip6->ip6_dst));
+	printf(" fragment: next %hhu offset %d%s ident 0x%08x",
+		ext->ext_nxt, off,
+		(ext->ext_data.fragment.offlg & IP6_MORE_FRAG) ? " MF" : "", 
+		htonl(ext->ext_data.fragment.ident));
+}
+
+static void
 _print_ip(u_char *p, int length)
 {
 	struct ip_hdr *ip;
@@ -258,10 +321,10 @@ _print_ip(u_char *p, int length)
 	if ((ip_off & IP_OFFMASK) == 0) {
 		switch (ip->ip_p) {
 		case IP_PROTO_TCP:
-			_print_tcp(p, ip_len);
+			_print_tcp(AF_INET, p, ip_len);
 			break;
 		case IP_PROTO_UDP:
-			_print_udp(p, ip_len);
+			_print_udp(AF_INET, p, ip_len);
 			break;
 		case IP_PROTO_ICMP:
 			_print_icmp(p, ip_len);
@@ -289,6 +352,56 @@ _print_ip(u_char *p, int length)
 		printf(" [ttl %d]", ip->ip_ttl);
 }
 
+static void
+_print_ip6(u_char *p, int length)
+{
+	struct ip6_hdr *ip6;
+	int plen;
+
+	ip6 = (struct ip6_hdr *)p;
+
+	if (length < IP6_HDR_LEN) {
+		printf("truncated-ip6 %d", length);
+		return;
+	}
+
+	plen = htons(ip6->ip6_plen);
+
+	switch (ip6->ip6_nxt) {
+		case IP_PROTO_TCP:
+			_print_tcp(AF_INET6, p, plen);
+			break;
+		case IP_PROTO_UDP:
+			_print_udp(AF_INET6, p, plen);
+			break;
+		case IP_PROTO_ICMPV6:
+			_print_icmp6(p, plen);
+			break;
+		case IP_PROTO_FRAGMENT:
+			_print_frag6(p, plen);
+			break;
+		default:
+			printf("%s > %s:", ip6_ntoa(&ip6->ip6_src),
+				ip6_ntoa(&ip6->ip6_dst));
+			printf(" ip-proto-%hhu ttl %hhu  payload len %hu", ip6->ip6_nxt,
+				ip6->ip6_hlim, plen);
+			break;
+	}
+
+	if (ip6->ip6_hlim <= 1)
+		printf(" [ttl %d]", ip6->ip6_hlim);
+}
+
+static void
+_print_eth(struct eth_hdr* e, int length)
+{
+		char d[20], s[20];
+		eth_ntop(&e->eth_dst, &d[0], sizeof(d));
+		eth_ntop(&e->eth_src, &s[0], sizeof(s));
+
+		printf("%s > %s type 0x%04hx length %d", d, s, htons(e->eth_type), length);
+}
+
 static char *
 timerntoa(struct timeval *tv)
 {
@@ -309,7 +422,14 @@ print_apply(void *d, struct pktq *pktq)
 	struct pkt *pkt;
 
 	TAILQ_FOREACH(pkt, pktq, pkt_next) {
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (eth_type == ETH_TYPE_IP)
 		_print_ip(pkt->pkt_eth_data, pkt->pkt_end - pkt->pkt_eth_data);
+		else if (eth_type == ETH_TYPE_IPV6)
+		  _print_ip6(pkt->pkt_eth_data, pkt->pkt_end - pkt->pkt_eth_data);
+		else
+			_print_eth(pkt->pkt_eth, pkt->pkt_end - pkt->pkt_data);
 		if (timerisset(&pkt->pkt_ts))
 			printf(" [delay %s]", timerntoa(&pkt->pkt_ts));
 		printf("\n");

+ 36 - 16
src/fragroute/mod_tcp_chaff.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_tcp_chaff.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: mod_tcp_chaff.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -15,6 +15,7 @@
 #include "pkt.h"
 #include "mod.h"
 #include "randutil.h"
+#include "iputil.h"
 
 #define CHAFF_TYPE_CKSUM	1
 #define CHAFF_TYPE_NULL		2
@@ -82,11 +83,26 @@ tcp_chaff_apply(void *d, struct pktq *pktq)
 	struct pkt *pkt, *new, *next;
 	struct tcp_opt opt;
 	int i;
+	uint16_t eth_type;
+	uint8_t nxt;
 	
 	for (pkt = TAILQ_FIRST(pktq); pkt != TAILQ_END(pktq); pkt = next) {
 		next = TAILQ_NEXT(pkt, pkt_next);
 		
-		if (pkt->pkt_ip == NULL || pkt->pkt_ip->ip_p != IP_PROTO_TCP ||
+		eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (pkt->pkt_ip == NULL)
+			continue;
+
+		if (eth_type == ETH_TYPE_IP) {
+			nxt = pkt->pkt_ip->ip_p;
+		} else if (eth_type == ETH_TYPE_IPV6) {
+			nxt = pkt->pkt_ip6->ip6_nxt;
+		} else {
+			continue;
+		}
+
+		if (nxt != IP_PROTO_TCP ||
 		    pkt->pkt_tcp == NULL || pkt->pkt_tcp_data == NULL ||
 		    (pkt->pkt_tcp->th_flags & TH_ACK) == 0)
 			continue;
@@ -97,14 +113,14 @@ tcp_chaff_apply(void *d, struct pktq *pktq)
 	
 		switch (data->type) {
 		case CHAFF_TYPE_CKSUM:
-			ip_checksum(new->pkt_ip,
+			inet_checksum(eth_type, new->pkt_ip,
 			    new->pkt_ip_data - new->pkt_eth_data);
 			new->pkt_tcp->th_sum = rand_uint16(data->rnd);
 			break;
 		case CHAFF_TYPE_NULL:
 			new->pkt_tcp->th_flags = 0;
-			ip_checksum(new->pkt_ip, new->pkt_end -
-			    new->pkt_eth_data);
+			inet_checksum(eth_type, new->pkt_ip,
+					new->pkt_ip_data - new->pkt_eth_data);
 			break;
 		case CHAFF_TYPE_PAWS:
 			/* Delete any existing TCP options. */
@@ -119,28 +135,28 @@ tcp_chaff_apply(void *d, struct pktq *pktq)
 			opt.opt_len = TCP_OPT_LEN + 8;
 			opt.opt_data.timestamp[0] = 0;
 			opt.opt_data.timestamp[1] = 0;
-			if ((i = ip_add_option(new->pkt_ip,
+			if ((i = inet_add_option(eth_type, new->pkt_ip,
 			    PKT_BUF_LEN - ETH_HDR_LEN,
 			    IP_PROTO_TCP, &opt, opt.opt_len)) < 0) {
 				pkt_free(new);
 				continue;
 			}
 			new->pkt_end += i;
-			ip_checksum(new->pkt_ip, new->pkt_end -
-			    new->pkt_eth_data);
+			inet_checksum(eth_type, new->pkt_ip,
+					new->pkt_ip_data - new->pkt_eth_data);
 			pkt_decorate(new);
 			break;
 		case CHAFF_TYPE_REXMIT:
 			new->pkt_ts.tv_usec = 1;
-			ip_checksum(new->pkt_ip, new->pkt_end -
-			    new->pkt_eth_data);
+			inet_checksum(eth_type, new->pkt_ip,
+					new->pkt_ip_data - new->pkt_eth_data);
 			break;
 		case CHAFF_TYPE_SEQ:
 			/* XXX - dunno recv window? */
 			new->pkt_tcp->th_seq = htonl(666);
 			new->pkt_tcp->th_ack = htonl(666);
-			ip_checksum(new->pkt_ip, new->pkt_end -
-			    new->pkt_eth_data);
+			inet_checksum(eth_type, new->pkt_ip,
+					new->pkt_ip_data - new->pkt_eth_data);
 			break;
 		case CHAFF_TYPE_SYN:
 			new->pkt_tcp->th_flags = TH_SYN;
@@ -150,13 +166,17 @@ tcp_chaff_apply(void *d, struct pktq *pktq)
 			new->pkt_tcp_data = NULL;
 			new->pkt_ip->ip_len = htons(new->pkt_end -
 			    new->pkt_eth_data);
-			ip_checksum(new->pkt_ip, new->pkt_end -
-			    new->pkt_eth_data);
+			inet_checksum(eth_type, new->pkt_ip,
+					new->pkt_ip_data - new->pkt_eth_data);
 			break;
 		case CHAFF_TYPE_TTL:
+			if (eth_type == ETH_TYPE_IP) {
 			new->pkt_ip->ip_ttl = data->ttl;
-			ip_checksum(new->pkt_ip, new->pkt_end -
-			    new->pkt_eth_data);
+				ip_checksum(new->pkt_ip,
+						new->pkt_ip_data - new->pkt_eth_data);
+			} else if (eth_type == ETH_TYPE_IPV6) {
+				new->pkt_ip6->ip6_hlim = data->ttl;
+			}
 			break;
 		}
 		/* Minimal random reordering. */

+ 11 - 5
src/fragroute/mod_tcp_opt.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_tcp_opt.c 2191 2009-02-01 21:34:27Z aturner $
+ * $Id: mod_tcp_opt.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -16,6 +16,7 @@
 
 #include "pkt.h"
 #include "mod.h"
+#include "iputil.h"
 
 void *
 tcp_opt_close(void *d)
@@ -55,6 +56,10 @@ tcp_opt_open(int argc, char *argv[])
 			return (tcp_opt_close(opt));
 		}
 		opt->opt_data.wscale = i;
+	} else if (strcasecmp(argv[1], "raw") == 0) {
+		if (raw_ip_opt_parse(argc - 2, &argv[2], &opt->opt_type, &opt->opt_len,
+					&opt->opt_data.data8[0], sizeof(opt->opt_data.data8)) != 0)
+			return (tcp_opt_close(opt));
 	} else
 		return (tcp_opt_close(opt));
 	
@@ -69,15 +74,16 @@ tcp_opt_apply(void *d, struct pktq *pktq)
 	size_t len;
 
 	TAILQ_FOREACH(pkt, pktq, pkt_next) {
-		len = ip_add_option(pkt->pkt_ip,
+		uint16_t eth_type = htons(pkt->pkt_eth->eth_type);
+
+		len = inet_add_option(eth_type, pkt->pkt_ip,
 		    sizeof(pkt->pkt_data) - ETH_HDR_LEN,
 		    IP_PROTO_TCP, opt, opt->opt_len);
 
 		if (len > 0) {
 			pkt->pkt_end += len;
 			pkt_decorate(pkt);
-			ip_checksum(pkt->pkt_ip, pkt->pkt_end -
-			    pkt->pkt_eth_data);
+			inet_checksum(eth_type, pkt->pkt_ip, pkt->pkt_end - pkt->pkt_eth_data);
 		}
 	}
 	return (0);
@@ -85,7 +91,7 @@ tcp_opt_apply(void *d, struct pktq *pktq)
 
 struct mod mod_tcp_opt = {
 	"tcp_opt",					/* name */
-	"tcp_opt mss|wscale <size>",			/* usage */
+	"tcp_opt mss|wscale <size>|raw <byte stream>",			/* usage */
 	tcp_opt_open,					/* open */
 	tcp_opt_apply,					/* apply */
 	tcp_opt_close					/* close */

+ 39 - 8
src/fragroute/mod_tcp_seg.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: mod_tcp_seg.c 2191 2009-02-01 21:34:27Z aturner $
+ * $Id: mod_tcp_seg.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -17,6 +17,7 @@
 #include "mod.h"
 #include "pkt.h"
 #include "randutil.h"
+#include "iputil.h"
 
 #ifndef MIN
 #define MIN(a,b)	(((a)<(b))?(a):(b))
@@ -73,22 +74,45 @@ tcp_seg_apply(void *d, struct pktq *pktq)
 	uint32_t seq;
 	int hl, tl, len;	
 	u_char *p, *p1, *p2;
+	uint16_t eth_type;
+	uint8_t nxt;
 
 	for (pkt = TAILQ_FIRST(pktq); pkt != TAILQ_END(pktq); pkt = next) {
 		next = TAILQ_NEXT(pkt, pkt_next);
 		
-		if (pkt->pkt_ip == NULL || pkt->pkt_ip->ip_p != IP_PROTO_TCP ||
+		eth_type = htons(pkt->pkt_eth->eth_type);
+
+		if (pkt->pkt_ip == NULL)
+			continue;
+
+		if (eth_type == ETH_TYPE_IP) {
+			nxt = pkt->pkt_ip->ip_p;
+		} else if (eth_type == ETH_TYPE_IPV6) {
+			nxt = pkt->pkt_ip6->ip6_nxt;
+		} else {
+			continue;
+		}
+
+		if (nxt != IP_PROTO_TCP ||
 		    pkt->pkt_tcp == NULL || pkt->pkt_tcp_data == NULL ||
 		    (pkt->pkt_tcp->th_flags & TH_ACK) == 0 ||
 		    pkt->pkt_end - pkt->pkt_tcp_data <= tcp_seg_data.size)
 			continue;
 		
+		if (eth_type == ETH_TYPE_IP) {
 		hl = pkt->pkt_ip->ip_hl << 2;
+		} else if (eth_type == ETH_TYPE_IPV6) {
+			hl = IP6_HDR_LEN;
+		} else {
+			continue;
+		}
+
 		tl = pkt->pkt_tcp->th_off << 2;
 		seq = ntohl(pkt->pkt_tcp->th_seq);
 	
 		for (p = pkt->pkt_tcp_data; p < pkt->pkt_end; p += len) {
 			new = pkt_new();
+			memcpy(new->pkt_eth, pkt->pkt_eth, (u_char*)pkt->pkt_eth_data - (u_char*)pkt->pkt_eth);
 			p1 = p, p2 = NULL;
 			len = MIN(pkt->pkt_end - p, tcp_seg_data.size);
 		
@@ -112,25 +136,32 @@ tcp_seg_apply(void *d, struct pktq *pktq)
 			memcpy(new->pkt_tcp_data, p1, len);
 			new->pkt_end = new->pkt_tcp_data + len;
 			
+			if (eth_type == ETH_TYPE_IP) {
 			new->pkt_ip->ip_id = rand_uint16(tcp_seg_data.rnd);
 			new->pkt_ip->ip_len = htons(hl + tl + len);
+			} else {
+				new->pkt_ip6->ip6_plen = htons(tl + len);
+			}
+
 			new->pkt_tcp->th_seq = htonl(seq);
-			ip_checksum(new->pkt_ip, hl + tl + len);
+			inet_checksum(eth_type, new->pkt_ip, hl + tl + len);
 			TAILQ_INSERT_BEFORE(pkt, new, pkt_next);
 			
 			if (p2 != NULL) {
 				new = pkt_dup(new);
 				new->pkt_ts.tv_usec = 1;
-				new->pkt_ip->ip_id =
-				    rand_uint16(tcp_seg_data.rnd);
-				new->pkt_ip->ip_len = htons(hl + tl +
-				    (len << 1));
+				if (eth_type == ETH_TYPE_IP) {
+					new->pkt_ip->ip_id = rand_uint16(tcp_seg_data.rnd);
+					new->pkt_ip->ip_len = htons(hl + tl + (len << 1));
+				} else if (eth_type == ETH_TYPE_IPV6) {
+					new->pkt_ip6->ip6_plen = htons(tl + (len << 1));
+				}
 				new->pkt_tcp->th_seq = htonl(seq - len);
 				
 				memcpy(new->pkt_tcp_data, p, len);
 				memcpy(new->pkt_tcp_data + len, p2, len);
 				new->pkt_end = new->pkt_tcp_data + (len << 1);
-				ip_checksum(new->pkt_ip, hl + tl + (len << 1));
+				inet_checksum(eth_type, new->pkt_ip, hl + tl + (len << 1));
 				TAILQ_INSERT_BEFORE(pkt, new, pkt_next);
 				p += len;
 			}

+ 35 - 3
src/fragroute/pkt.c

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: pkt.c 2000 2008-04-27 06:17:35Z aturner $
+ * $Id: pkt.c 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #include "config.h"
@@ -79,11 +79,18 @@ pkt_dup(struct pkt *pkt)
 	return (new);
 }
 
+#define IP6_IS_EXT(n)   \
+	((n) == IP_PROTO_HOPOPTS || (n) == IP_PROTO_DSTOPTS || \
+	 (n) == IP_PROTO_ROUTING || (n) == IP_PROTO_FRAGMENT)
+
 void
 pkt_decorate(struct pkt *pkt)
 {
 	u_char *p;
+	uint16_t eth_type;
 	int hl, len, off;
+	uint8_t next_hdr;
+	struct ip6_ext_hdr *ext;
 
 	pkt->pkt_data = pkt->pkt_buf + PKT_BUF_ALIGN;
 	pkt->pkt_eth = NULL;
@@ -99,6 +106,9 @@ pkt_decorate(struct pkt *pkt)
 	pkt->pkt_eth = (struct eth_hdr *)p;
 	p += ETH_HDR_LEN;
 
+	eth_type = htons(pkt->pkt_eth->eth_type);
+
+	if (eth_type == ETH_TYPE_IP) {
 	if (p + IP_HDR_LEN > pkt->pkt_end)
 		return;
 	
@@ -122,10 +132,29 @@ pkt_decorate(struct pkt *pkt)
 	
 	pkt->pkt_end = p + len;
 	p += hl;
+		next_hdr = pkt->pkt_ip->ip_p;
+	} else if (eth_type == ETH_TYPE_IPV6) {
+		if (p + IP6_HDR_LEN > pkt->pkt_end)
+			return;
+
+		pkt->pkt_eth_data = p;
+		p += IP6_HDR_LEN;
+		next_hdr = pkt->pkt_ip6->ip6_nxt;
+
+		for (; IP6_IS_EXT(next_hdr); p += (ext->ext_len + 1) << 3) {
+			if (p > pkt->pkt_end)
+				return;
+			ext = (struct ip6_ext_hdr *)p;
+			next_hdr = ext->ext_nxt;
+		}
+	} else {
+		return;
+	}
 
 	/* If transport layer header is longer than packet length, stop. */
-	switch (pkt->pkt_ip->ip_p) {
+	switch (next_hdr) {
 	case IP_PROTO_ICMP:
+	case IP_PROTO_ICMPV6:
 		hl = ICMP_HDR_LEN;
 		break;
 	case IP_PROTO_TCP:
@@ -146,7 +175,7 @@ pkt_decorate(struct pkt *pkt)
 	p += hl;
 
 	/* Check for transport layer data. */
-	switch (pkt->pkt_ip->ip_p) {
+	switch (next_hdr) {
 	case IP_PROTO_ICMP:
 		pkt->pkt_icmp_msg = (union icmp_msg *)p;
 		
@@ -196,6 +225,9 @@ pkt_decorate(struct pkt *pkt)
 		if (p + hl > pkt->pkt_end)
 			pkt->pkt_icmp_msg = NULL;
 		break;
+	case IP_PROTO_ICMPV6:
+		pkt->pkt_icmp_msg = (union icmp_msg *)p;
+		break;
 	case IP_PROTO_TCP:
 		if (p < pkt->pkt_end)
 			pkt->pkt_tcp_data = p;

+ 3 - 1
src/fragroute/pkt.h

@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2001 Dug Song <dugsong@monkey.org>
  *
- * $Id: pkt.h 2035 2008-05-19 05:35:24Z aturner $
+ * $Id: pkt.h 2303 2009-05-06 18:48:20Z aturner $
  */
 
 #ifndef PKT_H
@@ -34,6 +34,7 @@ struct pkt {
 	union {
 		u_char		*eth_data;
 		struct ip_hdr	*ip;
+		struct ip6_hdr	*ip6;
 	} pkt_n_hdr_u;
 	union {
 		u_char		*ip_data;
@@ -53,6 +54,7 @@ struct pkt {
 	TAILQ_ENTRY(pkt) pkt_next;
 };
 #define pkt_ip		 pkt_n_hdr_u.ip
+#define pkt_ip6		 pkt_n_hdr_u.ip6
 #define pkt_eth_data	 pkt_n_hdr_u.eth_data
 
 #define pkt_icmp	 pkt_t_hdr_u.icmp

+ 4 - 2
src/send_packets.c

@@ -1,4 +1,4 @@
-/* $Id: send_packets.c 2110 2009-01-08 00:22:22Z aturner $ */
+/* $Id: send_packets.c 2346 2009-05-19 00:14:52Z aturner $ */
 
 /*
  * Copyright (c) 2001-2008 Aaron Turner.
@@ -47,11 +47,13 @@
 #include "tcpreplay.h"
 
 #ifdef TCPREPLAY
-#include "tcpreplay_opts.h"
 
 #ifdef TCPREPLAY_EDIT
+#include "tcpreplay_edit_opts.h"
 #include "tcpedit/tcpedit.h"
 extern tcpedit_t *tcpedit;
+#else
+#include "tcpreplay_opts.h"
 #endif
 
 #endif /* TCPREPLAY */

+ 59 - 21
src/tcpbridge.1

@@ -1,7 +1,7 @@
-.TH TCPBRIDGE 1 2009-02-17 "(tcpbridge )" "Programmer's Manual"
+.TH TCPBRIDGE 1 2009-06-25 "(tcpbridge )" "Programmer's Manual"
 .\"  DO NOT EDIT THIS FILE   (tcpbridge.1)
 .\"  
-.\"  It has been AutoGen-ed  Tuesday February 17, 2009 at 06:27:05 PM PST
+.\"  It has been AutoGen-ed  Thursday June 25, 2009 at 12:25:11 PM PDT
 .\"  From the definitions    tcpbridge_opts.def
 .\"  and the template file   agman1.tpl
 .\"
@@ -42,17 +42,17 @@ Example:
 .fi
 .TP
 .BR \-s " \fInumber\fP, " \--seed "=" \fInumber\fP
-Randomize src/dst IP addresses w/ given seed.
+Randomize src/dst IPv4/v6 addresses w/ given seed.
 This option may appear up to 1 times.
 This option takes an integer number as its argument.
 .sp
-Causes the source and destination IP addresses to be pseudo 
+Causes the source and destination IPv4/v6 addresses to be pseudo 
 randomized but still maintain client/server relationships.
 Since the randomization is deterministic based on the seed, 
 you can reuse the same seed value to recreate the traffic.
 .TP
 .BR \-N " \fIstring\fP, " \--pnat "=" \fIstring\fP
-Rewrite IP addresses using pseudo-NAT.
+Rewrite IPv4/v6 addresses using pseudo-NAT.
 This option may appear up to 2 times.
 This option must not appear in combination with any of the following options:
 srcipmap.
@@ -63,28 +63,32 @@ the IP addresses.  If the IP address in the packet matches the
 first netblock, it is rewriten using the second netblock as a
 mask against the high order bits.
 
-Example:
+IPv4 Example:
 .nf
     \--pnat=192.168.0.0/16:10.77.0.0/16,172.16.0.0/12:10.1.0.0/24
 .fi
+IPv6 Example:
+.nf
+    \--pnat=[2001:db8::/32]:[dead::/16],[2001:db8::/32]:[::ffff:0:0/96]
+.fi
 .TP
 .BR \-S " \fIstring\fP, " \--srcipmap "=" \fIstring\fP
-Rewrite source IP addresses using pseudo-NAT.
+Rewrite source IPv4/v6 addresses using pseudo-NAT.
 This option may appear up to 1 times.
 This option must not appear in combination with any of the following options:
 pnat.
 .sp
 Works just like the \--pnat option, but only affects the source IP
-addresses in the IPv4 header.
+addresses in the IPv4/v6 header.
 .TP
 .BR \-D " \fIstring\fP, " \--dstipmap "=" \fIstring\fP
-Rewrite destination IP addresses using pseudo-NAT.
+Rewrite destination IPv4/v6 addresses using pseudo-NAT.
 This option may appear up to 1 times.
 This option must not appear in combination with any of the following options:
 pnat.
 .sp
 Works just like the \--pnat option, but only affects the destination IP
-addresses in the IPv4 header.
+addresses in the IPv4/v6 header.
 .TP
 .BR \-e " \fIstring\fP, " \--endpoints "=" \fIstring\fP
 Rewrite IP addresses to be between two endpoints.
@@ -92,25 +96,30 @@ This option may appear up to 1 times.
 This option must appear in combination with the following options:
 cachefile.
 .sp
-Takes a pair of colon delimited IP addresses which will be used to rewrite
+Takes a pair of colon delimited IPv4/v6 addresses which will be used to rewrite
 all traffic to appear to be between the two IP's.
 
-Example:
+IPv4 Example:
 .nf
     \--endpoints=172.16.0.1:172.16.0.2
 .fi
+IPv6 Example:
+.nf
+    \--endpoints=[2001:db8::dead:beef]:[::ffff:0:0:ac:f:0:2]
+.fi
+
 .TP
 .BR \-b ", " \--skipbroadcast
-Skip rewriting broadcast/multicast IP's.
+Skip rewriting broadcast/multicast IPv4/v6 addresses.
 .sp
 By default \--seed, \--pnat and \--endpoints will rewrite 
-broadcast and multicast IP and MAC addresses.	Setting this flag
-will keep broadcast/multicast IP and MAC addresses from being rewritten.
+broadcast and multicast IPv4/v6 and MAC addresses.	Setting this flag
+will keep broadcast/multicast IPv4/v6 and MAC addresses from being rewritten.
 .TP
 .BR \-C ", " \--fixcsum
-Force recalculation of IP/TCP/UDP checksums.
+Force recalculation of IPv4/TCP/UDP header checksums.
 .sp
-Causes each IP packet to have it's checksums recalcualted and
+Causes each IPv4/v6 packet to have it's checksums recalcualted and
 fixed.  Automatically enabled for packets modified with \fB--seed\fP, 
 \fB--pnat\fP, \fB--endpoints\fP or \fB--fixlen\fP.
 .TP
@@ -145,9 +154,9 @@ you should only use this if you know know that your OS provides the FCS when
 reading raw packets.
 .TP
 .BR \--ttl "=\fIstring\fP"
-Modify the IPv4 TTL.
+Modify the IPv4/v6 TTL/Hop Limit.
 .sp
-Allows you to modify the TTL of all the IPv4 packets.  Specify a number to hard-code
+Allows you to modify the TTL/Hop Limit of all the IPv4/v6 packets.  Specify a number to hard-code
 the value or +/-value to increase or decrease by the value provided (limited to 1-255).    
 
 Examples:
@@ -169,7 +178,36 @@ in the range  0 through 255
 .fi
 .in -4
 .sp
-Allows you to override the TOS (also known as DiffServ/ECN) value in IPv4 packets.    
+Allows you to override the TOS (also known as DiffServ/ECN) value in IPv4.
+.TP
+.BR \--tclass "=\fInumber\fP"
+Set the IPv6 Traffic Class byte.
+This option may appear up to 1 times.
+This option takes an integer number as its argument.
+The value of \fInumber\fP is constrained to being:
+.in +4
+.nf
+.na
+in the range  0 through 255
+.fi
+.in -4
+.sp
+Allows you to override the IPv6 Traffic Class field.
+.TP
+.BR \--flowlabel "=\fInumber\fP"
+Set the IPv6 Flow Label.
+This option may appear up to 1 times.
+This option takes an integer number as its argument.
+The value of \fInumber\fP is constrained to being:
+.in +4
+.nf
+.na
+in the range  0 through 1048575
+.fi
+.in -4
+.sp
+Allows you to override the 20bit IPv6 Flow Label field.  Has no effect on IPv4 
+packets.
 .TP
 .BR \-F " \fIstring\fP, " \--fixlen "=" \fIstring\fP
 Pad or truncate packet data to match header length.
@@ -177,7 +215,7 @@ This option may appear up to 1 times.
 .sp
 Packets may be truncated during capture if the snaplen is smaller then the
 packet.  This option allows you to modify the packet to pad the packet back
-out to the size stored in the IPv4 header or rewrite the IP header total length
+out to the size stored in the IPv4/v6 header or rewrite the IP header total length
 to reflect the stored packet length.
 .sp 1
 \fBpad\fP

+ 211 - 66
src/tcpbridge_opts.c

@@ -2,7 +2,7 @@
  *  
  *  DO NOT EDIT THIS FILE   (tcpbridge_opts.c)
  *  
- *  It has been AutoGen-ed  Tuesday February 17, 2009 at 06:27:03 PM PST
+ *  It has been AutoGen-ed  Thursday June 25, 2009 at 12:25:10 PM PDT
  *  From the definitions    tcpbridge_opts.def
  *  and the template file   options
  *
@@ -134,7 +134,7 @@ tSCC    zPortmap_Name[]            = "portmap";
  *  Seed option description:
  */
 tSCC    zSeedText[] =
-        "Randomize src/dst IP addresses w/ given seed";
+        "Randomize src/dst IPv4/v6 addresses w/ given seed";
 tSCC    zSeed_NAME[]               = "SEED";
 tSCC    zSeed_Name[]               = "seed";
 #define SEED_FLAGS       (OPTST_DISABLED \
@@ -145,7 +145,7 @@ tSCC    zSeed_Name[]               = "seed";
  *  "Must also have options" and "Incompatible options":
  */
 tSCC    zPnatText[] =
-        "Rewrite IP addresses using pseudo-NAT";
+        "Rewrite IPv4/v6 addresses using pseudo-NAT";
 tSCC    zPnat_NAME[]               = "PNAT";
 tSCC    zPnat_Name[]               = "pnat";
 static const int
@@ -159,7 +159,7 @@ static const int
  *  "Must also have options" and "Incompatible options":
  */
 tSCC    zSrcipmapText[] =
-        "Rewrite source IP addresses using pseudo-NAT";
+        "Rewrite source IPv4/v6 addresses using pseudo-NAT";
 tSCC    zSrcipmap_NAME[]           = "SRCIPMAP";
 tSCC    zSrcipmap_Name[]           = "srcipmap";
 static const int
@@ -173,7 +173,7 @@ static const int
  *  "Must also have options" and "Incompatible options":
  */
 tSCC    zDstipmapText[] =
-        "Rewrite destination IP addresses using pseudo-NAT";
+        "Rewrite destination IPv4/v6 addresses using pseudo-NAT";
 tSCC    zDstipmap_NAME[]           = "DSTIPMAP";
 tSCC    zDstipmap_Name[]           = "dstipmap";
 static const int
@@ -210,7 +210,7 @@ static const int
  *  Skipbroadcast option description:
  */
 tSCC    zSkipbroadcastText[] =
-        "Skip rewriting broadcast/multicast IP's";
+        "Skip rewriting broadcast/multicast IPv4/v6 addresses";
 tSCC    zSkipbroadcast_NAME[]      = "SKIPBROADCAST";
 tSCC    zSkipbroadcast_Name[]      = "skipbroadcast";
 #define SKIPBROADCAST_FLAGS       (OPTST_DISABLED)
@@ -219,7 +219,7 @@ tSCC    zSkipbroadcast_Name[]      = "skipbroadcast";
  *  Fixcsum option description:
  */
 tSCC    zFixcsumText[] =
-        "Force recalculation of IP/TCP/UDP checksums";
+        "Force recalculation of IPv4/TCP/UDP header checksums";
 tSCC    zFixcsum_NAME[]            = "FIXCSUM";
 tSCC    zFixcsum_Name[]            = "fixcsum";
 #define FIXCSUM_FLAGS       (OPTST_DISABLED)
@@ -256,7 +256,7 @@ tSCC    zEfcs_Name[]               = "efcs";
  *  Ttl option description:
  */
 tSCC    zTtlText[] =
-        "Modify the IPv4 TTL";
+        "Modify the IPv4/v6 TTL/Hop Limit";
 tSCC    zTtl_NAME[]                = "TTL";
 tSCC    zTtl_Name[]                = "ttl";
 #define TTL_FLAGS       (OPTST_DISABLED \
@@ -273,6 +273,26 @@ tSCC    zTos_Name[]                = "tos";
         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
 
 /*
+ *  Tclass option description:
+ */
+tSCC    zTclassText[] =
+        "Set the IPv6 Traffic Class byte";
+tSCC    zTclass_NAME[]             = "TCLASS";
+tSCC    zTclass_Name[]             = "tclass";
+#define TCLASS_FLAGS       (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
+ *  Flowlabel option description:
+ */
+tSCC    zFlowlabelText[] =
+        "Set the IPv6 Flow Label";
+tSCC    zFlowlabel_NAME[]          = "FLOWLABEL";
+tSCC    zFlowlabel_Name[]          = "flowlabel";
+#define FLOWLABEL_FLAGS       (OPTST_DISABLED \
+        | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
+
+/*
  *  Fixlen option description:
  */
 tSCC    zFixlenText[] =
@@ -630,9 +650,10 @@ extern tOptProc
     optionNumericVal, optionPagedUsage, optionStackArg;
 static tOptProc
     doOptEnet_Vlan_Cfi, doOptEnet_Vlan_Pri, doOptEnet_Vlan_Tag,
-    doOptExclude,       doOptInclude,       doOptLess_Help,
-    doOptLimit,         doOptMtu,           doOptPid,
-    doOptTos,           doOptVersion,       doUsageOpt;
+    doOptExclude,       doOptFlowlabel,     doOptInclude,
+    doOptLess_Help,     doOptLimit,         doOptMtu,
+    doOptPid,           doOptTclass,        doOptTos,
+    doOptVersion,       doUsageOpt;
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -807,8 +828,32 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zTosText, zTos_NAME, zTos_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 14, VALUE_OPT_FIXLEN,
-     /* equiv idx, value */ 14, VALUE_OPT_FIXLEN,
+  {  /* entry idx, value */ 14, VALUE_OPT_TCLASS,
+     /* equiv idx, value */ 14, VALUE_OPT_TCLASS,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ TCLASS_FLAGS, 0,
+     /* last opt argumnt */ { NULL },
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptTclass,
+     /* desc, NAME, name */ zTclassText, zTclass_NAME, zTclass_Name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 15, VALUE_OPT_FLOWLABEL,
+     /* equiv idx, value */ 15, VALUE_OPT_FLOWLABEL,
+     /* equivalenced to  */ NO_EQUIVALENT,
+     /* min, max, act ct */ 0, 1, 0,
+     /* opt state flags  */ FLOWLABEL_FLAGS, 0,
+     /* last opt argumnt */ { NULL },
+     /* arg list/cookie  */ NULL,
+     /* must/cannot opts */ NULL, NULL,
+     /* option proc      */ doOptFlowlabel,
+     /* desc, NAME, name */ zFlowlabelText, zFlowlabel_NAME, zFlowlabel_Name,
+     /* disablement strs */ NULL, NULL },
+
+  {  /* entry idx, value */ 16, VALUE_OPT_FIXLEN,
+     /* equiv idx, value */ 16, VALUE_OPT_FIXLEN,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ FIXLEN_FLAGS, 0,
@@ -819,8 +864,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zFixlenText, zFixlen_NAME, zFixlen_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 15, VALUE_OPT_SKIPL2BROADCAST,
-     /* equiv idx, value */ 15, VALUE_OPT_SKIPL2BROADCAST,
+  {  /* entry idx, value */ 17, VALUE_OPT_SKIPL2BROADCAST,
+     /* equiv idx, value */ 17, VALUE_OPT_SKIPL2BROADCAST,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ SKIPL2BROADCAST_FLAGS, 0,
@@ -831,8 +876,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zSkipl2broadcastText, zSkipl2broadcast_NAME, zSkipl2broadcast_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 16, VALUE_OPT_DLT,
-     /* equiv idx, value */ 16, VALUE_OPT_DLT,
+  {  /* entry idx, value */ 18, VALUE_OPT_DLT,
+     /* equiv idx, value */ 18, VALUE_OPT_DLT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DLT_FLAGS, 0,
@@ -843,8 +888,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zDltText, zDlt_NAME, zDlt_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 17, VALUE_OPT_ENET_DMAC,
-     /* equiv idx, value */ 17, VALUE_OPT_ENET_DMAC,
+  {  /* entry idx, value */ 19, VALUE_OPT_ENET_DMAC,
+     /* equiv idx, value */ 19, VALUE_OPT_ENET_DMAC,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ENET_DMAC_FLAGS, 0,
@@ -855,8 +900,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zEnet_DmacText, zEnet_Dmac_NAME, zEnet_Dmac_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 18, VALUE_OPT_ENET_SMAC,
-     /* equiv idx, value */ 18, VALUE_OPT_ENET_SMAC,
+  {  /* entry idx, value */ 20, VALUE_OPT_ENET_SMAC,
+     /* equiv idx, value */ 20, VALUE_OPT_ENET_SMAC,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ENET_SMAC_FLAGS, 0,
@@ -867,8 +912,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zEnet_SmacText, zEnet_Smac_NAME, zEnet_Smac_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 19, VALUE_OPT_ENET_VLAN,
-     /* equiv idx, value */ 19, VALUE_OPT_ENET_VLAN,
+  {  /* entry idx, value */ 21, VALUE_OPT_ENET_VLAN,
+     /* equiv idx, value */ 21, VALUE_OPT_ENET_VLAN,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ENET_VLAN_FLAGS, 0,
@@ -879,8 +924,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zEnet_VlanText, zEnet_Vlan_NAME, zEnet_Vlan_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 20, VALUE_OPT_ENET_VLAN_TAG,
-     /* equiv idx, value */ 20, VALUE_OPT_ENET_VLAN_TAG,
+  {  /* entry idx, value */ 22, VALUE_OPT_ENET_VLAN_TAG,
+     /* equiv idx, value */ 22, VALUE_OPT_ENET_VLAN_TAG,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ENET_VLAN_TAG_FLAGS, 0,
@@ -891,8 +936,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zEnet_Vlan_TagText, zEnet_Vlan_Tag_NAME, zEnet_Vlan_Tag_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 21, VALUE_OPT_ENET_VLAN_CFI,
-     /* equiv idx, value */ 21, VALUE_OPT_ENET_VLAN_CFI,
+  {  /* entry idx, value */ 23, VALUE_OPT_ENET_VLAN_CFI,
+     /* equiv idx, value */ 23, VALUE_OPT_ENET_VLAN_CFI,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ENET_VLAN_CFI_FLAGS, 0,
@@ -903,8 +948,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zEnet_Vlan_CfiText, zEnet_Vlan_Cfi_NAME, zEnet_Vlan_Cfi_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 22, VALUE_OPT_ENET_VLAN_PRI,
-     /* equiv idx, value */ 22, VALUE_OPT_ENET_VLAN_PRI,
+  {  /* entry idx, value */ 24, VALUE_OPT_ENET_VLAN_PRI,
+     /* equiv idx, value */ 24, VALUE_OPT_ENET_VLAN_PRI,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ ENET_VLAN_PRI_FLAGS, 0,
@@ -915,8 +960,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zEnet_Vlan_PriText, zEnet_Vlan_Pri_NAME, zEnet_Vlan_Pri_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 23, VALUE_OPT_HDLC_CONTROL,
-     /* equiv idx, value */ 23, VALUE_OPT_HDLC_CONTROL,
+  {  /* entry idx, value */ 25, VALUE_OPT_HDLC_CONTROL,
+     /* equiv idx, value */ 25, VALUE_OPT_HDLC_CONTROL,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ HDLC_CONTROL_FLAGS, 0,
@@ -927,8 +972,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zHdlc_ControlText, zHdlc_Control_NAME, zHdlc_Control_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 24, VALUE_OPT_HDLC_ADDRESS,
-     /* equiv idx, value */ 24, VALUE_OPT_HDLC_ADDRESS,
+  {  /* entry idx, value */ 26, VALUE_OPT_HDLC_ADDRESS,
+     /* equiv idx, value */ 26, VALUE_OPT_HDLC_ADDRESS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ HDLC_ADDRESS_FLAGS, 0,
@@ -939,8 +984,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zHdlc_AddressText, zHdlc_Address_NAME, zHdlc_Address_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 25, VALUE_OPT_USER_DLT,
-     /* equiv idx, value */ 25, VALUE_OPT_USER_DLT,
+  {  /* entry idx, value */ 27, VALUE_OPT_USER_DLT,
+     /* equiv idx, value */ 27, VALUE_OPT_USER_DLT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ USER_DLT_FLAGS, 0,
@@ -951,8 +996,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zUser_DltText, zUser_Dlt_NAME, zUser_Dlt_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 26, VALUE_OPT_USER_DLINK,
-     /* equiv idx, value */ 26, VALUE_OPT_USER_DLINK,
+  {  /* entry idx, value */ 28, VALUE_OPT_USER_DLINK,
+     /* equiv idx, value */ 28, VALUE_OPT_USER_DLINK,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 2, 0,
      /* opt state flags  */ USER_DLINK_FLAGS, 0,
@@ -963,8 +1008,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zUser_DlinkText, zUser_Dlink_NAME, zUser_Dlink_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 27, VALUE_OPT_DBUG,
-     /* equiv idx, value */ 27, VALUE_OPT_DBUG,
+  {  /* entry idx, value */ 29, VALUE_OPT_DBUG,
+     /* equiv idx, value */ 29, VALUE_OPT_DBUG,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DBUG_FLAGS, 0,
@@ -975,8 +1020,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zDbugText, zDbug_NAME, zDbug_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 28, VALUE_OPT_INTF1,
-     /* equiv idx, value */ 28, VALUE_OPT_INTF1,
+  {  /* entry idx, value */ 30, VALUE_OPT_INTF1,
+     /* equiv idx, value */ 30, VALUE_OPT_INTF1,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 1, 1, 0,
      /* opt state flags  */ INTF1_FLAGS, 0,
@@ -987,8 +1032,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zIntf1Text, zIntf1_NAME, zIntf1_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 29, VALUE_OPT_INTF2,
-     /* equiv idx, value */ 29, VALUE_OPT_INTF2,
+  {  /* entry idx, value */ 31, VALUE_OPT_INTF2,
+     /* equiv idx, value */ 31, VALUE_OPT_INTF2,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ INTF2_FLAGS, 0,
@@ -999,8 +1044,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zIntf2Text, zIntf2_NAME, zIntf2_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 30, VALUE_OPT_UNIDIR,
-     /* equiv idx, value */ 30, VALUE_OPT_UNIDIR,
+  {  /* entry idx, value */ 32, VALUE_OPT_UNIDIR,
+     /* equiv idx, value */ 32, VALUE_OPT_UNIDIR,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ UNIDIR_FLAGS, 0,
@@ -1011,8 +1056,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zUnidirText, zUnidir_NAME, zUnidir_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 31, VALUE_OPT_LISTNICS,
-     /* equiv idx, value */ 31, VALUE_OPT_LISTNICS,
+  {  /* entry idx, value */ 33, VALUE_OPT_LISTNICS,
+     /* equiv idx, value */ 33, VALUE_OPT_LISTNICS,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ LISTNICS_FLAGS, 0,
@@ -1023,8 +1068,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zListnicsText, zListnics_NAME, zListnics_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 32, VALUE_OPT_LIMIT,
-     /* equiv idx, value */ 32, VALUE_OPT_LIMIT,
+  {  /* entry idx, value */ 34, VALUE_OPT_LIMIT,
+     /* equiv idx, value */ 34, VALUE_OPT_LIMIT,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ LIMIT_FLAGS, 0,
@@ -1035,8 +1080,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zLimitText, zLimit_NAME, zLimit_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 33, VALUE_OPT_MAC,
-     /* equiv idx, value */ 33, VALUE_OPT_MAC,
+  {  /* entry idx, value */ 35, VALUE_OPT_MAC,
+     /* equiv idx, value */ 35, VALUE_OPT_MAC,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 2, 0,
      /* opt state flags  */ MAC_FLAGS, 0,
@@ -1047,8 +1092,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zMacText, zMac_NAME, zMac_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 34, VALUE_OPT_INCLUDE,
-     /* equiv idx, value */ 34, VALUE_OPT_INCLUDE,
+  {  /* entry idx, value */ 36, VALUE_OPT_INCLUDE,
+     /* equiv idx, value */ 36, VALUE_OPT_INCLUDE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ INCLUDE_FLAGS, 0,
@@ -1059,8 +1104,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zIncludeText, zInclude_NAME, zInclude_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 35, VALUE_OPT_EXCLUDE,
-     /* equiv idx, value */ 35, VALUE_OPT_EXCLUDE,
+  {  /* entry idx, value */ 37, VALUE_OPT_EXCLUDE,
+     /* equiv idx, value */ 37, VALUE_OPT_EXCLUDE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ EXCLUDE_FLAGS, 0,
@@ -1071,8 +1116,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zExcludeText, zExclude_NAME, zExclude_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 36, VALUE_OPT_PID,
-     /* equiv idx, value */ 36, VALUE_OPT_PID,
+  {  /* entry idx, value */ 38, VALUE_OPT_PID,
+     /* equiv idx, value */ 38, VALUE_OPT_PID,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ PID_FLAGS, 0,
@@ -1083,8 +1128,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zPidText, zPid_NAME, zPid_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 37, VALUE_OPT_VERBOSE,
-     /* equiv idx, value */ 37, VALUE_OPT_VERBOSE,
+  {  /* entry idx, value */ 39, VALUE_OPT_VERBOSE,
+     /* equiv idx, value */ 39, VALUE_OPT_VERBOSE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ VERBOSE_FLAGS, 0,
@@ -1095,8 +1140,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zVerboseText, zVerbose_NAME, zVerbose_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 38, VALUE_OPT_DECODE,
-     /* equiv idx, value */ 38, VALUE_OPT_DECODE,
+  {  /* entry idx, value */ 40, VALUE_OPT_DECODE,
+     /* equiv idx, value */ 40, VALUE_OPT_DECODE,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ DECODE_FLAGS, 0,
@@ -1107,8 +1152,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zDecodeText, zDecode_NAME, zDecode_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 39, VALUE_OPT_VERSION,
-     /* equiv idx, value */ 39, VALUE_OPT_VERSION,
+  {  /* entry idx, value */ 41, VALUE_OPT_VERSION,
+     /* equiv idx, value */ 41, VALUE_OPT_VERSION,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ VERSION_FLAGS, 0,
@@ -1119,8 +1164,8 @@ static tOptDesc optDesc[ OPTION_CT ] = {
      /* desc, NAME, name */ zVersionText, zVersion_NAME, zVersion_Name,
      /* disablement strs */ NULL, NULL },
 
-  {  /* entry idx, value */ 40, VALUE_OPT_LESS_HELP,
-     /* equiv idx, value */ 40, VALUE_OPT_LESS_HELP,
+  {  /* entry idx, value */ 42, VALUE_OPT_LESS_HELP,
+     /* equiv idx, value */ 42, VALUE_OPT_LESS_HELP,
      /* equivalenced to  */ NO_EQUIVALENT,
      /* min, max, act ct */ 0, 1, 0,
      /* opt state flags  */ LESS_HELP_FLAGS, 0,
@@ -1248,7 +1293,7 @@ tOptions tcpbridgeOptions = {
       NO_EQUIVALENT, /* '-#' option index */
       9 /* index of default opt */
     },
-    45 /* full option count */, 41 /* user option count */,
+    47 /* full option count */, 43 /* user option count */,
     tcpbridge_full_usage, tcpbridge_short_usage,
     NULL, NULL
 };
@@ -1366,6 +1411,106 @@ doOptTos(tOptions* pOptions, tOptDesc* pOptDesc)
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
+ *   For the tclass option.
+ */
+static void
+doOptTclass(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static const struct {long const rmin, rmax;} rng[1] = {
+        { 0, 255 } };
+    long val;
+    int  ix;
+    char * pzEnd;
+
+    if (pOptions <= OPTPROC_EMIT_LIMIT)
+        goto emit_ranges;
+
+    errno = 0;
+    val = strtol(pOptDesc->optArg.argString, &pzEnd, 0);
+    if ((pOptDesc->optArg.argString == pzEnd) || (errno != 0))
+        goto bad_value;
+
+    if (*pzEnd != '\0')
+        goto bad_value;
+    for (ix = 0; ix < 1; ix++) {
+        if (val < rng[ix].rmin)
+            continue;  /* ranges need not be ordered. */
+        if (val == rng[ix].rmin)
+            goto valid_return;
+        if (rng[ix].rmax == LONG_MIN)
+            continue;
+        if (val <= rng[ix].rmax)
+            goto valid_return;
+    }
+
+  bad_value:
+
+    option_usage_fp = stderr;
+
+  emit_ranges:
+    optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
+    return;
+
+  valid_return:
+    if ((pOptDesc->fOptState & OPTST_ALLOC_ARG) != 0) {
+        free((void *)pOptDesc->optArg.argString);
+        pOptDesc->fOptState &= ~OPTST_ALLOC_ARG;
+    }
+    pOptDesc->optArg.argInt = val;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ *   For the flowlabel option.
+ */
+static void
+doOptFlowlabel(tOptions* pOptions, tOptDesc* pOptDesc)
+{
+    static const struct {long const rmin, rmax;} rng[1] = {
+        { 0, 1048575 } };
+    long val;
+    int  ix;
+    char * pzEnd;
+
+    if (pOptions <= OPTPROC_EMIT_LIMIT)
+        goto emit_ranges;
+
+    errno = 0;
+    val = strtol(pOptDesc->optArg.argString, &pzEnd, 0);
+    if ((pOptDesc->optArg.argString == pzEnd) || (errno != 0))
+        goto bad_value;
+
+    if (*pzEnd != '\0')
+        goto bad_value;
+    for (ix = 0; ix < 1; ix++) {
+        if (val < rng[ix].rmin)
+            continue;  /* ranges need not be ordered. */
+        if (val == rng[ix].rmin)
+            goto valid_return;
+        if (rng[ix].rmax == LONG_MIN)
+            continue;
+        if (val <= rng[ix].rmax)
+            goto valid_return;
+    }
+
+  bad_value:
+
+    option_usage_fp = stderr;
+
+  emit_ranges:
+    optionShowRange(pOptions, pOptDesc, (void *)rng, 1);
+    return;
+
+  valid_return:
+    if ((pOptDesc->fOptState & OPTST_ALLOC_ARG) != 0) {
+        free((void *)pOptDesc->optArg.argString);
+        pOptDesc->fOptState &= ~OPTST_ALLOC_ARG;
+    }
+    pOptDesc->optArg.argInt = val;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
  *   For the enet-vlan-tag option.
  */
 static void

+ 53 - 47
src/tcpbridge_opts.h

@@ -2,7 +2,7 @@
  *  
  *  DO NOT EDIT THIS FILE   (tcpbridge_opts.h)
  *  
- *  It has been AutoGen-ed  Tuesday February 17, 2009 at 06:27:03 PM PST
+ *  It has been AutoGen-ed  Thursday June 25, 2009 at 12:25:10 PM PDT
  *  From the definitions    tcpbridge_opts.def
  *  and the template file   options
  *
@@ -90,40 +90,42 @@ typedef enum {
         INDEX_OPT_EFCS             = 11,
         INDEX_OPT_TTL              = 12,
         INDEX_OPT_TOS              = 13,
-        INDEX_OPT_FIXLEN           = 14,
-        INDEX_OPT_SKIPL2BROADCAST  = 15,
-        INDEX_OPT_DLT              = 16,
-        INDEX_OPT_ENET_DMAC        = 17,
-        INDEX_OPT_ENET_SMAC        = 18,
-        INDEX_OPT_ENET_VLAN        = 19,
-        INDEX_OPT_ENET_VLAN_TAG    = 20,
-        INDEX_OPT_ENET_VLAN_CFI    = 21,
-        INDEX_OPT_ENET_VLAN_PRI    = 22,
-        INDEX_OPT_HDLC_CONTROL     = 23,
-        INDEX_OPT_HDLC_ADDRESS     = 24,
-        INDEX_OPT_USER_DLT         = 25,
-        INDEX_OPT_USER_DLINK       = 26,
-        INDEX_OPT_DBUG             = 27,
-        INDEX_OPT_INTF1            = 28,
-        INDEX_OPT_INTF2            = 29,
-        INDEX_OPT_UNIDIR           = 30,
-        INDEX_OPT_LISTNICS         = 31,
-        INDEX_OPT_LIMIT            = 32,
-        INDEX_OPT_MAC              = 33,
-        INDEX_OPT_INCLUDE          = 34,
-        INDEX_OPT_EXCLUDE          = 35,
-        INDEX_OPT_PID              = 36,
-        INDEX_OPT_VERBOSE          = 37,
-        INDEX_OPT_DECODE           = 38,
-        INDEX_OPT_VERSION          = 39,
-        INDEX_OPT_LESS_HELP        = 40,
-        INDEX_OPT_HELP             = 41,
-        INDEX_OPT_MORE_HELP        = 42,
-        INDEX_OPT_SAVE_OPTS        = 43,
-        INDEX_OPT_LOAD_OPTS        = 44
+        INDEX_OPT_TCLASS           = 14,
+        INDEX_OPT_FLOWLABEL        = 15,
+        INDEX_OPT_FIXLEN           = 16,
+        INDEX_OPT_SKIPL2BROADCAST  = 17,
+        INDEX_OPT_DLT              = 18,
+        INDEX_OPT_ENET_DMAC        = 19,
+        INDEX_OPT_ENET_SMAC        = 20,
+        INDEX_OPT_ENET_VLAN        = 21,
+        INDEX_OPT_ENET_VLAN_TAG    = 22,
+        INDEX_OPT_ENET_VLAN_CFI    = 23,
+        INDEX_OPT_ENET_VLAN_PRI    = 24,
+        INDEX_OPT_HDLC_CONTROL     = 25,
+        INDEX_OPT_HDLC_ADDRESS     = 26,
+        INDEX_OPT_USER_DLT         = 27,
+        INDEX_OPT_USER_DLINK       = 28,
+        INDEX_OPT_DBUG             = 29,
+        INDEX_OPT_INTF1            = 30,
+        INDEX_OPT_INTF2            = 31,
+        INDEX_OPT_UNIDIR           = 32,
+        INDEX_OPT_LISTNICS         = 33,
+        INDEX_OPT_LIMIT            = 34,
+        INDEX_OPT_MAC              = 35,
+        INDEX_OPT_INCLUDE          = 36,
+        INDEX_OPT_EXCLUDE          = 37,
+        INDEX_OPT_PID              = 38,
+        INDEX_OPT_VERBOSE          = 39,
+        INDEX_OPT_DECODE           = 40,
+        INDEX_OPT_VERSION          = 41,
+        INDEX_OPT_LESS_HELP        = 42,
+        INDEX_OPT_HELP             = 43,
+        INDEX_OPT_MORE_HELP        = 44,
+        INDEX_OPT_SAVE_OPTS        = 45,
+        INDEX_OPT_LOAD_OPTS        = 46
 } teOptIndex;
 
-#define OPTION_CT    45
+#define OPTION_CT    47
 
 /*
  *  Interface defines for all options.  Replace "n" with the UPPER_CASED
@@ -168,25 +170,29 @@ typedef enum {
 #define VALUE_OPT_TTL            12
 #define VALUE_OPT_TOS            13
 #define OPT_VALUE_TOS            (DESC(TOS).optArg.argInt)
+#define VALUE_OPT_TCLASS         14
+#define OPT_VALUE_TCLASS         (DESC(TCLASS).optArg.argInt)
+#define VALUE_OPT_FLOWLABEL      15
+#define OPT_VALUE_FLOWLABEL      (DESC(FLOWLABEL).optArg.argInt)
 #define VALUE_OPT_FIXLEN         'F'
-#define VALUE_OPT_SKIPL2BROADCAST 15
-#define VALUE_OPT_DLT            16
-#define VALUE_OPT_ENET_DMAC      17
-#define VALUE_OPT_ENET_SMAC      18
-#define VALUE_OPT_ENET_VLAN      19
-#define VALUE_OPT_ENET_VLAN_TAG  20
+#define VALUE_OPT_SKIPL2BROADCAST 17
+#define VALUE_OPT_DLT            18
+#define VALUE_OPT_ENET_DMAC      19
+#define VALUE_OPT_ENET_SMAC      20
+#define VALUE_OPT_ENET_VLAN      21
+#define VALUE_OPT_ENET_VLAN_TAG  22
 #define OPT_VALUE_ENET_VLAN_TAG  (DESC(ENET_VLAN_TAG).optArg.argInt)
-#define VALUE_OPT_ENET_VLAN_CFI  21
+#define VALUE_OPT_ENET_VLAN_CFI  23
 #define OPT_VALUE_ENET_VLAN_CFI  (DESC(ENET_VLAN_CFI).optArg.argInt)
-#define VALUE_OPT_ENET_VLAN_PRI  22
+#define VALUE_OPT_ENET_VLAN_PRI  24
 #define OPT_VALUE_ENET_VLAN_PRI  (DESC(ENET_VLAN_PRI).optArg.argInt)
-#define VALUE_OPT_HDLC_CONTROL   23
+#define VALUE_OPT_HDLC_CONTROL   25
 #define OPT_VALUE_HDLC_CONTROL   (DESC(HDLC_CONTROL).optArg.argInt)
-#define VALUE_OPT_HDLC_ADDRESS   24
+#define VALUE_OPT_HDLC_ADDRESS   26
 #define OPT_VALUE_HDLC_ADDRESS   (DESC(HDLC_ADDRESS).optArg.argInt)
-#define VALUE_OPT_USER_DLT       25
+#define VALUE_OPT_USER_DLT       27
 #define OPT_VALUE_USER_DLT       (DESC(USER_DLT).optArg.argInt)
-#define VALUE_OPT_USER_DLINK     26
+#define VALUE_OPT_USER_DLINK     28
 #ifdef DEBUG
 #define VALUE_OPT_DBUG           'd'
 #define OPT_VALUE_DBUG           (DESC(DBUG).optArg.argInt)
@@ -195,7 +201,7 @@ typedef enum {
 #define VALUE_OPT_INTF2          'I'
 #define VALUE_OPT_UNIDIR         'u'
 #ifdef ENABLE_PCAP_FINDALLDEVS
-#define VALUE_OPT_LISTNICS       31
+#define VALUE_OPT_LISTNICS       129
 #endif /* ENABLE_PCAP_FINDALLDEVS */
 #define VALUE_OPT_LIMIT          'L'
 #define OPT_VALUE_LIMIT          (DESC(LIMIT).optArg.argInt)
@@ -206,7 +212,7 @@ typedef enum {
 #ifdef ENABLE_VERBOSE
 #define VALUE_OPT_VERBOSE        'v'
 #define SET_OPT_VERBOSE   STMTS( \
-        DESC(VERBOSE).optActualIndex = 37; \
+        DESC(VERBOSE).optActualIndex = 39; \
         DESC(VERBOSE).optActualValue = VALUE_OPT_VERBOSE; \
         DESC(VERBOSE).fOptState &= OPTST_PERSISTENT_MASK; \
         DESC(VERBOSE).fOptState |= OPTST_SET )

BIN
src/tcpedit/._edit_packet.c


BIN
src/tcpedit/._parse_args.c


BIN
src/tcpedit/._tcpedit-int.h


BIN
src/tcpedit/._tcpedit.c


BIN
src/tcpedit/._tcpedit.h


BIN
src/tcpedit/._tcpedit_opts.def


BIN
src/tcpedit/._tcpedit_stub.def


+ 77 - 49
src/tcpedit/Makefile.in

@@ -1,8 +1,9 @@
-# Makefile.in generated by automake 1.10.2 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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.
@@ -94,8 +95,9 @@
 
 VPATH = @srcdir@
 pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
 am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
 install_sh_DATA = $(install_sh) -c -m 644
 install_sh_PROGRAM = $(install_sh) -c
@@ -131,6 +133,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
 ARFLAGS = cru
 libtcpedit_a_AR = $(AR) $(ARFLAGS)
@@ -146,6 +149,7 @@ libtcpedit_a_OBJECTS = $(am_libtcpedit_a_OBJECTS)
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
+am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -399,9 +403,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/pl
 	      exit 1;; \
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/tcpedit/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/tcpedit/Makefile
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tcpedit/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/tcpedit/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
 	@case '$?' in \
@@ -419,6 +423,7 @@ $(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
+$(am__aclocal_m4_deps):
 
 clean-noinstLIBRARIES:
 	-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
@@ -455,203 +460,203 @@ distclean-compile:
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
 
 dlt_plugins.o: $(srcdir)/plugins/dlt_plugins.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dlt_plugins.o -MD -MP -MF $(DEPDIR)/dlt_plugins.Tpo -c -o dlt_plugins.o `test -f '$(srcdir)/plugins/dlt_plugins.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_plugins.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/dlt_plugins.Tpo $(DEPDIR)/dlt_plugins.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/dlt_plugins.Tpo $(DEPDIR)/dlt_plugins.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_plugins.c' object='dlt_plugins.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dlt_plugins.o `test -f '$(srcdir)/plugins/dlt_plugins.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_plugins.c
 
 dlt_plugins.obj: $(srcdir)/plugins/dlt_plugins.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dlt_plugins.obj -MD -MP -MF $(DEPDIR)/dlt_plugins.Tpo -c -o dlt_plugins.obj `if test -f '$(srcdir)/plugins/dlt_plugins.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_plugins.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_plugins.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/dlt_plugins.Tpo $(DEPDIR)/dlt_plugins.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/dlt_plugins.Tpo $(DEPDIR)/dlt_plugins.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_plugins.c' object='dlt_plugins.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dlt_plugins.obj `if test -f '$(srcdir)/plugins/dlt_plugins.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_plugins.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_plugins.c'; fi`
 
 ethernet.o: $(srcdir)/plugins/ethernet.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ethernet.o -MD -MP -MF $(DEPDIR)/ethernet.Tpo -c -o ethernet.o `test -f '$(srcdir)/plugins/ethernet.c' || echo '$(srcdir)/'`$(srcdir)/plugins/ethernet.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/ethernet.Tpo $(DEPDIR)/ethernet.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/ethernet.Tpo $(DEPDIR)/ethernet.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/ethernet.c' object='ethernet.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ethernet.o `test -f '$(srcdir)/plugins/ethernet.c' || echo '$(srcdir)/'`$(srcdir)/plugins/ethernet.c
 
 ethernet.obj: $(srcdir)/plugins/ethernet.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ethernet.obj -MD -MP -MF $(DEPDIR)/ethernet.Tpo -c -o ethernet.obj `if test -f '$(srcdir)/plugins/ethernet.c'; then $(CYGPATH_W) '$(srcdir)/plugins/ethernet.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/ethernet.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/ethernet.Tpo $(DEPDIR)/ethernet.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/ethernet.Tpo $(DEPDIR)/ethernet.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/ethernet.c' object='ethernet.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ethernet.obj `if test -f '$(srcdir)/plugins/ethernet.c'; then $(CYGPATH_W) '$(srcdir)/plugins/ethernet.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/ethernet.c'; fi`
 
 dlt_utils.o: $(srcdir)/plugins/dlt_utils.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dlt_utils.o -MD -MP -MF $(DEPDIR)/dlt_utils.Tpo -c -o dlt_utils.o `test -f '$(srcdir)/plugins/dlt_utils.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_utils.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/dlt_utils.Tpo $(DEPDIR)/dlt_utils.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/dlt_utils.Tpo $(DEPDIR)/dlt_utils.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_utils.c' object='dlt_utils.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dlt_utils.o `test -f '$(srcdir)/plugins/dlt_utils.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_utils.c
 
 dlt_utils.obj: $(srcdir)/plugins/dlt_utils.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dlt_utils.obj -MD -MP -MF $(DEPDIR)/dlt_utils.Tpo -c -o dlt_utils.obj `if test -f '$(srcdir)/plugins/dlt_utils.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_utils.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_utils.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/dlt_utils.Tpo $(DEPDIR)/dlt_utils.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/dlt_utils.Tpo $(DEPDIR)/dlt_utils.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_utils.c' object='dlt_utils.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dlt_utils.obj `if test -f '$(srcdir)/plugins/dlt_utils.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_utils.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_utils.c'; fi`
 
 en10mb.o: $(srcdir)/plugins/dlt_en10mb/en10mb.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT en10mb.o -MD -MP -MF $(DEPDIR)/en10mb.Tpo -c -o en10mb.o `test -f '$(srcdir)/plugins/dlt_en10mb/en10mb.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_en10mb/en10mb.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/en10mb.Tpo $(DEPDIR)/en10mb.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/en10mb.Tpo $(DEPDIR)/en10mb.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_en10mb/en10mb.c' object='en10mb.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o en10mb.o `test -f '$(srcdir)/plugins/dlt_en10mb/en10mb.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_en10mb/en10mb.c
 
 en10mb.obj: $(srcdir)/plugins/dlt_en10mb/en10mb.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT en10mb.obj -MD -MP -MF $(DEPDIR)/en10mb.Tpo -c -o en10mb.obj `if test -f '$(srcdir)/plugins/dlt_en10mb/en10mb.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_en10mb/en10mb.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_en10mb/en10mb.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/en10mb.Tpo $(DEPDIR)/en10mb.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/en10mb.Tpo $(DEPDIR)/en10mb.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_en10mb/en10mb.c' object='en10mb.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o en10mb.obj `if test -f '$(srcdir)/plugins/dlt_en10mb/en10mb.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_en10mb/en10mb.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_en10mb/en10mb.c'; fi`
 
 hdlc.o: $(srcdir)/plugins/dlt_hdlc/hdlc.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hdlc.o -MD -MP -MF $(DEPDIR)/hdlc.Tpo -c -o hdlc.o `test -f '$(srcdir)/plugins/dlt_hdlc/hdlc.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_hdlc/hdlc.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/hdlc.Tpo $(DEPDIR)/hdlc.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/hdlc.Tpo $(DEPDIR)/hdlc.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_hdlc/hdlc.c' object='hdlc.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hdlc.o `test -f '$(srcdir)/plugins/dlt_hdlc/hdlc.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_hdlc/hdlc.c
 
 hdlc.obj: $(srcdir)/plugins/dlt_hdlc/hdlc.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hdlc.obj -MD -MP -MF $(DEPDIR)/hdlc.Tpo -c -o hdlc.obj `if test -f '$(srcdir)/plugins/dlt_hdlc/hdlc.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_hdlc/hdlc.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_hdlc/hdlc.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/hdlc.Tpo $(DEPDIR)/hdlc.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/hdlc.Tpo $(DEPDIR)/hdlc.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_hdlc/hdlc.c' object='hdlc.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hdlc.obj `if test -f '$(srcdir)/plugins/dlt_hdlc/hdlc.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_hdlc/hdlc.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_hdlc/hdlc.c'; fi`
 
 user.o: $(srcdir)/plugins/dlt_user/user.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT user.o -MD -MP -MF $(DEPDIR)/user.Tpo -c -o user.o `test -f '$(srcdir)/plugins/dlt_user/user.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_user/user.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/user.Tpo $(DEPDIR)/user.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/user.Tpo $(DEPDIR)/user.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_user/user.c' object='user.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o user.o `test -f '$(srcdir)/plugins/dlt_user/user.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_user/user.c
 
 user.obj: $(srcdir)/plugins/dlt_user/user.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT user.obj -MD -MP -MF $(DEPDIR)/user.Tpo -c -o user.obj `if test -f '$(srcdir)/plugins/dlt_user/user.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_user/user.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_user/user.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/user.Tpo $(DEPDIR)/user.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/user.Tpo $(DEPDIR)/user.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_user/user.c' object='user.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o user.obj `if test -f '$(srcdir)/plugins/dlt_user/user.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_user/user.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_user/user.c'; fi`
 
 raw.o: $(srcdir)/plugins/dlt_raw/raw.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT raw.o -MD -MP -MF $(DEPDIR)/raw.Tpo -c -o raw.o `test -f '$(srcdir)/plugins/dlt_raw/raw.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_raw/raw.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/raw.Tpo $(DEPDIR)/raw.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/raw.Tpo $(DEPDIR)/raw.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_raw/raw.c' object='raw.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o raw.o `test -f '$(srcdir)/plugins/dlt_raw/raw.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_raw/raw.c
 
 raw.obj: $(srcdir)/plugins/dlt_raw/raw.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT raw.obj -MD -MP -MF $(DEPDIR)/raw.Tpo -c -o raw.obj `if test -f '$(srcdir)/plugins/dlt_raw/raw.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_raw/raw.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_raw/raw.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/raw.Tpo $(DEPDIR)/raw.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/raw.Tpo $(DEPDIR)/raw.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_raw/raw.c' object='raw.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o raw.obj `if test -f '$(srcdir)/plugins/dlt_raw/raw.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_raw/raw.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_raw/raw.c'; fi`
 
 null.o: $(srcdir)/plugins/dlt_null/null.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT null.o -MD -MP -MF $(DEPDIR)/null.Tpo -c -o null.o `test -f '$(srcdir)/plugins/dlt_null/null.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_null/null.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/null.Tpo $(DEPDIR)/null.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/null.Tpo $(DEPDIR)/null.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_null/null.c' object='null.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o null.o `test -f '$(srcdir)/plugins/dlt_null/null.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_null/null.c
 
 null.obj: $(srcdir)/plugins/dlt_null/null.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT null.obj -MD -MP -MF $(DEPDIR)/null.Tpo -c -o null.obj `if test -f '$(srcdir)/plugins/dlt_null/null.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_null/null.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_null/null.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/null.Tpo $(DEPDIR)/null.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/null.Tpo $(DEPDIR)/null.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_null/null.c' object='null.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o null.obj `if test -f '$(srcdir)/plugins/dlt_null/null.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_null/null.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_null/null.c'; fi`
 
 loop.o: $(srcdir)/plugins/dlt_loop/loop.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT loop.o -MD -MP -MF $(DEPDIR)/loop.Tpo -c -o loop.o `test -f '$(srcdir)/plugins/dlt_loop/loop.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_loop/loop.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/loop.Tpo $(DEPDIR)/loop.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/loop.Tpo $(DEPDIR)/loop.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_loop/loop.c' object='loop.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o loop.o `test -f '$(srcdir)/plugins/dlt_loop/loop.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_loop/loop.c
 
 loop.obj: $(srcdir)/plugins/dlt_loop/loop.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT loop.obj -MD -MP -MF $(DEPDIR)/loop.Tpo -c -o loop.obj `if test -f '$(srcdir)/plugins/dlt_loop/loop.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_loop/loop.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_loop/loop.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/loop.Tpo $(DEPDIR)/loop.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/loop.Tpo $(DEPDIR)/loop.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_loop/loop.c' object='loop.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o loop.obj `if test -f '$(srcdir)/plugins/dlt_loop/loop.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_loop/loop.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_loop/loop.c'; fi`
 
 linuxsll.o: $(srcdir)/plugins/dlt_linuxsll/linuxsll.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linuxsll.o -MD -MP -MF $(DEPDIR)/linuxsll.Tpo -c -o linuxsll.o `test -f '$(srcdir)/plugins/dlt_linuxsll/linuxsll.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_linuxsll/linuxsll.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/linuxsll.Tpo $(DEPDIR)/linuxsll.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/linuxsll.Tpo $(DEPDIR)/linuxsll.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_linuxsll/linuxsll.c' object='linuxsll.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o linuxsll.o `test -f '$(srcdir)/plugins/dlt_linuxsll/linuxsll.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_linuxsll/linuxsll.c
 
 linuxsll.obj: $(srcdir)/plugins/dlt_linuxsll/linuxsll.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT linuxsll.obj -MD -MP -MF $(DEPDIR)/linuxsll.Tpo -c -o linuxsll.obj `if test -f '$(srcdir)/plugins/dlt_linuxsll/linuxsll.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_linuxsll/linuxsll.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_linuxsll/linuxsll.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/linuxsll.Tpo $(DEPDIR)/linuxsll.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/linuxsll.Tpo $(DEPDIR)/linuxsll.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_linuxsll/linuxsll.c' object='linuxsll.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o linuxsll.obj `if test -f '$(srcdir)/plugins/dlt_linuxsll/linuxsll.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_linuxsll/linuxsll.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_linuxsll/linuxsll.c'; fi`
 
 ieee80211.o: $(srcdir)/plugins/dlt_ieee80211/ieee80211.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ieee80211.o -MD -MP -MF $(DEPDIR)/ieee80211.Tpo -c -o ieee80211.o `test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_ieee80211/ieee80211.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/ieee80211.Tpo $(DEPDIR)/ieee80211.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/ieee80211.Tpo $(DEPDIR)/ieee80211.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_ieee80211/ieee80211.c' object='ieee80211.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ieee80211.o `test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_ieee80211/ieee80211.c
 
 ieee80211.obj: $(srcdir)/plugins/dlt_ieee80211/ieee80211.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ieee80211.obj -MD -MP -MF $(DEPDIR)/ieee80211.Tpo -c -o ieee80211.obj `if test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_ieee80211/ieee80211.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_ieee80211/ieee80211.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/ieee80211.Tpo $(DEPDIR)/ieee80211.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/ieee80211.Tpo $(DEPDIR)/ieee80211.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_ieee80211/ieee80211.c' object='ieee80211.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ieee80211.obj `if test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_ieee80211/ieee80211.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_ieee80211/ieee80211.c'; fi`
 
 ieee80211_hdr.o: $(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ieee80211_hdr.o -MD -MP -MF $(DEPDIR)/ieee80211_hdr.Tpo -c -o ieee80211_hdr.o `test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/ieee80211_hdr.Tpo $(DEPDIR)/ieee80211_hdr.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/ieee80211_hdr.Tpo $(DEPDIR)/ieee80211_hdr.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c' object='ieee80211_hdr.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ieee80211_hdr.o `test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c
 
 ieee80211_hdr.obj: $(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ieee80211_hdr.obj -MD -MP -MF $(DEPDIR)/ieee80211_hdr.Tpo -c -o ieee80211_hdr.obj `if test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/ieee80211_hdr.Tpo $(DEPDIR)/ieee80211_hdr.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/ieee80211_hdr.Tpo $(DEPDIR)/ieee80211_hdr.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c' object='ieee80211_hdr.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ieee80211_hdr.obj `if test -f '$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_ieee80211/ieee80211_hdr.c'; fi`
 
 radiotap.o: $(srcdir)/plugins/dlt_radiotap/radiotap.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT radiotap.o -MD -MP -MF $(DEPDIR)/radiotap.Tpo -c -o radiotap.o `test -f '$(srcdir)/plugins/dlt_radiotap/radiotap.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_radiotap/radiotap.c
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/radiotap.Tpo $(DEPDIR)/radiotap.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/radiotap.Tpo $(DEPDIR)/radiotap.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_radiotap/radiotap.c' object='radiotap.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o radiotap.o `test -f '$(srcdir)/plugins/dlt_radiotap/radiotap.c' || echo '$(srcdir)/'`$(srcdir)/plugins/dlt_radiotap/radiotap.c
 
 radiotap.obj: $(srcdir)/plugins/dlt_radiotap/radiotap.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT radiotap.obj -MD -MP -MF $(DEPDIR)/radiotap.Tpo -c -o radiotap.obj `if test -f '$(srcdir)/plugins/dlt_radiotap/radiotap.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_radiotap/radiotap.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_radiotap/radiotap.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/radiotap.Tpo $(DEPDIR)/radiotap.Po
+@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/radiotap.Tpo $(DEPDIR)/radiotap.Po
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$(srcdir)/plugins/dlt_radiotap/radiotap.c' object='radiotap.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o radiotap.obj `if test -f '$(srcdir)/plugins/dlt_radiotap/radiotap.c'; then $(CYGPATH_W) '$(srcdir)/plugins/dlt_radiotap/radiotap.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/plugins/dlt_radiotap/radiotap.c'; fi`
@@ -674,7 +679,7 @@ tags: TAGS
 
 TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
+	set x; \
 	here=`pwd`; \
 	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 	unique=`for i in $$list; do \
@@ -682,29 +687,34 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 	  done | \
 	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
 	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
 ctags: CTAGS
 CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 		$(TAGS_FILES) $(LISP)
-	tags=; \
 	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; nonempty = 1; } \
 	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	test -z "$(CTAGS_ARGS)$$unique" \
 	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
+	     $$unique
 
 GTAGS:
 	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
 
 distclean-tags:
 	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -725,13 +735,17 @@ distdir: $(DISTFILES)
 	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 	  if test -d $$d/$$file; then \
 	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
 	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
 	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
 	    || exit 1; \
 	  fi; \
 	done
@@ -762,6 +776,7 @@ clean-generic:
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
@@ -785,6 +800,8 @@ dvi-am:
 
 html: html-am
 
+html-am:
+
 info: info-am
 
 info-am:
@@ -793,18 +810,28 @@ install-data-am:
 
 install-dvi: install-dvi-am
 
+install-dvi-am:
+
 install-exec-am:
 
 install-html: install-html-am
 
+install-html-am:
+
 install-info: install-info-am
 
+install-info-am:
+
 install-man:
 
 install-pdf: install-pdf-am
 
+install-pdf-am:
+
 install-ps: install-ps-am
 
+install-ps-am:
+
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
@@ -827,7 +854,7 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: install-am install-strip
+.MAKE: all check install install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 	clean-libtool clean-noinstLIBRARIES ctags distclean \
@@ -916,6 +943,7 @@ $(srcdir)/plugins/dlt_radiotap/radiotap.c:  $(srcdir)/tcpedit_stub.h $(srcdir)/p
 ########################################################
 # Add your plugin Makefile.am's below this line
 ########################################################
+
 # 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 - 2
src/tcpedit/checksum.c

@@ -1,4 +1,4 @@
-/* $Id: checksum.c 1895 2007-08-22 04:24:33Z aturner $ */
+/* $Id: checksum.c 2344 2009-05-17 15:42:49Z aturner $ */
 /*
  * Copyright (c) 2006 Aaron Turner.
  * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
@@ -52,6 +52,7 @@ do_checksum(tcpedit_t *tcpedit, u_int8_t *data, int proto, int len) {
     tcp_hdr_t *tcp;
     udp_hdr_t *udp;
     icmpv4_hdr_t *icmp;
+    icmpv6_hdr_t *icmp6;
     int ip_hl;
     int sum;
     
@@ -69,7 +70,14 @@ do_checksum(tcpedit_t *tcpedit, u_int8_t *data, int proto, int len) {
     if (ipv4->ip_v == 6) {
         ipv6 = (ipv6_hdr_t *)data;
         ipv4 = NULL;
-        ip_hl = 40;
+
+        proto = get_ipv6_l4proto(ipv6);
+        dbgx(3, "layer4 proto is 0x%hhu", proto);
+
+        ip_hl = (u_char*)get_layer4_v6(ipv6) - (u_char*)data;
+        dbgx(3, "ip_hl proto is 0x%d", ip_hl);
+
+        len -= (ip_hl - TCPR_IPV6_H);
     } else {
         ip_hl = ipv4->ip_hl << 2;
     }
@@ -121,6 +129,17 @@ do_checksum(tcpedit_t *tcpedit, u_int8_t *data, int proto, int len) {
             icmp->icmp_sum = CHECKSUM_CARRY(sum);
             break;
         
+        case IPPROTO_ICMP6:
+            icmp6 = (icmpv6_hdr_t *)(data + ip_hl);
+            icmp6->icmp_sum = 0;
+            if (ipv6 != NULL) {
+                sum = do_checksum_math((u_int16_t *)&ipv6->ip_src, 32);
+            }
+            sum += ntohs(IPPROTO_ICMP6 + len);
+            sum += do_checksum_math((u_int16_t *)icmp6, len);
+            icmp6->icmp_sum = CHECKSUM_CARRY(sum);
+            break;
+
      
         case IPPROTO_IP:
             ipv4->ip_sum = 0;

+ 280 - 25
src/tcpedit/edit_packet.c

@@ -1,4 +1,4 @@
-/* $Id: edit_packet.c 2211 2009-02-18 02:48:04Z aturner $ */
+/* $Id: edit_packet.c 2289 2009-05-03 19:43:01Z aturner $ */
 
 /*
  * Copyright (c) 2001-2007 Aaron Turner.
@@ -51,6 +51,10 @@ static u_int32_t randomize_ipv4_addr(tcpedit_t *tcpedit, u_int32_t ip);
 static u_int32_t remap_ipv4(tcpedit_t *tcpedit, tcpr_cidr_t *cidr, const u_int32_t original);
 static int is_unicast_ipv4(tcpedit_t *tcpedit, u_int32_t ip);
 
+static void randomize_ipv6_addr(tcpedit_t *tcpedit, struct tcpr_in6_addr *addr);
+static int remap_ipv6(tcpedit_t *tcpedit, tcpr_cidr_t *cidr, struct tcpr_in6_addr *addr);
+static int is_multicast_ipv6(tcpedit_t *tcpedit, struct tcpr_in6_addr *addr);
+
 /**
  * this code re-calcs the IP and Layer 4 checksums
  * the IMPORTANT THING is that the Layer 4 header 
@@ -61,7 +65,7 @@ static int is_unicast_ipv4(tcpedit_t *tcpedit, u_int32_t ip);
  * Returns 0 on sucess, -1 on error
  */
 int
-fix_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, ipv4_hdr_t *ip_hdr)
+fix_ipv4_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, ipv4_hdr_t *ip_hdr)
 {
     int ret1 = 0, ret2 = 0;
     assert(tcpedit);
@@ -89,6 +93,30 @@ fix_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, ipv4_hdr_t *ip_hdr
     return TCPEDIT_OK;
 }
 
+int
+fix_ipv6_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, ipv6_hdr_t *ip6_hdr)
+{
+    int ret = 0;
+    assert(tcpedit);
+    assert(pkthdr);
+    assert(ip6_hdr);
+
+
+    /* calc the L4 checksum if we have the whole packet && not a frag or first frag */
+    if (pkthdr->caplen == pkthdr->len) {
+        ret = do_checksum(tcpedit, (u_char *) ip6_hdr, ip6_hdr->ip_nh,
+            htons(ip6_hdr->ip_len));
+        if (ret < 0)
+            return TCPEDIT_ERROR;
+    }
+
+    /* what do we return? */
+    if (ret == TCPEDIT_WARN)
+        return TCPEDIT_WARN;
+
+    return TCPEDIT_OK;
+}
+
 /**
  * returns a new 32bit integer which is the randomized IP 
  * based upon the user specified seed
@@ -105,6 +133,30 @@ randomize_ipv4_addr(tcpedit_t *tcpedit, u_int32_t ip)
     return ((ip ^ htonl(tcpedit->seed)) - (ip & htonl(tcpedit->seed)));
 }
 
+static void
+randomize_ipv6_addr(tcpedit_t *tcpedit, struct tcpr_in6_addr *addr)
+{
+    u_int32_t *p;
+    int i;
+    u_char was_multicast;
+
+    assert(tcpedit);
+
+    p = &addr->__u6_addr.__u6_addr32[0];
+
+    was_multicast = is_multicast_ipv6(tcpedit, addr);
+
+    for (i = 0; i < 4; ++i) {
+        p[i] = ((p[i] ^ htonl(tcpedit->seed)) - (p[i] & htonl(tcpedit->seed)));
+    }
+
+    if (was_multicast) {
+        addr->tcpr_s6_addr[0] = 0xff;
+    } else if (is_multicast_ipv6(tcpedit, addr)) {
+        addr->tcpr_s6_addr[0] = 0xaa;
+    }
+}
+
 
 /**
  * randomizes the source and destination IP addresses based on a 
@@ -124,10 +176,8 @@ randomize_ipv4(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
     assert(ip_hdr);
 
 #ifdef DEBUG
-    strlcpy(srcip, get_addr2name4(ip_hdr->ip_src.s_addr, 
-                RESOLVE), 16);
-    strlcpy(dstip, get_addr2name4(ip_hdr->ip_dst.s_addr, 
-                RESOLVE), 16);
+    strlcpy(srcip, get_addr2name4(ip_hdr->ip_src.s_addr, RESOLVE), 16);
+    strlcpy(dstip, get_addr2name4(ip_hdr->ip_dst.s_addr, RESOLVE), 16);
 #endif
 
     /* randomize IP addresses based on the value of random */
@@ -145,10 +195,8 @@ randomize_ipv4(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
     }
 
 #ifdef DEBUG    
-    strlcpy(srcip, get_addr2name4(ip_hdr->ip_src.s_addr, 
-                RESOLVE), 16);
-    strlcpy(dstip, get_addr2name4(ip_hdr->ip_dst.s_addr, 
-                RESOLVE), 16);
+    strlcpy(srcip, get_addr2name4(ip_hdr->ip_src.s_addr, RESOLVE), 16);
+    strlcpy(dstip, get_addr2name4(ip_hdr->ip_dst.s_addr, RESOLVE), 16);
 #endif
 
     dbgx(1, "New Src IP: %s\tNew Dst IP: %s\n", srcip, dstip);
@@ -156,6 +204,46 @@ randomize_ipv4(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
     return(1);
 }
 
+int
+randomize_ipv6(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
+        u_char *pktdata, ipv6_hdr_t *ip6_hdr)
+{
+#ifdef DEBUG
+    char srcip[INET6_ADDRSTRLEN], dstip[INET6_ADDRSTRLEN];
+#endif
+    assert(tcpedit);
+    assert(pkthdr);
+    assert(pktdata);
+    assert(ip6_hdr);
+
+#ifdef DEBUG
+    strlcpy(srcip, get_addr2name6(&ip6_hdr->ip_src, RESOLVE), INET6_ADDRSTRLEN);
+    strlcpy(dstip, get_addr2name6(&ip6_hdr->ip_dst, RESOLVE), INET6_ADDRSTRLEN);
+#endif
+
+    /* randomize IP addresses based on the value of random */
+    dbgx(1, "Old Src IP: %s\tOld Dst IP: %s", srcip, dstip);
+
+    /* don't rewrite broadcast addresses */
+    if ((tcpedit->skip_broadcast && !is_multicast_ipv6(tcpedit, &ip6_hdr->ip_dst))
+        || !tcpedit->skip_broadcast) {
+        randomize_ipv6_addr(tcpedit, &ip6_hdr->ip_dst);
+    }
+
+    if ((tcpedit->skip_broadcast && !is_multicast_ipv6(tcpedit, &ip6_hdr->ip_src))
+        || !tcpedit->skip_broadcast) {
+        randomize_ipv6_addr(tcpedit, &ip6_hdr->ip_src);
+    }
+
+#ifdef DEBUG
+    strlcpy(srcip, get_addr2name6(&ip6_hdr->ip_src, RESOLVE), INET6_ADDRSTRLEN);
+    strlcpy(dstip, get_addr2name6(&ip6_hdr->ip_dst, RESOLVE), INET6_ADDRSTRLEN);
+#endif
+
+    dbgx(1, "New Src IP: %s\tNew Dst IP: %s\n", srcip, dstip);
+
+    return(1);
+}
 
 /**
  * this code will untruncate a packet via padding it with null
@@ -165,7 +253,7 @@ randomize_ipv4(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
 
 int
 untrunc_packet(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, 
-        u_char *pktdata, ipv4_hdr_t *ip_hdr)
+        u_char *pktdata, ipv4_hdr_t *ip_hdr, ipv6_hdr_t *ip6_hdr)
 {
     int l2len;
     assert(tcpedit);
@@ -173,7 +261,7 @@ untrunc_packet(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
     assert(pktdata);
 
     /* if actual len == cap len or there's no IP header, don't do anything */
-    if ((pkthdr->caplen == pkthdr->len) || (ip_hdr == NULL)) {
+    if ((pkthdr->caplen == pkthdr->len) || (ip_hdr == NULL && ip6_hdr == NULL)) {
         /* unless we're in MTU truncate mode */
         if (! tcpedit->mtu_truncate)
             return(0);
@@ -207,13 +295,15 @@ untrunc_packet(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr,
         pkthdr->len = pkthdr->caplen;
     }
     else if (tcpedit->mtu_truncate) {
-        if (pkthdr->len > (tcpedit->mtu + l2len)) {
+        if (pkthdr->len > (u_int16_t)(tcpedit->mtu + l2len)) {
             /* first truncate the packet */
             pkthdr->len = pkthdr->caplen = l2len + tcpedit->mtu;
             
             /* if ip_hdr exists, update the length */
             if (ip_hdr != NULL) {
                 ip_hdr->ip_len = htons(tcpedit->mtu);
+            } else if (ip6_hdr != NULL) {
+                ip6_hdr->ip_len = htons(tcpedit->mtu - sizeof(*ip6_hdr));
             } else {
                  /* for non-IP frames, don't try to fix checksums */  
                 return 0;
@@ -237,7 +327,7 @@ int
 extract_data(tcpedit_t *tcpedit, const u_char *pktdata, int caplen, 
         char *l7data[])
 {
-    int datalen = 0;
+    int datalen = 0; /* amount of data beyond ip header */
     ipv4_hdr_t *ip_hdr = NULL;
     tcp_hdr_t *tcp_hdr = NULL;
     udp_hdr_t *udp_hdr = NULL;
@@ -254,7 +344,8 @@ extract_data(tcpedit_t *tcpedit, const u_char *pktdata, int caplen,
                     tcpedit->runtime.dlt1, &dataptr)) == NULL)
         return 0;
 
-    /* figure out the actual datalen which might be < the caplen
+    /* 
+     * figure out the actual datalen which might be < the caplen
      * due to ethernet padding 
      */
     if (caplen > ntohs(ip_hdr->ip_len)) {
@@ -271,7 +362,7 @@ extract_data(tcpedit_t *tcpedit, const u_char *pktdata, int caplen,
 
     /* TCP ? */
     if (ip_hdr->ip_p == IPPROTO_TCP) {
-        tcp_hdr = (tcp_hdr_t *) get_layer4(ip_hdr);
+        tcp_hdr = (tcp_hdr_t *) get_layer4_v4(ip_hdr);
         datalen -= tcp_hdr->th_off << 2;
         if (datalen <= 0)
             goto nodata;
@@ -281,7 +372,7 @@ extract_data(tcpedit_t *tcpedit, const u_char *pktdata, int caplen,
 
     /* UDP ? */
     else if (ip_hdr->ip_p == IPPROTO_UDP) {
-        udp_hdr = (udp_hdr_t *) get_layer4(ip_hdr);
+        udp_hdr = (udp_hdr_t *) get_layer4_v4(ip_hdr);
         datalen -= TCPR_UDP_H;
         if (datalen <= 0)
             goto nodata;
@@ -350,6 +441,45 @@ rewrite_ipv4_ttl(tcpedit_t *tcpedit, ipv4_hdr_t *ip_hdr)
 }
 
 /**
+ * rewrites an IPv6 packet's hop limit based on the rules
+ * return 0 if no change, 1 if changed
+ */
+int
+rewrite_ipv6_hlim(tcpedit_t *tcpedit, ipv6_hdr_t *ip6_hdr)
+{
+    assert(tcpedit);
+
+    /* make sure there's something to edit */
+    if (ip6_hdr == NULL || tcpedit->ttl_mode == TCPEDIT_TTL_OFF)
+        return(0);
+
+    switch(tcpedit->ttl_mode) {
+    case TCPEDIT_TTL_SET:
+        if (ip6_hdr->ip_hl == tcpedit->ttl_value)
+            return(0);           /* no change required */
+        ip6_hdr->ip_hl = tcpedit->ttl_value;
+        break;
+    case TCPEDIT_TTL_ADD:
+        if (((int)ip6_hdr->ip_hl + tcpedit->ttl_value) > 255) {
+            ip6_hdr->ip_hl = 255;
+        } else {
+            ip6_hdr->ip_hl += tcpedit->ttl_value;
+        }
+        break;
+    case TCPEDIT_TTL_SUB:
+        if (ip6_hdr->ip_hl <= tcpedit->ttl_value) {
+            ip6_hdr->ip_hl = 1;
+        } else {
+            ip6_hdr->ip_hl -= tcpedit->ttl_value;
+        }
+        break;
+    default:
+        errx(1, "invalid ttl_mode: %d", tcpedit->ttl_mode);
+    }
+    return(1);
+}
+
+/**
  * takes a CIDR notation netblock and uses that to "remap" given IP
  * onto that netblock.  ie: 10.0.0.0/8 and 192.168.55.123 -> 10.168.55.123
  * while 10.150.9.0/24 and 192.168.55.123 -> 10.150.9.123
@@ -362,6 +492,10 @@ remap_ipv4(tcpedit_t *tcpedit, tcpr_cidr_t *cidr, const u_int32_t original)
     assert(tcpedit);
     assert(cidr);
     
+    if (cidr->family != AF_INET) {
+        return 0;
+    }
+
     /* don't rewrite broadcast addresses */
     if (tcpedit->skip_broadcast && !is_unicast_ipv4(tcpedit, original))
         return original;
@@ -372,7 +506,7 @@ remap_ipv4(tcpedit_t *tcpedit, tcpr_cidr_t *cidr, const u_int32_t original)
     mask = mask << (32 - cidr->masklen);
 
     /* apply the mask to the network */
-    network = htonl(cidr->network) & mask;
+    network = htonl(cidr->u.network) & mask;
 
     /* apply the reverse of the mask to the IP */
     mask = mask ^ 0xffffffff;
@@ -385,6 +519,39 @@ remap_ipv4(tcpedit_t *tcpedit, tcpr_cidr_t *cidr, const u_int32_t original)
     return(htonl(result));
 }
 
+static int
+remap_ipv6(tcpedit_t *tcpedit, tcpr_cidr_t *cidr, struct tcpr_in6_addr *addr)
+{
+    int i, j, k;
+
+    assert(tcpedit);
+    assert(cidr);
+
+    if (cidr->family != AF_INET6) {
+        return 0;
+    }
+
+    /* don't rewrite broadcast addresses */
+    if (tcpedit->skip_broadcast && is_multicast_ipv6(tcpedit, addr))
+        return 0;
+
+    j = cidr->masklen / 8;
+
+    for (i = 0; i < j; i++)
+        addr->tcpr_s6_addr[i] = cidr->u.network6.tcpr_s6_addr[i];
+
+    if ((k = cidr->masklen % 8) == 0)
+        return 1;
+
+    k = ~0 << (8 - k);
+    i = addr->tcpr_s6_addr[i] & k;
+
+    addr->tcpr_s6_addr[i] = (cidr->u.network6.tcpr_s6_addr[j] & (0xff << (8 - k))) |
+      (addr->tcpr_s6_addr[i] & (0xff >> k));
+
+    return 1;
+}
+
 /**
  * rewrite IP address (layer3)
  * uses -N to rewrite (map) one subnet onto another subnet
@@ -471,6 +638,86 @@ rewrite_ipv4l3(tcpedit_t *tcpedit, ipv4_hdr_t *ip_hdr, tcpr_dir_t direction)
     return (diddst + didsrc);
 }
 
+int
+rewrite_ipv6l3(tcpedit_t *tcpedit, ipv6_hdr_t *ip6_hdr, tcpr_dir_t direction)
+{
+    tcpr_cidrmap_t *cidrmap1 = NULL, *cidrmap2 = NULL;
+    int didsrc = 0, diddst = 0, loop = 1;
+
+    assert(tcpedit);
+    assert(ip6_hdr);
+
+    /* first check the src/dst IP maps */
+    if (tcpedit->srcipmap != NULL) {
+        if (ip6_in_cidr(tcpedit->srcipmap->from, &ip6_hdr->ip_src)) {
+            remap_ipv6(tcpedit, tcpedit->srcipmap->to, &ip6_hdr->ip_src);
+            dbgx(2, "Remapped src addr to: %s", get_addr2name6(&ip6_hdr->ip_src, RESOLVE));
+        }
+    }
+
+    if (tcpedit->dstipmap != NULL) {
+        if (ip6_in_cidr(tcpedit->dstipmap->from, &ip6_hdr->ip_dst)) {
+            remap_ipv6(tcpedit, tcpedit->dstipmap->to, &ip6_hdr->ip_dst);
+            dbgx(2, "Remapped src addr to: %s", get_addr2name6(&ip6_hdr->ip_dst, RESOLVE));
+        }
+    }
+
+    /* anything else to rewrite? */
+    if (tcpedit->cidrmap1 == NULL)
+        return(0);
+
+    /* don't play with the main pointers */
+    if (direction == TCPR_DIR_C2S) {
+        cidrmap1 = tcpedit->cidrmap1;
+        cidrmap2 = tcpedit->cidrmap2;
+    } else {
+        cidrmap1 = tcpedit->cidrmap2;
+        cidrmap2 = tcpedit->cidrmap1;
+    }
+
+
+    /* loop through the cidrmap to rewrite */
+    do {
+        if ((! diddst) && ip6_in_cidr(cidrmap2->from, &ip6_hdr->ip_dst)) {
+            remap_ipv6(tcpedit, cidrmap2->to, &ip6_hdr->ip_dst);
+            dbgx(2, "Remapped dst addr to: %s", get_addr2name6(&ip6_hdr->ip_dst, RESOLVE));
+            diddst = 1;
+        }
+        if ((! didsrc) && ip6_in_cidr(cidrmap1->from, &ip6_hdr->ip_src)) {
+            remap_ipv6(tcpedit, cidrmap1->to, &ip6_hdr->ip_src);
+            dbgx(2, "Remapped src addr to: %s", get_addr2name6(&ip6_hdr->ip_src, RESOLVE));
+            didsrc = 1;
+        }
+
+        /*
+         * loop while we haven't modified both src/dst AND
+         * at least one of the cidr maps have a next pointer
+         */
+        if ((! (diddst && didsrc)) &&
+            (! ((cidrmap1->next == NULL) && (cidrmap2->next == NULL)))) {
+
+            /* increment our ptr's if possible */
+            if (cidrmap1->next != NULL)
+                cidrmap1 = cidrmap1->next;
+
+            if (cidrmap2->next != NULL)
+                cidrmap2 = cidrmap2->next;
+
+        } else {
+            loop = 0;
+        }
+
+        /* Later on we should support various IP protocols which embed
+         * the IP address in the application layer.  Things like
+         * DNS and FTP.
+         */
+
+    } while (loop);
+
+    /* return how many changes we made */
+    return (diddst + didsrc);
+}
+
 /**
  * Randomize the IP addresses in an ARP packet based on the user seed
  * return 0 if no change, or 1 for a change
@@ -649,11 +896,19 @@ is_unicast_ipv4(tcpedit_t *tcpedit, u_int32_t ip)
         
     return 1;
 }
-/*
- Local Variables:
- mode:c
- indent-tabs-mode:nil
- c-basic-offset:4
- End:
-*/
+
+/**
+ * returns 1 if the IPv6 address is a multicast address, otherwise, returns 0
+ * for unicast/anycast addresses.  Returns -1 on error
+ */
+static int
+is_multicast_ipv6(tcpedit_t *tcpedit, struct tcpr_in6_addr *addr)
+{
+    assert(tcpedit);
+
+    if (addr->tcpr_s6_addr[0] == 0xff)
+        return 1;
+
+    return 0;
+}
 

+ 13 - 3
src/tcpedit/edit_packet.h

@@ -1,4 +1,4 @@
-/* $Id: edit_packet.h 1983 2008-04-25 04:51:07Z aturner $ */
+/* $Id: edit_packet.h 2289 2009-05-03 19:43:01Z aturner $ */
 
 /*
  * Copyright (c) 2001-2004 Aaron Turner.
@@ -37,26 +37,36 @@
 #include "common.h"
 
 int untrunc_packet(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, 
-        u_char *pktdata, ipv4_hdr_t *ip_hdr);
+        u_char *pktdata, ipv4_hdr_t *ip_hdr, ipv6_hdr_t *ip6_hdr);
 
 int randomize_ipv4(tcpedit_t *tcpedit, struct pcap_pkthdr *pktdhr, 
         u_char *pktdata, ipv4_hdr_t *ip_hdr);
 
+int randomize_ipv6(tcpedit_t *tcpedit, struct pcap_pkthdr *pktdhr,
+        u_char *pktdata, ipv6_hdr_t *ip_hdr);
+
 int randomize_iparp(tcpedit_t *tcpedit, struct pcap_pkthdr *pkthdr, 
         u_char *pktdata, int datalink);
 
-int fix_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkdhdr, 
+int fix_ipv4_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkdhdr,
         ipv4_hdr_t *ip_hdr);
 
+int fix_ipv6_checksums(tcpedit_t *tcpedit, struct pcap_pkthdr *pkdhdr,
+        ipv6_hdr_t *ip_hdr);
+
 int extract_data(tcpedit_t *tcpedit, const u_char *pktdata, 
         int caplen, char *l7data[]);
 
 int rewrite_ipv4l3(tcpedit_t *tcpedit, ipv4_hdr_t *ip_hdr, tcpr_dir_t direction);
 
+int rewrite_ipv6l3(tcpedit_t *tcpedit, ipv6_hdr_t *ip_hdr, tcpr_dir_t direction);
+
 int rewrite_iparp(tcpedit_t *tcpedit, arp_hdr_t *arp_hdr, int direction);
 
 int rewrite_ipv4_ttl(tcpedit_t *tcpedit, ipv4_hdr_t *ip_hdr);
 
+int rewrite_ipv6_hlim(tcpedit_t *tcpedit, ipv6_hdr_t *ip6_hdr);
+
 #define BROADCAST_IP 4294967295
 
 #endif

+ 5 - 1
src/tcpedit/parse_args.c

@@ -1,4 +1,4 @@
-/* $Id: parse_args.c 2211 2009-02-18 02:48:04Z aturner $ */
+/* $Id: parse_args.c 2314 2009-05-07 05:42:47Z aturner $ */
 
 /*
  * Copyright (c) 2006 Aaron Turner.
@@ -144,6 +144,10 @@ tcpedit_post_args(tcpedit_t **tcpedit_ex) {
     if (HAVE_OPT(TOS))
         tcpedit->tos = OPT_VALUE_TOS;
 
+    /* --flowlabel */
+    if (HAVE_OPT(FLOWLABEL))
+        tcpedit->flowlabel = OPT_VALUE_FLOWLABEL;
+
     /* --mtu */
     if (HAVE_OPT(MTU))
         tcpedit->mtu = OPT_VALUE_MTU;

BIN
src/tcpedit/plugins/dlt_en10mb/._en10mb.c


BIN
src/tcpedit/plugins/dlt_en10mb/._en10mb_opts.def


+ 34 - 9
src/tcpedit/portmap.c

@@ -1,4 +1,4 @@
-/* $Id: portmap.c 1895 2007-08-22 04:24:33Z aturner $ */
+/* $Id: portmap.c 2290 2009-05-03 19:44:32Z aturner $ */
 
 /*
  * Copyright (c) 2001-2007 Aaron Turner.
@@ -211,8 +211,8 @@ map_port(tcpedit_portmap_t *portmap_data, long port)
  * returns 1 for changes made or 0 for none
  */
 
-int
-rewrite_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr)
+static int
+rewrite_ports(tcpedit_t *tcpedit, u_char protocol, u_char *layer4)
 {
     tcp_hdr_t *tcp_hdr = NULL;
     udp_hdr_t *udp_hdr = NULL;
@@ -224,10 +224,8 @@ rewrite_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr)
     assert(tcpedit->portmap);
     portmap = tcpedit->portmap;
 
-    if (*ip_hdr == NULL) {
-        return 0;
-    } else if ((*ip_hdr)->ip_p == IPPROTO_TCP) {
-        tcp_hdr = (tcp_hdr_t *)get_layer4(*ip_hdr);
+    if (protocol == IPPROTO_TCP) {
+        tcp_hdr = (tcp_hdr_t *)layer4;
 
         /* check if we need to remap the destination port */
         newport = map_port(portmap, tcp_hdr->th_dport);
@@ -243,8 +241,8 @@ rewrite_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr)
             changes ++;
         }
         
-    } else if ((*ip_hdr)->ip_p == IPPROTO_UDP) {
-        udp_hdr = (udp_hdr_t *)get_layer4(*ip_hdr);
+    } else if (protocol == IPPROTO_UDP) {
+        udp_hdr = (udp_hdr_t *)layer4;
 
         /* check if we need to remap the destination port */
         newport = map_port(portmap, udp_hdr->uh_dport);
@@ -265,6 +263,33 @@ rewrite_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr)
     return changes;
 }
 
+int
+rewrite_ipv4_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr)
+{
+    assert(tcpedit);
+
+    if (*ip_hdr == NULL) {
+        return 0;
+    } else if ((*ip_hdr)->ip_p == IPPROTO_TCP || (*ip_hdr)->ip_p == IPPROTO_UDP) {
+        return rewrite_ports(tcpedit, (*ip_hdr)->ip_p, get_layer4_v4(*ip_hdr));
+    }
+
+    return 0;
+}
+
+int
+rewrite_ipv6_ports(tcpedit_t *tcpedit, ipv6_hdr_t **ip6_hdr)
+{
+    assert(tcpedit);
+
+    if (*ip6_hdr == NULL) {
+        return 0;
+    } else if ((*ip6_hdr)->ip_nh == IPPROTO_TCP || (*ip6_hdr)->ip_nh == IPPROTO_UDP) {
+        return rewrite_ports(tcpedit, (*ip6_hdr)->ip_nh, ((u_char*)*ip6_hdr) + TCPR_IPV6_H);
+    }
+    return 0;
+}
+
 /*
  Local Variables:
  mode:c

+ 3 - 2
src/tcpedit/portmap.h

@@ -1,4 +1,4 @@
-/* $Id: portmap.h 1757 2007-03-22 05:38:56Z aturner $ */
+/* $Id: portmap.h 2290 2009-05-03 19:44:32Z aturner $ */
 
 /*
  * Copyright (c) 2001-2007 Aaron Turner.
@@ -39,7 +39,8 @@ int parse_portmap(tcpedit_portmap_t **portmapdata, const char *ourstr);
 void free_portmap(tcpedit_portmap_t *portmap);
 void print_portmap(tcpedit_portmap_t *portmap);
 long map_port(tcpedit_portmap_t *portmap , long port);
-int rewrite_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr);
+int rewrite_ipv4_ports(tcpedit_t *tcpedit, ipv4_hdr_t **ip_hdr);
+int rewrite_ipv6_ports(tcpedit_t *tcpedit, ipv6_hdr_t **ip_hdr);
 
 #endif
 

+ 9 - 3
src/tcpedit/tcpedit-int.h

@@ -1,4 +1,4 @@
-/* $Id: tcpedit-int.h 2211 2009-02-18 02:48:04Z aturner $ */
+/* $Id: tcpedit-int.h 2315 2009-05-07 17:35:07Z aturner $ */
 
 /*
  * Copyright (c) 2006-2007 Aaron Turner.
@@ -112,8 +112,14 @@ struct tcpedit_s {
 #define TCPEDIT_TTL_SUB 0x3
     u_int8_t ttl_value;
 
-    /* TOS/DiffServ/ECN */
-    int tos;  /* -1 is disabled, else copy value */
+    /* TOS/DiffServ/ECN, -1 is disabled, else copy value */
+    int tos;
+    
+    /* IPv6 FlowLabel, -1 is disabled, else copy value */
+    int flowlabel;
+    
+    /* IPv6 TClass, -1 is disabled, else copy value */
+    int tclass;
     
     /* rewrite end-point IP addresses between cidrmap1 & cidrmap2 */
     tcpr_cidrmap_t *cidrmap1;       /* tcpprep cache data */

+ 74 - 9
src/tcpedit/tcpedit.c

@@ -1,4 +1,4 @@
-/* $Id: tcpedit.c 2211 2009-02-18 02:48:04Z aturner $ */
+/* $Id: tcpedit.c 2317 2009-05-07 17:57:11Z aturner $ */
 
 /*
  * Copyright (c) 2001-2007 Aaron Turner.
@@ -71,8 +71,10 @@ tcpedit_packet(tcpedit_t *tcpedit, struct pcap_pkthdr **pkthdr,
         u_char **pktdata, tcpr_dir_t direction)
 {
     ipv4_hdr_t *ip_hdr = NULL;
+    ipv6_hdr_t *ip6_hdr = NULL;
     arp_hdr_t *arp_hdr = NULL;
     int l2len = 0, l2proto, retval = 0, dst_dlt, src_dlt, pktlen, lendiff;
+    int ipflags = 0, tclass = 0;
     int needtorecalc = 0;           /* did the packet change? if so, checksum */
     u_char *packet = *pktdata;
     assert(tcpedit);
@@ -134,8 +136,14 @@ tcpedit_packet(tcpedit_t *tcpedit, struct pcap_pkthdr **pkthdr,
             return TCPEDIT_ERROR;
         }        
         dbgx(3, "Packet has an IPv4 header: %p...", ip_hdr);
+    } else if (l2proto == htons(ETHERTYPE_IP6)) {
+        ip6_hdr = (ipv6_hdr_t *)tcpedit_dlt_l3data(tcpedit->dlt_ctx, src_dlt, packet, (*pkthdr)->caplen);
+        if (ip6_hdr == NULL) {
+            return TCPEDIT_ERROR;
+        }
+        dbgx(3, "Packet has an IPv6 header: %p...", ip6_hdr);
     } else {
-        dbgx(3, "Packet isn't IPv4: 0x%04x", l2proto);
+        dbgx(3, "Packet isn't IPv4 or IPv6: 0x%04x", l2proto);
         /* non-IP packets have a NULL ip_hdr struct */
         ip_hdr = NULL;
     }
@@ -152,26 +160,68 @@ tcpedit_packet(tcpedit_t *tcpedit, struct pcap_pkthdr **pkthdr,
 
         /* rewrite TCP/UDP ports */
         if (tcpedit->portmap != NULL) {
-            if ((retval = rewrite_ports(tcpedit, &ip_hdr)) < 0)
+            if ((retval = rewrite_ipv4_ports(tcpedit, &ip_hdr)) < 0)
                 return TCPEDIT_ERROR;
             needtorecalc += retval;
         }
+    }
+    /* IPv6 edits */
+    else if (ip6_hdr != NULL) {
+        /* rewrite the hop limit */
+        needtorecalc += rewrite_ipv6_hlim(tcpedit, ip6_hdr);
+
+        /* set traffic class? */
+        if (tcpedit->tclass > -1) {
+            /* calculate the bits */
+            tclass = tcpedit->tclass << 20;
+            
+            /* convert our 4 bytes to an int */
+            memcpy(&ipflags, &ip6_hdr->ip_flags, 4);
+            
+            /* strip out the old tclass bits */
+            ipflags = ntohl(ipflags) & 0xf00fffff;
+
+            /* add the tclass bits back */
+            ipflags += tclass; 
+            ipflags = htonl(ipflags);
+            memcpy(&ip6_hdr->ip_flags, &ipflags, 4);
+        }
+
+        /* set the flow label? */
+        if (tcpedit->flowlabel > -1) {
+            memcpy(&ipflags, &ip6_hdr->ip_flags, 4);
+            ipflags = ntohl(ipflags) & 0xfff00000;
+            ipflags += tcpedit->flowlabel;
+            ipflags = htonl(ipflags);
+            memcpy(&ip6_hdr->ip_flags, &ipflags, 4);
+        }
 
+        /* rewrite TCP/UDP ports */
+        if (tcpedit->portmap != NULL) {
+            if ((retval = rewrite_ipv6_ports(tcpedit, &ip6_hdr)) < 0)
+                return TCPEDIT_ERROR;
+            needtorecalc += retval;
+        }
     }
+
     /* (Un)truncate or MTU truncate packet? */
     if (tcpedit->fixlen || tcpedit->mtu_truncate) {
-        if ((retval = untrunc_packet(tcpedit, *pkthdr, packet, ip_hdr)) < 0)
+        if ((retval = untrunc_packet(tcpedit, *pkthdr, packet, ip_hdr, ip6_hdr)) < 0)
             return TCPEDIT_ERROR;
         needtorecalc += retval;
     }
     
-    /* rewrite IP addresses in IPv4 or ARP */
+    /* rewrite IP addresses in IPv4/IPv6 or ARP */
     if (tcpedit->rewrite_ip) {
         /* IP packets */
         if (ip_hdr != NULL) {
             if ((retval = rewrite_ipv4l3(tcpedit, ip_hdr, direction)) < 0)
                 return TCPEDIT_ERROR;
             needtorecalc += retval;
+        } else if (ip6_hdr != NULL) {
+            if ((retval = rewrite_ipv6l3(tcpedit, ip6_hdr, direction)) < 0)
+                return TCPEDIT_ERROR;
+            needtorecalc += retval;
         }
 
         /* ARP packets */
@@ -196,6 +246,12 @@ tcpedit_packet(tcpedit_t *tcpedit, struct pcap_pkthdr **pkthdr,
                 return TCPEDIT_ERROR;
             needtorecalc += retval;
 
+        } else if (ip6_hdr != NULL) {
+            if ((retval = randomize_ipv6(tcpedit, *pkthdr, packet,
+                    ip6_hdr)) < 0)
+                return TCPEDIT_ERROR;
+            needtorecalc += retval;
+
         /* ARP packets */
         } else if (l2proto == htons(ETHERTYPE_ARP)) {
             if (direction == TCPR_DIR_C2S) {
@@ -211,8 +267,14 @@ tcpedit_packet(tcpedit_t *tcpedit, struct pcap_pkthdr **pkthdr,
     }
 
     /* do we need to fix checksums? -- must always do this last! */
-    if ((tcpedit->fixcsum || needtorecalc) && (ip_hdr != NULL)) {
-        retval = fix_checksums(tcpedit, *pkthdr, ip_hdr);
+    if ((tcpedit->fixcsum || needtorecalc)) {
+        if (ip_hdr != NULL) {
+            retval = fix_ipv4_checksums(tcpedit, *pkthdr, ip_hdr);
+        } else if (ip6_hdr != NULL) {
+            retval = fix_ipv6_checksums(tcpedit, *pkthdr, ip6_hdr);
+        } else {
+            retval = TCPEDIT_OK;
+        }
         if (retval < 0) {
             return TCPEDIT_ERROR;
         } else if (retval == TCPEDIT_WARN) {
@@ -220,7 +282,6 @@ tcpedit_packet(tcpedit_t *tcpedit, struct pcap_pkthdr **pkthdr,
         }
     }
 
-    
     tcpedit_dlt_merge_l3data(tcpedit->dlt_ctx, dst_dlt, packet, (*pkthdr)->caplen, (u_char *)ip_hdr);
 
     tcpedit->runtime.total_bytes += (*pkthdr)->caplen;
@@ -243,7 +304,11 @@ tcpedit_init(tcpedit_t **tcpedit_ex, int dlt)
         return TCPEDIT_ERROR;
 
     tcpedit->mtu = DEFAULT_MTU; /* assume 802.3 Ethernet */
-    tcpedit->tos = -1; /* disabled by default */
+
+    /* disabled by default */
+    tcpedit->tos = -1;
+    tcpedit->tclass = -1;
+    tcpedit->flowlabel = -1;
  
     memset(&(tcpedit->runtime), 0, sizeof(tcpedit_runtime_t));
     tcpedit->runtime.dlt1 = dlt;

+ 51 - 19
src/tcpedit/tcpedit_opts.def

@@ -26,10 +26,10 @@ flag = {
     name        = seed;
     value       = s;
     arg-type    = number;
-    descrip     = "Randomize src/dst IP addresses w/ given seed";
+    descrip     = "Randomize src/dst IPv4/v6 addresses w/ given seed";
     max         = 1;
     doc         = <<- EOText
-Causes the source and destination IP addresses to be pseudo 
+Causes the source and destination IPv4/v6 addresses to be pseudo 
 randomized but still maintain client/server relationships.
 Since the randomization is deterministic based on the seed, 
 you can reuse the same seed value to recreate the traffic.
@@ -44,7 +44,7 @@ flag = {
     stack-arg;
     flags-cant  = srcipmap;
     flass-cant  = dstipmap;
-    descrip     = "Rewrite IP addresses using pseudo-NAT";
+    descrip     = "Rewrite IPv4/v6 addresses using pseudo-NAT";
     doc         = <<- EOText
 Takes a comma delimited series of colon delimited CIDR
 netblock pairs.  Each netblock pair is evaluated in order against
@@ -52,10 +52,14 @@ the IP addresses.  If the IP address in the packet matches the
 first netblock, it is rewriten using the second netblock as a
 mask against the high order bits.
 
-Example:
+IPv4 Example:
 @example
 --pnat=192.168.0.0/16:10.77.0.0/16,172.16.0.0/12:10.1.0.0/24
 @end example
+IPv6 Example:
+@example
+--pnat=[2001:db8::/32]:[dead::/16],[2001:db8::/32]:[::ffff:0:0/96]
+@end example
 EOText; 
 };
 
@@ -65,10 +69,10 @@ flag = {
     arg-type    = string;
     max         = 1;
     flags-cant  = pnat;
-    descrip     = "Rewrite source IP addresses using pseudo-NAT";
+    descrip     = "Rewrite source IPv4/v6 addresses using pseudo-NAT";
     doc         = <<- EOText
 Works just like the --pnat option, but only affects the source IP
-addresses in the IPv4 header.
+addresses in the IPv4/v6 header.
 EOText;
 };
 
@@ -78,10 +82,10 @@ flag = {
     arg-type    = string;
     max         = 1;
     flags-cant  = pnat;
-    descrip     = "Rewrite destination IP addresses using pseudo-NAT";
+    descrip     = "Rewrite destination IPv4/v6 addresses using pseudo-NAT";
     doc         = <<- EOText
 Works just like the --pnat option, but only affects the destination IP
-addresses in the IPv4 header.
+addresses in the IPv4/v6 header.
 EOText;
 };
 
@@ -95,33 +99,38 @@ flag = {
     flags-must  = cachefile;
     descrip     = "Rewrite IP addresses to be between two endpoints";
     doc         = <<- EOText
-Takes a pair of colon delimited IP addresses which will be used to rewrite
+Takes a pair of colon delimited IPv4/v6 addresses which will be used to rewrite
 all traffic to appear to be between the two IP's.
 
-Example:
+IPv4 Example:
 @example
 --endpoints=172.16.0.1:172.16.0.2
 @end example
+IPv6 Example:
+@example
+--endpoints=[2001:db8::dead:beef]:[::ffff:0:0:ac:f:0:2]
+@end example
+
 EOText;
 };
 
 flag = {
 	name		= skipbroadcast;
 	value		= b;
-	descrip		= "Skip rewriting broadcast/multicast IP's";
+	descrip		= "Skip rewriting broadcast/multicast IPv4/v6 addresses";
 	doc			= <<- EOText
 By default --seed, --pnat and --endpoints will rewrite 
-broadcast and multicast IP and MAC addresses.	Setting this flag
-will keep broadcast/multicast IP and MAC addresses from being rewritten.
+broadcast and multicast IPv4/v6 and MAC addresses.	Setting this flag
+will keep broadcast/multicast IPv4/v6 and MAC addresses from being rewritten.
 EOText;
 };
 
 flag = {
     name        = fixcsum;
     value       = C;
-    descrip     = "Force recalculation of IP/TCP/UDP checksums";
+    descrip     = "Force recalculation of IPv4/TCP/UDP header checksums";
     doc         = <<- EOText
-Causes each IP packet to have it's checksums recalcualted and
+Causes each IPv4/v6 packet to have it's checksums recalcualted and
 fixed.  Automatically enabled for packets modified with @samp{--seed}, 
 @samp{--pnat}, @samp{--endpoints} or @samp{--fixlen}.
 EOText;
@@ -165,10 +174,10 @@ EOText;
 
 flag = {
     name        = ttl;
-    descrip     = "Modify the IPv4 TTL";
+    descrip     = "Modify the IPv4/v6 TTL/Hop Limit";
     arg-type    = string;
     doc         = <<- EOText
-Allows you to modify the TTL of all the IPv4 packets.  Specify a number to hard-code
+Allows you to modify the TTL/Hop Limit of all the IPv4/v6 packets.  Specify a number to hard-code
 the value or +/-value to increase or decrease by the value provided (limited to 1-255).    
 
 Examples:
@@ -187,7 +196,30 @@ flag = {
     arg-range   = "0->255";
     max         = 1;
     doc         = <<- EOText
-Allows you to override the TOS (also known as DiffServ/ECN) value in IPv4 packets.    
+Allows you to override the TOS (also known as DiffServ/ECN) value in IPv4.
+EOText;
+};
+
+flag = {
+    name        = tclass;
+    descrip     = "Set the IPv6 Traffic Class byte";
+    arg-type    = number;
+    arg-range   = "0->255";
+    max         = 1;
+    doc         = <<- EOText
+Allows you to override the IPv6 Traffic Class field.
+EOText;
+};
+
+flag = {
+    name        = flowlabel;
+    descrip     = "Set the IPv6 Flow Label";
+    arg-type    = number;
+    arg-range   = "0->1048575";
+    max         = 1;
+    doc         = <<- EOText
+Allows you to override the 20bit IPv6 Flow Label field.  Has no effect on IPv4 
+packets.
 EOText;
 };
 
@@ -200,7 +232,7 @@ flag = {
     doc         = <<- EOText
 Packets may be truncated during capture if the snaplen is smaller then the
 packet.  This option allows you to modify the packet to pad the packet back
-out to the size stored in the IPv4 header or rewrite the IP header total length
+out to the size stored in the IPv4/v6 header or rewrite the IP header total length
 to reflect the stored packet length.
 @table @bullet
 @item

+ 33 - 27
src/tcpedit/tcpedit_stub.h

@@ -2,7 +2,7 @@
  *  
  *  DO NOT EDIT THIS FILE   (tcpedit_stub.h)
  *  
- *  It has been AutoGen-ed  Tuesday February 17, 2009 at 06:26:43 PM PST
+ *  It has been AutoGen-ed  Thursday June 25, 2009 at 12:25:12 PM PDT
  *  From the definitions    tcpedit_stub.def
  *  and the template file   options
  *
@@ -45,23 +45,25 @@ typedef enum {
         INDEX_OPT_EFCS             = 11,
         INDEX_OPT_TTL              = 12,
         INDEX_OPT_TOS              = 13,
-        INDEX_OPT_FIXLEN           = 14,
-        INDEX_OPT_SKIPL2BROADCAST  = 15,
-        INDEX_OPT_DLT              = 16,
-        INDEX_OPT_ENET_DMAC        = 17,
-        INDEX_OPT_ENET_SMAC        = 18,
-        INDEX_OPT_ENET_VLAN        = 19,
-        INDEX_OPT_ENET_VLAN_TAG    = 20,
-        INDEX_OPT_ENET_VLAN_CFI    = 21,
-        INDEX_OPT_ENET_VLAN_PRI    = 22,
-        INDEX_OPT_HDLC_CONTROL     = 23,
-        INDEX_OPT_HDLC_ADDRESS     = 24,
-        INDEX_OPT_USER_DLT         = 25,
-        INDEX_OPT_USER_DLINK       = 26,
+        INDEX_OPT_TCLASS           = 14,
+        INDEX_OPT_FLOWLABEL        = 15,
+        INDEX_OPT_FIXLEN           = 16,
+        INDEX_OPT_SKIPL2BROADCAST  = 17,
+        INDEX_OPT_DLT              = 18,
+        INDEX_OPT_ENET_DMAC        = 19,
+        INDEX_OPT_ENET_SMAC        = 20,
+        INDEX_OPT_ENET_VLAN        = 21,
+        INDEX_OPT_ENET_VLAN_TAG    = 22,
+        INDEX_OPT_ENET_VLAN_CFI    = 23,
+        INDEX_OPT_ENET_VLAN_PRI    = 24,
+        INDEX_OPT_HDLC_CONTROL     = 25,
+        INDEX_OPT_HDLC_ADDRESS     = 26,
+        INDEX_OPT_USER_DLT         = 27,
+        INDEX_OPT_USER_DLINK       = 28,
         LIBRARY_OPTION_COUNT
 } teOptIndex;
 
-#define OPTION_CT    27
+#define OPTION_CT    29
 
 /*
  *  Interface defines for all options.  Replace "n" with the UPPER_CASED
@@ -107,25 +109,29 @@ extern tOptDesc * const tcpedit_tcpedit_optDesc_p;
 #define VALUE_OPT_TTL            12
 #define VALUE_OPT_TOS            13
 #define OPT_VALUE_TOS            (DESC(TOS).optArg.argInt)
+#define VALUE_OPT_TCLASS         14
+#define OPT_VALUE_TCLASS         (DESC(TCLASS).optArg.argInt)
+#define VALUE_OPT_FLOWLABEL      15
+#define OPT_VALUE_FLOWLABEL      (DESC(FLOWLABEL).optArg.argInt)
 #define VALUE_OPT_FIXLEN         'F'
-#define VALUE_OPT_SKIPL2BROADCAST 15
-#define VALUE_OPT_DLT            16
-#define VALUE_OPT_ENET_DMAC      17
-#define VALUE_OPT_ENET_SMAC      18
-#define VALUE_OPT_ENET_VLAN      19
-#define VALUE_OPT_ENET_VLAN_TAG  20
+#define VALUE_OPT_SKIPL2BROADCAST 17
+#define VALUE_OPT_DLT            18
+#define VALUE_OPT_ENET_DMAC      19
+#define VALUE_OPT_ENET_SMAC      20
+#define VALUE_OPT_ENET_VLAN      21
+#define VALUE_OPT_ENET_VLAN_TAG  22
 #define OPT_VALUE_ENET_VLAN_TAG  (DESC(ENET_VLAN_TAG).optArg.argInt)
-#define VALUE_OPT_ENET_VLAN_CFI  21
+#define VALUE_OPT_ENET_VLAN_CFI  23
 #define OPT_VALUE_ENET_VLAN_CFI  (DESC(ENET_VLAN_CFI).optArg.argInt)
-#define VALUE_OPT_ENET_VLAN_PRI  22
+#define VALUE_OPT_ENET_VLAN_PRI  24
 #define OPT_VALUE_ENET_VLAN_PRI  (DESC(ENET_VLAN_PRI).optArg.argInt)
-#define VALUE_OPT_HDLC_CONTROL   23
+#define VALUE_OPT_HDLC_CONTROL   25
 #define OPT_VALUE_HDLC_CONTROL   (DESC(HDLC_CONTROL).optArg.argInt)
-#define VALUE_OPT_HDLC_ADDRESS   24
+#define VALUE_OPT_HDLC_ADDRESS   26
 #define OPT_VALUE_HDLC_ADDRESS   (DESC(HDLC_ADDRESS).optArg.argInt)
-#define VALUE_OPT_USER_DLT       25
+#define VALUE_OPT_USER_DLT       27
 #define OPT_VALUE_USER_DLT       (DESC(USER_DLT).optArg.argInt)
-#define VALUE_OPT_USER_DLINK     26
+#define VALUE_OPT_USER_DLINK     28
 #define VALUE_OPT_HELP          '?'
 #define VALUE_OPT_MORE_HELP     '!'
 /* extracted from /usr/local/share/autogen/opthead.tpl near line 415 */

+ 21 - 12
src/tcpprep.1

@@ -1,7 +1,7 @@
-.TH TCPPREP 1 2009-01-18 "(tcpprep )" "Programmer's Manual"
+.TH TCPPREP 1 2009-06-25 "(tcpprep )" "Programmer's Manual"
 .\"  DO NOT EDIT THIS FILE   (tcpprep.1)
 .\"  
-.\"  It has been AutoGen-ed  Sunday January 18, 2009 at 10:08:32 AM PST
+.\"  It has been AutoGen-ed  Thursday June 25, 2009 at 12:25:11 PM PDT
 .\"  From the definitions    tcpprep_opts.def
 .\"  and the template file   agman1.tpl
 .\"
@@ -97,6 +97,15 @@ auto, port, regex, mac.
 Specify a comma delimited list of CIDR netblocks to match against
 the source IP of each packet.  Packets matching any of the CIDR's
 are classified as servers.
+
+IPv4 Example:
+.nf
+    \--cidr=192.168.0.0/16,172.16.0.0/12,10.0.0.0/8
+.fi
+IPv6 Example:
+.nf
+    \--cidr=[::ffff:0:0/96],[fe80::/16]
+.fi
 .TP
 .BR \-r " \fIstring\fP, " \--regex "=" \fIstring\fP
 Regex-split mode.
@@ -113,8 +122,8 @@ This option may appear up to 1 times.
 This option must not appear in combination with any of the following options:
 auto, regex, cidr, mac.
 .sp
-Specifies that TCP and UDP traffic should be classified as client
-or server based upon the destination port of the header.
+Specifies that TCP and UDP traffic over IPv4 and IPv6 should be classified 
+as client or server based upon the destination port of the header.
 .TP
 .BR \-e " \fIstring\fP, " \--mac "=" \fIstring\fP
 Source MAC split mode.
@@ -161,16 +170,16 @@ send/edit packets which match the provided rule.  Rules can be one of:
 
 .sp
 .IR "S:<CIDR1>,... "
-- Source IP must match specified CIDR(s)
+- Source IP must match specified IPv4/v6 CIDR(s)
 .sp
 .IR "D:<CIDR1>,... "
-- Destination IP must match specified CIDR(s)
+- Destination IP must match specified IPv4/v6 CIDR(s)
 .sp
 .IR "B:<CIDR1>,... "
-- Both source and destination IP must match specified CIDR(s)
+- Both source and destination IP must match specified IPv4/v6 CIDR(s)
 .sp
 .IR "E:<CIDR1>,... "
-- Either IP must match specified CIDR(s)
+- Either IP must match specified IPv4/v6 CIDR(s)
 .sp
 .IR "P:<LIST>      "
 - Must be one of the listed packets where the list
@@ -196,16 +205,16 @@ send/edit packets which do NOT match the provided rule.  Rules can be one of:
 
 .sp
 .IR "S:<CIDR1>,... "
-- Source IP must not match specified CIDR(s)
+- Source IP must not match specified IPv4/v6 CIDR(s)
 .sp
 .IR "D:<CIDR1>,... "
-- Destination IP must not match specified CIDR(s)
+- Destination IP must not match specified IPv4/v6 CIDR(s)
 .sp
 .IR "B:<CIDR1>,... "
-- Both source and destination IP must not match specified CIDR(s)
+- Both source and destination IP must not match specified IPv4/v6 CIDR(s)
 .sp
 .IR "E:<CIDR1>,... "
-- Either IP must not match specified CIDR(s)
+- Either IP must not match specified IPv4/v6 CIDR(s)
 .sp
 .IR "P:<LIST>      "
 - Must not be one of the listed packets where the list

+ 139 - 53
src/tcpprep.c

@@ -1,4 +1,4 @@
-/* $Id: tcpprep.c 2169 2009-01-21 20:07:02Z aturner $ */
+/* $Id: tcpprep.c 2302 2009-05-06 18:41:29Z aturner $ */
 
 /*
  * Copyright (c) 2001-2007 Aaron Turner.
@@ -85,9 +85,10 @@ static void post_args(int, char *[]);
 static void print_comment(const char *);
 static void print_info(const char *);
 static void print_stats(const char *);
-static int check_ip_regex(const unsigned long ip);
+static int check_ipv4_regex(const unsigned long ip);
+static int check_ipv6_regex(const struct tcpr_in6_addr *addr);
 static COUNTER process_raw_packets(pcap_t * pcap);
-static int check_dst_port(ipv4_hdr_t *ip_hdr, int len);
+static int check_dst_port(ipv4_hdr_t *ip_hdr, ipv6_hdr_t *ip6_hdr, int len);
 
 
 /*
@@ -213,21 +214,36 @@ main(int argc, char *argv[])
  * returns 1 for true, 0 for false
  */
 static int 
-check_dst_port(ipv4_hdr_t *ip_hdr, int len)
+check_dst_port(ipv4_hdr_t *ip_hdr, ipv6_hdr_t *ip6_hdr, int len)
 {
     tcp_hdr_t *tcp_hdr = NULL;
     udp_hdr_t *udp_hdr = NULL;
-
-    assert(ip_hdr);
-
-    if (len < ((ip_hdr->ip_hl * 4) + 4))
-        return 0; /* not enough data in the packet to know */
-
+    u_char proto;
+    u_char *l4;
+
+    if (ip_hdr) {
+        if (len < ((ip_hdr->ip_hl * 4) + 4))
+            return 0; /* not enough data in the packet to know */
+
+        proto = ip_hdr->ip_p;
+        l4 = get_layer4_v4(ip_hdr);
+    } else if (ip6_hdr) {
+        if (len < (TCPR_IPV6_H + 4))
+            return 0; /* not enough data in the packet to know */
+
+        proto = get_ipv6_l4proto(ip6_hdr);
+        dbgx(3, "Our layer4 proto is 0x%hhu", proto);
+        l4 = get_layer4_v6(ip6_hdr);
+        
+        dbgx(3, "Found proto %u at offset %p.  base %p (%u)", proto, (void *)l4, (void *)ip6_hdr, (l4 - (u_char *)ip6_hdr));
+    } else {
+        assert(0);
+    }
 
     dbg(3, "Checking the destination port...");
 
-    if (ip_hdr->ip_p == IPPROTO_TCP) {
-        tcp_hdr = (tcp_hdr_t *)get_layer4(ip_hdr);
+    if (proto == IPPROTO_TCP) {
+        tcp_hdr = (tcp_hdr_t *)l4;
 
         /* is a service? */
         if (options.services.tcp[ntohs(tcp_hdr->th_dport)]) {
@@ -238,8 +254,8 @@ check_dst_port(ipv4_hdr_t *ip_hdr, int len)
         /* nope */
         dbgx(1, "TCP packet is NOT destined for a server port: %d", ntohs(tcp_hdr->th_dport));
         return 0;
-    } else if (ip_hdr->ip_p == IPPROTO_UDP) {
-        udp_hdr = (udp_hdr_t *)get_layer4(ip_hdr);
+    } else if (proto == IPPROTO_UDP) {
+        udp_hdr = (udp_hdr_t *)l4;
 
         /* is a service? */
         if (options.services.udp[ntohs(udp_hdr->uh_dport)]) {
@@ -264,7 +280,7 @@ check_dst_port(ipv4_hdr_t *ip_hdr, int len)
  * 0 for false
  */
 static int
-check_ip_regex(const unsigned long ip)
+check_ipv4_regex(const unsigned long ip)
 {
     int eflags = 0;
     u_char src_ip[16];
@@ -275,14 +291,30 @@ check_ip_regex(const unsigned long ip)
     strlcpy((char *)src_ip, (char *)get_addr2name4(ip, RESOLVE),
             sizeof(src_ip));
     if (regexec(&options.preg, (char *)src_ip, nmatch, pmatch, eflags) == 0) {
-        return (1);
-    }
-    else {
-        return (0);
+        return 1;
+    } else {
+        return 0;
     }
 
 }
 
+static int
+check_ipv6_regex(const struct tcpr_in6_addr *addr)
+{
+    int eflags = 0;
+    u_char src_ip[INET6_ADDRSTRLEN];
+    size_t nmatch = 0;
+    regmatch_t *pmatch = NULL;
+
+    memset(src_ip, '\0', 16);
+    strlcpy((char *)src_ip, (char *)get_addr2name6(addr, RESOLVE), sizeof(src_ip));
+    if (regexec(&options.preg, (char *)src_ip, nmatch, pmatch, eflags) == 0) {
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
 /**
  * uses libpcap library to parse the packets and build
  * the cache file.
@@ -291,6 +323,7 @@ static COUNTER
 process_raw_packets(pcap_t * pcap)
 {
     ipv4_hdr_t *ip_hdr = NULL;
+    ipv6_hdr_t *ip6_hdr = NULL;
     eth_hdr_t *eth_hdr = NULL;
     struct pcap_pkthdr pkthdr;
     const u_char *pktdata = NULL;
@@ -337,14 +370,27 @@ process_raw_packets(pcap_t * pcap)
         eth_hdr = (eth_hdr_t *)pktdata;
 
         if (options.mode != MAC_MODE) {
-
+            dbg(3, "Looking for IPv4/v6 header in non-MAC mode");
+            
             /* get the IP header (if any) */
             buffptr = ipbuff;
-            ip_hdr = (ipv4_hdr_t *)get_ipv4(pktdata, pkthdr.caplen, 
-                    pcap_datalink(pcap), &buffptr);
-        
-            if (ip_hdr == NULL) {
-                dbg(2, "Packet isn't IP");
+    
+            /* first look for IPv4 */
+            if ((ip_hdr = (ipv4_hdr_t *)get_ipv4(pktdata, pkthdr.caplen, 
+                    pcap_datalink(pcap), &buffptr))) {
+                dbg(2, "Packet is IPv4");
+                    
+            } 
+            
+            /* then look for IPv6 */
+            else if ((ip6_hdr = (ipv6_hdr_t *)get_ipv6(pktdata, pkthdr.caplen,
+                    pcap_datalink(pcap), &buffptr))) {
+                dbg(2, "Packet is IPv6");    
+            } 
+            
+            /* we're something else... */
+            else {
+                dbg(2, "Packet isn't IPv4/v6");
 
                 /* we don't want to cache these packets twice */
                 if (options.mode != AUTO_MODE) {
@@ -352,16 +398,24 @@ process_raw_packets(pcap_t * pcap)
                     add_cache(&options.cachedata, SEND, options.nonip);
                 }
 
+                /* go to next packet */
                 continue;
             }
-        
+    
             l2len = get_l2len(pktdata, pkthdr.caplen, pcap_datalink(pcap));
 
             /* look for include or exclude CIDR match */
             if (options.xX.cidr != NULL) {
-                if (!process_xX_by_cidr(options.xX.mode, options.xX.cidr, ip_hdr)) {
-                    add_cache(&options.cachedata, DONT_SEND, 0);
-                    continue;
+                if (ip_hdr) {
+                    if (!process_xX_by_cidr_ipv4(options.xX.mode, options.xX.cidr, ip_hdr)) {
+                        add_cache(&options.cachedata, DONT_SEND, 0);
+                        continue;
+                    }
+                } else if (ip6_hdr) {
+                    if (!process_xX_by_cidr_ipv6(options.xX.mode, options.xX.cidr, ip6_hdr)) {
+                        add_cache(&options.cachedata, DONT_SEND, 0);
+                        continue;
+                    }
                 }
             }
         }
@@ -369,7 +423,11 @@ process_raw_packets(pcap_t * pcap)
         switch (options.mode) {
         case REGEX_MODE:
             dbg(2, "processing regex mode...");
-            direction = check_ip_regex(ip_hdr->ip_src.s_addr);
+            if (ip_hdr) {
+                direction = check_ipv4_regex(ip_hdr->ip_src.s_addr);
+            } else if (ip6_hdr) {
+                direction = check_ipv6_regex(&ip6_hdr->ip_src);
+            }
 
             /* reverse direction? */
             if (HAVE_OPT(REVERSE) && (direction == TCPR_DIR_C2S || direction == TCPR_DIR_S2C))
@@ -380,7 +438,11 @@ process_raw_packets(pcap_t * pcap)
 
         case CIDR_MODE:
             dbg(2, "processing cidr mode...");
-            direction = check_ip_cidr(options.cidrdata, ip_hdr->ip_src.s_addr) ? TCPR_DIR_C2S : TCPR_DIR_S2C;
+            if (ip_hdr) {
+                direction = check_ip_cidr(options.cidrdata, ip_hdr->ip_src.s_addr) ? TCPR_DIR_C2S : TCPR_DIR_S2C;
+            } else if (ip6_hdr) {
+                direction = check_ip6_cidr(options.cidrdata, &ip6_hdr->ip_src) ? TCPR_DIR_C2S : TCPR_DIR_S2C;
+            }
 
             /* reverse direction? */
             if (HAVE_OPT(REVERSE) && (direction == TCPR_DIR_C2S || direction == TCPR_DIR_S2C))
@@ -404,9 +466,17 @@ process_raw_packets(pcap_t * pcap)
             dbg(2, "processing first pass of auto mode...");
             /* first run through in auto mode: create tree */
             if (options.automode != FIRST_MODE) {
-                add_tree(ip_hdr->ip_src.s_addr, pktdata);
+                if (ip_hdr) {
+                    add_tree_ipv4(ip_hdr->ip_src.s_addr, pktdata);
+                } else if (ip6_hdr) {
+                    add_tree_ipv6(&ip6_hdr->ip_src, pktdata);
+                }
             } else {
-                add_tree_first(pktdata);
+                if (ip_hdr) {
+                    add_tree_first_ipv4(pktdata);
+                } else if (ip6_hdr) {
+                    add_tree_first_ipv6(pktdata);
+                }
             }  
             break;
 
@@ -416,8 +486,13 @@ process_raw_packets(pcap_t * pcap)
              * based cache
              */
             dbg(2, "processing second pass of auto: router mode...");
-            cache_result = add_cache(&options.cachedata, SEND,
-                check_ip_tree(options.nonip, ip_hdr->ip_src.s_addr));
+            if (ip_hdr) {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip_tree(options.nonip, ip_hdr->ip_src.s_addr));
+            } else {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip6_tree(options.nonip, &ip6_hdr->ip_src));
+            }
             break;
 
         case BRIDGE_MODE:
@@ -426,8 +501,13 @@ process_raw_packets(pcap_t * pcap)
              * based cache
              */
             dbg(2, "processing second pass of auto: bridge mode...");
-            cache_result = add_cache(&options.cachedata, SEND,
-                check_ip_tree(DIR_UNKNOWN, ip_hdr->ip_src.s_addr));
+            if (ip_hdr) {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip_tree(DIR_UNKNOWN, ip_hdr->ip_src.s_addr));
+            } else {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip6_tree(DIR_UNKNOWN, &ip6_hdr->ip_src));
+            }
             break;
 
         case SERVER_MODE:
@@ -436,8 +516,13 @@ process_raw_packets(pcap_t * pcap)
              * where unknowns are servers
              */
             dbg(2, "processing second pass of auto: server mode...");
-            cache_result = add_cache(&options.cachedata, SEND,
-                check_ip_tree(DIR_SERVER, ip_hdr->ip_src.s_addr));
+            if (ip_hdr) {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip_tree(DIR_SERVER, ip_hdr->ip_src.s_addr));
+            } else {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip6_tree(DIR_SERVER, &ip6_hdr->ip_src));
+            }
             break;
 
         case CLIENT_MODE:
@@ -446,8 +531,13 @@ process_raw_packets(pcap_t * pcap)
              * where unknowns are clients
              */
             dbg(2, "processing second pass of auto: client mode...");
-            cache_result = add_cache(&options.cachedata, SEND,
-                check_ip_tree(DIR_CLIENT, ip_hdr->ip_src.s_addr));
+            if (ip_hdr) {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip_tree(DIR_CLIENT, ip_hdr->ip_src.s_addr));
+            } else {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip6_tree(DIR_CLIENT, &ip6_hdr->ip_src));
+            }
             break;
 
         case PORT_MODE:
@@ -456,7 +546,7 @@ process_raw_packets(pcap_t * pcap)
              */
             dbg(2, "processing port mode...");
             cache_result = add_cache(&options.cachedata, SEND, 
-                check_dst_port(ip_hdr, (pkthdr.caplen - l2len)));
+                check_dst_port(ip_hdr, ip6_hdr, (pkthdr.caplen - l2len)));
             break;
 
         case FIRST_MODE:
@@ -465,8 +555,13 @@ process_raw_packets(pcap_t * pcap)
              * by the ones which send the first packet in a session
              */
             dbg(2, "processing second pass of auto: first packet mode...");
-            cache_result = add_cache(&options.cachedata, SEND,
-                check_ip_tree(DIR_UNKNOWN, ip_hdr->ip_src.s_addr));
+            if (ip_hdr) {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip_tree(DIR_UNKNOWN, ip_hdr->ip_src.s_addr));
+            } else {
+                cache_result = add_cache(&options.cachedata, SEND,
+                    check_ip6_tree(DIR_UNKNOWN, &ip6_hdr->ip_src));
+            }
             break;
             
         default:
@@ -685,12 +780,3 @@ print_stats(const char *file)
     printf("Total packets:\t\t" COUNTER_SPEC "\n", count);
     exit(0);
 }
-
-/*
- Local Variables:
- mode:c
- indent-tabs-mode:nil
- c-basic-offset:4
- End:
-*/
-

+ 12 - 12
src/tcpprep_opts.c

@@ -2,7 +2,7 @@
  *  
  *  DO NOT EDIT THIS FILE   (tcpprep_opts.c)
  *  
- *  It has been AutoGen-ed  Sunday January 18, 2009 at 10:08:06 AM PST
+ *  It has been AutoGen-ed  Thursday June 25, 2009 at 12:25:10 PM PDT
  *  From the definitions    tcpprep_opts.def
  *  and the template file   options
  *
@@ -1028,7 +1028,7 @@ doOptCidr(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptRegex(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 187 */
+    /* extracted from tcpprep_opts.def, line 196 */
     
     int regex_error;
     char ebuf[EBUF_SIZE];
@@ -1049,7 +1049,7 @@ doOptRegex(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptPort(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 215 */
+    /* extracted from tcpprep_opts.def, line 224 */
     
     options.mode = PORT_MODE;
     
@@ -1062,7 +1062,7 @@ doOptPort(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptMac(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 236 */
+    /* extracted from tcpprep_opts.def, line 245 */
 
 options.mode = MAC_MODE;
 options.maclist = safe_strdup(OPT_ARG(MAC));
@@ -1077,7 +1077,7 @@ options.maclist = safe_strdup(OPT_ARG(MAC));
 static void
 doOptComment(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 269 */
+    /* extracted from tcpprep_opts.def, line 278 */
 
     /* our comment_len is only 16bit - myargs[] */
     if (strlen(OPT_ARG(COMMENT)) > ((1 << 16) - 1 - MYARGS_LEN))
@@ -1097,7 +1097,7 @@ doOptComment(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptNo_Arg_Comment(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 291 */
+    /* extracted from tcpprep_opts.def, line 300 */
 
 options.nocomment = 1;
 }
@@ -1109,7 +1109,7 @@ options.nocomment = 1;
 static void
 doOptInclude(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 311 */
+    /* extracted from tcpprep_opts.def, line 320 */
     
     char *include;
     
@@ -1130,7 +1130,7 @@ doOptInclude(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptExclude(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 358 */
+    /* extracted from tcpprep_opts.def, line 367 */
     
     char *exclude;
     
@@ -1151,7 +1151,7 @@ doOptExclude(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptServices(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 455 */
+    /* extracted from tcpprep_opts.def, line 464 */
     parse_services(OPT_ARG(SERVICES), &options.services);
     
 }
@@ -1163,7 +1163,7 @@ doOptServices(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptNonip(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 466 */
+    /* extracted from tcpprep_opts.def, line 475 */
  
     options.nonip = DIR_SERVER;
     
@@ -1276,7 +1276,7 @@ doOptMaxmask(tOptions* pOptions, tOptDesc* pOptDesc)
 static void
 doOptVersion(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 567 */
+    /* extracted from tcpprep_opts.def, line 576 */
     
     fprintf(stderr, "tcpprep version: %s (build %s)", VERSION, svn_version());
 #ifdef DEBUG
@@ -1316,7 +1316,7 @@ fprintf(stderr, "Compiled against winpcap: %s\n", get_pcap_version());
 static void
 doOptLess_Help(tOptions* pOptions, tOptDesc* pOptDesc)
 {
-    /* extracted from tcpprep_opts.def, line 607 */
+    /* extracted from tcpprep_opts.def, line 616 */
   
     USAGE(EXIT_FAILURE);
 

+ 0 - 0
src/tcpprep_opts.def


Some files were not shown because too many files changed in this diff